diff options
author | Kazu Hirata <kazu@codesourcery.com> | 2000-12-08 18:34:32 +0000 |
---|---|---|
committer | Kazu Hirata <kazu@codesourcery.com> | 2000-12-08 18:34:32 +0000 |
commit | 435b1e90b1015d1457ac8d7a4efcce1c505b4fe8 (patch) | |
tree | 72bf526f2b842076484ccc6dccdbe2b9a3968a59 /bfd | |
parent | a98cc2b2fd4bdf85ef2ea59997e718a4b840fed3 (diff) | |
download | gdb-435b1e90b1015d1457ac8d7a4efcce1c505b4fe8.zip gdb-435b1e90b1015d1457ac8d7a4efcce1c505b4fe8.tar.gz gdb-435b1e90b1015d1457ac8d7a4efcce1c505b4fe8.tar.bz2 |
2000-12-08 Kazu Hirata <kazu@hxi.com>
* coffgen.c: Fix formatting.
* elf32-i386.c: Likewise.
* elf32-i960.c: Likewise.
* elf32-m68k.c: Likewise.
* elf32-mcore.c: Likewise.
* elf32-ppc.c: Likewise.
* elf32-sh.c: Likewise.
* elf32-sparc.c: Likewise.
* elf32-v850.c: Likewise.
* elf64-sparc.c: Likewise.
* elf-m10300.c: Likewise.
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/ChangeLog | 14 | ||||
-rw-r--r-- | bfd/coffgen.c | 5 | ||||
-rw-r--r-- | bfd/elf-m10300.c | 1 | ||||
-rw-r--r-- | bfd/elf32-i386.c | 1 | ||||
-rw-r--r-- | bfd/elf32-i960.c | 1 | ||||
-rw-r--r-- | bfd/elf32-m68k.c | 1 | ||||
-rw-r--r-- | bfd/elf32-mcore.c | 1 | ||||
-rw-r--r-- | bfd/elf32-ppc.c | 1 | ||||
-rw-r--r-- | bfd/elf32-sh.c | 215 | ||||
-rw-r--r-- | bfd/elf32-sparc.c | 10 | ||||
-rw-r--r-- | bfd/elf32-v850.c | 285 | ||||
-rw-r--r-- | bfd/elf64-sparc.c | 59 |
12 files changed, 285 insertions, 309 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index ce5897d..b19f1fd 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,17 @@ +2000-12-08 Kazu Hirata <kazu@hxi.com> + + * coffgen.c: Fix formatting. + * elf32-i386.c: Likewise. + * elf32-i960.c: Likewise. + * elf32-m68k.c: Likewise. + * elf32-mcore.c: Likewise. + * elf32-ppc.c: Likewise. + * elf32-sh.c: Likewise. + * elf32-sparc.c: Likewise. + * elf32-v850.c: Likewise. + * elf64-sparc.c: Likewise. + * elf-m10300.c: Likewise. + 2000-12-07 Kazu Hirata <kazu@hxi.com> * elf32-ppc.c: Fix formatting. diff --git a/bfd/coffgen.c b/bfd/coffgen.c index 4a96a3e..d16c577 100644 --- a/bfd/coffgen.c +++ b/bfd/coffgen.c @@ -557,7 +557,6 @@ coff_count_linenumbers (abfd) /* Takes a bfd and a symbol, returns a pointer to the coff specific area of the symbol if there is one. */ -/*ARGSUSED*/ coff_symbol_type * coff_symbol_from (ignore_abfd, symbol) bfd *ignore_abfd ATTRIBUTE_UNUSED; @@ -1375,7 +1374,6 @@ coff_write_linenumbers (abfd) return true; } -/*ARGSUSED */ alent * coff_get_lineno (ignore_abfd, symbol) bfd *ignore_abfd ATTRIBUTE_UNUSED; @@ -1908,7 +1906,6 @@ coff_bfd_make_debug_symbol (abfd, ptr, sz) return &new->symbol; } -/*ARGSUSED */ void coff_get_symbol_info (abfd, symbol, ret) bfd *abfd; @@ -2161,7 +2158,7 @@ _bfd_coff_is_local_label_name (abfd, name) /* Provided a BFD, a section and an offset (in bytes, not octets) into the section, calculate and return the name of the source file and the line nearest to the wanted location. */ -/*ARGSUSED*/ + boolean coff_find_nearest_line (abfd, section, symbols, offset, filename_ptr, functionname_ptr, line_ptr) diff --git a/bfd/elf-m10300.c b/bfd/elf-m10300.c index 3e3c223..ac320d6 100644 --- a/bfd/elf-m10300.c +++ b/bfd/elf-m10300.c @@ -2886,7 +2886,6 @@ elf_mn10300_mach (flags) file. This gets the MN10300 architecture right based on the machine number. */ -/*ARGSUSED*/ void _bfd_mn10300_elf_final_write_processing (abfd, linker) bfd *abfd; diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c index 11664ea..f538bf6 100644 --- a/bfd/elf32-i386.c +++ b/bfd/elf32-i386.c @@ -1257,7 +1257,6 @@ elf_i386_size_dynamic_sections (output_bfd, info) check_relocs routine, but we won't fill them in in the relocate_section routine. */ -/*ARGSUSED*/ static boolean elf_i386_discard_copies (h, inf) struct elf_i386_link_hash_entry *h; diff --git a/bfd/elf32-i960.c b/bfd/elf32-i960.c index 20ee48b..0d03d57 100644 --- a/bfd/elf32-i960.c +++ b/bfd/elf32-i960.c @@ -102,7 +102,6 @@ elf32_i960_info_to_howto_rel (abfd, cache_ptr, dst) function. It just short circuits the reloc if producing relocateable output against an external symbol. */ -/*ARGSUSED*/ bfd_reloc_status_type elf32_i960_relocate (abfd, reloc_entry, diff --git a/bfd/elf32-m68k.c b/bfd/elf32-m68k.c index 07cd061..c37bb5a9 100644 --- a/bfd/elf32-m68k.c +++ b/bfd/elf32-m68k.c @@ -1324,7 +1324,6 @@ elf_m68k_size_dynamic_sections (output_bfd, info) in regular objects. We allocated space for them in the check_relocs routine, but we won't fill them in in the relocate_section routine. */ -/*ARGSUSED*/ static boolean elf_m68k_discard_copies (h, ignore) struct elf_m68k_link_hash_entry *h; diff --git a/bfd/elf32-mcore.c b/bfd/elf32-mcore.c index 4516e07..6bb2e75 100644 --- a/bfd/elf32-mcore.c +++ b/bfd/elf32-mcore.c @@ -350,7 +350,6 @@ mcore_elf_merge_private_bfd_data (ibfd, obfd) /* Don't pretend we can deal with unsupported relocs. */ -/*ARGSUSED*/ static bfd_reloc_status_type mcore_elf_unsupported_reloc (abfd, reloc_entry, symbol, data, input_section, output_bfd, error_message) diff --git a/bfd/elf32-ppc.c b/bfd/elf32-ppc.c index f770184..58ffce4 100644 --- a/bfd/elf32-ppc.c +++ b/bfd/elf32-ppc.c @@ -2566,7 +2566,6 @@ ppc_elf_gc_sweep_hook (abfd, info, sec, relocs) /* Hook called by the linker routine which adds symbols from an object file. We use it to put .comm items in .sbss, and not .bss. */ -/*ARGSUSED*/ static boolean ppc_elf_add_symbol_hook (abfd, info, sym, namep, flagsp, secp, valp) bfd *abfd; diff --git a/bfd/elf32-sh.c b/bfd/elf32-sh.c index 1132942..61df1f7 100644 --- a/bfd/elf32-sh.c +++ b/bfd/elf32-sh.c @@ -77,8 +77,7 @@ static boolean sh_elf_finish_dynamic_sections #define ELF_DYNAMIC_INTERPRETER "/usr/lib/libc.so.1" -static reloc_howto_type sh_elf_howto_table[] = -{ +static reloc_howto_type sh_elf_howto_table[] = { /* No relocation. */ HOWTO (R_SH_NONE, /* type */ 0, /* rightshift */ @@ -710,7 +709,7 @@ static reloc_howto_type sh_elf_howto_table[] = static bfd_reloc_status_type sh_elf_reloc_loop (r_type, input_bfd, input_section, contents, addr, - symbol_section, start, end) + symbol_section, start, end) int r_type ATTRIBUTE_UNUSED; bfd *input_bfd; asection *input_section; @@ -821,7 +820,7 @@ sh_elf_reloc_loop (r_type, input_bfd, input_section, contents, addr, static bfd_reloc_status_type sh_elf_reloc (abfd, reloc_entry, symbol_in, data, input_section, output_bfd, - error_message) + error_message) bfd *abfd; arelent *reloc_entry; asymbol *symbol_in; @@ -855,8 +854,8 @@ sh_elf_reloc (abfd, reloc_entry, symbol_in, data, input_section, output_bfd, return bfd_reloc_undefined; if (bfd_is_com_section (symbol_in->section)) - sym_value = 0; - else + sym_value = 0; + else sym_value = (symbol_in->value + symbol_in->section->output_section->vma + symbol_in->section->output_offset); @@ -912,16 +911,14 @@ sh_elf_ignore_reloc (abfd, reloc_entry, symbol, data, input_section, /* This structure is used to map BFD reloc codes to SH ELF relocs. */ -struct elf_reloc_map -{ +struct elf_reloc_map { bfd_reloc_code_real_type bfd_reloc_val; unsigned char elf_reloc_val; }; /* An array mapping BFD reloc codes to SH ELF relocs. */ -static const struct elf_reloc_map sh_reloc_map[] = -{ +static const struct elf_reloc_map sh_reloc_map[] = { { BFD_RELOC_NONE, R_SH_NONE }, { BFD_RELOC_32, R_SH_DIR32 }, { BFD_RELOC_CTOR, R_SH_DIR32 }, @@ -1001,7 +998,7 @@ sh_elf_info_to_howto (abfd, cache_ptr, dst) values; in coff-sh.c they come from include/coff/sh.h, whereas here they come from enum elf_sh_reloc_type in include/elf/sh.h. */ -static boolean +static boolean sh_elf_relax_section (abfd, sec, link_info, again) bfd *abfd; asection *sec; @@ -1106,7 +1103,7 @@ sh_elf_relax_section (abfd, sec, link_info, again) on a four byte boundary. */ paddr = insn & 0xff; paddr *= 4; - paddr += (laddr + 4) &~ 3; + paddr += (laddr + 4) & ~3; if (paddr >= sec->_raw_size) { ((*_bfd_error_handler) @@ -1564,7 +1561,7 @@ sh_elf_relax_delete_bytes (abfd, sec, addr, count) case R_SH_DIR8WPL: off = insn & 0xff; - stop = (start &~ (bfd_vma) 3) + 4 + off * 4; + stop = (start & ~(bfd_vma) 3) + 4 + off * 4; break; case R_SH_SWITCH8: @@ -2090,8 +2087,7 @@ sh_elf_swap_insns (abfd, sec, relocs, contents, addr) /* First entry in an absolute procedure linkage table look like this. */ -static const bfd_byte elf_sh_plt0_entry_be[PLT_ENTRY_SIZE] = -{ +static const bfd_byte elf_sh_plt0_entry_be[PLT_ENTRY_SIZE] = { 0xd0, 0x04, /* mov.l 1f,r0 */ 0xd2, 0x05, /* mov.l 2f,r2 */ 0x60, 0x02, /* mov.l @r0,r0 */ @@ -2106,8 +2102,7 @@ static const bfd_byte elf_sh_plt0_entry_be[PLT_ENTRY_SIZE] = 0, 0, 0, 0, /* 2: replaced with address of .got.plt + 4. */ }; -static const bfd_byte elf_sh_plt0_entry_le[PLT_ENTRY_SIZE] = -{ +static const bfd_byte elf_sh_plt0_entry_le[PLT_ENTRY_SIZE] = { 0x04, 0xd0, /* mov.l 1f,r0 */ 0x05, 0xd2, /* mov.l 2f,r2 */ 0x02, 0x60, /* mov.l @r0,r0 */ @@ -2125,8 +2120,7 @@ static const bfd_byte elf_sh_plt0_entry_le[PLT_ENTRY_SIZE] = /* Sebsequent entries in an absolute procedure linkage table look like this. */ -static const bfd_byte elf_sh_plt_entry_be[PLT_ENTRY_SIZE] = -{ +static const bfd_byte elf_sh_plt_entry_be[PLT_ENTRY_SIZE] = { 0xd0, 0x04, /* mov.l 1f,r0 */ 0x60, 0x02, /* mov.l @r0,r0 */ 0xd2, 0x02, /* mov.l 0f,r2 */ @@ -2140,8 +2134,7 @@ static const bfd_byte elf_sh_plt_entry_be[PLT_ENTRY_SIZE] = 0, 0, 0, 0, /* 2: replaced with offset into relocation table. */ }; -static const bfd_byte elf_sh_plt_entry_le[PLT_ENTRY_SIZE] = -{ +static const bfd_byte elf_sh_plt_entry_le[PLT_ENTRY_SIZE] = { 0x04, 0xd0, /* mov.l 1f,r0 */ 0x02, 0x60, /* mov.l @r0,r0 */ 0x02, 0xd2, /* mov.l 0f,r2 */ @@ -2157,8 +2150,7 @@ static const bfd_byte elf_sh_plt_entry_le[PLT_ENTRY_SIZE] = /* Entries in a PIC procedure linkage table look like this. */ -static const bfd_byte elf_sh_pic_plt_entry_be[PLT_ENTRY_SIZE] = -{ +static const bfd_byte elf_sh_pic_plt_entry_be[PLT_ENTRY_SIZE] = { 0xd0, 0x04, /* mov.l 1f,r0 */ 0x00, 0xce, /* mov.l @(r0,r12),r0 */ 0x40, 0x2b, /* jmp @r0 */ @@ -2173,8 +2165,7 @@ static const bfd_byte elf_sh_pic_plt_entry_be[PLT_ENTRY_SIZE] = 0, 0, 0, 0 /* 2: replaced with offset into relocation table. */ }; -static const bfd_byte elf_sh_pic_plt_entry_le[PLT_ENTRY_SIZE] = -{ +static const bfd_byte elf_sh_pic_plt_entry_le[PLT_ENTRY_SIZE] = { 0x04, 0xd0, /* mov.l 1f,r0 */ 0xce, 0x00, /* mov.l @(r0,r12),r0 */ 0x2b, 0x40, /* jmp @r0 */ @@ -2223,8 +2214,7 @@ static const bfd_byte *elf_sh_pic_plt_entry; /* This structure keeps track of the number of PC relative relocs we have copied for a given symbol. */ -struct elf_sh_pcrel_relocs_copied -{ +struct elf_sh_pcrel_relocs_copied { /* Next section. */ struct elf_sh_pcrel_relocs_copied *next; /* A section in dynobj. */ @@ -2235,8 +2225,7 @@ struct elf_sh_pcrel_relocs_copied /* sh ELF linker hash entry. */ -struct elf_sh_link_hash_entry -{ +struct elf_sh_link_hash_entry { struct elf_link_hash_entry root; /* Number of PC relative relocs copied for this symbol. */ @@ -2245,8 +2234,7 @@ struct elf_sh_link_hash_entry /* sh ELF linker hash table. */ -struct elf_sh_link_hash_table -{ +struct elf_sh_link_hash_table { struct elf_link_hash_table root; }; @@ -2388,7 +2376,7 @@ sh_elf_create_dynamic_sections (abfd, info) return false; } - s = bfd_make_section (abfd, + s = bfd_make_section (abfd, bed->default_use_rela_p ? ".rela.plt" : ".rel.plt"); if (s == NULL || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY) @@ -2448,9 +2436,9 @@ sh_elf_create_dynamic_sections (abfd, info) copy relocs. */ if (! info->shared) { - s = bfd_make_section (abfd, - (bed->default_use_rela_p - ? ".rela.bss" : ".rel.bss")); + s = bfd_make_section (abfd, + (bed->default_use_rela_p + ? ".rela.bss" : ".rel.bss")); if (s == NULL || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY) || ! bfd_set_section_alignment (abfd, s, ptralign)) @@ -2461,7 +2449,6 @@ sh_elf_create_dynamic_sections (abfd, info) return true; } - /* Adjust a symbol defined by a dynamic object and referenced by a regular object. The current definition is in some section of the dynamic object, but we're not including those sections. We have to @@ -2830,7 +2817,6 @@ sh_elf_size_dynamic_sections (output_bfd, info) check_relocs routine, but we won't fill them in in the relocate_section routine. */ -/*ARGSUSED*/ static boolean sh_elf_discard_copies (h, ignore) struct elf_sh_link_hash_entry *h; @@ -2892,7 +2878,7 @@ sh_elf_relocate_section (output_bfd, info, input_bfd, input_section, asection *sec; struct elf_link_hash_entry *h; bfd_vma relocation; - bfd_vma addend = (bfd_vma)0; + bfd_vma addend = (bfd_vma) 0; bfd_reloc_status_type r; r_symndx = ELF32_R_SYM (rel->r_info); @@ -2963,7 +2949,7 @@ sh_elf_relocate_section (output_bfd, info, input_bfd, input_section, sec = h->root.u.def.section; /* In these cases, we don't need the relocation value. We check specially because in some obscure cases - sec->output_section will be NULL. */ + sec->output_section will be NULL. */ if (r_type == R_SH_GOTPC || (r_type == R_SH_PLT32 && h->plt.offset != (bfd_vma) -1) @@ -3020,11 +3006,11 @@ sh_elf_relocate_section (output_bfd, info, input_bfd, input_section, } } - switch ((int)r_type) + switch ((int) r_type) { final_link_relocate: /* COFF relocs don't use the addend. The addend is used for - R_SH_DIR32 to be compatible with other compilers. */ + R_SH_DIR32 to be compatible with other compilers. */ r = _bfd_final_link_relocate (howto, input_bfd, input_section, contents, rel->r_offset, relocation, addend); @@ -3138,9 +3124,9 @@ sh_elf_relocate_section (output_bfd, info, input_bfd, input_section, } bfd_elf32_swap_reloca_out (output_bfd, &outrel, - (((Elf32_External_Rela *) - sreloc->contents) - + sreloc->reloc_count)); + (((Elf32_External_Rela *) + sreloc->contents) + + sreloc->reloc_count)); ++sreloc->reloc_count; /* If this reloc is against an external symbol, we do @@ -3371,7 +3357,7 @@ sh_elf_relocate_section (output_bfd, info, input_bfd, input_section, static bfd_byte * sh_elf_get_relocated_section_contents (output_bfd, link_info, link_order, - data, relocateable, symbols) + data, relocateable, symbols) bfd *output_bfd; struct bfd_link_info *link_info; struct bfd_link_order *link_order; @@ -3503,45 +3489,45 @@ sh_elf_get_relocated_section_contents (output_bfd, link_info, link_order, } static asection * sh_elf_gc_mark_hook (abfd, info, rel, h, sym) - bfd *abfd; - struct bfd_link_info *info ATTRIBUTE_UNUSED; - Elf_Internal_Rela *rel; - struct elf_link_hash_entry *h; - Elf_Internal_Sym *sym; + bfd *abfd; + struct bfd_link_info *info ATTRIBUTE_UNUSED; + Elf_Internal_Rela *rel; + struct elf_link_hash_entry *h; + Elf_Internal_Sym *sym; { if (h != NULL) { switch (ELF32_R_TYPE (rel->r_info)) - { - case R_SH_GNU_VTINHERIT: - case R_SH_GNU_VTENTRY: - break; + { + case R_SH_GNU_VTINHERIT: + case R_SH_GNU_VTENTRY: + break; - default: - switch (h->root.type) - { - case bfd_link_hash_defined: - case bfd_link_hash_defweak: - return h->root.u.def.section; + default: + switch (h->root.type) + { + case bfd_link_hash_defined: + case bfd_link_hash_defweak: + return h->root.u.def.section; - case bfd_link_hash_common: - return h->root.u.c.p->section; + case bfd_link_hash_common: + return h->root.u.c.p->section; - default: - break; - } - } - } - else - { - if (!(elf_bad_symtab (abfd) - && ELF_ST_BIND (sym->st_info) != STB_LOCAL) - && ! ((sym->st_shndx <= 0 || sym->st_shndx >= SHN_LORESERVE) + default: + break; + } + } + } + else + { + if (!(elf_bad_symtab (abfd) + && ELF_ST_BIND (sym->st_info) != STB_LOCAL) + && ! ((sym->st_shndx <= 0 || sym->st_shndx >= SHN_LORESERVE) && sym->st_shndx != SHN_COMMON)) - { - return bfd_section_from_elf_index (abfd, sym->st_shndx); - } - } + { + return bfd_section_from_elf_index (abfd, sym->st_shndx); + } + } return NULL; } @@ -3557,14 +3543,14 @@ sh_elf_gc_sweep_hook (abfd, info, sec, relocs) /* We use got and plt entries for sh, but it would seem that the existing SH code does no sort of reference counting or whatnot on its GOT and PLT entries, so it is not possible to garbage collect - them at this time. */ + them at this time. */ return true; } /* Look through the relocs for a section during the first phase. Since we don't do .gots or .plts, we just need to consider the virtual table relocs for gc. */ - + static boolean sh_elf_check_relocs (abfd, info, sec, relocs) bfd *abfd; @@ -3581,21 +3567,20 @@ sh_elf_check_relocs (abfd, info, sec, relocs) asection *sgot; asection *srelgot; asection *sreloc; - + sgot = NULL; srelgot = NULL; sreloc = NULL; - if (info->relocateable) return true; - + symtab_hdr = &elf_tdata (abfd)->symtab_hdr; sym_hashes = elf_sym_hashes (abfd); - sym_hashes_end = sym_hashes + symtab_hdr->sh_size/sizeof(Elf32_External_Sym); + sym_hashes_end = sym_hashes + symtab_hdr->sh_size/sizeof (Elf32_External_Sym); if (!elf_bad_symtab (abfd)) sym_hashes_end -= symtab_hdr->sh_info; - + dynobj = elf_hash_table (info)->dynobj; local_got_offsets = elf_local_got_offsets (abfd); @@ -3604,13 +3589,13 @@ sh_elf_check_relocs (abfd, info, sec, relocs) { struct elf_link_hash_entry *h; unsigned long r_symndx; - + r_symndx = ELF32_R_SYM (rel->r_info); if (r_symndx < symtab_hdr->sh_info) - h = NULL; + h = NULL; else - h = sym_hashes[r_symndx - symtab_hdr->sh_info]; - + h = sym_hashes[r_symndx - symtab_hdr->sh_info]; + /* Some relocs require a global offset table. */ if (dynobj == NULL) { @@ -3633,17 +3618,17 @@ sh_elf_check_relocs (abfd, info, sec, relocs) { /* This relocation describes the C++ object vtable hierarchy. Reconstruct it for later use during GC. */ - case R_SH_GNU_VTINHERIT: - if (!_bfd_elf32_gc_record_vtinherit (abfd, sec, h, rel->r_offset)) - return false; - break; - + case R_SH_GNU_VTINHERIT: + if (!_bfd_elf32_gc_record_vtinherit (abfd, sec, h, rel->r_offset)) + return false; + break; + /* This relocation describes which C++ vtable entries are actually used. Record for later use during GC. */ - case R_SH_GNU_VTENTRY: - if (!_bfd_elf32_gc_record_vtentry (abfd, sec, h, rel->r_addend)) - return false; - break; + case R_SH_GNU_VTENTRY: + if (!_bfd_elf32_gc_record_vtentry (abfd, sec, h, rel->r_addend)) + return false; + break; case R_SH_GOT32: /* This symbol requires a global offset table entry. */ @@ -3694,8 +3679,8 @@ sh_elf_check_relocs (abfd, info, sec, relocs) } else { - /* This is a global offset table entry for a local - symbol. */ + /* This is a global offset table entry for a local + symbol. */ if (local_got_offsets == NULL) { size_t size; @@ -3849,15 +3834,15 @@ sh_elf_check_relocs (abfd, info, sec, relocs) } break; - } + } } - + return true; } static boolean sh_elf_set_mach_from_flags (abfd) - bfd * abfd; + bfd *abfd; { flagword flags = elf_elfheader (abfd)->e_flags; @@ -3891,10 +3876,11 @@ sh_elf_set_mach_from_flags (abfd) return true; } -/* Function to keep SH specific file flags. */ +/* Function to keep SH specific file flags. */ + static boolean sh_elf_set_private_flags (abfd, flags) - bfd * abfd; + bfd *abfd; flagword flags; { BFD_ASSERT (! elf_flags_init (abfd) @@ -3906,12 +3892,13 @@ sh_elf_set_private_flags (abfd, flags) } /* Copy backend specific data from one object module to another */ + static boolean sh_elf_copy_private_data (ibfd, obfd) - bfd * ibfd; - bfd * obfd; + bfd *ibfd; + bfd *obfd; { - if ( bfd_get_flavour (ibfd) != bfd_target_elf_flavour + if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour || bfd_get_flavour (obfd) != bfd_target_elf_flavour) return true; @@ -4009,7 +3996,7 @@ sh_elf_finish_dynamic_symbol (output_bfd, info, h, sym) { if (elf_sh_plt_entry == NULL) { - elf_sh_plt_entry = (bfd_big_endian (output_bfd)? + elf_sh_plt_entry = (bfd_big_endian (output_bfd) ? elf_sh_plt_entry_be : elf_sh_plt_entry_le); } memcpy (splt->contents + h->plt.offset, elf_sh_plt_entry, @@ -4030,7 +4017,7 @@ sh_elf_finish_dynamic_symbol (output_bfd, info, h, sym) { if (elf_sh_pic_plt_entry == NULL) { - elf_sh_pic_plt_entry = (bfd_big_endian (output_bfd)? + elf_sh_pic_plt_entry = (bfd_big_endian (output_bfd) ? elf_sh_pic_plt_entry_be : elf_sh_pic_plt_entry_le); } @@ -4110,8 +4097,8 @@ sh_elf_finish_dynamic_symbol (output_bfd, info, h, sym) } bfd_elf32_swap_reloca_out (output_bfd, &rel, - ((Elf32_External_Rela *) srel->contents - + srel->reloc_count)); + ((Elf32_External_Rela *) srel->contents + + srel->reloc_count)); ++srel->reloc_count; } @@ -4136,8 +4123,8 @@ sh_elf_finish_dynamic_symbol (output_bfd, info, h, sym) rel.r_info = ELF32_R_INFO (h->dynindx, R_SH_COPY); rel.r_addend = 0; bfd_elf32_swap_reloca_out (output_bfd, &rel, - ((Elf32_External_Rela *) s->contents - + s->reloc_count)); + ((Elf32_External_Rela *) s->contents + + s->reloc_count)); ++s->reloc_count; } @@ -4242,7 +4229,7 @@ sh_elf_finish_dynamic_sections (output_bfd, info) { if (elf_sh_pic_plt_entry == NULL) { - elf_sh_pic_plt_entry = (bfd_big_endian (output_bfd)? + elf_sh_pic_plt_entry = (bfd_big_endian (output_bfd) ? elf_sh_pic_plt_entry_be : elf_sh_pic_plt_entry_le); } @@ -4253,7 +4240,7 @@ sh_elf_finish_dynamic_sections (output_bfd, info) { if (elf_sh_plt0_entry == NULL) { - elf_sh_plt0_entry = (bfd_big_endian (output_bfd)? + elf_sh_plt0_entry = (bfd_big_endian (output_bfd) ? elf_sh_plt0_entry_be : elf_sh_plt0_entry_le); } diff --git a/bfd/elf32-sparc.c b/bfd/elf32-sparc.c index 11ac539..4e9c6c2 100644 --- a/bfd/elf32-sparc.c +++ b/bfd/elf32-sparc.c @@ -129,7 +129,6 @@ static reloc_howto_type elf32_sparc_vtinherit_howto = static reloc_howto_type elf32_sparc_vtentry_howto = HOWTO (R_SPARC_GNU_VTENTRY, 0,2,0,false,0,complain_overflow_dont, _bfd_elf_rel_vtable_reloc_fn,"R_SPARC_GNU_VTENTRY", false,0,0, false); - struct elf_reloc_map { bfd_reloc_code_real_type bfd_reloc_val; unsigned char elf_reloc_val; @@ -188,7 +187,7 @@ elf32_sparc_reloc_type_lookup (abfd, code) bfd_reloc_code_real_type code; { unsigned int i; - + switch (code) { case BFD_RELOC_VTABLE_INHERIT: @@ -1068,11 +1067,9 @@ elf32_sparc_size_dynamic_sections (output_bfd, info) return true; } - #define SET_SEC_DO_RELAX(section) do { elf_section_data(section)->tdata = (void *)1; } while (0) #define SEC_DO_RELAX(section) (elf_section_data(section)->tdata == (void *)1) -/*ARGSUSED*/ static boolean elf32_sparc_relax_section (abfd, section, link_info, again) bfd *abfd ATTRIBUTE_UNUSED; @@ -1139,7 +1136,7 @@ elf32_sparc_relocate_section (output_bfd, info, input_bfd, input_section, r_type = ELF32_R_TYPE (rel->r_info); - if (r_type == R_SPARC_GNU_VTINHERIT + if (r_type == R_SPARC_GNU_VTINHERIT || r_type == R_SPARC_GNU_VTENTRY) continue; @@ -1621,7 +1618,7 @@ elf32_sparc_relocate_section (output_bfd, info, input_bfd, input_section, || ((reloc | 0x7fffff) == ~(bfd_vma)0))) { reloc >>= 2; - + /* Check whether it fits into simm19 on v9. */ if (((reloc & 0x3c0000) == 0 || (reloc & 0x3c0000) == 0x3c0000) @@ -1671,7 +1668,6 @@ elf32_sparc_relocate_section (output_bfd, info, input_bfd, input_section, contents, rel->r_offset, relocation, rel->r_addend); - if (r != bfd_reloc_ok) { switch (r) diff --git a/bfd/elf32-v850.c b/bfd/elf32-v850.c index 4fe28fc..687f180 100644 --- a/bfd/elf32-v850.c +++ b/bfd/elf32-v850.c @@ -17,12 +17,9 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - - /* XXX FIXME: This code is littered with 32bit int, 16bit short, 8bit char dependencies. As is the gas & simulator code or the v850. */ - #include "bfd.h" #include "sysdep.h" #include "bfdlink.h" @@ -32,7 +29,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* sign-extend a 24-bit number */ #define SEXT24(x) ((((x) & 0xffffff) ^ (~ 0x7fffff)) + 0x800000) - + static reloc_howto_type *v850_elf_reloc_type_lookup PARAMS ((bfd *abfd, bfd_reloc_code_real_type code)); static void v850_elf_info_to_howto_rel @@ -103,7 +100,7 @@ static reloc_howto_type v850_elf_howto_table[] = 0, /* dst_mask */ false), /* pcrel_offset */ - /* A PC relative 9 bit branch. */ + /* A PC relative 9 bit branch. */ HOWTO (R_V850_9_PCREL, /* type */ 2, /* rightshift */ 2, /* size (0 = byte, 1 = short, 2 = long) */ @@ -118,7 +115,7 @@ static reloc_howto_type v850_elf_howto_table[] = 0x00ffffff, /* dst_mask */ true), /* pcrel_offset */ - /* A PC relative 22 bit branch. */ + /* A PC relative 22 bit branch. */ HOWTO (R_V850_22_PCREL, /* type */ 2, /* rightshift */ 2, /* size (0 = byte, 1 = short, 2 = long) */ @@ -312,7 +309,7 @@ static reloc_howto_type v850_elf_howto_table[] = 0x7f, /* src_mask */ 0x7f, /* dst_mask */ false), /* pcrel_offset */ - + /* 7 bit offset from the tiny data area pointer. */ HOWTO (R_V850_TDA_7_7_OFFSET, /* type */ 0, /* rightshift */ @@ -462,7 +459,7 @@ static reloc_howto_type v850_elf_howto_table[] = 0, /* src_mask */ 0, /* dst_mask */ false), /* pcrel_offset */ - + }; /* Map BFD reloc types to V850 ELF reloc types. */ @@ -521,7 +518,7 @@ v850_elf_reloc_type_lookup (abfd, code) if (v850_elf_reloc_map[i].bfd_reloc_val == code) { BFD_ASSERT (v850_elf_howto_table[v850_elf_reloc_map[i].elf_reloc_val].type == v850_elf_reloc_map[i].elf_reloc_val); - + return & v850_elf_howto_table[v850_elf_reloc_map[i].elf_reloc_val]; } } @@ -544,7 +541,7 @@ v850_elf_info_to_howto_rel (abfd, cache_ptr, dst) cache_ptr->howto = &v850_elf_howto_table[r_type]; } -/* Set the howto pointer for a V850 ELF reloc (type RELA). */ +/* Set the howto pointer for a V850 ELF reloc (type RELA). */ static void v850_elf_info_to_howto_rela (abfd, cache_ptr, dst) bfd * abfd ATTRIBUTE_UNUSED; @@ -644,14 +641,14 @@ v850_elf_check_relocs (abfd, info, sec, relocs) other = V850_OTHER_SDA; common = ".scommon"; goto small_data_common; - + case R_V850_ZDA_16_16_SPLIT_OFFSET: case R_V850_ZDA_16_16_OFFSET: case R_V850_ZDA_15_16_OFFSET: other = V850_OTHER_ZDA; common = ".zcommon"; goto small_data_common; - + case R_V850_TDA_4_5_OFFSET: case R_V850_TDA_4_4_OFFSET: case R_V850_TDA_6_8_OFFSET: @@ -760,21 +757,21 @@ remember_hi16s_reloc (abfd, addend, address) bfd_byte * address; { hi16s_location * entry = NULL; - + /* Find a free structure. */ if (free_hi16s == NULL) free_hi16s = (hi16s_location *) bfd_zalloc (abfd, sizeof (* free_hi16s)); entry = free_hi16s; free_hi16s = free_hi16s->next; - + entry->addend = addend; entry->address = address; entry->counter = hi16s_counter ++; entry->found = false; entry->next = previous_hi16s; previous_hi16s = entry; - + /* Cope with wrap around of our counter. */ if (hi16s_counter == 0) { @@ -784,7 +781,7 @@ remember_hi16s_reloc (abfd, addend, address) hi16s_counter = 0x10000; } - + return; } @@ -798,7 +795,7 @@ find_remembered_hi16s_reloc (addend, already_found) hi16s_location * previous = NULL; hi16s_location * prev; bfd_byte * addr; - + /* Search the table. Record the most recent entry that matches. */ for (entry = previous_hi16s; entry; entry = entry->next) { @@ -808,7 +805,7 @@ find_remembered_hi16s_reloc (addend, already_found) previous = prev; match = entry; } - + prev = entry; } @@ -824,9 +821,9 @@ find_remembered_hi16s_reloc (addend, already_found) /* Note that this entry has now been used. */ match->found = true; - + return addr; -} +} /* FIXME: The code here probably ought to be removed and the code in reloc.c allowed to do its stuff instead. At least for most of the relocs, anwyay. */ @@ -839,62 +836,62 @@ v850_elf_perform_relocation (abfd, r_type, addend, address) { unsigned long insn; bfd_signed_vma saddend = (bfd_signed_vma) addend; - + switch (r_type) { default: /* fprintf (stderr, "reloc type %d not SUPPORTED\n", r_type ); */ return bfd_reloc_notsupported; - + case R_V850_32: bfd_put_32 (abfd, addend, address); return bfd_reloc_ok; - + case R_V850_22_PCREL: if (saddend > 0x1fffff || saddend < -0x200000) return bfd_reloc_overflow; - + if ((addend % 2) != 0) return bfd_reloc_dangerous; - + insn = bfd_get_32 (abfd, address); insn &= ~0xfffe003f; insn |= (((addend & 0xfffe) << 16) | ((addend & 0x3f0000) >> 16)); bfd_put_32 (abfd, insn, address); return bfd_reloc_ok; - + case R_V850_9_PCREL: if (saddend > 0xff || saddend < -0x100) return bfd_reloc_overflow; - + if ((addend % 2) != 0) return bfd_reloc_dangerous; - + insn = bfd_get_16 (abfd, address); insn &= ~ 0xf870; insn |= ((addend & 0x1f0) << 7) | ((addend & 0x0e) << 3); break; - + case R_V850_HI16: addend += (bfd_get_16 (abfd, address) << 16); addend = (addend >> 16); insn = addend; break; - + case R_V850_HI16_S: /* Remember where this relocation took place. */ remember_hi16s_reloc (abfd, addend, address); addend += (bfd_get_16 (abfd, address) << 16); addend = (addend >> 16) + ((addend & 0x8000) != 0); - - /* This relocation cannot overflow. */ + + /* This relocation cannot overflow. */ if (addend > 0x7fff) addend = 0; - + insn = addend; break; - + case R_V850_LO16: /* Calculate the sum of the value stored in the instruction and the addend and check for overflow from the low 16 bits into the high @@ -972,7 +969,6 @@ v850_elf_perform_relocation (abfd, r_type, addend, address) ------------ 0x00116fff = fred + 0x10ffff = 0x7000 + 0x10ffff - Overflow can also occur if the computation carries into the 16th bit and it also results in the 15th bit having the same value as the 15th bit of the original value. What happens is that the HI16S reloc @@ -1007,7 +1003,7 @@ v850_elf_perform_relocation (abfd, r_type, addend, address) + 0x00006fff ------------ 0x00006fff but 'fred + 0x7000' = 0x00016fff - + Note - there is no need to change anything if a carry occurs, and the 15th bit changes its value from being set to being clear, as the HI16S reloc will have already added in 1 to the high part for us: @@ -1046,7 +1042,7 @@ v850_elf_perform_relocation (abfd, r_type, addend, address) #define BIT15_SET(x) ((x) & 0x8000) #define OVERFLOWS(a,i) ((((a) & 0xffff) + (i)) > 0xffff) - + if ((BIT15_SET (result) && ! BIT15_SET (addend)) || (OVERFLOWS (addend, insn) && ((! BIT15_SET (insn)) || (BIT15_SET (addend))))) @@ -1054,7 +1050,7 @@ v850_elf_perform_relocation (abfd, r_type, addend, address) boolean already_updated; bfd_byte * hi16s_address = find_remembered_hi16s_reloc (addend, & already_updated); - + /* Amend the matching HI16_S relocation. */ if (hi16s_address != NULL) { @@ -1071,7 +1067,7 @@ v850_elf_perform_relocation (abfd, r_type, addend, address) return bfd_reloc_overflow; } } - + /* Do not complain if value has top bit set, as this has been anticipated. */ insn = result & 0xffff; break; @@ -1081,7 +1077,7 @@ v850_elf_perform_relocation (abfd, r_type, addend, address) addend += (char) bfd_get_8 (abfd, address); saddend = (bfd_signed_vma) addend; - + if (saddend > 0x7f || saddend < -0x80) return bfd_reloc_overflow; @@ -1090,150 +1086,150 @@ v850_elf_perform_relocation (abfd, r_type, addend, address) case R_V850_CALLT_16_16_OFFSET: addend += bfd_get_16 (abfd, address); - + saddend = (bfd_signed_vma) addend; - + if (saddend > 0xffff || saddend < 0) return bfd_reloc_overflow; insn = addend; break; - + case R_V850_16: - /* drop through */ + /* drop through */ case R_V850_SDA_16_16_OFFSET: case R_V850_ZDA_16_16_OFFSET: case R_V850_TDA_16_16_OFFSET: addend += bfd_get_16 (abfd, address); - + saddend = (bfd_signed_vma) addend; - + if (saddend > 0x7fff || saddend < -0x8000) return bfd_reloc_overflow; insn = addend; break; - + case R_V850_SDA_15_16_OFFSET: case R_V850_ZDA_15_16_OFFSET: insn = bfd_get_16 (abfd, address); addend += (insn & 0xfffe); - + saddend = (bfd_signed_vma) addend; - + if (saddend > 0x7ffe || saddend < -0x8000) return bfd_reloc_overflow; - + if (addend & 1) return bfd_reloc_dangerous; - + insn = (addend & ~1) | (insn & 1); break; - + case R_V850_TDA_6_8_OFFSET: insn = bfd_get_16 (abfd, address); addend += ((insn & 0x7e) << 1); - + saddend = (bfd_signed_vma) addend; - + if (saddend > 0xfc || saddend < 0) return bfd_reloc_overflow; - + if (addend & 3) return bfd_reloc_dangerous; - + insn &= 0xff81; insn |= (addend >> 1); break; - + case R_V850_TDA_7_8_OFFSET: insn = bfd_get_16 (abfd, address); addend += ((insn & 0x7f) << 1); - + saddend = (bfd_signed_vma) addend; - + if (saddend > 0xfe || saddend < 0) return bfd_reloc_overflow; - + if (addend & 1) return bfd_reloc_dangerous; - + insn &= 0xff80; insn |= (addend >> 1); break; - + case R_V850_TDA_7_7_OFFSET: insn = bfd_get_16 (abfd, address); addend += insn & 0x7f; - + saddend = (bfd_signed_vma) addend; - + if (saddend > 0x7f || saddend < 0) return bfd_reloc_overflow; - + insn &= 0xff80; insn |= addend; break; - + case R_V850_TDA_4_5_OFFSET: insn = bfd_get_16 (abfd, address); addend += ((insn & 0xf) << 1); - + saddend = (bfd_signed_vma) addend; - + if (saddend > 0x1e || saddend < 0) return bfd_reloc_overflow; - + if (addend & 1) return bfd_reloc_dangerous; - + insn &= 0xfff0; insn |= (addend >> 1); break; - + case R_V850_TDA_4_4_OFFSET: insn = bfd_get_16 (abfd, address); addend += insn & 0xf; - + saddend = (bfd_signed_vma) addend; - + if (saddend > 0xf || saddend < 0) return bfd_reloc_overflow; - + insn &= 0xfff0; insn |= addend; break; - + case R_V850_ZDA_16_16_SPLIT_OFFSET: case R_V850_SDA_16_16_SPLIT_OFFSET: insn = bfd_get_32 (abfd, address); addend += ((insn & 0xfffe0000) >> 16) + ((insn & 0x20) >> 5); - + saddend = (bfd_signed_vma) addend; - + if (saddend > 0x7fff || saddend < -0x8000) return bfd_reloc_overflow; - + insn &= 0x0001ffdf; insn |= (addend & 1) << 5; insn |= (addend & ~1) << 16; - + bfd_put_32 (abfd, insn, address); return bfd_reloc_ok; - + case R_V850_CALLT_6_7_OFFSET: insn = bfd_get_16 (abfd, address); addend += ((insn & 0x3f) << 1); - + saddend = (bfd_signed_vma) addend; - + if (saddend > 0x7e || saddend < 0) return bfd_reloc_overflow; - + if (addend & 1) return bfd_reloc_dangerous; - + insn &= 0xff80; insn |= (addend >> 1); break; @@ -1261,7 +1257,7 @@ v850_elf_reloc (abfd, reloc, symbol, data, isection, obfd, err) char ** err ATTRIBUTE_UNUSED; { long relocation; - + /* If there is an output BFD, and the symbol is not a section name (which is only defined at final link time), and either we are not putting the addend into the instruction @@ -1275,13 +1271,13 @@ v850_elf_reloc (abfd, reloc, symbol, data, isection, obfd, err) reloc->address += isection->output_offset; return bfd_reloc_ok; } -#if 0 +#if 0 else if (obfd != NULL) { return bfd_reloc_continue; } #endif - + /* Catch relocs involving undefined symbols. */ if (bfd_is_und_section (symbol->section) && (symbol->flags & BSF_WEAK) == 0 @@ -1293,37 +1289,36 @@ v850_elf_reloc (abfd, reloc, symbol, data, isection, obfd, err) /* Is the address of the relocation really within the section? */ if (reloc->address > isection->_cooked_size) return bfd_reloc_outofrange; - + /* Work out which section the relocation is targetted at and the initial relocation command value. */ - + /* Get symbol value. (Common symbols are special.) */ if (bfd_is_com_section (symbol->section)) relocation = 0; else relocation = symbol->value; - + /* Convert input-section-relative symbol value to absolute + addend. */ relocation += symbol->section->output_section->vma; relocation += symbol->section->output_offset; relocation += reloc->addend; - + if (reloc->howto->pc_relative == true) { /* Here the variable relocation holds the final address of the symbol we are relocating against, plus any addend. */ relocation -= isection->output_section->vma + isection->output_offset; - + /* Deal with pcrel_offset */ relocation -= reloc->address; } - reloc->addend = relocation; + reloc->addend = relocation; return bfd_reloc_ok; } -/*ARGSUSED*/ static boolean v850_elf_is_local_label_name (abfd, name) bfd * abfd ATTRIBUTE_UNUSED; @@ -1362,7 +1357,7 @@ v850_elf_final_link_relocate (howto, input_bfd, output_bfd, + input_section->output_offset); value -= offset; break; - + case R_V850_22_PCREL: value -= (input_section->output_section->vma + input_section->output_offset @@ -1371,10 +1366,10 @@ v850_elf_final_link_relocate (howto, input_bfd, output_bfd, /* If the sign extension will corrupt the value then we have overflowed. */ if (((value & 0xff000000) != 0x0) && ((value & 0xff000000) != 0xff000000)) return bfd_reloc_overflow; - + value = SEXT24 (value); /* Only the bottom 24 bits of the PC are valid */ break; - + case R_V850_HI16_S: case R_V850_HI16: case R_V850_LO16: @@ -1383,12 +1378,12 @@ v850_elf_final_link_relocate (howto, input_bfd, output_bfd, case R_V850_8: break; - case R_V850_ZDA_15_16_OFFSET: + case R_V850_ZDA_15_16_OFFSET: case R_V850_ZDA_16_16_OFFSET: case R_V850_ZDA_16_16_SPLIT_OFFSET: if (sym_sec == NULL) return bfd_reloc_undefined; - + value -= sym_sec->output_section->vma; break; @@ -1401,7 +1396,7 @@ v850_elf_final_link_relocate (howto, input_bfd, output_bfd, if (sym_sec == NULL) return bfd_reloc_undefined; - + /* Get the value of __gp. */ h = bfd_link_hash_lookup (info->hash, "__gp", false, false, true); if (h == (struct bfd_link_hash_entry *) NULL @@ -1426,12 +1421,12 @@ v850_elf_final_link_relocate (howto, input_bfd, output_bfd, { unsigned long ep; struct bfd_link_hash_entry * h; - + /* Get the value of __ep. */ h = bfd_link_hash_lookup (info->hash, "__ep", false, false, true); if (h == (struct bfd_link_hash_entry *) NULL || h->type != bfd_link_hash_defined) - return bfd_reloc_continue; /* Actually this indicates that __ep could not be found. */ + return bfd_reloc_continue; /* Actually this indicates that __ep could not be found. */ ep = (h->u.def.value + h->u.def.section->output_section->vma @@ -1440,17 +1435,17 @@ v850_elf_final_link_relocate (howto, input_bfd, output_bfd, value -= ep; } break; - + case R_V850_CALLT_6_7_OFFSET: { unsigned long ctbp; struct bfd_link_hash_entry * h; - + /* Get the value of __ctbp. */ h = bfd_link_hash_lookup (info->hash, "__ctbp", false, false, true); if (h == (struct bfd_link_hash_entry *) NULL || h->type != bfd_link_hash_defined) - return (bfd_reloc_dangerous + 1); /* Actually this indicates that __ctbp could not be found. */ + return (bfd_reloc_dangerous + 1); /* Actually this indicates that __ctbp could not be found. */ ctbp = (h->u.def.value + h->u.def.section->output_section->vma @@ -1458,7 +1453,7 @@ v850_elf_final_link_relocate (howto, input_bfd, output_bfd, value -= ctbp; } break; - + case R_V850_CALLT_16_16_OFFSET: { unsigned long ctbp; @@ -1466,7 +1461,7 @@ v850_elf_final_link_relocate (howto, input_bfd, output_bfd, if (sym_sec == NULL) return bfd_reloc_undefined; - + /* Get the value of __ctbp. */ h = bfd_link_hash_lookup (info->hash, "__ctbp", false, false, true); if (h == (struct bfd_link_hash_entry *) NULL @@ -1481,7 +1476,7 @@ v850_elf_final_link_relocate (howto, input_bfd, output_bfd, value -= (ctbp - sym_sec->output_section->vma); } break; - + case R_V850_NONE: case R_V850_GNU_VTINHERIT: case R_V850_GNU_VTENTRY: @@ -1492,7 +1487,7 @@ v850_elf_final_link_relocate (howto, input_bfd, output_bfd, } /* Perform the relocation. */ - return v850_elf_perform_relocation (input_bfd, r_type, value + addend, hit_data); + return v850_elf_perform_relocation (input_bfd, r_type, value + addend, hit_data); } @@ -1524,12 +1519,12 @@ v850_elf_relocate_section (output_bfd, info, input_bfd, input_section, return false; } - + /* Reset the list of remembered HI16S relocs to empty. */ free_hi16s = previous_hi16s; previous_hi16s = NULL; hi16s_counter = 0; - + rel = relocs; relend = relocs + input_section->reloc_count; for (; rel < relend; rel++) @@ -1596,11 +1591,11 @@ fprintf (stderr, "local: sec: %s, sym: %s (%d), value: %x + %x + %x addend %x\n" else { h = sym_hashes[r_symndx - symtab_hdr->sh_info]; - + while (h->root.type == bfd_link_hash_indirect || h->root.type == bfd_link_hash_warning) h = (struct elf_link_hash_entry *) h->root.u.i.link; - + if (h->root.type == bfd_link_hash_defined || h->root.type == bfd_link_hash_defweak) { @@ -1696,7 +1691,7 @@ fprintf (stderr, "unknown: name: %s\n", h->root.root.string); case (bfd_reloc_dangerous + 1): msg = _("could not locate special linker symbol __ctbp"); goto common_error; - + default: msg = _("internal error: unknown error"); /* fall through */ @@ -1803,7 +1798,7 @@ v850_elf_final_write_processing (abfd, linker) elf_elfheader (abfd)->e_flags |= val; } -/* Function to keep V850 specific file flags. */ +/* Function to keep V850 specific file flags. */ static boolean v850_elf_set_private_flags (abfd, flags) bfd * abfd; @@ -1864,7 +1859,7 @@ v850_elf_merge_private_bfd_data (ibfd, obfd) to the default values. */ if (bfd_get_arch_info (ibfd)->the_default) return true; - + elf_flags_init (obfd) = true; elf_elfheader (obfd)->e_flags = in_flags; @@ -1896,14 +1891,14 @@ v850_elf_print_private_bfd_data (abfd, ptr) PTR ptr; { FILE * file = (FILE *) ptr; - + BFD_ASSERT (abfd != NULL && ptr != NULL); - + _bfd_elf_print_private_bfd_data (abfd, ptr); - + /* xgettext:c-format */ fprintf (file, _("private flags = %lx: "), elf_elfheader (abfd)->e_flags); - + switch (elf_elfheader (abfd)->e_flags & EF_V850_ARCH) { default: @@ -1911,9 +1906,9 @@ v850_elf_print_private_bfd_data (abfd, ptr) case E_V850E_ARCH: fprintf (file, _("v850e architecture")); break; case E_V850EA_ARCH: fprintf (file, _("v850ea architecture")); break; } - + fputc ('\n', file); - + return true; } @@ -1934,7 +1929,6 @@ static asection v850_elf_zcom_section; static asymbol v850_elf_zcom_symbol; static asymbol * v850_elf_zcom_symbol_ptr; - /* Given a BFD section, try to locate the corresponding ELF section index. */ @@ -1953,7 +1947,7 @@ v850_elf_section_from_bfd_section (abfd, hdr, sec, retval) *retval = SHN_V850_ZCOMMON; else return false; - + return true; } @@ -1966,34 +1960,34 @@ v850_elf_symbol_processing (abfd, asym) { elf_symbol_type * elfsym = (elf_symbol_type *) asym; unsigned short index; - + index = elfsym->internal_elf_sym.st_shndx; /* If the section index is an "ordinary" index, then it may refer to a v850 specific section created by the assembler. Check the section's type and change the index it matches. - + FIXME: Should we alter the st_shndx field as well ? */ - + if (index < elf_elfheader(abfd)[0].e_shnum) switch (elf_elfsections(abfd)[index]->sh_type) { case SHT_V850_SCOMMON: index = SHN_V850_SCOMMON; break; - + case SHT_V850_TCOMMON: index = SHN_V850_TCOMMON; break; - + case SHT_V850_ZCOMMON: index = SHN_V850_ZCOMMON; break; - + default: break; } - + switch (index) { case SHN_V850_SCOMMON: @@ -2013,7 +2007,7 @@ v850_elf_symbol_processing (abfd, asym) asym->section = & v850_elf_scom_section; asym->value = elfsym->internal_elf_sym.st_size; break; - + case SHN_V850_TCOMMON: if (v850_elf_tcom_section.name == NULL) { @@ -2055,7 +2049,6 @@ v850_elf_symbol_processing (abfd, asym) /* Hook called by the linker routine which adds symbols from an object file. We must handle the special v850 section numbers here. */ -/*ARGSUSED*/ static boolean v850_elf_add_symbol_hook (abfd, info, sym, namep, flagsp, secp, valp) bfd * abfd; @@ -2067,32 +2060,32 @@ v850_elf_add_symbol_hook (abfd, info, sym, namep, flagsp, secp, valp) bfd_vma * valp; { int index = sym->st_shndx; - + /* If the section index is an "ordinary" index, then it may refer to a v850 specific section created by the assembler. Check the section's type and change the index it matches. - + FIXME: Should we alter the st_shndx field as well ? */ - + if (index < elf_elfheader(abfd)[0].e_shnum) switch (elf_elfsections(abfd)[index]->sh_type) { case SHT_V850_SCOMMON: index = SHN_V850_SCOMMON; break; - + case SHT_V850_TCOMMON: index = SHN_V850_TCOMMON; break; - + case SHT_V850_ZCOMMON: index = SHN_V850_ZCOMMON; break; - + default: break; } - + switch (index) { case SHN_V850_SCOMMON: @@ -2100,13 +2093,13 @@ v850_elf_add_symbol_hook (abfd, info, sym, namep, flagsp, secp, valp) (*secp)->flags |= SEC_IS_COMMON; *valp = sym->st_size; break; - + case SHN_V850_TCOMMON: *secp = bfd_make_section_old_way (abfd, ".tcommon"); (*secp)->flags |= SEC_IS_COMMON; *valp = sym->st_size; break; - + case SHN_V850_ZCOMMON: *secp = bfd_make_section_old_way (abfd, ".zcommon"); (*secp)->flags |= SEC_IS_COMMON; @@ -2129,7 +2122,7 @@ v850_elf_link_output_symbol_hook (abfd, info, name, sym, input_sec) /* If we see a common symbol, which implies a relocatable link, then if a symbol was in a special common section in an input file, mark it as a special common in the output file. */ - + if (sym->st_shndx == SHN_COMMON) { if (strcmp (input_sec->name, ".scommon") == 0) @@ -2193,18 +2186,17 @@ v850_elf_fake_sections (abfd, hdr, sec) } else if (strcmp (name, ".zcommon") == 0) hdr->sh_type = SHT_V850_ZCOMMON; - + return true; } - #define TARGET_LITTLE_SYM bfd_elf32_v850_vec #define TARGET_LITTLE_NAME "elf32-v850" #define ELF_ARCH bfd_arch_v850 #define ELF_MACHINE_CODE EM_CYGNUS_V850 #define ELF_MAXPAGESIZE 0x1000 - + #define elf_info_to_howto v850_elf_info_to_howto_rela #define elf_info_to_howto_rel v850_elf_info_to_howto_rel @@ -2223,7 +2215,6 @@ v850_elf_fake_sections (abfd, hdr, sec) #define elf_backend_can_gc_sections 1 - #define bfd_elf32_bfd_is_local_label_name v850_elf_is_local_label_name #define bfd_elf32_bfd_reloc_type_lookup v850_elf_reloc_type_lookup #define bfd_elf32_bfd_copy_private_bfd_data v850_elf_copy_private_bfd_data diff --git a/bfd/elf64-sparc.c b/bfd/elf64-sparc.c index e63bc3b..087fe96 100644 --- a/bfd/elf64-sparc.c +++ b/bfd/elf64-sparc.c @@ -240,7 +240,7 @@ sparc64_elf_info_to_howto (abfd, cache_ptr, dst) /* Due to the way how we handle R_SPARC_OLO10, each entry in a SHT_RELA section can represent up to two relocs, we must tell the user to allocate more space. */ - + static long sparc64_elf_get_reloc_upper_bound (abfd, sec) bfd *abfd ATTRIBUTE_UNUSED; @@ -256,7 +256,7 @@ sparc64_elf_get_dynamic_reloc_upper_bound (abfd) return _bfd_elf_get_dynamic_reloc_upper_bound (abfd) * 2; } -/* Read relocations for ASECT from REL_HDR. There are RELOC_COUNT of +/* Read relocations for ASECT from REL_HDR. There are RELOC_COUNT of them. We cannot use generic elf routines for this, because R_SPARC_OLO10 has secondary addend in ELF64_R_TYPE_DATA. We handle it as two relocations for the same location, R_SPARC_LO10 and R_SPARC_13. */ @@ -292,7 +292,7 @@ sparc64_elf_slurp_one_reloc_table (abfd, asect, rel_hdr, symbols, dynamic) entsize = rel_hdr->sh_entsize; BFD_ASSERT (entsize == sizeof (Elf64_External_Rela)); - + count = rel_hdr->sh_size / entsize; for (i = 0, relent = relents; i < count; @@ -398,20 +398,20 @@ sparc64_elf_slurp_reloc_table (abfd, asect, symbols, dynamic) rel_hdr2 = NULL; } - asect->relocation = ((arelent *) - bfd_alloc (abfd, + asect->relocation = ((arelent *) + bfd_alloc (abfd, asect->reloc_count * 2 * sizeof (arelent))); if (asect->relocation == NULL) return false; /* The sparc64_elf_slurp_one_reloc_table routine increments reloc_count. */ asect->reloc_count = 0; - + if (!sparc64_elf_slurp_one_reloc_table (abfd, asect, rel_hdr, symbols, dynamic)) return false; - - if (rel_hdr2 + + if (rel_hdr2 && !sparc64_elf_slurp_one_reloc_table (abfd, asect, rel_hdr2, symbols, dynamic)) return false; @@ -534,7 +534,7 @@ sparc64_elf_write_relocs (abfd, sec, data) if (rela_hdr->sh_type != SHT_RELA) abort (); - /* orelocation has the data, reloc_count has the count... */ + /* orelocation has the data, reloc_count has the count... */ outbound_relocas = (Elf64_External_Rela *) rela_hdr->contents; src_rela = outbound_relocas; @@ -628,7 +628,7 @@ struct sparc64_elf_link_hash_table #define sparc64_elf_hash_table(p) \ ((struct sparc64_elf_link_hash_table *) ((p)->hash)) - + /* Create a Sparc64 ELF linker hash table. */ static struct bfd_link_hash_table * @@ -848,7 +848,6 @@ sparc_elf_lox10_reloc (abfd, #define ELF_DYNAMIC_INTERPRETER "/usr/lib/sparcv9/ld.so.1" - /* Fill in the .plt section. */ static void @@ -859,7 +858,7 @@ sparc64_elf_build_plt (output_bfd, contents, nentries) { const unsigned int nop = 0x01000000; int i, j; - + /* The first four entries are reserved, and are initially undefined. We fill them with `illtrap 0' to force ld.so to do something. */ @@ -893,7 +892,7 @@ sparc64_elf_build_plt (output_bfd, contents, nentries) /* Now the tricky bit. Entries 32768 and higher are grouped in blocks of 160: 160 entries and 160 pointers. This is to separate code from data, which is much friendlier on the cache. */ - + for (; i < nentries; i += 160) { int block = (i + 160 <= nentries ? 160 : nentries - i); @@ -936,7 +935,7 @@ sparc64_elf_plt_entry_offset (index) block = (index - LARGE_PLT_THRESHOLD) / 160; ofs = (index - LARGE_PLT_THRESHOLD) % 160; - return ((bfd_vma)(LARGE_PLT_THRESHOLD + block*160) * PLT_ENTRY_SIZE + return ((bfd_vma) (LARGE_PLT_THRESHOLD + block*160) * PLT_ENTRY_SIZE + ofs * 6*4); } @@ -963,7 +962,6 @@ sparc64_elf_plt_ptr_offset (index, max) + ofs * 8); } - /* Look through the relocs for a section during the first phase, and allocate space in the global offset table or procedure linkage @@ -1198,7 +1196,7 @@ sparc64_elf_check_relocs (abfd, info, sec, relocs) case R_SPARC_UA16: /* When creating a shared object, we must copy these relocs into the output file. We create a reloc section in - dynobj and make room for the reloc. + dynobj and make room for the reloc. But don't do this for debugging sections -- this shows up with DWARF2 -- first because they are not loaded, and @@ -1247,7 +1245,7 @@ sparc64_elf_check_relocs (abfd, info, sec, relocs) break; default: - (*_bfd_error_handler)(_("%s: check_relocs: unhandled reloc type %d"), + (*_bfd_error_handler) (_("%s: check_relocs: unhandled reloc type %d"), bfd_get_filename(abfd), ELF64_R_TYPE_ID (rel->r_info)); return false; @@ -1276,7 +1274,7 @@ sparc64_elf_add_symbol_hook (abfd, info, sym, namep, flagsp, secp, valp) { int reg; struct sparc64_elf_app_reg *p; - + reg = (int)sym->st_value; switch (reg & ~1) { @@ -1317,7 +1315,7 @@ sparc64_elf_add_symbol_hook (abfd, info, sym, namep, flagsp, secp, valp) if (**namep) { struct elf_link_hash_entry *h; - + h = (struct elf_link_hash_entry *) bfd_link_hash_lookup (info->hash, *namep, false, false, false); @@ -1809,7 +1807,7 @@ sparc64_elf_size_dynamic_sections (output_bfd, info) if (app_regs [reg].name != NULL) { struct elf_link_local_dynamic_entry *entry, *e; - + if (! bfd_elf64_add_dynamic_entry (info, DT_SPARC_REGISTER, 0)) return false; @@ -1854,7 +1852,6 @@ sparc64_elf_size_dynamic_sections (output_bfd, info) #define SET_SEC_DO_RELAX(section) do { elf_section_data(section)->tdata = (void *)1; } while (0) #define SEC_DO_RELAX(section) (elf_section_data(section)->tdata == (void *)1) -/*ARGSUSED*/ static boolean sparc64_elf_relax_section (abfd, section, link_info, again) bfd *abfd ATTRIBUTE_UNUSED; @@ -2371,7 +2368,7 @@ sparc64_elf_relocate_section (output_bfd, info, input_bfd, input_section, 32-bit linker, which both adds the contents and ignores the addend. So clear the location. */ bfd_put_64 (output_bfd, 0, sgot->contents + off); - + /* We need to generate a R_SPARC_RELATIVE reloc for the dynamic linker. */ srelgot = bfd_get_section_by_name(dynobj, ".rela.got"); @@ -2620,12 +2617,12 @@ sparc64_elf_relocate_section (output_bfd, info, input_bfd, input_section, { /* Assume this is a call protected by other code that detect the symbol is undefined. If this is the case, - we can safely ignore the overflow. If not, the + we can safely ignore the overflow. If not, the program is hosed anyway, and a little warning isn't going to help. */ break; } - + name = h->root.root.string; } else @@ -2671,7 +2668,7 @@ sparc64_elf_finish_dynamic_symbol (output_bfd, info, h, sym) asection *srela; Elf_Internal_Rela rela; - /* This symbol has an entry in the PLT. Set it up. */ + /* This symbol has an entry in the PLT. Set it up. */ BFD_ASSERT (h->dynindx != -1); @@ -2896,7 +2893,7 @@ sparc64_elf_finish_dynamic_sections (output_bfd, info) return true; } -/* Functions for dealing with the e_flags field. */ +/* Functions for dealing with the e_flags field. */ /* Merge backend specific data from an object file to the output object file when linking. */ @@ -2922,10 +2919,10 @@ sparc64_elf_merge_private_bfd_data (ibfd, obfd) elf_flags_init (obfd) = true; elf_elfheader (obfd)->e_flags = new_flags; } - + else if (new_flags == old_flags) /* Compatible flags are ok */ ; - + else /* Incompatible flags */ { error = false; @@ -2996,7 +2993,7 @@ sparc64_elf_print_symbol_all (abfd, filep, symbol) { FILE *file = (FILE *) filep; int reg, type; - + if (ELF_ST_TYPE (((elf_symbol_type *) symbol)->internal_elf_sym.st_info) != STT_REGISTER) return NULL; @@ -3048,7 +3045,7 @@ const struct elf_size_info sparc64_elf_size_info = /* internal relocations per external relocations. For link purposes we use just 1 internal per 1 external, for assembly and slurp symbol table - we use 2. */ + we use 2. */ 1, 64, /* arch_size */ 8, /* file_align */ @@ -3081,7 +3078,7 @@ const struct elf_size_info sparc64_elf_size_info = #define bfd_elf64_bfd_link_hash_table_create \ sparc64_elf_bfd_link_hash_table_create - + #define elf_info_to_howto \ sparc64_elf_info_to_howto #define bfd_elf64_get_reloc_upper_bound \ |