Hi folks

The build of the Alpha Linux kernel currently fails[1] with inconsistent
kallsyms data. As I never saw that before, I thought about hardware
problems. But in fact it is a bug in the Linux kernel.

The end of the rodata section is marked with the "__end_rodata" symbol.
This symbol have different aligning constraints than the inittext parts
and therefor the start marked "_sinittext". Because of that the
__end_rodata symbol shifts between < _sinittext and == _sinittext. The
later variant is seen as a code symbol and recorded in the kallsyms
data.

On fix would be to move the exception table a little bit and get some
space between that two areas.

Bastian

[1]: 
http://buildd.debian.org/fetch.cgi?pkg=linux-2.6&arch=alpha&ver=2.6.25-5&stamp=1213919009&file=log&as=raw

-- 
The face of war has never changed.  Surely it is more logical to heal
than to kill.
                -- Surak of Vulcan, "The Savage Curtain", stardate 5906.5
diff --git a/arch/alpha/kernel/vmlinux.lds.S b/arch/alpha/kernel/vmlinux.lds.S
index f13249b..ef37fc1 100644
--- a/arch/alpha/kernel/vmlinux.lds.S
+++ b/arch/alpha/kernel/vmlinux.lds.S
@@ -25,6 +25,13 @@ SECTIONS
        } :kernel
        _etext = .;     /* End of text section */
 
+       NOTES :kernel :note
+       .dummy : {
+               *(.dummy)
+       } :kernel
+
+       RODATA
+
        /* Exception table */
        . = ALIGN(16);
        __ex_table : {
@@ -33,13 +40,6 @@ SECTIONS
                __stop___ex_table = .;
        }
 
-       NOTES :kernel :note
-       .dummy : {
-               *(.dummy)
-       } :kernel
-
-       RODATA
-
        /* Will be freed after init */
        . = ALIGN(PAGE_SIZE);
        /* Init code and data */

Attachment: signature.asc
Description: Digital signature

Reply via email to