|
@@ -55,6 +55,7 @@ static struct sym_entry *table;
|
|
|
static unsigned int table_size, table_cnt;
|
|
|
static int all_symbols = 0;
|
|
|
static char symbol_prefix_char = '\0';
|
|
|
+static unsigned long long kernel_start_addr = 0;
|
|
|
|
|
|
int token_profit[0x10000];
|
|
|
|
|
@@ -65,7 +66,10 @@ unsigned char best_table_len[256];
|
|
|
|
|
|
static void usage(void)
|
|
|
{
|
|
|
- fprintf(stderr, "Usage: kallsyms [--all-symbols] [--symbol-prefix=<prefix char>] < in.map > out.S\n");
|
|
|
+ fprintf(stderr, "Usage: kallsyms [--all-symbols] "
|
|
|
+ "[--symbol-prefix=<prefix char>] "
|
|
|
+ "[--page-offset=<CONFIG_PAGE_OFFSET>] "
|
|
|
+ "< in.map > out.S\n");
|
|
|
exit(1);
|
|
|
}
|
|
|
|
|
@@ -194,6 +198,9 @@ static int symbol_valid(struct sym_entry *s)
|
|
|
int i;
|
|
|
int offset = 1;
|
|
|
|
|
|
+ if (s->addr < kernel_start_addr)
|
|
|
+ return 0;
|
|
|
+
|
|
|
/* skip prefix char */
|
|
|
if (symbol_prefix_char && *(s->sym + 1) == symbol_prefix_char)
|
|
|
offset++;
|
|
@@ -646,6 +653,9 @@ int main(int argc, char **argv)
|
|
|
if ((*p == '"' && *(p+2) == '"') || (*p == '\'' && *(p+2) == '\''))
|
|
|
p++;
|
|
|
symbol_prefix_char = *p;
|
|
|
+ } else if (strncmp(argv[i], "--page-offset=", 14) == 0) {
|
|
|
+ const char *p = &argv[i][14];
|
|
|
+ kernel_start_addr = strtoull(p, NULL, 16);
|
|
|
} else
|
|
|
usage();
|
|
|
}
|