diff options
author | Alan Modra <amodra@bigpond.net.au> | 2012-01-23 06:16:33 +0000 |
---|---|---|
committer | Alan Modra <amodra@bigpond.net.au> | 2012-01-23 06:16:33 +0000 |
commit | 67425d452a0beb38a742d6ab34417c494d86ab51 (patch) | |
tree | 76a0eab0ada05b36138285d1199d75f80ad94022 /bfd/elf64-ppc.c | |
parent | 58380e79166722082c4bb9d58ce6d0159eff8582 (diff) | |
download | binutils-redhat-67425d452a0beb38a742d6ab34417c494d86ab51.tar.gz |
* elf-bfd.h: Formatting.
(struct elf_backend_data): Add "maybe_function_sym".
(_bfd_elf_maybe_function_sym): Declare.
* elfxx-target.h (elf_backend_maybe_function_sym): Define.
(elfNN_bed): Init new field.
* elf.c (elf_find_function): Use maybe_function_sym.
(_bfd_elf_maybe_function_sym): New function.
* elf64-ppc.c (elf_backend_maybe_function_sym): Define.
(ppc64_elf_maybe_function_sym): New function.
Diffstat (limited to 'bfd/elf64-ppc.c')
-rw-r--r-- | bfd/elf64-ppc.c | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c index 7ffbe0e42c..a51115e01a 100644 --- a/bfd/elf64-ppc.c +++ b/bfd/elf64-ppc.c @@ -105,6 +105,7 @@ static bfd_vma opd_entry_value #define elf_backend_gc_sweep_hook ppc64_elf_gc_sweep_hook #define elf_backend_adjust_dynamic_symbol ppc64_elf_adjust_dynamic_symbol #define elf_backend_hide_symbol ppc64_elf_hide_symbol +#define elf_backend_maybe_function_sym ppc64_elf_maybe_function_sym #define elf_backend_always_size_sections ppc64_elf_func_desc_adjust #define elf_backend_size_dynamic_sections ppc64_elf_size_dynamic_sections #define elf_backend_init_index_section _bfd_elf_init_2_index_sections @@ -5528,7 +5529,8 @@ opd_entry_value (asection *opd_sec, Elf_Internal_Rela *lo, *hi, *look; bfd_vma val; - /* No relocs implies we are linking a --just-symbols object. */ + /* No relocs implies we are linking a --just-symbols object, or looking + at a final linked executable with addr2line or somesuch. */ if (opd_sec->reloc_count == 0) { char buf[8]; @@ -5631,6 +5633,23 @@ opd_entry_value (asection *opd_sec, return val; } +/* Return TRUE iff the ELF symbol SYM might be a function. Set *CODE_SEC + and *CODE_OFF to the function's entry point. */ + +static bfd_boolean +ppc64_elf_maybe_function_sym (const elf_symbol_type *sym, + asection **code_sec, bfd_vma *code_off) +{ + if (_bfd_elf_maybe_function_sym (sym, code_sec, code_off)) + { + if (strcmp (sym->symbol.section->name, ".opd") == 0) + opd_entry_value (sym->symbol.section, sym->symbol.value, + code_sec, code_off); + return TRUE; + } + return FALSE; +} + /* Return true if symbol is defined in a regular object file. */ static bfd_boolean |