diff options
author | Alan Modra <amodra@gmail.com> | 2014-02-19 14:23:12 +1030 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2014-02-19 14:53:50 +1030 |
commit | 7d4c687d5653e380cf69ac588563c9e273828353 (patch) | |
tree | 26974e8d7719fec7260986c632af4f85399ff64e /bfd | |
parent | e095146be2c9f27e20743810038dc372a0387f75 (diff) | |
download | fsf-binutils-gdb-7d4c687d5653e380cf69ac588563c9e273828353.zip fsf-binutils-gdb-7d4c687d5653e380cf69ac588563c9e273828353.tar.gz fsf-binutils-gdb-7d4c687d5653e380cf69ac588563c9e273828353.tar.bz2 |
Control powerpc64-ld provision of register save/restore
This patch allows the user to override powerpc64-ld's default for
providing linker generated register save and restore functions as used
by gcc -Os code. Normally these are not provided by ld -r, so Linux
kernel modules have needed to include their own copies.
bfd/
* elf64-ppc.h (struct ppc64_elf_params): Add save_restore_funcs.
* elf64-ppc.c (ppc64_elf_func_desc_adjust): Use it to control
provision of out-of-line register save/restore routines.
ld/
* emultempl/ppc64elf.em (params): Init new field.
(ppc_create_output_section_statements): Set params.save_restore_funcs
default.
(PARSE_AND_LIST_*): Add support for --save-restore-funcs and
--no-save-restore-funcs.
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/ChangeLog | 6 | ||||
-rw-r--r-- | bfd/elf64-ppc.c | 2 | ||||
-rw-r--r-- | bfd/elf64-ppc.h | 3 |
3 files changed, 10 insertions, 1 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 88e042e..1414107 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2014-02-19 Alan Modra <amodra@gmail.com> + + * elf64-ppc.h (struct ppc64_elf_params): Add save_restore_funcs. + * elf64-ppc.c (ppc64_elf_func_desc_adjust): Use it to control + provision of out-of-line register save/restore routines. + 2014-02-18 Jack Carter <jack.carter@imgtec.com> * elfxx-mips.c(_bfd_mips_elf_modify_segment_map): Deleted hard coding of diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c index 795d093..633d8db 100644 --- a/bfd/elf64-ppc.c +++ b/bfd/elf64-ppc.c @@ -6852,7 +6852,7 @@ ppc64_elf_func_desc_adjust (bfd *obfd ATTRIBUTE_UNUSED, /* Provide any missing _save* and _rest* functions. */ htab->sfpr->size = 0; - if (!info->relocatable) + if (htab->params->save_restore_funcs) for (i = 0; i < sizeof (funcs) / sizeof (funcs[0]); i++) if (!sfpr_define (info, &funcs[i])) return FALSE; diff --git a/bfd/elf64-ppc.h b/bfd/elf64-ppc.h index 3a2299a..c4c7688 100644 --- a/bfd/elf64-ppc.h +++ b/bfd/elf64-ppc.h @@ -55,6 +55,9 @@ struct ppc64_elf_params /* Whether to emit symbols for stubs. */ int emit_stub_syms; + + /* Whether to generate out-of-line register save/restore for gcc -Os code. */ + int save_restore_funcs; }; bfd_boolean ppc64_elf_init_stub_bfd |