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 --
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 --
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
--
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 --
[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 ...Yes. This was the way I originally had it, then Pavel decided to move the header to the end. -hpa --
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 -
--
Thanks for review, Peter, I'll cook a patch and wait for Pavel's opinion ;-) - Cyrill - --
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 = .;
--
Thanks Rafael, it's exactly what I meant - http://lkml.org/lkml/2008/5/11/120 ;) --
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) --
ACK... and thanks! Pavel -- (english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html --
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 --
Hm. The above is from Pavel and Sam. Thanks, Rafael --
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 --
