diff options
author | Mark Mitchell <mark@codesourcery.com> | 2004-09-03 17:15:44 +0000 |
---|---|---|
committer | Mark Mitchell <mark@codesourcery.com> | 2004-09-03 17:15:44 +0000 |
commit | e5a52504a53dcf6bfb4ac1b94cac6a952c3da118 (patch) | |
tree | ce7af0b4625d1d493fa66a24c05963b27ed20a63 /bfd/elfarm-nabi.c | |
parent | f3219c75e5e25c63696baf0b9fc94dd394c4718e (diff) | |
download | gdb-e5a52504a53dcf6bfb4ac1b94cac6a952c3da118.zip gdb-e5a52504a53dcf6bfb4ac1b94cac6a952c3da118.tar.gz gdb-e5a52504a53dcf6bfb4ac1b94cac6a952c3da118.tar.bz2 |
* config.bfd (arm*-*-symbianelf*): Use OS-specific target vectors.
* configure.in (bfd_elf32_bigarm_symbian_vec): Add it.
(bfd_elf32_littlearm_symbian_vec): Likewise.
* configure: Regenerated.
* elf-bfd.h (elf_backend_data): Add dynamic_sec_flags.
* elf32-arm.h (PLT_HEADER_SIZE): Do not define.
(PLT_ENTRY_SIZE): Likewise.
(bfd_vma_elf32_arm_symbian_plt_entry): New
variable.
(elf32_arm_link_hash_table): Add plt_header_size, plt_entry_size,
and symbian_p.
(create_got_section): Don't create sections when generating BPABI
objects.
(elf32_arm_create_dynamic_sections): Tidy.
(elf32_arm_link_hash_table_create): Set plt_header_size,
plt_entry_size, and symbian_p.
(elf32_arm_check_relocs): Do not mark .rel.dyn as loadable when
generating BPABI objects.
(allocate_dynrelocs): Use htab->plt_header_size, not
PLT_HEADER_SIZE. Do not add to .got.plt when
generating BPABI objects.
(elf32_arm_finish_dynamic_symbol): Generate Symbian OS PLTs.
* elfarm-nabi.c: Add SymbianOS target vectors.
* elflink.c (_bfd_elf_create_got_section): Use dynamic_sec_flags.
(_bfd_elf_link_create_dynamic_sections): Likewise.
* elfxx-target.h (ELF_DYNAMIC_SEC_FLAGS): New macro.
(elfNN_bed): Use it.
* targets.c (bfd_elf32_bigarm_symbian_vec): New variable.
(bfd_elf32_littlearm_symbian_vec): Likewise.
(_bfd_target_vector): Add them.
* Makefile.am (TARG_ENV_HFILES): Add te-symbian.h.
* Makefile.in: Regenerated.
* configure.in: Set em for arm*-*-symbianelf*.
* configure: Regenerated.
* config/tc-arm.c (elf32_arm_target_format): Use Symbian target
vectors when appropriate.
* config/te-symbian.h: New file.
* Makefile.am (ALL_EMULATIONS): Add earmsymbian.o.
(earmsymbian.c): New target.
* configure.tgt: Use armsymbian emulation for arm*-*-symbianelf*.
* Makefile.in: Regenerated.
* aclocal.m4: Likewise.
* configure: Likewise.
* emulparams/armsymbian.sh: New file.
Diffstat (limited to 'bfd/elfarm-nabi.c')
-rw-r--r-- | bfd/elfarm-nabi.c | 104 |
1 files changed, 99 insertions, 5 deletions
diff --git a/bfd/elfarm-nabi.c b/bfd/elfarm-nabi.c index 1abe9b1..7c6e7c2 100644 --- a/bfd/elfarm-nabi.c +++ b/bfd/elfarm-nabi.c @@ -29,11 +29,6 @@ #define USE_REL 1 -#define TARGET_LITTLE_SYM bfd_elf32_littlearm_vec -#define TARGET_LITTLE_NAME "elf32-littlearm" -#define TARGET_BIG_SYM bfd_elf32_bigarm_vec -#define TARGET_BIG_NAME "elf32-bigarm" - #define elf_info_to_howto 0 #define elf_info_to_howto_rel elf32_arm_info_to_howto @@ -874,7 +869,106 @@ elf32_arm_nabi_grok_psinfo (abfd, note) return TRUE; } +#define TARGET_LITTLE_SYM bfd_elf32_littlearm_vec +#define TARGET_LITTLE_NAME "elf32-littlearm" +#define TARGET_BIG_SYM bfd_elf32_bigarm_vec +#define TARGET_BIG_NAME "elf32-bigarm" + #define elf_backend_grok_prstatus elf32_arm_nabi_grok_prstatus #define elf_backend_grok_psinfo elf32_arm_nabi_grok_psinfo #include "elf32-arm.h" + +/* Symbian OS Targets */ + +#undef TARGET_LITTLE_SYM +#define TARGET_LITTLE_SYM bfd_elf32_littlearm_symbian_vec +#undef TARGET_LITTLE_NAME +#define TARGET_LITTLE_NAME "elf32-littlearm-symbian" +#undef TARGET_BIG_SYM +#define TARGET_BIG_SYM bfd_elf32_bigarm_symbian_vec +#undef TARGET_BIG_NAME +#define TARGET_BIG_NAME "elf32-bigarm-symbian" + +/* Like elf32_arm_link_hash_table_create -- but overrides + appropriately for Symbian OS. */ +static struct bfd_link_hash_table * +elf32_arm_symbian_link_hash_table_create (bfd *abfd) +{ + struct bfd_link_hash_table *ret; + + ret = elf32_arm_link_hash_table_create (abfd); + if (ret) + { + struct elf32_arm_link_hash_table *htab + = (struct elf32_arm_link_hash_table *)ret; + /* There is no PLT header for Symbian OS. */ + htab->plt_header_size = 0; + /* The PLT entries are each three instructions. */ + htab->plt_entry_size = 4 * NUM_ELEM (elf32_arm_symbian_plt_entry); + htab->symbian_p = 1; + } + return ret; +} + +/* In a BPABI executable, the dynamic linking sections do not go in + the loadable read-only segment. The post-linker may wish to refer + to these sections, but they are not part of the final program + image. */ +static struct bfd_elf_special_section const + elf32_arm_symbian_special_sections[]= +{ + { ".dynamic", 8, 0, SHT_DYNAMIC, 0 }, + { ".dynstr", 7, 0, SHT_STRTAB, 0 }, + { ".dynsym", 7, 0, SHT_DYNSYM, 0 }, + { ".got", 4, 0, SHT_PROGBITS, 0 }, + { ".hash", 5, 0, SHT_HASH, 0 }, + { NULL, 0, 0, 0, 0 } +}; + +static bfd_boolean +elf32_arm_symbian_modify_segment_map + PARAMS ((bfd *, struct bfd_link_info *)); + +static bfd_boolean +elf32_arm_symbian_modify_segment_map (abfd, info) + bfd *abfd; + struct bfd_link_info *info ATTRIBUTE_UNUSED; +{ + struct elf_segment_map *m; + + /* The first PT_LOAD segment will have the program headers and file + headers in it by default -- but BPABI object files should not + include these headers in any loadable segment. */ + for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next) + if (m->p_type == PT_LOAD) + { + m->includes_filehdr = 0; + m->includes_phdrs = 0; + } + return TRUE; +} + +#undef elf32_bed +#define elf32_bed elf32_arm_symbian_bed + +#undef ELF_DYNAMIC_SEC_FLAGS +#define ELF_DYNAMIC_SEC_FLAGS \ + (SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED) + +#undef bfd_elf32_bfd_link_hash_table_create +#define bfd_elf32_bfd_link_hash_table_create \ + elf32_arm_symbian_link_hash_table_create + +#undef elf_backend_special_sections +#define elf_backend_special_sections elf32_arm_symbian_special_sections + +#undef elf_backend_modify_segment_map +#define elf_backend_modify_segment_map elf32_arm_symbian_modify_segment_map + +/* There is no .got section for BPABI objects, and hence no header. */ +#undef elf_backend_got_header_size +#define elf_backend_got_header_size 0 + +#include "elf32-target.h" + |