2004-11-24 Paul Brook <paul@codesourcery.com>

bfd/
	* elf32-arm.c (elf32_arm_swap_symbol_in): New function.
	(elf32_arm_swap_symbol_out): New function.
	(elf32_arm_size_info): Add.
	(elf_backend_size_info): Define.
ld/testsuite/
	* ld-arm/mixed-lib.sym: Update for THUMB_FUNC change.
This commit is contained in:
Paul Brook 2004-11-24 14:44:47 +00:00
parent 5515a510de
commit 0beaef2b05
4 changed files with 89 additions and 1 deletions

View file

@ -1,3 +1,10 @@
2004-11-24 Paul Brook <paul@codesourcery.com>
* elf32-arm.c (elf32_arm_swap_symbol_in): New function.
(elf32_arm_swap_symbol_out): New function.
(elf32_arm_size_info): Add.
(elf_backend_size_info): Define.
2004-11-20 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
* hpux-core.c (hpux_core_core_file_p): Use offsetof macro in calls to

View file

@ -5662,6 +5662,82 @@ elf32_arm_symbol_processing (bfd *abfd ATTRIBUTE_UNUSED,
elfsym->symbol.flags |= BSF_FUNCTION;
}
/* Mangle thumb function symbols as we read them in. */
static void
elf32_arm_swap_symbol_in (bfd * abfd,
const void *psrc,
const void *pshn,
Elf_Internal_Sym *dst)
{
bfd_elf32_swap_symbol_in (abfd, psrc, pshn, dst);
/* New EABI objects mark thumb function symbols by setting the low bit of
the address. Turn these into STT_ARM_TFUNC. */
if (ELF_ST_TYPE (dst->st_info) == STT_FUNC
&& (dst->st_value & 1))
{
dst->st_info = ELF_ST_INFO (ELF_ST_BIND (dst->st_info), STT_ARM_TFUNC);
dst->st_value &= ~(bfd_vma) 1;
}
}
/* Mangle thumb function symbols as we write them out. */
static void
elf32_arm_swap_symbol_out (bfd *abfd,
const Elf_Internal_Sym *src,
void *cdst,
void *shndx)
{
Elf_Internal_Sym newsym;
/* We convert STT_ARM_TFUNC symbols into STT_FUNC with the low bit
of the address set, as per the new EABI. We do this unconditionally
because objcopy does not set the elf header flags until after
it writes out the symbol table. */
if (ELF_ST_TYPE (src->st_info) == STT_ARM_TFUNC)
{
newsym = *src;
newsym.st_info = ELF_ST_INFO (ELF_ST_BIND (src->st_info), STT_FUNC);
newsym.st_value |= 1;
src = &newsym;
}
bfd_elf32_swap_symbol_out (abfd, src, cdst, shndx);
}
/* We use this to override swap_symbol_in and swap_symbol_out. */
const struct elf_size_info elf32_arm_size_info = {
sizeof (Elf32_External_Ehdr),
sizeof (Elf32_External_Phdr),
sizeof (Elf32_External_Shdr),
sizeof (Elf32_External_Rel),
sizeof (Elf32_External_Rela),
sizeof (Elf32_External_Sym),
sizeof (Elf32_External_Dyn),
sizeof (Elf_External_Note),
4,
1,
32, 2,
ELFCLASS32, EV_CURRENT,
bfd_elf32_write_out_phdrs,
bfd_elf32_write_shdrs_and_ehdr,
bfd_elf32_write_relocs,
elf32_arm_swap_symbol_in,
elf32_arm_swap_symbol_out,
bfd_elf32_slurp_reloc_table,
bfd_elf32_slurp_symbol_table,
bfd_elf32_swap_dyn_in,
bfd_elf32_swap_dyn_out,
bfd_elf32_swap_reloc_in,
bfd_elf32_swap_reloc_out,
bfd_elf32_swap_reloca_in,
bfd_elf32_swap_reloca_out
};
#define ELF_ARCH bfd_arch_arm
#define ELF_MACHINE_CODE EM_ARM
#ifdef __QNXTARGET__
@ -5701,6 +5777,7 @@ elf32_arm_symbol_processing (bfd *abfd ATTRIBUTE_UNUSED,
#define elf_backend_final_write_processing elf32_arm_final_write_processing
#define elf_backend_copy_indirect_symbol elf32_arm_copy_indirect_symbol
#define elf_backend_symbol_processing elf32_arm_symbol_processing
#define elf_backend_size_info elf32_arm_size_info
#define elf_backend_can_refcount 1
#define elf_backend_can_gc_sections 1

View file

@ -1,3 +1,7 @@
2004-11-24 Paul Brook <paul@codesourcery.com>
* ld-arm/mixed-lib.sym: Update for THUMB_FUNC change.
2004-11-19 Nick Clifton <nickc@redhat.com>
* ld-scripts/script.exp: Add test of memory linker script.

View file

@ -3,7 +3,7 @@ Symbol table for image:
Num Buc: Value Size Type Bind Vis Ndx Name
.. ..: ........ 0 NOTYPE GLOBAL DEFAULT ABS _edata
.. ..: .......0 20 FUNC GLOBAL DEFAULT 6 lib_func1
.. ..: .......0 2 THUMB_FUNC GLOBAL DEFAULT 6 lib_func2
.. ..: .......1 2 FUNC GLOBAL DEFAULT 6 lib_func2
.. ..: ........ 0 NOTYPE GLOBAL DEFAULT ABS _bss_end__
.. ..: ........ 0 OBJECT GLOBAL DEFAULT ABS _DYNAMIC
.. ..: ........ 0 NOTYPE GLOBAL DEFAULT ABS __bss_end__