* elf.c (elf_find_function): Don't use internal_elf_sym.

(_bfd_elf_maybe_function_sym): Likewise.  Replace elf_symbol_type
	parameter with asymbol.
	* elf64-ppc.c (ppc64_elf_maybe_function_sym): Likewise.
	* elf-bfd.h (_bfd_elf_maybe_function_sym): Update prototype.
	(struct elf_backend_data <maybe_function_sym>): Likewise.
This commit is contained in:
Alan Modra 2012-02-07 07:04:04 +00:00
parent 0d5cff5020
commit ff9e0f5bc8
4 changed files with 42 additions and 43 deletions

View File

@ -1,7 +1,16 @@
2012-02-07 Alan Modra <amodra@gmail.com>
* elf.c (elf_find_function): Don't use internal_elf_sym.
(_bfd_elf_maybe_function_sym): Likewise. Replace elf_symbol_type
parameter with asymbol.
* elf64-ppc.c (ppc64_elf_maybe_function_sym): Likewise.
* elf-bfd.h (_bfd_elf_maybe_function_sym): Update prototype.
(struct elf_backend_data <maybe_function_sym>): Likewise.
2012-02-02 Vidya Praveen (vidya.praveen@atmel.com)
PR bfd/13410
* bfd/elf32-avr.c (elf32_avr_relax_section): Correct the
* bfd/elf32-avr.c (elf32_avr_relax_section): Correct the
condition that qualifies the candidates for relaxation.
2012-02-02 Tristan Gingold <gingold@adacore.com>
@ -102,13 +111,13 @@
* cpu-z8k.c: Likewise.
* cpu-i386.c: Include "libiberty.h".
(bfd_arch_i386_fill): New.
(bfd_arch_i386_fill): New.
Add bfd_arch_i386_fill to bfd_arch_info initializer.
* cpu-k1om.c: Add bfd_arch_i386_fill to bfd_arch_info initializer.
* cpu-l1om.c: Likewise.
* linker.c (default_data_link_order): Call abfd->arch_info->fill
* linker.c (default_data_link_order): Call abfd->arch_info->fill
if fill size is 0.
* bfd-in2.h: Regenerated.

View File

@ -1223,7 +1223,7 @@ struct elf_backend_data
/* Return TRUE if symbol may be a function. Set *CODE_SEC and *CODE_VAL
to the function's entry point. */
bfd_boolean (*maybe_function_sym) (const elf_symbol_type *sym,
bfd_boolean (*maybe_function_sym) (const asymbol *sym,
asection **code_sec, bfd_vma *code_off);
/* Used to handle bad SHF_LINK_ORDER input. */
@ -2202,7 +2202,7 @@ extern bfd_boolean _bfd_elf_map_sections_to_segments
extern bfd_boolean _bfd_elf_is_function_type (unsigned int);
extern bfd_boolean _bfd_elf_maybe_function_sym (const elf_symbol_type *,
extern bfd_boolean _bfd_elf_maybe_function_sym (const asymbol *,
asection **, bfd_vma *);
extern int bfd_elf_get_default_section_type (flagword);

View File

@ -7404,36 +7404,30 @@ elf_find_function (bfd *abfd,
for (p = symbols; *p != NULL; p++)
{
elf_symbol_type *q;
unsigned int type;
asymbol *sym = *p;
asection *code_sec;
bfd_vma code_off;
q = (elf_symbol_type *) *p;
type = ELF_ST_TYPE (q->internal_elf_sym.st_info);
switch (type)
if ((sym->flags & BSF_FILE) != 0)
{
case STT_FILE:
file = &q->symbol;
file = sym;
if (state == symbol_seen)
state = file_after_symbol_seen;
continue;
default:
if (bed->maybe_function_sym (q, &code_sec, &code_off)
&& code_sec == section
&& code_off >= low_func
&& code_off <= offset)
{
func = (asymbol *) q;
low_func = code_off;
filename = NULL;
if (file != NULL
&& (ELF_ST_BIND (q->internal_elf_sym.st_info) == STB_LOCAL
|| state != file_after_symbol_seen))
filename = bfd_asymbol_name (file);
}
break;
}
if (bed->maybe_function_sym (sym, &code_sec, &code_off)
&& code_sec == section
&& code_off >= low_func
&& code_off <= offset)
{
func = sym;
low_func = code_off;
filename = NULL;
if (file != NULL
&& ((sym->flags & BSF_LOCAL) != 0
|| state != file_after_symbol_seen))
filename = bfd_asymbol_name (file);
}
if (state == nothing_seen)
state = symbol_seen;
@ -9695,17 +9689,14 @@ _bfd_elf_is_function_type (unsigned int type)
and *CODE_OFF to the function's entry point. */
bfd_boolean
_bfd_elf_maybe_function_sym (const elf_symbol_type *sym,
_bfd_elf_maybe_function_sym (const asymbol *sym,
asection **code_sec, bfd_vma *code_off)
{
unsigned int type = ELF_ST_TYPE (sym->internal_elf_sym.st_info);
if (type == STT_NOTYPE
|| type == STT_FUNC
|| type == STT_GNU_IFUNC)
{
*code_sec = sym->symbol.section;
*code_off = sym->symbol.value;
return TRUE;
}
return FALSE;
if ((sym->flags & (BSF_SECTION_SYM | BSF_FILE | BSF_OBJECT
| BSF_THREAD_LOCAL | BSF_RELC | BSF_SRELC)) != 0)
return FALSE;
*code_sec = sym->section;
*code_off = sym->value;
return TRUE;
}

View File

@ -5637,14 +5637,13 @@ opd_entry_value (asection *opd_sec,
and *CODE_OFF to the function's entry point. */
static bfd_boolean
ppc64_elf_maybe_function_sym (const elf_symbol_type *sym,
ppc64_elf_maybe_function_sym (const asymbol *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);
if (strcmp (sym->section->name, ".opd") == 0)
opd_entry_value (sym->section, sym->value, code_sec, code_off);
return TRUE;
}
return FALSE;