kbuild: do not warn when unwind sections references .init/.exit sections
authorSam Ravnborg <sam@mars.ravnborg.org>
Wed, 22 Feb 2006 20:24:50 +0000 (21:24 +0100)
committerSam Ravnborg <sam@mars.ravnborg.org>
Wed, 22 Feb 2006 20:24:50 +0000 (21:24 +0100)
Andrew Morton reported a number of false positives for ia64 - like these:
WARNING: drivers/acpi/button.o - Section mismatch: reference to .init.text: from .IA_64.unwind.init.text after '' (at offset 0x0)
WARNING: drivers/acpi/button.o - Section mismatch: reference to .exit.text: from .IA_64.unwind.exit.text after '' (at offset 0x0)
WARNING: drivers/acpi/processor.o - Section mismatch: reference to .init.text: from .IA_64.unwind after '' (at offset 0x1e8)

They are all false positives - or at least the .c code looks OK.
It is not known why sometimes a section name is appended and sometimes not.

Fix is to accept references from all sections that includes "unwind." in the name.

Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
scripts/mod/modpost.c

index 5b076ef..7f25354 100644 (file)
@@ -671,13 +671,21 @@ static int init_section_ref_ok(const char *name)
                ".debug",
                NULL
        };
-       
+       /* part of section name */
+       const char *namelist3 [] = {
+               ".unwind",  /* sample: IA_64.unwind.init.text */
+               NULL
+       };
+
        for (s = namelist1; *s; s++)
                if (strcmp(*s, name) == 0)
                        return 1;
        for (s = namelist2; *s; s++)    
                if (strncmp(*s, name, strlen(*s)) == 0)
                        return 1;
+       for (s = namelist3; *s; s++)    
+               if (strstr(*s, name) != NULL)
+                       return 1;
        return 0;
 }
 
@@ -727,6 +735,11 @@ static int exit_section_ref_ok(const char *name)
                ".debug",
                NULL
        };
+       /* part of section name */
+       const char *namelist3 [] = {
+               ".unwind",  /* Sample: IA_64.unwind.exit.text */
+               NULL
+       };
        
        for (s = namelist1; *s; s++)
                if (strcmp(*s, name) == 0)
@@ -734,6 +747,9 @@ static int exit_section_ref_ok(const char *name)
        for (s = namelist2; *s; s++)    
                if (strncmp(*s, name, strlen(*s)) == 0)
                        return 1;
+       for (s = namelist3; *s; s++)    
+               if (strstr(*s, name) != NULL)
+                       return 1;
        return 0;
 }