Messages in this thread Patch in this message | | | Date | Mon, 11 Jan 2010 21:08:07 +0100 (CET) | From | Michael Schmitz <> | Subject | Re: "m68k: Cleanup linker scripts using new linker script macros." and old binutils (was: Re: [PATCH] m68k: Atari EtherNAT - Nicolas Pitre has a new email address) |
| |
Hi Andreas,
> > FWIW: when stripping the new kernel, I get this warning: > > > > BFD: st7CwWnM: warning: allocated section `.init_end' not in segment > > This is actually your problem. The .init_end section is kind of special > because it only contains an ALIGN. What do you get from running > "readelf -l vmlinux"?
Followup on this: You are absolutely right - the problem appears to be related to the the .init_end section _only_ having the ALIGN, and nothing else (i.e. no actual section content).
Placing the align in the .m68k_fixup section like such:
--- arch/m68k/kernel/vmlinux-std.lds.org 2010-01-09 11:01:05.000000000 +1300 +++ arch/m68k/kernel/vmlinux-std.lds 2010-01-12 08:43:07.000000000 +1300 @@ -42,6 +42,7 @@ __start_fixup = .; *(.m68k_fixup) __stop_fixup = .; + . = ALIGN(PAGE_SIZE); } NOTES .init_end : { still puts .init_end, __init_end and _end on a page boundary, but also extends the load section up to that page boundary. (Unfortunately, it also extends the kernel file size by a bit).
Can the same be achieved in a more elegant way? The reason why the old script worked with my binutils appears to be the placement of the initramfs data right at the end - the start of initramfs is page aligned, and the size of the initramfs is an integer number of pages, so the end of initramfs data, __init_end and _end all are on a page boundary. With the fixup section now placed after the initramfs explicitly, this no longer happens by accident...
Cheers,
Michael
| |