aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/kallsyms.c
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/kallsyms.c')
-rw-r--r--scripts/kallsyms.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/scripts/kallsyms.c b/scripts/kallsyms.c
index 8fa81e84e295..d39a1eeb080e 100644
--- a/scripts/kallsyms.c
+++ b/scripts/kallsyms.c
@@ -34,6 +34,7 @@ struct sym_entry {
34 unsigned int len; 34 unsigned int len;
35 unsigned int start_pos; 35 unsigned int start_pos;
36 unsigned char *sym; 36 unsigned char *sym;
37 unsigned int percpu_absolute;
37}; 38};
38 39
39struct addr_range { 40struct addr_range {
@@ -171,6 +172,8 @@ static int read_symbol(FILE *in, struct sym_entry *s)
171 strcpy((char *)s->sym + 1, str); 172 strcpy((char *)s->sym + 1, str);
172 s->sym[0] = stype; 173 s->sym[0] = stype;
173 174
175 s->percpu_absolute = 0;
176
174 /* Record if we've found __per_cpu_start/end. */ 177 /* Record if we've found __per_cpu_start/end. */
175 check_symbol_range(sym, s->addr, &percpu_range, 1); 178 check_symbol_range(sym, s->addr, &percpu_range, 1);
176 179
@@ -325,7 +328,7 @@ static int expand_symbol(unsigned char *data, int len, char *result)
325 328
326static int symbol_absolute(struct sym_entry *s) 329static int symbol_absolute(struct sym_entry *s)
327{ 330{
328 return toupper(s->sym[0]) == 'A'; 331 return s->percpu_absolute;
329} 332}
330 333
331static void write_src(void) 334static void write_src(void)
@@ -681,8 +684,15 @@ static void make_percpus_absolute(void)
681 unsigned int i; 684 unsigned int i;
682 685
683 for (i = 0; i < table_cnt; i++) 686 for (i = 0; i < table_cnt; i++)
684 if (symbol_in_range(&table[i], &percpu_range, 1)) 687 if (symbol_in_range(&table[i], &percpu_range, 1)) {
688 /*
689 * Keep the 'A' override for percpu symbols to
690 * ensure consistent behavior compared to older
691 * versions of this tool.
692 */
685 table[i].sym[0] = 'A'; 693 table[i].sym[0] = 'A';
694 table[i].percpu_absolute = 1;
695 }
686} 696}
687 697
688int main(int argc, char **argv) 698int main(int argc, char **argv)