Re: 2.6.26-rc1 on x86: ld: warning: dot moved backwards before `.text'

Pavel Machek
2008-05-11T18:58:58Z

On Sun 2008-05-11 19:44:11, Cyrill Gorcunov wrote:
> [Sam Ravnborg - Sat, May 10, 2008 at 11:16:02PM +0200]
> | On Sat, May 10, 2008 at 01:25:53PM -0700, H. Peter Anvin wrote:
> | > Mikael Pettersson wrote:
> | > >
> | > >The resulting kernel hasn't broken on me yet, however.
> | > >
> | > >A search through the LKML archives showed that this was reported
> | > >for 2.6.25-rc3-mm1, but I couldn't find any discussion about it
> | > >after that:
> | > >
> | > ><http://marc.info/?l=linux-kernel&m=120470303728010&w=2>
> | > >
> | > >The .config causing this warning is available in
> | > ><http://user.it.uu.se/~mikpe/linux/ale/config-2.6.26-rc1>
> | > >
> | >
> | > This is because the organization of the file was changed, and the linker
> | > script wasn't changed to match:
> | >
> | > SECTIONS
> | > {
> | > . = HEADER_OFFSET;
> | > .header : {
> | > *(.header)
> | > }
> | >
> | > . = 0;
> | > .text : {
> | > *(.text*)
> | > }
> | >
> | > This is crap; the sections should be listed *in order* so the linker can
> | > warn properly when something bad happens.
> | >
> | > The code should be correct; reorganizing the linker script correctly
> | > should fix the problem.
> |
> | I need Pavel to comment on this.
> | Why we start with . equal 0x3f00 and then later as . equals 0x0000
> | I dunno.
> | I did not look into this part of the code back then - but I should anyway
> | have seen this flaw in the linker script :-(
> |
> | Sam
>
> Should not it be something like
> ---
>
> diff --git a/arch/x86/kernel/acpi/realmode/wakeup.lds.S b/arch/x86/kernel/acpi/realmode/wakeup.lds.S
> index 22fab6c..cccf62d 100644
> --- a/arch/x86/kernel/acpi/realmode/wakeup.lds.S
> +++ b/arch/x86/kernel/acpi/realmode/wakeup.lds.S
> @@ -12,11 +12,6 @@ ENTRY(_start)
>
> SECTIONS
> {
> - . = HEADER_OFFSET;
> - .header : {
> - *(.header)
> - }
> -
> . = 0;
> .text : {
> *(.text*)
> @@ -53,6 +48,11 @@ SECTIONS
> . = ALIGN(16);
> _end = .;
>
> + . = HEADER_OFFSET;
> + .header : {
> + *(.header)
> + }
> +
> /DISCARD/ : {
> *(.note*)
> }

If it passes s2ram/resume test, it is probably correct ;-).
Pavel

--
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html