]> git.karo-electronics.de Git - linux-beck.git/blobdiff - scripts/kallsyms.c
kallsyms: don't overload absolute symbol type for percpu symbols
[linux-beck.git] / scripts / kallsyms.c
index 8fa81e84e29510c053e5e52cefc5eb9e1da16887..d39a1eeb080e25d77006ca76172991919242b41e 100644 (file)
@@ -34,6 +34,7 @@ struct sym_entry {
        unsigned int len;
        unsigned int start_pos;
        unsigned char *sym;
+       unsigned int percpu_absolute;
 };
 
 struct addr_range {
@@ -171,6 +172,8 @@ static int read_symbol(FILE *in, struct sym_entry *s)
        strcpy((char *)s->sym + 1, str);
        s->sym[0] = stype;
 
+       s->percpu_absolute = 0;
+
        /* Record if we've found __per_cpu_start/end. */
        check_symbol_range(sym, s->addr, &percpu_range, 1);
 
@@ -325,7 +328,7 @@ static int expand_symbol(unsigned char *data, int len, char *result)
 
 static int symbol_absolute(struct sym_entry *s)
 {
-       return toupper(s->sym[0]) == 'A';
+       return s->percpu_absolute;
 }
 
 static void write_src(void)
@@ -681,8 +684,15 @@ static void make_percpus_absolute(void)
        unsigned int i;
 
        for (i = 0; i < table_cnt; i++)
-               if (symbol_in_range(&table[i], &percpu_range, 1))
+               if (symbol_in_range(&table[i], &percpu_range, 1)) {
+                       /*
+                        * Keep the 'A' override for percpu symbols to
+                        * ensure consistent behavior compared to older
+                        * versions of this tool.
+                        */
                        table[i].sym[0] = 'A';
+                       table[i].percpu_absolute = 1;
+               }
 }
 
 int main(int argc, char **argv)