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

Previous thread: HDIO_DRIVE_CMD failed on Dell Latitude D630 by Marcelo Laia on Saturday, May 10, 2008 - 1:17 pm. (1 message)

Next thread: 2.6.26-rc1 fails to boot by Henny Wilbrink on Saturday, May 10, 2008 - 1:21 pm. (5 messages)
From: Mikael Pettersson
Date: Saturday, May 10, 2008 - 1:18 pm

Building kernel 2.6.26-rc1 on FC6/i386 causes:

  ld -m elf_i386   -T arch/x86/kernel/acpi/realmode/wakeup.lds arch/x86/kernel/acpi/realmode/wakeup.o arch/x86/kernel/acpi/realmode/wakemain.o arch/x86/kernel/acpi/realmode/video-mode.o arch/x86/kernel/acpi/realmode/copy.o arch/x86/kernel/acpi/realmode/video-vga.o arch/x86/kernel/acpi/realmode/video-vesa.o arch/x86/kernel/acpi/realmode/video-bios.o -o arch/x86/kernel/acpi/realmode/wakeup.elf 
ld: warning: dot moved backwards before `.text'
ld: warning: dot moved backwards before `.text'
ld: warning: dot moved backwards before `.text'

This is with gcc-4.2.3 and binutils-2.17.50.0.6-5.fc6 20061020.

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>

/Mikael
--

From: Rafael J. Wysocki
Date: Saturday, May 10, 2008 - 1:23 pm

Well, we don't really know why this happens.  It surely doesn't happen with
newer toolchains (as of OpenSUSE 10.3 for example).

Thanks,
Rafael
--

From: H. Peter Anvin
Date: Saturday, May 10, 2008 - 1:25 pm

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.

	-hpa
--

From: Sam Ravnborg
Date: Saturday, May 10, 2008 - 2:16 pm

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
--

From: Cyrill Gorcunov
Date: Sunday, May 11, 2008 - 8:44 am

[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*)
 	}
---
		- Cyrill ...
From: H. Peter Anvin
Date: Sunday, May 11, 2008 - 11:15 am

Yes.  This was the way I originally had it, then Pavel decided to move 
the header to the end.

	-hpa
--

From: Cyrill Gorcunov
Date: Sunday, May 11, 2008 - 11:24 am

Hi Peter,

actually I only doubt about exactly position of this headers - I mean
meguess it better should be _before_ "_end" not after. Since the others
script uses (acpi/wakeup_rm.S):

	wakeup_code_start:
	.incbin	"arch/x86/kernel/acpi/realmode/wakeup.bin"
	wakeup_code_end:

and kernel uses these wakeup_code_* marks to save/restore memory I think
it should be like

	. = HEADER_OFFSET;
	.header : {
		...
	}
	. = ALIGN(16);
	_end = .;
	/DISCARD/ ...

		- Cyrill -
--

From: H. Peter Anvin
Date: Sunday, May 11, 2008 - 11:25 am

Yes, I believe that's correct.

	-hpa
--

From: Cyrill Gorcunov
Date: Sunday, May 11, 2008 - 11:29 am

Thanks for review, Peter, I'll cook a patch and wait for
Pavel's opinion ;-)

		- Cyrill -
--

From: Rafael J. Wysocki
Date: Sunday, May 11, 2008 - 2:22 pm

I've tested the appended one.  If that's what you mean, we'll ask Ingo to take
it.

Thanks,
Rafael


---
 arch/x86/kernel/acpi/realmode/wakeup.lds.S |   10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

Index: linux-2.6/arch/x86/kernel/acpi/realmode/wakeup.lds.S
===================================================================
--- linux-2.6.orig/arch/x86/kernel/acpi/realmode/wakeup.lds.S
+++ linux-2.6/arch/x86/kernel/acpi/realmode/wakeup.lds.S
@@ -12,11 +12,6 @@ ENTRY(_start)
 
 SECTIONS
 {
-	. = HEADER_OFFSET;
-	.header : {
-		 *(.header)
-	}
-
 	. = 0;
 	.text : {
 		 *(.text*)
@@ -50,6 +45,11 @@ SECTIONS
 		__bss_end = .;
 	}
 
+	. = HEADER_OFFSET;
+	.header : {
+		 *(.header)
+	}
+
 	. = ALIGN(16);
 	_end = .;
 
--

From: Cyrill Gorcunov
Date: Sunday, May 11, 2008 - 9:15 pm

Thanks Rafael,

it's exactly what I meant - http://lkml.org/lkml/2008/5/11/120 ;)
--

From: Cyrill Gorcunov
Date: Sunday, May 11, 2008 - 11:16 pm

Heh, now we have even two patches (exactly the same in contents). So, Ingo,
could you pick up any patch, please? ;-) (i'm in office now without access to
my linux machine,  so I can't send the patch with my and Rafael's sign-offs)
--

From: Pavel Machek
Date: Sunday, May 11, 2008 - 11:54 am

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
--

From: Rafael J. Wysocki
Date: Saturday, May 10, 2008 - 1:56 pm

Hm.  The above is from Pavel and Sam.

Thanks,
Rafael
--

From: Pavel Machek
Date: Sunday, May 11, 2008 - 11:52 am

I'm not good at linker magic. I needed to put code from offset zero,

Sorry about that. Plus, I'm on holidays just now...

									Pavel

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

Previous thread: HDIO_DRIVE_CMD failed on Dell Latitude D630 by Marcelo Laia on Saturday, May 10, 2008 - 1:17 pm. (1 message)

Next thread: 2.6.26-rc1 fails to boot by Henny Wilbrink on Saturday, May 10, 2008 - 1:21 pm. (5 messages)