diff options
author | Alexey Kardashevskiy <aik@ozlabs.ru> | 2015-10-26 17:36:48 +1100 |
---|---|---|
committer | Alexey Kardashevskiy <aik@ozlabs.ru> | 2015-11-03 12:00:22 +1100 |
commit | 12cbf22606c1148c64389449fb607a804cfade27 (patch) | |
tree | 58a28335dad9821b20f69cff0b4bb7b64f4fdca2 /rtas | |
parent | 67422f93710a872329aef197ec932f67a616c888 (diff) | |
download | SLOF-12cbf22606c1148c64389449fb607a804cfade27.zip SLOF-12cbf22606c1148c64389449fb607a804cfade27.tar.gz SLOF-12cbf22606c1148c64389449fb607a804cfade27.tar.bz2 |
qemu/js2x/client: Support binutils >= 2.25.1
The recent binutils version introduces explicit definition of
a TOC symbol which points to the .toc section and enforces .toc
alignment to 256 rather than 8 bytes before.
For now the TOC symbol points to same location as it was before -
start of .toc + 0x8000; however as this might change, we should not
rely on that in the source code.
This changes __toc_start (for qemu and js2x boards), _got (for net-snk,
takeover, rtas) in linker scripts to use explicitely defined TOC if
defined and fall back to the older scheme if not.
This changes r2 (the register pointing to TOC) setup code not to add
0x8000 as linker scripts do that now.
Here is a bit more information about the change:
https://sourceware.org/ml/binutils/2015-10/msg00124.html
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=commit;h=a27e685fa0a6480bdb07e3be359558524cec89b7
Tested on
1. gcc version 4.8.3 20140911 (Red Hat 4.8.3-7) (GCC)
GNU ld version 2.23.2
2. gcc version 5.2.1 20151001 (GCC)
GNU ld (GNU Binutils) 2.25.51.20150930
Reported-by: William Grant <wgrant@ubuntu.com>
Tested-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
Diffstat (limited to 'rtas')
-rw-r--r-- | rtas/reloc.S | 2 | ||||
-rw-r--r-- | rtas/rtas.lds | 3 | ||||
-rw-r--r-- | rtas/rtas_entry.S | 2 |
3 files changed, 4 insertions, 3 deletions
diff --git a/rtas/reloc.S b/rtas/reloc.S index e24d293..1b5b59a 100644 --- a/rtas/reloc.S +++ b/rtas/reloc.S @@ -61,7 +61,7 @@ _rtas_start: ._rtas_entry_offset: .quad rtas_entry-_rtas_start ._rtas_config_offset: .quad rtas_config-_rtas_start ._rtas_stack: .quad .stack-_rtas_start+RTAS_STACKSIZE-0x60 -._rtas_toc: .quad _got-_rtas_start+0x8000 +._rtas_toc: .quad _got-_rtas_start .over: mflr r8 # gpr 8 is the base diff --git a/rtas/rtas.lds b/rtas/rtas.lds index a5ba1da..30b18dd 100644 --- a/rtas/rtas.lds +++ b/rtas/rtas.lds @@ -28,7 +28,8 @@ SECTIONS { } .got : { - _got = .; + . = ALIGN(256); + _got = DEFINED (.TOC.) ? .TOC. : ADDR (.got) + 0x8000; *(.got .toc) } .reloc : diff --git a/rtas/rtas_entry.S b/rtas/rtas_entry.S index 74693aa..424137b 100644 --- a/rtas/rtas_entry.S +++ b/rtas/rtas_entry.S @@ -39,7 +39,7 @@ rtas_entry: bcl 20,31,.over # branch to over .base: .align 3 -..got: .quad _got-.base+0x8000 +..got: .quad _got-.base ..stack: .quad .stack+RTAS_STACKSIZE-0x60-.base .over: mflr r8 # gpr 8 is the base |