Skip to contentSkip to conversation

mpc85xx/u-boot*.lds: remove _GLOBAL_OFFSET_TABLE_ definition

PATCH New Prabhakar Kushwaha 5 participants 5 messages Oct 25, 2015 – Nov 10, 2015 PowerPC

lore
Share & tools
lore
#0 lore raw

PATCH v2 1/1 mpc85xx/u-boot*.lds: remove _GLOBAL_OFFSET_TABLE_ definition

From: Zhenhua Luo <[email protected]>

In binutils-2.25, the _GLOBAL_OFFSET_TABLE_ symbols defined by PROVIDE in u-boot.lds overrides the linker built-in symbols
(https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=commitdiff;
h=b893397a4b1316610f49819344817715e4305de9),
so the linker is treating _GLOBAL_OFFSET_TABLE_ as a definition into the .reloc section.

To align with the change of binutils-2.25, the _GLOBAL_OFFSET_TABLE_ symbol should not be defined in sections, and the symbols in linker generated .got section should be used(https://sourceware.org/ml/binutils/2008-09/ msg00122.html)

Fixed the following build errors with binutils-2.25:
| powerpc-poky-linux-gnuspe-ld.bfd: _GLOBAL_OFFSET_TABLE_ not defined in linker created .got

---
Changes for v2: Updated Subject

 arch/powerpc/cpu/mpc85xx/u-boot-nand.lds     | 1 -
 arch/powerpc/cpu/mpc85xx/u-boot-nand_spl.lds | 1 -
 arch/powerpc/cpu/mpc85xx/u-boot-spl.lds      | 1 -
 arch/powerpc/cpu/mpc85xx/u-boot.lds          | 1 -
 4 files changed, 4 deletions(-)
arch/powerpc/cpu/mpc85xx/u-boot-nand.lds +0 -1
index f933b21..0399f93 100644
@@ -44,7 +44,6 @@ SECTIONS
     _GOT2_TABLE_ = .;
     KEEP(*(.got2))
     KEEP(*(.got))
-    PROVIDE(_GLOBAL_OFFSET_TABLE_ = . + 4);
     _FIXUP_TABLE_ = .;
     KEEP(*(.fixup))
   }
arch/powerpc/cpu/mpc85xx/u-boot-nand_spl.lds +0 -1
index b83c553..f044564 100644
@@ -22,7 +22,6 @@ SECTIONS
 		_GOT2_TABLE_ = .;
 		KEEP(*(.got2))
 		KEEP(*(.got))
-		PROVIDE(_GLOBAL_OFFSET_TABLE_ = . + 4);
 		_FIXUP_TABLE_ = .;
 		KEEP(*(.fixup))
 	}
arch/powerpc/cpu/mpc85xx/u-boot-spl.lds +0 -1
index 5ae7b3e..889a4c2 100644
@@ -29,7 +29,6 @@ SECTIONS
 		_GOT2_TABLE_ = .;
 		KEEP(*(.got2))
 		KEEP(*(.got))
-		PROVIDE(_GLOBAL_OFFSET_TABLE_ = . + 4);
 		_FIXUP_TABLE_ = .;
 		KEEP(*(.fixup))
 	}
arch/powerpc/cpu/mpc85xx/u-boot.lds +0 -1
index 2cf0b25..f15eaf3 100644
@@ -50,7 +50,6 @@ SECTIONS
     _GOT2_TABLE_ = .;
     KEEP(*(.got2))
     KEEP(*(.got))
-    PROVIDE(_GLOBAL_OFFSET_TABLE_ = . + 4);
     _FIXUP_TABLE_ = .;
     KEEP(*(.fixup))
   }
Signature · 1 line
1.9.1
#1 lore raw

PATCH v2 1/1 mpc85xx/u-boot*.lds: remove _GLOBAL_OFFSET_TABLE_ definition

Quoted 14 lines · Prabhakar Kushwaha

From: Zhenhua Luo <[email protected]>

In binutils-2.25, the _GLOBAL_OFFSET_TABLE_ symbols defined by PROVIDE in u-boot.lds overrides the linker built-in symbols
(https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=commitdiff;
h=b893397a4b1316610f49819344817715e4305de9),
so the linker is treating _GLOBAL_OFFSET_TABLE_ as a definition into the .reloc section.

