Skip to content

Commit 5beb1d8

Browse files
author
bmax
committed
1. fix kallsym: find kallsyms_marker error, newest oneplus12 (not noly oneplus12) is ok now, 2. try to fix module install os error 22 or 5, I'm not sure
1 parent 0d9a4a9 commit 5beb1d8

File tree

4 files changed

+47
-4
lines changed

4 files changed

+47
-4
lines changed

kernel/patch/android/userd.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ static void after_execveat(hook_fargs5_t *args, void *udata)
251251
handle_after_execve(&args->local);
252252
}
253253

254-
#define ORIGIN_RC_FILE "/init.environ.rc"
254+
#define ORIGIN_RC_FILE "/system/etc/init/atrace.rc"
255255
#define REPLACE_RC_FILE "/dev/anduser.rc"
256256

257257
static const char user_rc_data[] = { //

tools/kallsym.c

+43-1
Original file line numberDiff line numberDiff line change
@@ -445,7 +445,7 @@ static int find_num_syms(kallsym_t *info, char *img, int32_t imglen)
445445
return 0;
446446
}
447447

448-
static int find_markers(kallsym_t *info, char *img, int32_t imglen)
448+
static int find_markers_1(kallsym_t *info, char *img, int32_t imglen)
449449
{
450450
int32_t elem_size = get_markers_elem_size(info);
451451
int32_t cand = info->kallsyms_token_table_offset - elem_size;
@@ -472,6 +472,48 @@ static int find_markers(kallsym_t *info, char *img, int32_t imglen)
472472
return 0;
473473
}
474474

475+
static int find_markers_2(kallsym_t *info, char *img, int32_t imglen)
476+
{
477+
int32_t elem_size = get_markers_elem_size(info);
478+
int32_t cand = info->kallsyms_token_table_offset - KSYM_MIN_MARKER * elem_size;
479+
480+
int64_t marker, last_marker = 0x7fffffff;
481+
int count = 0;
482+
while (cand > 0x1000) {
483+
marker = int_unpack(img + cand, elem_size, info->is_be);
484+
if (last_marker > marker) {
485+
count++;
486+
if (!marker && count > KSYM_MIN_MARKER) break;
487+
} else {
488+
count = 0;
489+
last_marker = 0x7fffffff;
490+
}
491+
492+
last_marker = marker;
493+
cand -= elem_size;
494+
}
495+
496+
if (count < KSYM_MIN_MARKER) {
497+
tools_logw("find kallsyms_markers error\n");
498+
return -1;
499+
}
500+
501+
int32_t marker_end = cand + count * elem_size + elem_size;
502+
info->kallsyms_markers_offset = cand;
503+
info->_marker_num = count;
504+
505+
tools_logi("kallsyms_markers range: [0x%08x, 0x%08x), count: 0x%08x\n", cand, marker_end, count);
506+
return 0;
507+
}
508+
509+
static inline int find_markers(kallsym_t *info, char *img, int32_t imglen)
510+
{
511+
// todo: remove one
512+
int rc = find_markers_1(info, img, imglen);
513+
if (!rc) return rc;
514+
return find_markers_2(info, img, imglen);
515+
}
516+
475517
static int decompress_symbol_name(kallsym_t *info, char *img, int32_t *pos_to_next, char *out_type, char *out_symbol)
476518
{
477519
int32_t pos = *pos_to_next;

tools/patch.c

+2-1
Original file line numberDiff line numberDiff line change
@@ -207,11 +207,12 @@ int print_image_patch_info(patched_kimg_t *pimg)
207207

208208
if (pimg->banner[strlen(pimg->banner) - 1] != '\n') fprintf(stdout, "\n");
209209
fprintf(stdout, "patched=%s\n", preset ? "true" : "false");
210-
fprintf(stdout, "extra_num=%d\n", pimg->embed_item_num);
211210

212211
if (preset) {
213212
print_preset_info(preset);
214213

214+
fprintf(stdout, "extra_num=%d\n", pimg->embed_item_num);
215+
215216
fprintf(stdout, INFO_EXTRA_SESSION "\n");
216217
fprintf(stdout, "num=%d\n", pimg->embed_item_num);
217218

version

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
#define MAJOR 0
22
#define MINOR 10
3-
#define PATCH 3
3+
#define PATCH 4

0 commit comments

Comments
 (0)