x86, vdso: Fix vdso-layout linker script
Subsystems (3)
PATCH 1/1 x86, vdso: Fix vdso-layout linker script
Commit 26f5ef2e3c3 added a /DISCARD/ section to the vdso-layout.lds.S linker script. This broke the build when using the gold linker:
ld: error: arch/x86/vdso/vdso.lds:79:12: syntax error, unexpected ':'
ld: fatal error: unable to parse script file arch/x86/vdso/vdso.lds
As Cary Coutant pointed out on the sourceware bugzilla:
https://sourceware.org/bugzilla/show_bug.cgi?id=16804
the problem is that the .text section directly above the /DISCARD/ section should be terminated with an comma.
arch/x86/vdso/vdso-layout.lds.S +1 -1
@@ -61,7 +61,7 @@ SECTIONS */ . = ALIGN(0x100); - .text : { *(.text*) } :text =0x90909090 + .text : { *(.text*) } :text =0x90909090, /DISCARD/ : { *(.discard)
Signature · 1 line
Markus
Quoted 6 lines · Markus Trippelsdorf
Commit
26f5ef2e3c3added a /DISCARD/ section to thevdso-layout.lds.Slinker script. This broke the build when using the gold linker:ld: error:
arch/x86/vdso/vdso.lds:79:12: syntax error, unexpected ':'
ld: fatal error: unable to parse script filearch/x86/vdso/vdso.lds
Quoted 6 lines
As Cary Coutant pointed out on the sourceware bugzilla:
https://sourceware.org/bugzilla/show_bug.cgi?id=16804
the problem is that the .text section directly above the /DISCARD/ section should be terminated with an comma.Signed-off-by Markus Trippelsdorf <[email protected]>
This patch triggers an internal error in whatever version of gold I'm using. I'll send a variant of the patch when I finish testing it.
Quoted 16 lines
arch/x86/vdso/vdso-layout.lds.S +1
-2@@ -61,7 +61,7 @@ SECTIONS */ . = ALIGN(0x100); - .text : { *(.text*) } :text =0x90909090 + .text : { *(.text*) } :text =0x90909090, /DISCARD/ : { *(.discard) --Markus
Signature · 2 lines
Andy Lutomirski AMA Capital Management, LLC
PATCH 1/1 x86, vdso: Make the vdso linker script compatible with Gold
In reply to Markus TrippelsdorfGold can't parse the script due to:
https://sourceware.org/bugzilla/show_bug.cgi?id=16804
With a workaround in place for that issue, Gold 2.23 crashes due to:
https://sourceware.org/bugzilla/show_bug.cgi?id=15355
This works around the former bug and avoids the second by removing the unnecessary vvar and hpet sections and segments. The vdso and hpet symbols are still there, and nothing needed the sections or segments.
--- arch/x86/vdso/vdso-layout.lds.S | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-)
arch/x86/vdso/vdso-layout.lds.S +8 -11
@@ -9,12 +9,9 @@ SECTIONS #ifdef BUILD_VDSO32 #include <asm/vdso32.h> - .hpet_sect : { - hpet_page = . - VDSO_OFFSET(VDSO_HPET_PAGE); - } :text :hpet_sect + hpet_page = . - VDSO_OFFSET(VDSO_HPET_PAGE); - .vvar_sect : { - vvar = . - VDSO_OFFSET(VDSO_VVAR_PAGE); + vvar = . - VDSO_OFFSET(VDSO_VVAR_PAGE); /* Place all vvars at the offsets in asm/vvar.h. */ #define EMIT_VVAR(name, offset) vvar_ ## name = vvar + offset;
@@ -22,7 +19,6 @@ SECTIONS #include <asm/vvar.h> #undef __VVAR_KERNEL_LDS #undef EMIT_VVAR - } :text :vvar_sect #endif . = SIZEOF_HEADERS;
@@ -61,7 +57,12 @@ SECTIONS */ . = ALIGN(0x100); - .text : { *(.text*) } :text =0x90909090 + .text : { *(.text*) } :text =0x90909090, + + /* + * The comma above works around a bug in gold: + * https://sourceware.org/bugzilla/show_bug.cgi?id=16804 + */ /DISCARD/ : { *(.discard)
@@ -84,8 +85,4 @@ PHDRS dynamic PT_DYNAMIC FLAGS(4); /* PF_R */ note PT_NOTE FLAGS(4); /* PF_R */ eh_frame_hdr PT_GNU_EH_FRAME; -#ifdef BUILD_VDSO32 - vvar_sect PT_NULL FLAGS(4); /* PF_R */ - hpet_sect PT_NULL FLAGS(4); /* PF_R */ -#endif }
Signature · 1 line
1.9.0
tip-bot for Andy Lutomirski
merge bot[tip:x86/vdso] x86, vdso: Make the vdso linker script compatible with Gold
x86, vdso: Make the vdso linker script compatible with Gold
Commit-ID: 378ed3ccd2a0404d031e771b65aa3af221ea8aea Gitweb: http://git.kernel.org/tip/378ed3ccd2a0404d031e771b65aa3af221ea8aea Author: Andy Lutomirski <[email protected]> AuthorDate: Thu, 3 Apr 2014 10:53:43 -0700 Committer: H. Peter Anvin <[email protected]> CommitDate: Thu, 3 Apr 2014 12:03:59 -0700
x86, vdso: Make the vdso linker script compatible with Gold
Gold can't parse the script due to:
https://sourceware.org/bugzilla/show_bug.cgi?id=16804
With a workaround in place for that issue, Gold 2.23 crashes due to:
https://sourceware.org/bugzilla/show_bug.cgi?id=15355
This works around the former bug and avoids the second by removing the unnecessary vvar and hpet sections and segments. The vdso and hpet symbols are still there, and nothing needed the sections or segments.
--- arch/x86/vdso/vdso-layout.lds.S | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-)
arch/x86/vdso/vdso-layout.lds.S +8 -11
@@ -9,12 +9,9 @@ SECTIONS #ifdef BUILD_VDSO32 #include <asm/vdso32.h> - .hpet_sect : { - hpet_page = . - VDSO_OFFSET(VDSO_HPET_PAGE); - } :text :hpet_sect + hpet_page = . - VDSO_OFFSET(VDSO_HPET_PAGE); - .vvar_sect : { - vvar = . - VDSO_OFFSET(VDSO_VVAR_PAGE); + vvar = . - VDSO_OFFSET(VDSO_VVAR_PAGE); /* Place all vvars at the offsets in asm/vvar.h. */ #define EMIT_VVAR(name, offset) vvar_ ## name = vvar + offset;
@@ -22,7 +19,6 @@ SECTIONS #include <asm/vvar.h> #undef __VVAR_KERNEL_LDS #undef EMIT_VVAR - } :text :vvar_sect #endif . = SIZEOF_HEADERS;
@@ -61,7 +57,12 @@ SECTIONS */ . = ALIGN(0x100); - .text : { *(.text*) } :text =0x90909090 + .text : { *(.text*) } :text =0x90909090, + + /* + * The comma above works around a bug in gold: + * https://sourceware.org/bugzilla/show_bug.cgi?id=16804 + */ /DISCARD/ : { *(.discard)
@@ -84,8 +85,4 @@ PHDRS dynamic PT_DYNAMIC FLAGS(4); /* PF_R */ note PT_NOTE FLAGS(4); /* PF_R */ eh_frame_hdr PT_GNU_EH_FRAME; -#ifdef BUILD_VDSO32 - vvar_sect PT_NULL FLAGS(4); /* PF_R */ - hpet_sect PT_NULL FLAGS(4); /* PF_R */ -#endif }