To align with the change of binutils-2.25, the _GLOBAL_OFFSET_TABLE_ symbol should not be defined in sections, and the symbols in linker generated .got section should be used(https://sourceware.org/ml/binutils/2008-09/ msg00122.html)

Quoted 9 lines

Fixed the following build errors with binutils-2.25:
| powerpc-poky-linux-gnuspe-ld.bfd: _GLOBAL_OFFSET_TABLE_ not defined in linker created .got

---
Changes for v2: Updated Subject

Prabhakar/Zhenghua,

Have you addressed Tom's comment (on rev 1 patch)? Quote, "What happens when we use older binutils? I'd like some run-time testing too please".

York

#2 lore raw

PATCH v2 1/1 mpc85xx/u-boot*.lds: remove _GLOBAL_OFFSET_TABLE_ definition

Quoted 8 lines · York Sun
Quoted 6 lines · Prabhakar Kushwaha

From: Zhenhua Luo <[email protected]>

In binutils-2.25, the _GLOBAL_OFFSET_TABLE_ symbols defined by PROVIDE in u-boot.lds overrides the linker built-in symbols
(https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=commitdiff;
h=b893397a4b1316610f49819344817715e4305de9),

hmm, what was the reson for this change in binutils? As I recall, PROVIDE should only add a symbol when there is none and now binutils just ignores this, strange.

Quoted 2 lines
Quoted 2 lines

so the linker is treating _GLOBAL_OFFSET_TABLE_ as a definition into the .reloc section.

Yes, where do you want it instead? what is the difference with/without PROVIDE?

Quoted 26 lines
Quoted 6 lines

To align with the change of binutils-2.25, the _GLOBAL_OFFSET_TABLE_ symbol should not be defined in sections, and the symbols in linker generated .got section should be used(https://sourceware.org/ml/binutils/2008-09/ msg00122.html)
Fixed the following build errors with binutils-2.25:

Quoted 8 lines
Quoted 1 line

powerpc-poky-linux-gnuspe-ld.bfd: _GLOBAL_OFFSET_TABLE_ not defined in

linker created .got

---
Changes for v2: Updated Subject

Prabhakar/Zhenghua,

Have you addressed Tom's comment (on rev 1 patch)? Quote, "What happens when we use older binutils? I'd like some run-time testing too please".

York

_______________________________________________
U-Boot mailing list
U-Boot at lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

#3 lore raw

PATCH v2 1/1 mpc85xx/u-boot*.lds: remove _GLOBAL_OFFSET_TABLE_ definition

[Resending with old email address]

I want to add why PROVIDE was added in the first place:
In theory it is possible to build an u-boot without ld defining _GLOBAL_OFFSET_TABLE_, in that case we create _GLOBAL_OFFSET_TABLE_ ourself.

Should we start using -fPIC* one day this will we will be close to an u-boot without _GLOBAL_OFFSET_TABLE_ and the __got2_entries calculation will fail.

*older gcc's will automatically promote -fpic to -fPIC when used with -mrelocatable
I wrote a small patch in 2010 to fix this:
https://gcc.gnu.org/ml/gcc-patches/2010-10/msg02301.html
Cannot remember what gcc version(4.6?) that went into.

About the same time support for -msingle-pic-base was added to powerpc gcc This would reduce code size further, possibly interesting for SPL? I sent som patches for that but there were something holding them back.

Quoted 44 lines · Joakim Tjernlund
Quoted 8 lines · York Sun
Quoted 6 lines · Prabhakar Kushwaha

From: Zhenhua Luo <[email protected]>

In binutils-2.25, the _GLOBAL_OFFSET_TABLE_ symbols defined by PROVIDE in u-boot.lds overrides the linker built-in symbols
(https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=commitdiff;
h=b893397a4b1316610f49819344817715e4305de9),

hmm, what was the reson for this change in binutils? As I recall, PROVIDE should only add a symbol when there is none and now binutils just ignores this, strange.

Quoted 2 lines
Quoted 2 lines

so the linker is treating _GLOBAL_OFFSET_TABLE_ as a definition into the .reloc section.

Yes, where do you want it instead? what is the difference with/without PROVIDE?

Quoted 26 lines
Quoted 6 lines

To align with the change of binutils-2.25, the _GLOBAL_OFFSET_TABLE_ symbol should not be defined in sections, and the symbols in linker generated .got section should be used(https://sourceware.org/ml/binutils/2008-09/ msg00122.html)
Fixed the following build errors with binutils-2.25:

Quoted 8 lines
Quoted 1 line

powerpc-poky-linux-gnuspe-ld.bfd: _GLOBAL_OFFSET_TABLE_ not defined in

linker created .got

---
Changes for v2: Updated Subject

Prabhakar/Zhenghua,

Have you addressed Tom's comment (on rev 1 patch)? Quote, "What happens when we use older binutils? I'd like some run-time testing too please".

York

_______________________________________________
U-Boot mailing list
U-Boot at lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

#4 lore raw

PATCH v2 1/1 mpc85xx/u-boot*.lds: remove _GLOBAL_OFFSET_TABLE_ definition

In reply to Prabhakar Kushwaha
Quoted 14 lines · Prabhakar Kushwaha

From: Zhenhua Luo <[email protected]>

In binutils-2.25, the _GLOBAL_OFFSET_TABLE_ symbols defined by PROVIDE in u-boot.lds overrides the linker built-in symbols
(https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=commitdiff;
h=b893397a4b1316610f49819344817715e4305de9),
so the linker is treating _GLOBAL_OFFSET_TABLE_ as a definition into the .reloc section.

To align with the change of binutils-2.25, the _GLOBAL_OFFSET_TABLE_ symbol should not be defined in sections, and the symbols in linker generated .got section should be used(https://sourceware.org/ml/binutils/2008-09/ msg00122.html)

Quoted 6 lines

Fixed the following build errors with binutils-2.25:
| powerpc-poky-linux-gnuspe-ld.bfd: _GLOBAL_OFFSET_TABLE_ not defined in linker created .got

Applied to u-boot/master, thanks!

Signature · 8 lines
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20151110/1e7d8ef0/attachment.sig>