X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=bfd%2Felf32-frv.c;h=3cbc1b82c79858a47eb73eb265d176a49be69ae7;hb=61d1ce24e894c08a701efc5794012161ef101a60;hp=e4e7f2408ce04881e1624e59d251579ad547800b;hpb=1d5316ab67e12d6fb58c29728eb72fa937521e94;p=deliverable%2Fbinutils-gdb.git diff --git a/bfd/elf32-frv.c b/bfd/elf32-frv.c index e4e7f2408c..3cbc1b82c7 100644 --- a/bfd/elf32-frv.c +++ b/bfd/elf32-frv.c @@ -1,6 +1,5 @@ /* FRV-specific support for 32-bit ELF. - Copyright 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 - Free Software Foundation, Inc. + Copyright (C) 2002-2014 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -28,56 +27,7 @@ #include "hashtab.h" /* Forward declarations. */ -static bfd_reloc_status_type elf32_frv_relocate_lo16 - PARAMS ((bfd *, Elf_Internal_Rela *, bfd_byte *, bfd_vma)); -static bfd_reloc_status_type elf32_frv_relocate_hi16 - PARAMS ((bfd *, Elf_Internal_Rela *, bfd_byte *, bfd_vma)); -static bfd_reloc_status_type elf32_frv_relocate_label24 - PARAMS ((bfd *, asection *, Elf_Internal_Rela *, bfd_byte *, bfd_vma)); -static bfd_reloc_status_type elf32_frv_relocate_gprel12 - PARAMS ((struct bfd_link_info *, bfd *, asection *, Elf_Internal_Rela *, - bfd_byte *, bfd_vma)); -static bfd_reloc_status_type elf32_frv_relocate_gprelu12 - PARAMS ((struct bfd_link_info *, bfd *, asection *, Elf_Internal_Rela *, - bfd_byte *, bfd_vma)); -static bfd_reloc_status_type elf32_frv_relocate_gprello - PARAMS ((struct bfd_link_info *, bfd *, asection *, Elf_Internal_Rela *, - bfd_byte *, bfd_vma)); -static bfd_reloc_status_type elf32_frv_relocate_gprelhi - PARAMS ((struct bfd_link_info *, bfd *, asection *, Elf_Internal_Rela *, - bfd_byte *, bfd_vma)); -static reloc_howto_type *frv_reloc_type_lookup - PARAMS ((bfd *, bfd_reloc_code_real_type)); -static void frv_info_to_howto_rela - PARAMS ((bfd *, arelent *, Elf_Internal_Rela *)); -static bfd_boolean elf32_frv_relocate_section - PARAMS ((bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *, - Elf_Internal_Rela *, Elf_Internal_Sym *, asection **)); -static bfd_boolean elf32_frv_add_symbol_hook - PARAMS (( bfd *, struct bfd_link_info *, Elf_Internal_Sym *, - const char **, flagword *, asection **, bfd_vma *)); -static bfd_reloc_status_type frv_final_link_relocate - PARAMS ((reloc_howto_type *, bfd *, asection *, bfd_byte *, - Elf_Internal_Rela *, bfd_vma)); -static bfd_boolean elf32_frv_check_relocs - PARAMS ((bfd *, struct bfd_link_info *, asection *, - const Elf_Internal_Rela *)); -static int elf32_frv_machine - PARAMS ((bfd *)); -static bfd_boolean elf32_frv_object_p - PARAMS ((bfd *)); -static bfd_boolean frv_elf_set_private_flags - PARAMS ((bfd *, flagword)); -static bfd_boolean frv_elf_copy_private_bfd_data - PARAMS ((bfd *, bfd *)); -static bfd_boolean frv_elf_merge_private_bfd_data - PARAMS ((bfd *, bfd *)); -static bfd_boolean frv_elf_print_private_bfd_data - PARAMS ((bfd *, PTR)); -static bfd_boolean elf32_frv_grok_prstatus (bfd * abfd, - Elf_Internal_Note * note); -static bfd_boolean elf32_frv_grok_psinfo (bfd * abfd, - Elf_Internal_Note * note); + static reloc_howto_type elf32_frv_howto_table [] = { @@ -1001,7 +951,7 @@ frvfdpic_elf_link_hash_table_create (bfd *abfd) struct frvfdpic_elf_link_hash_table *ret; bfd_size_type amt = sizeof (struct frvfdpic_elf_link_hash_table); - ret = bfd_zalloc (abfd, amt); + ret = bfd_zmalloc (amt); if (ret == NULL) return NULL; @@ -2176,14 +2126,12 @@ _frvfdpic_emit_got_relocs_plt_entries (struct frvfdpic_relocs_info *entry, /* Handle an FRV small data reloc. */ static bfd_reloc_status_type -elf32_frv_relocate_gprel12 (info, input_bfd, input_section, relocation, - contents, value) - struct bfd_link_info *info; - bfd *input_bfd; - asection *input_section; - Elf_Internal_Rela *relocation; - bfd_byte *contents; - bfd_vma value; +elf32_frv_relocate_gprel12 (struct bfd_link_info *info, + bfd *input_bfd, + asection *input_section, + Elf_Internal_Rela *relocation, + bfd_byte *contents, + bfd_vma value) { bfd_vma insn; bfd_vma gp; @@ -2215,14 +2163,12 @@ elf32_frv_relocate_gprel12 (info, input_bfd, input_section, relocation, /* Handle an FRV small data reloc. for the u12 field. */ static bfd_reloc_status_type -elf32_frv_relocate_gprelu12 (info, input_bfd, input_section, relocation, - contents, value) - struct bfd_link_info *info; - bfd *input_bfd; - asection *input_section; - Elf_Internal_Rela *relocation; - bfd_byte *contents; - bfd_vma value; +elf32_frv_relocate_gprelu12 (struct bfd_link_info *info, + bfd *input_bfd, + asection *input_section, + Elf_Internal_Rela *relocation, + bfd_byte *contents, + bfd_vma value) { bfd_vma insn; bfd_vma gp; @@ -2257,11 +2203,10 @@ elf32_frv_relocate_gprelu12 (info, input_bfd, input_section, relocation, /* Handle an FRV ELF HI16 reloc. */ static bfd_reloc_status_type -elf32_frv_relocate_hi16 (input_bfd, relhi, contents, value) - bfd *input_bfd; - Elf_Internal_Rela *relhi; - bfd_byte *contents; - bfd_vma value; +elf32_frv_relocate_hi16 (bfd *input_bfd, + Elf_Internal_Rela *relhi, + bfd_byte *contents, + bfd_vma value) { bfd_vma insn; @@ -2280,11 +2225,10 @@ elf32_frv_relocate_hi16 (input_bfd, relhi, contents, value) } static bfd_reloc_status_type -elf32_frv_relocate_lo16 (input_bfd, rello, contents, value) - bfd *input_bfd; - Elf_Internal_Rela *rello; - bfd_byte *contents; - bfd_vma value; +elf32_frv_relocate_lo16 (bfd *input_bfd, + Elf_Internal_Rela *rello, + bfd_byte *contents, + bfd_vma value) { bfd_vma insn; @@ -2305,12 +2249,11 @@ elf32_frv_relocate_lo16 (input_bfd, rello, contents, value) /* Perform the relocation for the CALL label24 instruction. */ static bfd_reloc_status_type -elf32_frv_relocate_label24 (input_bfd, input_section, rello, contents, value) - bfd *input_bfd; - asection *input_section; - Elf_Internal_Rela *rello; - bfd_byte *contents; - bfd_vma value; +elf32_frv_relocate_label24 (bfd *input_bfd, + asection *input_section, + Elf_Internal_Rela *rello, + bfd_byte *contents, + bfd_vma value) { bfd_vma insn; bfd_vma label6; @@ -2348,14 +2291,12 @@ elf32_frv_relocate_label24 (input_bfd, input_section, rello, contents, value) } static bfd_reloc_status_type -elf32_frv_relocate_gprelhi (info, input_bfd, input_section, relocation, - contents, value) - struct bfd_link_info *info; - bfd *input_bfd; - asection *input_section; - Elf_Internal_Rela *relocation; - bfd_byte *contents; - bfd_vma value; +elf32_frv_relocate_gprelhi (struct bfd_link_info *info, + bfd *input_bfd, + asection *input_section, + Elf_Internal_Rela *relocation, + bfd_byte *contents, + bfd_vma value) { bfd_vma insn; bfd_vma gp; @@ -2383,14 +2324,12 @@ elf32_frv_relocate_gprelhi (info, input_bfd, input_section, relocation, } static bfd_reloc_status_type -elf32_frv_relocate_gprello (info, input_bfd, input_section, relocation, - contents, value) - struct bfd_link_info *info; - bfd *input_bfd; - asection *input_section; - Elf_Internal_Rela *relocation; - bfd_byte *contents; - bfd_vma value; +elf32_frv_relocate_gprello (struct bfd_link_info *info, + bfd *input_bfd, + asection *input_section, + Elf_Internal_Rela *relocation, + bfd_byte *contents, + bfd_vma value) { bfd_vma insn; bfd_vma gp; @@ -2419,9 +2358,8 @@ elf32_frv_relocate_gprello (info, input_bfd, input_section, relocation, } static reloc_howto_type * -frv_reloc_type_lookup (abfd, code) - bfd *abfd ATTRIBUTE_UNUSED; - bfd_reloc_code_real_type code; +frv_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED, + bfd_reloc_code_real_type code) { switch (code) { @@ -2601,10 +2539,9 @@ frv_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, const char *r_name) /* Set the howto pointer for an FRV ELF reloc. */ static void -frv_info_to_howto_rela (abfd, cache_ptr, dst) - bfd *abfd ATTRIBUTE_UNUSED; - arelent *cache_ptr; - Elf_Internal_Rela *dst; +frv_info_to_howto_rela (bfd *abfd ATTRIBUTE_UNUSED, + arelent *cache_ptr, + Elf_Internal_Rela *dst) { unsigned int r_type; @@ -2665,14 +2602,12 @@ frvfdpic_info_to_howto_rel (bfd *abfd ATTRIBUTE_UNUSED, routines, but a few relocs, we have to do them ourselves. */ static bfd_reloc_status_type -frv_final_link_relocate (howto, input_bfd, input_section, contents, rel, - relocation) - reloc_howto_type *howto; - bfd *input_bfd; - asection *input_section; - bfd_byte *contents; - Elf_Internal_Rela *rel; - bfd_vma relocation; +frv_final_link_relocate (reloc_howto_type *howto, + bfd *input_bfd, + asection *input_section, + bfd_byte *contents, + Elf_Internal_Rela *rel, + bfd_vma relocation) { return _bfd_final_link_relocate (howto, input_bfd, input_section, contents, rel->r_offset, relocation, @@ -2711,16 +2646,14 @@ frv_final_link_relocate (howto, input_bfd, input_section, contents, rel, accordingly. */ static bfd_boolean -elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section, - contents, relocs, local_syms, local_sections) - bfd *output_bfd ATTRIBUTE_UNUSED; - struct bfd_link_info *info; - bfd *input_bfd; - asection *input_section; - bfd_byte *contents; - Elf_Internal_Rela *relocs; - Elf_Internal_Sym *local_syms; - asection **local_sections; +elf32_frv_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, + struct bfd_link_info *info, + bfd *input_bfd, + asection *input_section, + bfd_byte *contents, + Elf_Internal_Rela *relocs, + Elf_Internal_Sym *local_syms, + asection **local_sections) { Elf_Internal_Shdr *symtab_hdr; struct elf_link_hash_entry **sym_hashes; @@ -2801,20 +2734,20 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section, } else { - bfd_boolean warned; + bfd_boolean warned, ignored; bfd_boolean unresolved_reloc; RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel, r_symndx, symtab_hdr, sym_hashes, h, sec, relocation, - unresolved_reloc, warned); + unresolved_reloc, warned, ignored); osec = sec; name = h->root.root.string; } - if (sec != NULL && elf_discarded_section (sec)) + if (sec != NULL && discarded_section (sec)) RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, - rel, relend, howto, contents); + rel, 1, relend, howto, 0, contents); if (info->relocatable) continue; @@ -3429,7 +3362,7 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section, with ldi @(grB, #gottlsoff12(symbol+offset), grC. Preserve the packing bit. */ insn = (insn & (unsigned long)0xfe03f000) - | (unsigned long)0x00c80000;; + | (unsigned long)0x00c80000; bfd_put_32 (input_bfd, insn, contents + rel->r_offset); r_type = R_FRV_GOTTLSOFF12; @@ -4159,14 +4092,13 @@ elf32_frv_gc_mark_hook (asection *sec, file. We use it to put .comm items in .scomm, and not .comm. */ static bfd_boolean -elf32_frv_add_symbol_hook (abfd, info, sym, namep, flagsp, secp, valp) - bfd *abfd; - struct bfd_link_info *info; - Elf_Internal_Sym *sym; - const char **namep ATTRIBUTE_UNUSED; - flagword *flagsp ATTRIBUTE_UNUSED; - asection **secp; - bfd_vma *valp; +elf32_frv_add_symbol_hook (bfd *abfd, + struct bfd_link_info *info, + Elf_Internal_Sym *sym, + const char **namep ATTRIBUTE_UNUSED, + flagword *flagsp ATTRIBUTE_UNUSED, + asection **secp, + bfd_vma *valp) { if (sym->st_shndx == SHN_COMMON && !info->relocatable @@ -4234,8 +4166,8 @@ _frv_create_got_section (bfd *abfd, struct bfd_link_info *info) int offset; /* This function may be called more than once. */ - s = bfd_get_section_by_name (abfd, ".got"); - if (s != NULL && (s->flags & SEC_LINKER_CREATED) != 0) + s = bfd_get_linker_section (abfd, ".got"); + if (s != NULL) return TRUE; /* Machine specific: although pointers are 32-bits wide, we want the @@ -4248,14 +4180,14 @@ _frv_create_got_section (bfd *abfd, struct bfd_link_info *info) | SEC_LINKER_CREATED); pltflags = flags; - s = bfd_make_section_with_flags (abfd, ".got", flags); + s = bfd_make_section_anyway_with_flags (abfd, ".got", flags); if (s == NULL || !bfd_set_section_alignment (abfd, s, ptralign)) return FALSE; if (bed->want_got_plt) { - s = bfd_make_section_with_flags (abfd, ".got.plt", flags); + s = bfd_make_section_anyway_with_flags (abfd, ".got.plt", flags); if (s == NULL || !bfd_set_section_alignment (abfd, s, ptralign)) return FALSE; @@ -4293,8 +4225,8 @@ _frv_create_got_section (bfd *abfd, struct bfd_link_info *info) if (! frvfdpic_relocs_info (info)) return FALSE; - s = bfd_make_section_with_flags (abfd, ".rel.got", - (flags | SEC_READONLY)); + s = bfd_make_section_anyway_with_flags (abfd, ".rel.got", + (flags | SEC_READONLY)); if (s == NULL || ! bfd_set_section_alignment (abfd, s, 2)) return FALSE; @@ -4302,8 +4234,8 @@ _frv_create_got_section (bfd *abfd, struct bfd_link_info *info) frvfdpic_gotrel_section (info) = s; /* Machine-specific. */ - s = bfd_make_section_with_flags (abfd, ".rofixup", - (flags | SEC_READONLY)); + s = bfd_make_section_anyway_with_flags (abfd, ".rofixup", + (flags | SEC_READONLY)); if (s == NULL || ! bfd_set_section_alignment (abfd, s, 2)) return FALSE; @@ -4351,7 +4283,7 @@ _frv_create_got_section (bfd *abfd, struct bfd_link_info *info) if (bed->plt_readonly) pltflags |= SEC_READONLY; - s = bfd_make_section_with_flags (abfd, ".plt", pltflags); + s = bfd_make_section_anyway_with_flags (abfd, ".plt", pltflags); if (s == NULL || ! bfd_set_section_alignment (abfd, s, bed->plt_alignment)) return FALSE; @@ -4370,8 +4302,8 @@ _frv_create_got_section (bfd *abfd, struct bfd_link_info *info) } /* FRV-specific: we want rel relocations for the plt. */ - s = bfd_make_section_with_flags (abfd, ".rel.plt", - flags | SEC_READONLY); + s = bfd_make_section_anyway_with_flags (abfd, ".rel.plt", + flags | SEC_READONLY); if (s == NULL || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align)) return FALSE; @@ -4418,8 +4350,8 @@ elf32_frvfdpic_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) image and use a R_*_COPY reloc to tell the dynamic linker to initialize them at run time. The linker script puts the .dynbss section into the .bss section of the final image. */ - s = bfd_make_section_with_flags (abfd, ".dynbss", - SEC_ALLOC | SEC_LINKER_CREATED); + s = bfd_make_section_anyway_with_flags (abfd, ".dynbss", + SEC_ALLOC | SEC_LINKER_CREATED); if (s == NULL) return FALSE; @@ -4436,10 +4368,10 @@ elf32_frvfdpic_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) copy relocs. */ if (! info->shared) { - s = bfd_make_section_with_flags (abfd, - (bed->default_use_rela_p - ? ".rela.bss" : ".rel.bss"), - flags | SEC_READONLY); + s = bfd_make_section_anyway_with_flags (abfd, + (bed->default_use_rela_p + ? ".rela.bss" : ".rel.bss"), + flags | SEC_READONLY); if (s == NULL || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align)) return FALSE; @@ -5504,7 +5436,7 @@ elf32_frvfdpic_size_dynamic_sections (bfd *output_bfd, /* Set the contents of the .interp section to the interpreter. */ if (info->executable) { - s = bfd_get_section_by_name (dynobj, ".interp"); + s = bfd_get_linker_section (dynobj, ".interp"); BFD_ASSERT (s != NULL); s->size = sizeof ELF_DYNAMIC_INTERPRETER; s->contents = (bfd_byte *) ELF_DYNAMIC_INTERPRETER; @@ -5561,36 +5493,10 @@ static bfd_boolean elf32_frvfdpic_always_size_sections (bfd *output_bfd, struct bfd_link_info *info) { - if (!info->relocatable) - { - struct elf_link_hash_entry *h; - - /* Force a PT_GNU_STACK segment to be created. */ - if (! elf_tdata (output_bfd)->stack_flags) - elf_tdata (output_bfd)->stack_flags = PF_R | PF_W | PF_X; - - /* Define __stacksize if it's not defined yet. */ - h = elf_link_hash_lookup (elf_hash_table (info), "__stacksize", - FALSE, FALSE, FALSE); - if (! h || h->root.type != bfd_link_hash_defined - || h->type != STT_OBJECT - || !h->def_regular) - { - struct bfd_link_hash_entry *bh = NULL; - - if (!(_bfd_generic_link_add_one_symbol - (info, output_bfd, "__stacksize", - BSF_GLOBAL, bfd_abs_section_ptr, DEFAULT_STACK_SIZE, - (const char *) NULL, FALSE, - get_elf_backend_data (output_bfd)->collect, &bh))) - return FALSE; - - h = (struct elf_link_hash_entry *) bh; - h->def_regular = 1; - h->type = STT_OBJECT; - /* This one must NOT be hidden. */ - } - } + if (!info->relocatable + && !bfd_elf_stack_segment_size (output_bfd, info, + "__stacksize", DEFAULT_STACK_SIZE)) + return FALSE; return TRUE; } @@ -5600,7 +5506,7 @@ elf32_frvfdpic_always_size_sections (bfd *output_bfd, static bfd_boolean _frvfdpic_check_discarded_relocs (bfd *abfd, asection *sec, struct bfd_link_info *info, - + bfd_boolean *changed) { Elf_Internal_Shdr *symtab_hdr; @@ -5681,7 +5587,7 @@ frvfdpic_elf_discard_info (bfd *ibfd, /* Account for relaxation of .eh_frame section. */ for (s = ibfd->sections; s; s = s->next) - if (s->sec_info_type == ELF_INFO_TYPE_EH_FRAME) + if (s->sec_info_type == SEC_INFO_TYPE_EH_FRAME) { if (!_frvfdpic_check_discarded_relocs (ibfd, s, info, &changed)) return FALSE; @@ -5787,51 +5693,6 @@ elf32_frvfdpic_relax_section (bfd *abfd ATTRIBUTE_UNUSED, asection *sec, return TRUE; } -static bfd_boolean -elf32_frvfdpic_modify_program_headers (bfd *output_bfd, - struct bfd_link_info *info) -{ - struct elf_obj_tdata *tdata = elf_tdata (output_bfd); - struct elf_segment_map *m; - Elf_Internal_Phdr *p; - - /* objcopy and strip preserve what's already there using - elf32_frvfdpic_copy_private_bfd_data (). */ - if (! info) - return TRUE; - - for (p = tdata->phdr, m = tdata->segment_map; m != NULL; m = m->next, p++) - if (m->p_type == PT_GNU_STACK) - break; - - if (m) - { - struct elf_link_hash_entry *h; - - /* Obtain the pointer to the __stacksize symbol. */ - h = elf_link_hash_lookup (elf_hash_table (info), "__stacksize", - FALSE, FALSE, FALSE); - if (h) - { - 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; - BFD_ASSERT (h->root.type == bfd_link_hash_defined); - } - - /* Set the header p_memsz from the symbol value. We - intentionally ignore the symbol section. */ - if (h && h->root.type == bfd_link_hash_defined) - p->p_memsz = h->root.u.def.value; - else - p->p_memsz = DEFAULT_STACK_SIZE; - - p->p_align = 8; - } - - return TRUE; -} - /* Fill in code and data in dynamic sections. */ static bfd_boolean @@ -5913,7 +5774,7 @@ elf32_frvfdpic_finish_dynamic_sections (bfd *output_bfd, Elf32_External_Dyn * dyncon; Elf32_External_Dyn * dynconend; - sdyn = bfd_get_section_by_name (dynobj, ".dynamic"); + sdyn = bfd_get_linker_section (dynobj, ".dynamic"); BFD_ASSERT (sdyn != NULL); @@ -6150,11 +6011,10 @@ frvfdpic_elf_encode_eh_address (bfd *abfd, Given infinite time and money... :-) */ static bfd_boolean -elf32_frv_check_relocs (abfd, info, sec, relocs) - bfd *abfd; - struct bfd_link_info *info; - asection *sec; - const Elf_Internal_Rela *relocs; +elf32_frv_check_relocs (bfd *abfd, + struct bfd_link_info *info, + asection *sec, + const Elf_Internal_Rela *relocs) { Elf_Internal_Shdr *symtab_hdr; struct elf_link_hash_entry **sym_hashes; @@ -6185,6 +6045,10 @@ elf32_frv_check_relocs (abfd, info, sec, relocs) 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; + + /* PR15323, ref flags aren't set for references in the same + object. */ + h->root.non_ir_ref = 1; } switch (ELF32_R_TYPE (rel->r_info)) @@ -6410,8 +6274,7 @@ elf32_frv_check_relocs (abfd, info, sec, relocs) /* Return the machine subcode from the ELF e_flags header. */ static int -elf32_frv_machine (abfd) - bfd *abfd; +elf32_frv_machine (bfd *abfd) { switch (elf_elfheader (abfd)->e_flags & EF_FRV_CPU_MASK) { @@ -6432,8 +6295,7 @@ elf32_frv_machine (abfd) /* Set the right machine number for a FRV ELF file. */ static bfd_boolean -elf32_frv_object_p (abfd) - bfd *abfd; +elf32_frv_object_p (bfd *abfd) { bfd_default_set_arch_mach (abfd, bfd_arch_frv, elf32_frv_machine (abfd)); return (((elf_elfheader (abfd)->e_flags & EF_FRV_FDPIC) != 0) @@ -6443,38 +6305,13 @@ elf32_frv_object_p (abfd) /* Function to set the ELF flag bits. */ static bfd_boolean -frv_elf_set_private_flags (abfd, flags) - bfd *abfd; - flagword flags; +frv_elf_set_private_flags (bfd *abfd, flagword flags) { elf_elfheader (abfd)->e_flags = flags; elf_flags_init (abfd) = TRUE; return TRUE; } -/* Copy backend specific data from one object module to another. */ - -static bfd_boolean -frv_elf_copy_private_bfd_data (ibfd, obfd) - bfd *ibfd; - bfd *obfd; -{ - if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour - || bfd_get_flavour (obfd) != bfd_target_elf_flavour) - return TRUE; - - BFD_ASSERT (!elf_flags_init (obfd) - || elf_elfheader (obfd)->e_flags == elf_elfheader (ibfd)->e_flags); - - elf_elfheader (obfd)->e_flags = elf_elfheader (ibfd)->e_flags; - elf_flags_init (obfd) = TRUE; - - /* Copy object attributes. */ - _bfd_elf_copy_obj_attributes (ibfd, obfd); - - return TRUE; -} - /* Return true if the architecture described by elf header flag EXTENSION is an extension of the architecture described by BASE. */ @@ -6502,57 +6339,11 @@ frv_elf_arch_extension_p (flagword base, flagword extension) return FALSE; } -static bfd_boolean -elf32_frvfdpic_copy_private_bfd_data (bfd *ibfd, bfd *obfd) -{ - unsigned i; - - if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour - || bfd_get_flavour (obfd) != bfd_target_elf_flavour) - return TRUE; - - if (! frv_elf_copy_private_bfd_data (ibfd, obfd)) - return FALSE; - - if (! elf_tdata (ibfd) || ! elf_tdata (ibfd)->phdr - || ! elf_tdata (obfd) || ! elf_tdata (obfd)->phdr) - return TRUE; - - /* Copy the stack size. */ - for (i = 0; i < elf_elfheader (ibfd)->e_phnum; i++) - if (elf_tdata (ibfd)->phdr[i].p_type == PT_GNU_STACK) - { - Elf_Internal_Phdr *iphdr = &elf_tdata (ibfd)->phdr[i]; - - for (i = 0; i < elf_elfheader (obfd)->e_phnum; i++) - if (elf_tdata (obfd)->phdr[i].p_type == PT_GNU_STACK) - { - memcpy (&elf_tdata (obfd)->phdr[i], iphdr, sizeof (*iphdr)); - - /* Rewrite the phdrs, since we're only called after they - were first written. */ - if (bfd_seek (obfd, (bfd_signed_vma) get_elf_backend_data (obfd) - ->s->sizeof_ehdr, SEEK_SET) != 0 - || get_elf_backend_data (obfd)->s - ->write_out_phdrs (obfd, elf_tdata (obfd)->phdr, - elf_elfheader (obfd)->e_phnum) != 0) - return FALSE; - break; - } - - break; - } - - return TRUE; -} - /* Merge backend specific data from an object file to the output object file when linking. */ static bfd_boolean -frv_elf_merge_private_bfd_data (ibfd, obfd) - bfd *ibfd; - bfd *obfd; +frv_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd) { flagword old_flags, old_partial; flagword new_flags, new_partial; @@ -6820,10 +6611,8 @@ frv_elf_merge_private_bfd_data (ibfd, obfd) } -bfd_boolean -frv_elf_print_private_bfd_data (abfd, ptr) - bfd *abfd; - PTR ptr; +static bfd_boolean +frv_elf_print_private_bfd_data (bfd *abfd, void * ptr) { FILE *file = (FILE *) ptr; flagword flags; @@ -6920,12 +6709,12 @@ elf32_frv_grok_prstatus (bfd *abfd, Elf_Internal_Note *note) hardcoded offsets and sizes listed below (and contained within this lexical block) refer to fields in the target's elf_prstatus struct. */ - case 268: + case 268: /* `pr_cursig' is at offset 12. */ - elf_tdata (abfd)->core_signal = bfd_get_16 (abfd, note->descdata + 12); + elf_tdata (abfd)->core->signal = bfd_get_16 (abfd, note->descdata + 12); /* `pr_pid' is at offset 24. */ - elf_tdata (abfd)->core_lwpid = bfd_get_32 (abfd, note->descdata + 24); + elf_tdata (abfd)->core->lwpid = bfd_get_32 (abfd, note->descdata + 24); /* `pr_reg' is at offset 72. */ offset = 72; @@ -6936,7 +6725,7 @@ elf32_frv_grok_prstatus (bfd *abfd, Elf_Internal_Note *note) and `pr_interp_fdpic_loadmap', both of which (by design) immediately follow `pr_reg'. This will allow these fields to be viewed by GDB as registers. - + `pr_reg' is 184 bytes long. `pr_exec_fdpic_loadmap' and `pr_interp_fdpic_loadmap' are 4 bytes each. */ raw_size = 184 + 4 + 4; @@ -6961,11 +6750,11 @@ elf32_frv_grok_psinfo (bfd *abfd, Elf_Internal_Note *note) case 124: /* `pr_fname' is found at offset 28 and is 16 bytes long. */ - elf_tdata (abfd)->core_program + elf_tdata (abfd)->core->program = _bfd_elfcore_strndup (abfd, note->descdata + 28, 16); /* `pr_psargs' is found at offset 44 and is 80 bytes long. */ - elf_tdata (abfd)->core_command + elf_tdata (abfd)->core->command = _bfd_elfcore_strndup (abfd, note->descdata + 44, 80); } @@ -6974,7 +6763,7 @@ elf32_frv_grok_psinfo (bfd *abfd, Elf_Internal_Note *note) implementations, so strip it off if it exists. */ { - char *command = elf_tdata (abfd)->core_command; + char *command = elf_tdata (abfd)->core->command; int n = strlen (command); if (0 < n && command[n - 1] == ' ') @@ -6998,13 +6787,13 @@ elf32_frv_grok_psinfo (bfd *abfd, Elf_Internal_Note *note) #define elf_backend_object_p elf32_frv_object_p #define elf_backend_add_symbol_hook elf32_frv_add_symbol_hook +#define elf_backend_stack_align 8 #define elf_backend_can_gc_sections 1 #define elf_backend_rela_normal 1 #define bfd_elf32_bfd_reloc_type_lookup frv_reloc_type_lookup #define bfd_elf32_bfd_reloc_name_lookup frv_reloc_name_lookup #define bfd_elf32_bfd_set_private_flags frv_elf_set_private_flags -#define bfd_elf32_bfd_copy_private_bfd_data frv_elf_copy_private_bfd_data #define bfd_elf32_bfd_merge_private_bfd_data frv_elf_merge_private_bfd_data #define bfd_elf32_bfd_print_private_bfd_data frv_elf_print_private_bfd_data @@ -7042,12 +6831,6 @@ elf32_frv_grok_psinfo (bfd *abfd, Elf_Internal_Note *note) #undef elf_backend_always_size_sections #define elf_backend_always_size_sections \ elf32_frvfdpic_always_size_sections -#undef elf_backend_modify_program_headers -#define elf_backend_modify_program_headers \ - elf32_frvfdpic_modify_program_headers -#undef bfd_elf32_bfd_copy_private_bfd_data -#define bfd_elf32_bfd_copy_private_bfd_data \ - elf32_frvfdpic_copy_private_bfd_data #undef elf_backend_create_dynamic_sections #define elf_backend_create_dynamic_sections \