]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - scripts/kallsyms.c
Merge remote-tracking branch 'kbuild/for-next'
[karo-tx-linux.git] / scripts / kallsyms.c
index c6d33bd15b04acd0ea4fd56d59289d8e983a1c9f..8fa81e84e29510c053e5e52cefc5eb9e1da16887 100644 (file)
@@ -212,15 +212,22 @@ static int symbol_valid(struct sym_entry *s)
                "_SDA_BASE_",           /* ppc */
                "_SDA2_BASE_",          /* ppc */
                NULL };
+
+       static char *special_suffixes[] = {
+               "_veneer",              /* arm */
+               NULL };
+
        int i;
-       int offset = 1;
+       char *sym_name = (char *)s->sym + 1;
+
 
        if (s->addr < kernel_start_addr)
                return 0;
 
        /* skip prefix char */
-       if (symbol_prefix_char && *(s->sym + 1) == symbol_prefix_char)
-               offset++;
+       if (symbol_prefix_char && *sym_name == symbol_prefix_char)
+               sym_name++;
+
 
        /* if --all-symbols is not specified, then symbols outside the text
         * and inittext sections are discarded */
@@ -235,22 +242,26 @@ static int symbol_valid(struct sym_entry *s)
                 * rules.
                 */
                if ((s->addr == text_range_text->end &&
-                               strcmp((char *)s->sym + offset,
+                               strcmp(sym_name,
                                       text_range_text->end_sym)) ||
                    (s->addr == text_range_inittext->end &&
-                               strcmp((char *)s->sym + offset,
+                               strcmp(sym_name,
                                       text_range_inittext->end_sym)))
                        return 0;
        }
 
        /* Exclude symbols which vary between passes. */
-       if (strstr((char *)s->sym + offset, "_compiled."))
-               return 0;
-
        for (i = 0; special_symbols[i]; i++)
-               if( strcmp((char *)s->sym + offset, special_symbols[i]) == 0 )
+               if (strcmp(sym_name, special_symbols[i]) == 0)
                        return 0;
 
+       for (i = 0; special_suffixes[i]; i++) {
+               int l = strlen(sym_name) - strlen(special_suffixes[i]);
+
+               if (l >= 0 && strcmp(sym_name + l, special_suffixes[i]) == 0)
+                       return 0;
+       }
+
        return 1;
 }