From: H.J. Lu Date: Tue, 18 Aug 2015 12:51:03 +0000 (-0700) Subject: Add output_type to bfd_link_info X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=0e1862bb401f;p=binutils-gdb.git Add output_type to bfd_link_info The "shared" field in bfd_link_info is set for both DSO and and PIE. There are separate fields for executable and relocatable outputs. This patch adds an "output_type" field: enum output_type { type_unknown = 0, type_executable, type_dll, type_relocatable }; and a "pic" field to bfd_link_info to replace shared, executable and relocatable fields so that we can use the "output_type" field to check for output type and the "pic" field check if output is PIC. Macros, bfd_link_executable, bfd_link_dll, bfd_link_relocatable, bfd_link_pic and bfd_link_pie, are provided to check for output features. bfd/ * bfd/aoutx.h: Replace shared, executable, relocatable and pie fields with bfd_link_executable, bfd_link_dll, bfd_link_relocatable, bfd_link_pic and bfd_link_pie. * bfd/bout.c: Likewise. * bfd/coff-alpha.c: Likewise. * bfd/coff-arm.c: Likewise. * bfd/coff-i386.c: Likewise. * bfd/coff-i960.c: Likewise. * bfd/coff-m68k.c: Likewise. * bfd/coff-mcore.c: Likewise. * bfd/coff-mips.c: Likewise. * bfd/coff-ppc.c: Likewise. * bfd/coff-rs6000.c: Likewise. * bfd/coff-sh.c: Likewise. * bfd/coff-tic80.c: Likewise. * bfd/coff-x86_64.c: Likewise. * bfd/coff64-rs6000.c: Likewise. * bfd/coffgen.c: Likewise. * bfd/cofflink.c: Likewise. * bfd/ecoff.c: Likewise. * bfd/ecofflink.c: Likewise. * bfd/elf-bfd.h: Likewise. * bfd/elf-eh-frame.c: Likewise. * bfd/elf-ifunc.c: Likewise. * bfd/elf-m10200.c: Likewise. * bfd/elf-m10300.c: Likewise. * bfd/elf-s390-common.c: Likewise. * bfd/elf-vxworks.c: Likewise. * bfd/elf.c: Likewise. * bfd/elf32-arm.c: Likewise. * bfd/elf32-avr.c: Likewise. * bfd/elf32-bfin.c: Likewise. * bfd/elf32-cr16.c: Likewise. * bfd/elf32-cr16c.c: Likewise. * bfd/elf32-cris.c: Likewise. * bfd/elf32-crx.c: Likewise. * bfd/elf32-d10v.c: Likewise. * bfd/elf32-dlx.c: Likewise. * bfd/elf32-epiphany.c: Likewise. * bfd/elf32-fr30.c: Likewise. * bfd/elf32-frv.c: Likewise. * bfd/elf32-ft32.c: Likewise. * bfd/elf32-h8300.c: Likewise. * bfd/elf32-hppa.c: Likewise. * bfd/elf32-i370.c: Likewise. * bfd/elf32-i386.c: Likewise. * bfd/elf32-i860.c: Likewise. * bfd/elf32-ip2k.c: Likewise. * bfd/elf32-iq2000.c: Likewise. * bfd/elf32-lm32.c: Likewise. * bfd/elf32-m32c.c: Likewise. * bfd/elf32-m32r.c: Likewise. * bfd/elf32-m68hc11.c: Likewise. * bfd/elf32-m68hc1x.c: Likewise. * bfd/elf32-m68k.c: Likewise. * bfd/elf32-mcore.c: Likewise. * bfd/elf32-mep.c: Likewise. * bfd/elf32-metag.c: Likewise. * bfd/elf32-microblaze.c: Likewise. * bfd/elf32-moxie.c: Likewise. * bfd/elf32-msp430.c: Likewise. * bfd/elf32-mt.c: Likewise. * bfd/elf32-nds32.c: Likewise. * bfd/elf32-nios2.c: Likewise. * bfd/elf32-or1k.c: Likewise. * bfd/elf32-ppc.c: Likewise. * bfd/elf32-rl78.c: Likewise. * bfd/elf32-rx.c: Likewise. * bfd/elf32-s390.c: Likewise. * bfd/elf32-score.c: Likewise. * bfd/elf32-score7.c: Likewise. * bfd/elf32-sh-symbian.c: Likewise. * bfd/elf32-sh.c: Likewise. * bfd/elf32-sh64.c: Likewise. * bfd/elf32-spu.c: Likewise. * bfd/elf32-tic6x.c: Likewise. * bfd/elf32-tilepro.c: Likewise. * bfd/elf32-v850.c: Likewise. * bfd/elf32-vax.c: Likewise. * bfd/elf32-visium.c: Likewise. * bfd/elf32-xc16x.c: Likewise. * bfd/elf32-xstormy16.c: Likewise. * bfd/elf32-xtensa.c: Likewise. * bfd/elf64-alpha.c: Likewise. * bfd/elf64-hppa.c: Likewise. * bfd/elf64-ia64-vms.c: Likewise. * bfd/elf64-mmix.c: Likewise. * bfd/elf64-ppc.c: Likewise. * bfd/elf64-s390.c: Likewise. * bfd/elf64-sh64.c: Likewise. * bfd/elf64-x86-64.c: Likewise. * bfd/elflink.c: Likewise. * bfd/elfnn-aarch64.c: Likewise. * bfd/elfnn-ia64.c: Likewise. * bfd/elfxx-mips.c: Likewise. * bfd/elfxx-sparc.c: Likewise. * bfd/elfxx-tilegx.c: Likewise. * bfd/i386linux.c: Likewise. * bfd/linker.c: Likewise. * bfd/m68klinux.c: Likewise. * bfd/pdp11.c: Likewise. * bfd/pe-mips.c: Likewise. * bfd/peXXigen.c: Likewise. * bfd/reloc.c: Likewise. * bfd/reloc16.c: Likewise. * bfd/sparclinux.c: Likewise. * bfd/sunos.c: Likewise. * bfd/vms-alpha.c: Likewise. * bfd/xcofflink.c: Likewise. include/ * include/bfdlink.h (output_type): New enum. (bfd_link_executable): New macro. (bfd_link_dll): Likewise. (bfd_link_relocatable): Likewise. (bfd_link_pic): Likewise. (bfd_link_pie): Likewise. (bfd_link_info): Remove shared, executable, pie and relocatable. Add output_type and pic. ld/ * ld/ldctor.c: Replace shared, executable, relocatable and pie fields with bfd_link_executable, bfd_link_dll, bfd_link_relocatable, bfd_link_pic and bfd_link_pie. * ld/ldemul.c: Likewise. * ld/ldfile.c: Likewise. * ld/ldlang.c: Likewise. * ld/ldmain.c: Likewise. * ld/ldwrite.c: Likewise. * ld/lexsup.c: Likewise. * ld/pe-dll.c: Likewise. * ld/plugin.c: Likewise. * ld/emultempl/aarch64elf.em: Likewise. * ld/emultempl/aix.em: Likewise. * ld/emultempl/alphaelf.em: Likewise. * ld/emultempl/armcoff.em: Likewise. * ld/emultempl/armelf.em: Likewise. * ld/emultempl/avrelf.em: Likewise. * ld/emultempl/beos.em: Likewise. * ld/emultempl/cr16elf.em: Likewise. * ld/emultempl/elf-generic.em: Likewise. * ld/emultempl/elf32.em: Likewise. * ld/emultempl/genelf.em: Likewise. * ld/emultempl/generic.em: Likewise. * ld/emultempl/gld960.em: Likewise. * ld/emultempl/gld960c.em: Likewise. * ld/emultempl/hppaelf.em: Likewise. * ld/emultempl/irix.em: Likewise. * ld/emultempl/linux.em: Likewise. * ld/emultempl/lnk960.em: Likewise. * ld/emultempl/m68hc1xelf.em: Likewise. * ld/emultempl/m68kcoff.em: Likewise. * ld/emultempl/m68kelf.em: Likewise. * ld/emultempl/metagelf.em: Likewise. * ld/emultempl/mipself.em: Likewise. * ld/emultempl/mmo.em: Likewise. * ld/emultempl/msp430.em: Likewise. * ld/emultempl/nds32elf.em: Likewise. * ld/emultempl/needrelax.em: Likewise. * ld/emultempl/nios2elf.em: Likewise. * ld/emultempl/pe.em: Likewise. * ld/emultempl/pep.em: Likewise. * ld/emultempl/ppc32elf.em: Likewise. * ld/emultempl/ppc64elf.em: Likewise. * ld/emultempl/sh64elf.em: Likewise. * ld/emultempl/solaris2.em: Likewise. * ld/emultempl/spuelf.em: Likewise. * ld/emultempl/sunos.em: Likewise. * ld/emultempl/tic6xdsbt.em: Likewise. * ld/emultempl/ticoff.em: Likewise. * ld/emultempl/v850elf.em: Likewise. * ld/emultempl/vms.em: Likewise. * ld/emultempl/vxworks.em: Likewise. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index e0d32ac51b8..a182d2feea1 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,115 @@ +2015-08-18 H.J. Lu + + * bfd/aoutx.h: Replace shared, executable, relocatable and pie + fields with bfd_link_executable, bfd_link_dll, + bfd_link_relocatable, bfd_link_pic and bfd_link_pie. + * bfd/bout.c: Likewise. + * bfd/coff-alpha.c: Likewise. + * bfd/coff-arm.c: Likewise. + * bfd/coff-i386.c: Likewise. + * bfd/coff-i960.c: Likewise. + * bfd/coff-m68k.c: Likewise. + * bfd/coff-mcore.c: Likewise. + * bfd/coff-mips.c: Likewise. + * bfd/coff-ppc.c: Likewise. + * bfd/coff-rs6000.c: Likewise. + * bfd/coff-sh.c: Likewise. + * bfd/coff-tic80.c: Likewise. + * bfd/coff-x86_64.c: Likewise. + * bfd/coff64-rs6000.c: Likewise. + * bfd/coffgen.c: Likewise. + * bfd/cofflink.c: Likewise. + * bfd/ecoff.c: Likewise. + * bfd/ecofflink.c: Likewise. + * bfd/elf-bfd.h: Likewise. + * bfd/elf-eh-frame.c: Likewise. + * bfd/elf-ifunc.c: Likewise. + * bfd/elf-m10200.c: Likewise. + * bfd/elf-m10300.c: Likewise. + * bfd/elf-s390-common.c: Likewise. + * bfd/elf-vxworks.c: Likewise. + * bfd/elf.c: Likewise. + * bfd/elf32-arm.c: Likewise. + * bfd/elf32-avr.c: Likewise. + * bfd/elf32-bfin.c: Likewise. + * bfd/elf32-cr16.c: Likewise. + * bfd/elf32-cr16c.c: Likewise. + * bfd/elf32-cris.c: Likewise. + * bfd/elf32-crx.c: Likewise. + * bfd/elf32-d10v.c: Likewise. + * bfd/elf32-dlx.c: Likewise. + * bfd/elf32-epiphany.c: Likewise. + * bfd/elf32-fr30.c: Likewise. + * bfd/elf32-frv.c: Likewise. + * bfd/elf32-ft32.c: Likewise. + * bfd/elf32-h8300.c: Likewise. + * bfd/elf32-hppa.c: Likewise. + * bfd/elf32-i370.c: Likewise. + * bfd/elf32-i386.c: Likewise. + * bfd/elf32-i860.c: Likewise. + * bfd/elf32-ip2k.c: Likewise. + * bfd/elf32-iq2000.c: Likewise. + * bfd/elf32-lm32.c: Likewise. + * bfd/elf32-m32c.c: Likewise. + * bfd/elf32-m32r.c: Likewise. + * bfd/elf32-m68hc11.c: Likewise. + * bfd/elf32-m68hc1x.c: Likewise. + * bfd/elf32-m68k.c: Likewise. + * bfd/elf32-mcore.c: Likewise. + * bfd/elf32-mep.c: Likewise. + * bfd/elf32-metag.c: Likewise. + * bfd/elf32-microblaze.c: Likewise. + * bfd/elf32-moxie.c: Likewise. + * bfd/elf32-msp430.c: Likewise. + * bfd/elf32-mt.c: Likewise. + * bfd/elf32-nds32.c: Likewise. + * bfd/elf32-nios2.c: Likewise. + * bfd/elf32-or1k.c: Likewise. + * bfd/elf32-ppc.c: Likewise. + * bfd/elf32-rl78.c: Likewise. + * bfd/elf32-rx.c: Likewise. + * bfd/elf32-s390.c: Likewise. + * bfd/elf32-score.c: Likewise. + * bfd/elf32-score7.c: Likewise. + * bfd/elf32-sh-symbian.c: Likewise. + * bfd/elf32-sh.c: Likewise. + * bfd/elf32-sh64.c: Likewise. + * bfd/elf32-spu.c: Likewise. + * bfd/elf32-tic6x.c: Likewise. + * bfd/elf32-tilepro.c: Likewise. + * bfd/elf32-v850.c: Likewise. + * bfd/elf32-vax.c: Likewise. + * bfd/elf32-visium.c: Likewise. + * bfd/elf32-xc16x.c: Likewise. + * bfd/elf32-xstormy16.c: Likewise. + * bfd/elf32-xtensa.c: Likewise. + * bfd/elf64-alpha.c: Likewise. + * bfd/elf64-hppa.c: Likewise. + * bfd/elf64-ia64-vms.c: Likewise. + * bfd/elf64-mmix.c: Likewise. + * bfd/elf64-ppc.c: Likewise. + * bfd/elf64-s390.c: Likewise. + * bfd/elf64-sh64.c: Likewise. + * bfd/elf64-x86-64.c: Likewise. + * bfd/elflink.c: Likewise. + * bfd/elfnn-aarch64.c: Likewise. + * bfd/elfnn-ia64.c: Likewise. + * bfd/elfxx-mips.c: Likewise. + * bfd/elfxx-sparc.c: Likewise. + * bfd/elfxx-tilegx.c: Likewise. + * bfd/i386linux.c: Likewise. + * bfd/linker.c: Likewise. + * bfd/m68klinux.c: Likewise. + * bfd/pdp11.c: Likewise. + * bfd/pe-mips.c: Likewise. + * bfd/peXXigen.c: Likewise. + * bfd/reloc.c: Likewise. + * bfd/reloc16.c: Likewise. + * bfd/sparclinux.c: Likewise. + * bfd/sunos.c: Likewise. + * bfd/vms-alpha.c: Likewise. + * bfd/xcofflink.c: Likewise. + 2015-08-18 Alan Modra PR 18667 diff --git a/bfd/aoutx.h b/bfd/aoutx.h index e3bd2dddb6a..f78b9106a62 100644 --- a/bfd/aoutx.h +++ b/bfd/aoutx.h @@ -3946,7 +3946,7 @@ aout_link_input_section_std (struct aout_final_link_info *flaginfo, BFD_ASSERT (input_bfd->xvec->header_byteorder == output_bfd->xvec->header_byteorder); - relocatable = flaginfo->info->relocatable; + relocatable = bfd_link_relocatable (flaginfo->info); syms = obj_aout_external_syms (input_bfd); strings = obj_aout_external_strings (input_bfd); sym_hashes = obj_aout_sym_hashes (input_bfd); @@ -4212,7 +4212,7 @@ aout_link_input_section_std (struct aout_final_link_info *flaginfo, /* Now warn if a global symbol is undefined. We could not do this earlier, because check_dynamic_reloc might want to skip this reloc. */ - if (hundef && ! flaginfo->info->shared && ! r_baserel) + if (hundef && ! bfd_link_pic (flaginfo->info) && ! r_baserel) { const char *name; @@ -4300,7 +4300,7 @@ aout_link_input_section_ext (struct aout_final_link_info *flaginfo, BFD_ASSERT (input_bfd->xvec->header_byteorder == output_bfd->xvec->header_byteorder); - relocatable = flaginfo->info->relocatable; + relocatable = bfd_link_relocatable (flaginfo->info); syms = obj_aout_external_syms (input_bfd); strings = obj_aout_external_strings (input_bfd); sym_hashes = obj_aout_sym_hashes (input_bfd); @@ -4616,7 +4616,7 @@ aout_link_input_section_ext (struct aout_final_link_info *flaginfo, do this earlier, because check_dynamic_reloc might want to skip this reloc. */ if (hundef - && ! flaginfo->info->shared + && ! bfd_link_pic (flaginfo->info) && r_type != (unsigned int) RELOC_BASE10 && r_type != (unsigned int) RELOC_BASE13 && r_type != (unsigned int) RELOC_BASE22) @@ -4749,7 +4749,7 @@ aout_link_input_section (struct aout_final_link_info *flaginfo, /* If we are producing relocatable output, the relocs were modified, and we now write them out. */ - if (flaginfo->info->relocatable && rel_size > 0) + if (bfd_link_relocatable (flaginfo->info) && rel_size > 0) { if (bfd_seek (flaginfo->output_bfd, *reloff_ptr, SEEK_SET) != 0) return FALSE; @@ -5335,7 +5335,7 @@ NAME (aout, final_link) (bfd *abfd, asection *o; bfd_boolean have_link_order_relocs; - if (info->shared) + if (bfd_link_pic (info)) abfd->flags |= DYNAMIC; aout_info.info = info; @@ -5363,7 +5363,7 @@ NAME (aout, final_link) (bfd *abfd, { bfd_size_type sz; - if (info->relocatable) + if (bfd_link_relocatable (info)) { if (bfd_get_flavour (sub) == bfd_target_aout_flavour) { @@ -5407,7 +5407,7 @@ NAME (aout, final_link) (bfd *abfd, } } - if (info->relocatable) + if (bfd_link_relocatable (info)) { if (obj_textsec (abfd) != NULL) trsize += (_bfd_count_link_order_relocs (obj_textsec (abfd) diff --git a/bfd/bout.c b/bfd/bout.c index 8ca3c782b97..f356b96badc 100644 --- a/bfd/bout.c +++ b/bfd/bout.c @@ -1139,7 +1139,7 @@ b_out_bfd_relax_section (bfd *abfd, arelent **reloc_vector = NULL; long reloc_size = bfd_get_reloc_upper_bound (input_bfd, input_section); - if (link_info->relocatable) + if (bfd_link_relocatable (link_info)) (*link_info->callbacks->einfo) (_("%P%F: --relax and -r may not be used together\n")); diff --git a/bfd/coff-alpha.c b/bfd/coff-alpha.c index 0fdbded0a16..58d4e1d1fbe 100644 --- a/bfd/coff-alpha.c +++ b/bfd/coff-alpha.c @@ -1226,7 +1226,7 @@ alpha_convert_external_reloc (bfd *output_bfd ATTRIBUTE_UNUSED, unsigned long r_symndx; bfd_vma relocation; - BFD_ASSERT (info->relocatable); + BFD_ASSERT (bfd_link_relocatable (info)); if (h->root.type == bfd_link_hash_defined || h->root.type == bfd_link_hash_defweak) @@ -1405,7 +1405,7 @@ alpha_relocate_section (bfd *output_bfd, lita_sec = symndx_to_section[RELOC_SECTION_LITA]; gp = _bfd_get_gp_value (output_bfd); - if (! info->relocatable && lita_sec != NULL) + if (! bfd_link_relocatable (info) && lita_sec != NULL) { struct ecoff_section_tdata *lita_sec_data; @@ -1530,7 +1530,7 @@ alpha_relocate_section (bfd *output_bfd, not otherwise used for anything. For some reason, the address of the relocation does not appear to include the section VMA, unlike the other relocation types. */ - if (info->relocatable) + if (bfd_link_relocatable (info)) H_PUT_64 (input_bfd, input_section->output_offset + r_vaddr, ext_rel->r_vaddr); adjust_addrp = FALSE; @@ -1683,7 +1683,7 @@ alpha_relocate_section (bfd *output_bfd, if (h == (struct ecoff_link_hash_entry *) NULL) abort (); - if (! info->relocatable) + if (! bfd_link_relocatable (info)) { if (h->root.type == bfd_link_hash_defined || h->root.type == bfd_link_hash_defweak) @@ -1726,7 +1726,7 @@ alpha_relocate_section (bfd *output_bfd, addend += r_vaddr; - if (info->relocatable) + if (bfd_link_relocatable (info)) { /* Adjust r_vaddr by the addend. */ H_PUT_64 (input_bfd, addend, ext_rel->r_vaddr); @@ -1762,7 +1762,7 @@ alpha_relocate_section (bfd *output_bfd, /* Store a value from the reloc stack into a bitfield. If we are generating relocatable output, all we do is adjust the address of the reloc. */ - if (! info->relocatable) + if (! bfd_link_relocatable (info)) { bfd_vma mask; bfd_vma val; @@ -1828,7 +1828,7 @@ alpha_relocate_section (bfd *output_bfd, abort (); } - if (info->relocatable) + if (bfd_link_relocatable (info)) { /* We are generating relocatable output, and must convert the existing reloc. */ @@ -1954,7 +1954,7 @@ alpha_relocate_section (bfd *output_bfd, } } - if (info->relocatable && adjust_addrp) + if (bfd_link_relocatable (info) && adjust_addrp) { /* Change the address of the relocation. */ H_PUT_64 (input_bfd, diff --git a/bfd/coff-arm.c b/bfd/coff-arm.c index 74ce0172be0..3007762fe91 100644 --- a/bfd/coff-arm.c +++ b/bfd/coff-arm.c @@ -1222,7 +1222,7 @@ coff_arm_relocate_section (bfd *output_bfd, relocations to be reflected in section's data. */ if (rel->r_type == ARM_26 && h != NULL - && info->relocatable + && bfd_link_relocatable (info) && (h->root.type == bfd_link_hash_defined || h->root.type == bfd_link_hash_defweak) && (h->root.u.def.section->output_section @@ -1255,7 +1255,7 @@ coff_arm_relocate_section (bfd *output_bfd, #ifdef ARM_WINCE /* MS ARM-CE makes the reloc relative to the opcode's pc, not the next opcode's pc, so is off by one. */ - if (howto->pc_relative && !info->relocatable) + if (howto->pc_relative && !bfd_link_relocatable (info)) addend -= 8; #endif @@ -1265,7 +1265,7 @@ coff_arm_relocate_section (bfd *output_bfd, then we should ignore the symbol value. */ if (howto->pc_relative && howto->pcrel_offset) { - if (info->relocatable) + if (bfd_link_relocatable (info)) continue; /* FIXME - it is not clear which targets need this next test and which do not. It is known that it is needed for the @@ -1311,7 +1311,7 @@ coff_arm_relocate_section (bfd *output_bfd, stub generation to the final linker pass. If we fail to verify that the name is defined, we'll try to build stubs for an undefined name... */ - if (! info->relocatable + if (! bfd_link_relocatable (info) && ( h->root.type == bfd_link_hash_defined || h->root.type == bfd_link_hash_defweak)) { @@ -1561,7 +1561,7 @@ coff_arm_relocate_section (bfd *output_bfd, + sec->output_offset); } - else if (! info->relocatable) + else if (! bfd_link_relocatable (info)) { if (! ((*info->callbacks->undefined_symbol) (info, h->root.root.string, input_bfd, input_section, @@ -1582,7 +1582,7 @@ coff_arm_relocate_section (bfd *output_bfd, rstat = bfd_reloc_ok; #ifndef ARM_WINCE /* Only perform this fix during the final link, not a relocatable link. */ - else if (! info->relocatable + else if (! bfd_link_relocatable (info) && howto->type == ARM_THUMB23) { /* This is pretty much a copy of what the default @@ -1698,7 +1698,7 @@ coff_arm_relocate_section (bfd *output_bfd, } #endif else - if (info->relocatable && ! howto->partial_inplace) + if (bfd_link_relocatable (info) && ! howto->partial_inplace) rstat = bfd_reloc_ok; else rstat = _bfd_final_link_relocate (howto, input_bfd, input_section, @@ -1706,7 +1706,7 @@ coff_arm_relocate_section (bfd *output_bfd, rel->r_vaddr - input_section->vma, val, addend); /* Only perform this fix during the final link, not a relocatable link. */ - if (! info->relocatable + if (! bfd_link_relocatable (info) && (rel->r_type == ARM_32 || rel->r_type == ARM_RVA32)) { /* Determine if we need to set the bottom bit of a relocated address @@ -1968,7 +1968,7 @@ bfd_arm_get_bfd_for_interworking (bfd * abfd, /* If we are only performing a partial link do not bother getting a bfd to hold the glue. */ - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; globals = coff_arm_hash_table (info); @@ -2021,7 +2021,7 @@ bfd_arm_process_before_allocation (bfd * abfd, /* If we are only performing a partial link do not bother to construct any glue. */ - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; /* Here we have a bfd that is to be included on the link. We have a hook diff --git a/bfd/coff-i386.c b/bfd/coff-i386.c index b185b81803f..a9725c4e1c7 100644 --- a/bfd/coff-i386.c +++ b/bfd/coff-i386.c @@ -417,7 +417,7 @@ coff_pe_i386_relocate_section (bfd *output_bfd, struct internal_syment *syms, asection **sections) { - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; return _bfd_coff_generic_relocate_section (output_bfd, info, input_bfd, diff --git a/bfd/coff-i960.c b/bfd/coff-i960.c index dbd197f49c4..f7610282cfb 100644 --- a/bfd/coff-i960.c +++ b/bfd/coff-i960.c @@ -322,7 +322,7 @@ coff_i960_start_final_link (bfd *abfd, struct bfd_link_info *info) asection *o; bfd_byte *esym; - if (! info->relocatable) + if (! bfd_link_relocatable (info)) return TRUE; esym = (bfd_byte *) bfd_malloc (symesz); @@ -447,7 +447,7 @@ coff_i960_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, + sec->output_section->vma + sec->output_offset); } - else if (! info->relocatable) + else if (! bfd_link_relocatable (info)) { if (! ((*info->callbacks->undefined_symbol) (info, h->root.root.string, input_bfd, input_section, @@ -458,7 +458,7 @@ coff_i960_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, done = FALSE; - if (howto->type == R_OPTCALL && ! info->relocatable && symndx != -1) + if (howto->type == R_OPTCALL && ! bfd_link_relocatable (info) && symndx != -1) { int class_val; diff --git a/bfd/coff-m68k.c b/bfd/coff-m68k.c index e90aec72f0c..56949cfe297 100644 --- a/bfd/coff-m68k.c +++ b/bfd/coff-m68k.c @@ -446,7 +446,7 @@ bfd_m68k_coff_create_embedded_relocs (bfd *abfd, bfd_byte *p; bfd_size_type amt; - BFD_ASSERT (! info->relocatable); + BFD_ASSERT (! bfd_link_relocatable (info)); *errmsg = NULL; diff --git a/bfd/coff-mcore.c b/bfd/coff-mcore.c index 45d49174354..53c5d369fea 100644 --- a/bfd/coff-mcore.c +++ b/bfd/coff-mcore.c @@ -358,7 +358,7 @@ coff_mcore_relocate_section (bfd * output_bfd, /* If we are performing a relocatable link, we don't need to do a thing. The caller will take care of adjusting the reloc addresses and symbol indices. */ - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; /* Check if we have the same endianness */ diff --git a/bfd/coff-mips.c b/bfd/coff-mips.c index a4905721870..5dfbc543149 100644 --- a/bfd/coff-mips.c +++ b/bfd/coff-mips.c @@ -960,7 +960,7 @@ mips_relocate_section (bfd *output_bfd, and the GP value of OUTPUT_BFD (which is in GP). */ addend = ecoff_data (input_bfd)->gp - gp; } - else if (! info->relocatable + else if (! bfd_link_relocatable (info) || h->root.type == bfd_link_hash_defined || h->root.type == bfd_link_hash_defweak) { @@ -986,7 +986,7 @@ mips_relocate_section (bfd *output_bfd, } } - if (info->relocatable) + if (bfd_link_relocatable (info)) { /* We are generating relocatable output, and must convert the existing reloc. */ diff --git a/bfd/coff-ppc.c b/bfd/coff-ppc.c index 237980d6a84..2f979e990de 100644 --- a/bfd/coff-ppc.c +++ b/bfd/coff-ppc.c @@ -947,7 +947,7 @@ coff_ppc_relocate_section (bfd *output_bfd, /* If we are performing a relocatable link, we don't need to do a thing. The caller will take care of adjusting the reloc addresses and symbol indices. */ - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; rel = relocs; @@ -2043,7 +2043,7 @@ ppc_bfd_coff_final_link (bfd *abfd, struct bfd_link_info *info) || info->strip == strip_some) o->lineno_count += sec->lineno_count; - if (info->relocatable) + if (bfd_link_relocatable (info)) o->reloc_count += sec->reloc_count; if (sec->rawsize > max_contents_size) @@ -2055,7 +2055,7 @@ ppc_bfd_coff_final_link (bfd *abfd, struct bfd_link_info *info) if (sec->reloc_count > max_reloc_count) max_reloc_count = sec->reloc_count; } - else if (info->relocatable + else if (bfd_link_relocatable (info) && (p->type == bfd_section_reloc_link_order || p->type == bfd_symbol_reloc_link_order)) ++o->reloc_count; @@ -2072,7 +2072,7 @@ ppc_bfd_coff_final_link (bfd *abfd, struct bfd_link_info *info) /* If doing a relocatable link, allocate space for the pointers we need to keep. */ - if (info->relocatable) + if (bfd_link_relocatable (info)) { unsigned int i; @@ -2123,7 +2123,7 @@ ppc_bfd_coff_final_link (bfd *abfd, struct bfd_link_info *info) memory until the end of the link. This wastes memory, but only when doing a relocatable link, which is not the common case. */ - BFD_ASSERT (info->relocatable); + BFD_ASSERT (bfd_link_relocatable (info)); amt = o->reloc_count; amt *= sizeof (struct internal_reloc); flaginfo.section_info[o->target_index].relocs = @@ -2175,7 +2175,7 @@ ppc_bfd_coff_final_link (bfd *abfd, struct bfd_link_info *info) flaginfo.linenos = (bfd_byte *) bfd_malloc (amt); flaginfo.contents = (bfd_byte *) bfd_malloc (max_contents_size); flaginfo.external_relocs = (bfd_byte *) bfd_malloc (max_reloc_count * relsz); - if (! info->relocatable) + if (! bfd_link_relocatable (info)) { amt = max_reloc_count * sizeof (struct internal_reloc); flaginfo.internal_relocs = (struct internal_reloc *) bfd_malloc (amt); @@ -2187,7 +2187,7 @@ ppc_bfd_coff_final_link (bfd *abfd, struct bfd_link_info *info) || (flaginfo.linenos == NULL && max_lineno_count > 0) || (flaginfo.contents == NULL && max_contents_size > 0) || (flaginfo.external_relocs == NULL && max_reloc_count > 0) - || (! info->relocatable + || (! bfd_link_relocatable (info) && flaginfo.internal_relocs == NULL && max_reloc_count > 0)) goto error_return; @@ -2321,7 +2321,7 @@ ppc_bfd_coff_final_link (bfd *abfd, struct bfd_link_info *info) flaginfo.outsyms = NULL; } - if (info->relocatable) + if (bfd_link_relocatable (info)) { /* Now that we have written out all the global symbols, we know the symbol indices to use for relocs against them, and we can diff --git a/bfd/coff-rs6000.c b/bfd/coff-rs6000.c index 3aa5e63db77..dd9ecb2397f 100644 --- a/bfd/coff-rs6000.c +++ b/bfd/coff-rs6000.c @@ -3421,7 +3421,7 @@ xcoff_ppc_relocate_section (bfd *output_bfd, } else { - BFD_ASSERT (info->relocatable + BFD_ASSERT (bfd_link_relocatable (info) || (info->static_link && (h->flags & XCOFF_WAS_UNDEFINED) != 0) || (h->flags & XCOFF_DEF_DYNAMIC) != 0 diff --git a/bfd/coff-sh.c b/bfd/coff-sh.c index e52fffa6e16..044fc04304e 100644 --- a/bfd/coff-sh.c +++ b/bfd/coff-sh.c @@ -713,7 +713,7 @@ sh_relax_section (bfd *abfd, *again = FALSE; - if (link_info->relocatable + if (bfd_link_relocatable (link_info) || (sec->flags & SEC_RELOC) == 0 || sec->reloc_count == 0) return TRUE; @@ -2836,7 +2836,7 @@ sh_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, + sec->output_section->vma + sec->output_offset); } - else if (! info->relocatable) + else if (! bfd_link_relocatable (info)) { if (! ((*info->callbacks->undefined_symbol) (info, h->root.root.string, input_bfd, input_section, diff --git a/bfd/coff-tic80.c b/bfd/coff-tic80.c index 10d50f0aab2..ea27034269c 100644 --- a/bfd/coff-tic80.c +++ b/bfd/coff-tic80.c @@ -562,7 +562,7 @@ coff_tic80_relocate_section (bfd *output_bfd, + sec->output_offset); } - else if (! info->relocatable) + else if (! bfd_link_relocatable (info)) { if (! ((*info->callbacks->undefined_symbol) (info, h->root.root.string, input_bfd, input_section, diff --git a/bfd/coff-x86_64.c b/bfd/coff-x86_64.c index fb5971d633f..4e6420a04eb 100644 --- a/bfd/coff-x86_64.c +++ b/bfd/coff-x86_64.c @@ -538,7 +538,7 @@ coff_pe_amd64_relocate_section (bfd *output_bfd, struct internal_syment *syms, asection **sections) { - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; return _bfd_coff_generic_relocate_section (output_bfd, info, input_bfd,input_section, contents,relocs, syms, sections); diff --git a/bfd/coff64-rs6000.c b/bfd/coff64-rs6000.c index ba984694f68..a9da59c400a 100644 --- a/bfd/coff64-rs6000.c +++ b/bfd/coff64-rs6000.c @@ -1277,7 +1277,7 @@ xcoff64_ppc_relocate_section (bfd *output_bfd, } else { - BFD_ASSERT (info->relocatable + BFD_ASSERT (bfd_link_relocatable (info) || (h->flags & XCOFF_DEF_DYNAMIC) != 0 || (h->flags & XCOFF_IMPORT) != 0); } diff --git a/bfd/coffgen.c b/bfd/coffgen.c index 44bdc6ed508..9257f73200f 100644 --- a/bfd/coffgen.c +++ b/bfd/coffgen.c @@ -2486,7 +2486,7 @@ coff_sizeof_headers (bfd *abfd, struct bfd_link_info *info) { size_t size; - if (!info->relocatable) + if (!bfd_link_relocatable (info)) size = bfd_coff_filhsz (abfd) + bfd_coff_aoutsz (abfd); else size = bfd_coff_filhsz (abfd); diff --git a/bfd/cofflink.c b/bfd/cofflink.c index c1541d1bd85..8d98fec2146 100644 --- a/bfd/cofflink.c +++ b/bfd/cofflink.c @@ -507,7 +507,7 @@ coff_link_add_symbols (bfd *abfd, /* If this is a non-traditional, non-relocatable link, try to optimize the handling of any .stab/.stabstr sections. */ - if (! info->relocatable + if (! bfd_link_relocatable (info) && ! info->traditional_format && bfd_get_flavour (info->output_bfd) == bfd_get_flavour (abfd) && (info->strip != strip_all && info->strip != strip_debugger)) @@ -652,7 +652,7 @@ _bfd_coff_final_link (bfd *abfd, || info->strip == strip_some) o->lineno_count += sec->lineno_count; - if (info->relocatable) + if (bfd_link_relocatable (info)) o->reloc_count += sec->reloc_count; if (sec->rawsize > max_contents_size) @@ -664,7 +664,7 @@ _bfd_coff_final_link (bfd *abfd, if (sec->reloc_count > max_reloc_count) max_reloc_count = sec->reloc_count; } - else if (info->relocatable + else if (bfd_link_relocatable (info) && (p->type == bfd_section_reloc_link_order || p->type == bfd_symbol_reloc_link_order)) ++o->reloc_count; @@ -699,7 +699,7 @@ _bfd_coff_final_link (bfd *abfd, /* If doing a relocatable link, allocate space for the pointers we need to keep. */ - if (info->relocatable) + if (bfd_link_relocatable (info)) { unsigned int i; @@ -747,7 +747,7 @@ _bfd_coff_final_link (bfd *abfd, memory until the end of the link. This wastes memory, but only when doing a relocatable link, which is not the common case. */ - BFD_ASSERT (info->relocatable); + BFD_ASSERT (bfd_link_relocatable (info)); amt = o->reloc_count; amt *= sizeof (struct internal_reloc); flaginfo.section_info[o->target_index].relocs = @@ -799,7 +799,7 @@ _bfd_coff_final_link (bfd *abfd, flaginfo.contents = (bfd_byte *) bfd_malloc (max_contents_size); amt = max_reloc_count * relsz; flaginfo.external_relocs = (bfd_byte *) bfd_malloc (amt); - if (! info->relocatable) + if (! bfd_link_relocatable (info)) { amt = max_reloc_count * sizeof (struct internal_reloc); flaginfo.internal_relocs = (struct internal_reloc *) bfd_malloc (amt); @@ -811,7 +811,7 @@ _bfd_coff_final_link (bfd *abfd, || (flaginfo.linenos == NULL && max_lineno_count > 0) || (flaginfo.contents == NULL && max_contents_size > 0) || (flaginfo.external_relocs == NULL && max_reloc_count > 0) - || (! info->relocatable + || (! bfd_link_relocatable (info) && flaginfo.internal_relocs == NULL && max_reloc_count > 0)) goto error_return; @@ -891,7 +891,7 @@ _bfd_coff_final_link (bfd *abfd, == NULL)) || (((flaginfo.info->discard == discard_sec_merge && (bfd_get_section (sym)->flags & SEC_MERGE) - && ! flaginfo.info->relocatable) + && ! bfd_link_relocatable (flaginfo.info)) || flaginfo.info->discard == discard_l) && bfd_is_local_label_name (sub, bfd_asymbol_name(sym)))) continue; @@ -1031,7 +1031,7 @@ _bfd_coff_final_link (bfd *abfd, flaginfo.outsyms = NULL; } - if (info->relocatable && max_output_reloc_count > 0) + if (bfd_link_relocatable (info) && max_output_reloc_count > 0) { /* Now that we have written out all the global symbols, we know the symbol indices to use for relocs against them, and we can @@ -1350,8 +1350,8 @@ mark_relocs (struct coff_final_link_info *flaginfo, bfd *input_bfd) internal_relocs = _bfd_coff_read_internal_relocs (input_bfd, a, FALSE, flaginfo->external_relocs, - flaginfo->info->relocatable, - (flaginfo->info->relocatable + bfd_link_relocatable (flaginfo->info), + (bfd_link_relocatable (flaginfo->info) ? (flaginfo->section_info[ a->output_section->target_index ].relocs + a->output_section->reloc_count) : flaginfo->internal_relocs) ); @@ -1436,7 +1436,7 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *flaginfo, bfd *input_bfd) symbols that are going to be involved in the relocations. */ if (( flaginfo->info->strip != strip_none || flaginfo->info->discard != discard_none) - && flaginfo->info->relocatable) + && bfd_link_relocatable (flaginfo->info)) { /* Mark the symbol array as 'not-used'. */ memset (indexp, 0, obj_raw_syment_count (input_bfd) * sizeof * indexp); @@ -1483,7 +1483,7 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *flaginfo, bfd *input_bfd) relocation. */ if ((flaginfo->info->strip != strip_none || flaginfo->info->discard != discard_none) - && flaginfo->info->relocatable) + && bfd_link_relocatable (flaginfo->info)) dont_skip_symbol = *indexp; else dont_skip_symbol = FALSE; @@ -2360,8 +2360,8 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *flaginfo, bfd *input_bfd) target_index = o->output_section->target_index; internal_relocs = (_bfd_coff_read_internal_relocs (input_bfd, o, FALSE, flaginfo->external_relocs, - flaginfo->info->relocatable, - (flaginfo->info->relocatable + bfd_link_relocatable (flaginfo->info), + (bfd_link_relocatable (flaginfo->info) ? (flaginfo->section_info[target_index].relocs + o->output_section->reloc_count) : flaginfo->internal_relocs))); @@ -2408,7 +2408,7 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *flaginfo, bfd *input_bfd) flaginfo->sec_ptrs)) return FALSE; - if (flaginfo->info->relocatable) + if (bfd_link_relocatable (flaginfo->info)) { bfd_vma offset; struct internal_reloc *irelend; @@ -2636,8 +2636,8 @@ _bfd_coff_write_global_sym (struct bfd_hash_entry *bh, void *data) /* When a weak symbol is not overridden by a strong one, turn it into an external symbol when not building a shared or relocatable object. */ - if (! flaginfo->info->shared - && ! flaginfo->info->relocatable + if (! bfd_link_pic (flaginfo->info) + && ! bfd_link_relocatable (flaginfo->info) && IS_WEAK_EXTERNAL (flaginfo->output_bfd, isym)) isym.n_sclass = C_EXT; @@ -2690,7 +2690,7 @@ _bfd_coff_write_global_sym (struct bfd_hash_entry *bh, void *data) not matter. FIXME: Why not? */ if (sec->reloc_count > 0xffff && (! obj_pe (output_bfd) - || flaginfo->info->relocatable)) + || bfd_link_relocatable (flaginfo->info))) (*_bfd_error_handler) (_("%s: %s: reloc overflow: 0x%lx > 0xffff"), bfd_get_filename (output_bfd), @@ -2699,7 +2699,7 @@ _bfd_coff_write_global_sym (struct bfd_hash_entry *bh, void *data) if (sec->lineno_count > 0xffff && (! obj_pe (output_bfd) - || flaginfo->info->relocatable)) + || bfd_link_relocatable (flaginfo->info))) (*_bfd_error_handler) (_("%s: warning: %s: line number overflow: 0x%lx > 0xffff"), bfd_get_filename (output_bfd), @@ -2959,7 +2959,7 @@ _bfd_coff_generic_relocate_section (bfd *output_bfd, then we should ignore the symbol value. */ if (howto->pc_relative && howto->pcrel_offset) { - if (info->relocatable) + if (bfd_link_relocatable (info)) continue; if (sym != NULL && sym->n_scnum != 0) addend += sym->n_value; @@ -3031,7 +3031,7 @@ _bfd_coff_generic_relocate_section (bfd *output_bfd, val = 0; } - else if (! info->relocatable) + else if (! bfd_link_relocatable (info)) { if (! ((*info->callbacks->undefined_symbol) (info, h->root.root.string, input_bfd, input_section, diff --git a/bfd/ecoff.c b/bfd/ecoff.c index a4aef63a8f3..ee3065992f9 100644 --- a/bfd/ecoff.c +++ b/bfd/ecoff.c @@ -3896,7 +3896,7 @@ ecoff_indirect_link_order (bfd *output_bfd, modified, and we write them out now. We use the reloc_count field of output_section to keep track of the number of relocs we have output so far. */ - if (info->relocatable) + if (bfd_link_relocatable (info)) { file_ptr pos = (output_section->rel_filepos + output_section->reloc_count * external_reloc_size); @@ -4370,7 +4370,7 @@ _bfd_ecoff_bfd_final_link (bfd *abfd, struct bfd_link_info *info) einfo.info = info; bfd_hash_traverse (&info->hash->table, ecoff_link_write_external, &einfo); - if (info->relocatable) + if (bfd_link_relocatable (info)) { /* We need to make a pass over the link_orders to count up the number of relocations we will need to output, so that we know @@ -4400,7 +4400,7 @@ _bfd_ecoff_bfd_final_link (bfd *abfd, struct bfd_link_info *info) bfd_ecoff_debug_free (handle, abfd, debug, &backend->debug_swap, info); - if (info->relocatable) + if (bfd_link_relocatable (info)) { /* Now reset the reloc_count field of the sections in the output BFD to 0, so that we can use them to keep track of how many @@ -4420,7 +4420,7 @@ _bfd_ecoff_bfd_final_link (bfd *abfd, struct bfd_link_info *info) ecoff_data (abfd)->gp = (h->u.def.value + h->u.def.section->output_section->vma + h->u.def.section->output_offset); - else if (info->relocatable) + else if (bfd_link_relocatable (info)) { bfd_vma lo; diff --git a/bfd/ecofflink.c b/bfd/ecofflink.c index 4f0b463db02..f81361ac43b 100644 --- a/bfd/ecofflink.c +++ b/bfd/ecofflink.c @@ -496,7 +496,7 @@ bfd_ecoff_debug_init (bfd *output_bfd ATTRIBUTE_UNUSED, ainfo->largest_file_shuffle = 0; - if (! info->relocatable) + if (! bfd_link_relocatable (info)) { if (!bfd_hash_table_init (&ainfo->str_hash.table, string_hash_newfunc, sizeof (struct string_hash_entry))) @@ -529,7 +529,7 @@ bfd_ecoff_debug_free (void * handle, bfd_hash_table_free (&ainfo->fdr_hash.table); - if (! info->relocatable) + if (! bfd_link_relocatable (info)) bfd_hash_table_free (&ainfo->str_hash.table); objalloc_free (ainfo->memory); @@ -818,7 +818,7 @@ bfd_ecoff_debug_accumulate (void * handle, of space required by debugging information. We don't do this when performing a relocatable link because it would prevent us from easily merging different FDR's. */ - if (! info->relocatable) + if (! bfd_link_relocatable (info)) { bfd_boolean ffilename; const char *name; @@ -895,7 +895,7 @@ bfd_ecoff_debug_accumulate (void * handle, fdr.iauxBase = output_symhdr->iauxMax; output_symhdr->iauxMax += fdr.caux; } - if (! info->relocatable) + if (! bfd_link_relocatable (info)) { /* When are are hashing strings, we lie about the number of @@ -1041,7 +1041,7 @@ ecoff_add_string (struct accumulate *ainfo, symhdr = &debug->symbolic_header; len = strlen (string); - if (info->relocatable) + if (bfd_link_relocatable (info)) { if (!add_memory_shuffle (ainfo, &ainfo->ss, &ainfo->ss_end, (bfd_byte *) string, len + 1)) @@ -1598,7 +1598,7 @@ bfd_ecoff_write_accumulated_debug (void * handle, /* The string table is written out from the hash table if this is a final link. */ - if (info->relocatable) + if (bfd_link_relocatable (info)) { BFD_ASSERT (ainfo->ss_hash == (struct string_hash_entry *) NULL); if (! ecoff_write_shuffle (abfd, swap, ainfo->ss, space)) diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h index d8d11b7771b..f5a1f453554 100644 --- a/bfd/elf-bfd.h +++ b/bfd/elf-bfd.h @@ -2555,7 +2555,7 @@ extern asection _bfd_elf_large_com_section; else if (info->unresolved_syms_in_objects == RM_IGNORE \ && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT) \ ignored = TRUE; \ - else if (!info->relocatable) \ + else if (!bfd_link_relocatable (info)) \ { \ bfd_boolean err; \ err = (info->unresolved_syms_in_objects == RM_GENERATE_ERROR \ @@ -2590,7 +2590,7 @@ extern asection _bfd_elf_large_com_section; _bfd_clear_contents (howto, input_bfd, input_section, \ contents + rel[index].r_offset); \ \ - if (info->relocatable \ + if (bfd_link_relocatable (info) \ && (input_section->flags & SEC_DEBUGGING)) \ { \ /* Only remove relocations in debug sections since other \ diff --git a/bfd/elf-eh-frame.c b/bfd/elf-eh-frame.c index 22068ab3b9d..7d65daefc37 100644 --- a/bfd/elf-eh-frame.c +++ b/bfd/elf-eh-frame.c @@ -833,8 +833,7 @@ _bfd_elf_parse_eh_frame (bfd *abfd, struct bfd_link_info *info, /* For shared libraries, try to get rid of as many RELATIVE relocs as possible. */ - if (info->shared - && !info->relocatable + if (bfd_link_pic (info) && (get_elf_backend_data (abfd) ->elf_backend_can_make_relative_eh_frame (abfd, info, sec))) @@ -871,7 +870,7 @@ _bfd_elf_parse_eh_frame (bfd *abfd, struct bfd_link_info *info, buf += initial_insn_length; ENSURE_NO_RELOCS (buf); - if (!info->relocatable) + if (!bfd_link_relocatable (info)) { /* Keep info for merging cies. */ this_inf->u.cie.u.full_cie = cie; @@ -1018,7 +1017,7 @@ _bfd_elf_parse_eh_frame (bfd *abfd, struct bfd_link_info *info, elf_section_data (sec)->sec_info = sec_info; sec->sec_info_type = SEC_INFO_TYPE_EH_FRAME; - if (!info->relocatable) + if (!bfd_link_relocatable (info)) { /* Keep info for merging cies. */ sec_info->cies = local_cies; @@ -1264,8 +1263,7 @@ find_merged_cie (bfd *abfd, struct bfd_link_info *info, asection *sec, } if (per_binds_local - && info->shared - && !info->relocatable + && bfd_link_pic (info) && (cie->per_encoding & 0x70) == DW_EH_PE_absptr && (get_elf_backend_data (abfd) ->elf_backend_can_make_relative_eh_frame (abfd, info, sec))) @@ -1365,7 +1363,7 @@ _bfd_elf_discard_section_eh_frame } if (keep) { - if (info->shared + if (bfd_link_pic (info) && (((ent->fde_encoding & 0x70) == DW_EH_PE_absptr && ent->make_relative == 0) || (ent->fde_encoding & 0x70) == DW_EH_PE_aligned)) @@ -1907,7 +1905,7 @@ _bfd_elf_write_section_eh_frame (bfd *abfd, value = ((ent->new_offset + sec->output_offset + 4) - (cie->new_offset + cie->u.cie.u.sec->output_offset)); bfd_put_32 (abfd, value, buf); - if (info->relocatable) + if (bfd_link_relocatable (info)) continue; buf += 4; width = get_DW_EH_PE_width (ent->fde_encoding, ptr_size); diff --git a/bfd/elf-ifunc.c b/bfd/elf-ifunc.c index f54c90b5090..baca25e872f 100644 --- a/bfd/elf-ifunc.c +++ b/bfd/elf-ifunc.c @@ -53,7 +53,7 @@ _bfd_elf_create_ifunc_sections (bfd *abfd, struct bfd_link_info *info) if (bed->plt_readonly) pltflags |= SEC_READONLY; - if (info->shared) + if (bfd_link_pic (info)) { /* We need to create .rel[a].ifunc for shared objects. */ const char *rel_sec = (bed->rela_plts_and_copies_p @@ -125,7 +125,7 @@ _bfd_elf_allocate_ifunc_dyn_relocs (struct bfd_link_info *info, But in non-shared executable, the address of its .plt slot may be used. Pointer equality may not work correctly. PIE should be used if pointer equality is required here. */ - if (!info->shared + if (!bfd_link_pic (info) && (h->dynindx != -1 || info->export_dynamic) && h->pointer_equality_needed) @@ -145,7 +145,7 @@ _bfd_elf_allocate_ifunc_dyn_relocs (struct bfd_link_info *info, /* When building shared library, we need to handle the case where it is marked with regular reference, but not non-GOT reference since the non-GOT reference bit may not be set here. */ - if (info->shared && !h->non_got_ref && h->ref_regular) + if (bfd_link_pic (info) && !h->non_got_ref && h->ref_regular) for (p = *head; p != NULL; p = p->next) if (p->count) { @@ -220,7 +220,7 @@ keep: /* We need dynamic relocation for STT_GNU_IFUNC symbol only when there is a non-GOT reference in a shared object. */ - if (!info->shared + if (!bfd_link_pic (info) || !h->non_got_ref) *head = NULL; @@ -252,12 +252,12 @@ keep: objects at run-time. We only need to relocate .got entry in shared object. */ if (h->got.refcount <= 0 - || (info->shared + || (bfd_link_pic (info) && (h->dynindx == -1 || h->forced_local)) - || (!info->shared + || (!bfd_link_pic (info) && !h->pointer_equality_needed) - || (info->executable && info->shared) + || bfd_link_pie (info) || htab->sgot == NULL) { /* Use .got.plt. */ @@ -267,7 +267,7 @@ keep: { h->got.offset = htab->sgot->size; htab->sgot->size += got_entry_size; - if (info->shared) + if (bfd_link_pic (info)) htab->srelgot->size += sizeof_reloc; } diff --git a/bfd/elf-m10200.c b/bfd/elf-m10200.c index 45bfed77411..2ee4496422a 100644 --- a/bfd/elf-m10200.c +++ b/bfd/elf-m10200.c @@ -383,7 +383,7 @@ mn10200_elf_relocate_section (bfd *output_bfd, RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) continue; r = mn10200_elf_final_link_relocate (howto, input_bfd, output_bfd, @@ -572,7 +572,7 @@ mn10200_elf_relax_section (bfd *abfd, /* We don't have to do anything for a relocatable link, if this section does not have relocs, or if this is not a code section. */ - if (link_info->relocatable + if (bfd_link_relocatable (link_info) || (sec->flags & SEC_RELOC) == 0 || sec->reloc_count == 0 || (sec->flags & SEC_CODE) == 0) diff --git a/bfd/elf-m10300.c b/bfd/elf-m10300.c index a6a22b354e8..ee8d6ca36a9 100644 --- a/bfd/elf-m10300.c +++ b/bfd/elf-m10300.c @@ -830,7 +830,7 @@ elf_mn10300_tls_transition (struct bfd_link_info * info, && elf_mn10300_hash_entry (h)->tls_type == GOT_TLS_IE) return R_MN10300_TLS_GOTIE; - if (info->shared) + if (bfd_link_pic (info)) return r_type; if (! (sec->flags & SEC_CODE)) @@ -1061,7 +1061,7 @@ mn10300_elf_check_relocs (bfd *abfd, srelgot = NULL; sreloc = NULL; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; symtab_hdr = &elf_tdata (abfd)->symtab_hdr; @@ -1153,7 +1153,7 @@ mn10300_elf_check_relocs (bfd *abfd, case R_MN10300_TLS_IE: case R_MN10300_TLS_GOTIE: - if (info->shared) + if (bfd_link_pic (info)) info->flags |= DF_STATIC_TLS; /* Fall through */ @@ -1179,7 +1179,7 @@ mn10300_elf_check_relocs (bfd *abfd, } if (srelgot == NULL - && (h != NULL || info->shared)) + && (h != NULL || bfd_link_pic (info))) { srelgot = bfd_get_linker_section (dynobj, ".rela.got"); if (srelgot == NULL) @@ -1268,7 +1268,7 @@ mn10300_elf_check_relocs (bfd *abfd, local_got_offsets[r_symndx] = sgot->size; - if (info->shared) + if (bfd_link_pic (info)) { /* If we are generating a shared object, we need to output a R_MN10300_RELATIVE reloc so that the dynamic @@ -1332,7 +1332,7 @@ mn10300_elf_check_relocs (bfd *abfd, need_shared_relocs: /* If we are creating a shared library, then we need to copy the reloc into the shared library. */ - if (info->shared + if (bfd_link_pic (info) && (sec->flags & SEC_ALLOC) != 0 /* Do not generate a dynamic reloc for a reloc associated with a SYM_DIFF operation. */ @@ -1465,7 +1465,7 @@ mn10300_elf_final_link_relocate (reloc_howto_type *howto, case R_MN10300_GOTOFF32: case R_MN10300_GOTOFF24: case R_MN10300_GOTOFF16: - if (info->shared + if (bfd_link_pic (info) && (input_section->flags & SEC_ALLOC) != 0 && h != NULL && ! SYMBOL_REFERENCES_LOCAL (info, h)) @@ -1474,7 +1474,7 @@ mn10300_elf_final_link_relocate (reloc_howto_type *howto, /* Issue 2052223: Taking the address of a protected function in a shared library is illegal. Issue an error message here. */ - if (info->shared + if (bfd_link_pic (info) && (input_section->flags & SEC_ALLOC) != 0 && h != NULL && ELF_ST_VISIBILITY (h->other) == STV_PROTECTED @@ -1532,7 +1532,7 @@ mn10300_elf_final_link_relocate (reloc_howto_type *howto, return bfd_reloc_ok; case R_MN10300_32: - if (info->shared + if (bfd_link_pic (info) /* Do not generate relocs when an R_MN10300_32 has been used with an R_MN10300_SYM_DIFF to compute a difference of two symbols. */ @@ -1890,7 +1890,7 @@ mn10300_elf_final_link_relocate (reloc_howto_type *howto, { bfd_put_32 (output_bfd, value, sgot->contents + off); - if (info->shared) + if (bfd_link_pic (info)) { asection * srelgot; Elf_Internal_Rela outrel; @@ -2091,7 +2091,7 @@ mn10300_elf_relocate_section (bfd *output_bfd, /* _32 relocs in executables force _COPY relocs, such that the address of the symbol ends up being local. */ - && !info->executable + && !bfd_link_executable (info) && !SYMBOL_REFERENCES_LOCAL (info, hh) && ((input_section->flags & SEC_ALLOC) != 0 /* DWARF will emit R_MN10300_32 relocations @@ -2105,7 +2105,7 @@ mn10300_elf_relocate_section (bfd *output_bfd, obscure cases sec->output_section will be NULL. */ relocation = 0; - else if (!info->relocatable && unresolved_reloc + else if (!bfd_link_relocatable (info) && unresolved_reloc && _bfd_elf_section_offset (output_bfd, info, input_section, rel->r_offset) != (bfd_vma) -1) @@ -2122,7 +2122,7 @@ mn10300_elf_relocate_section (bfd *output_bfd, RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) continue; r = mn10300_elf_final_link_relocate (howto, input_bfd, output_bfd, @@ -2665,7 +2665,7 @@ mn10300_elf_relax_section (bfd *abfd, asection *section = sec; bfd_vma align_gap_adjustment; - if (link_info->relocatable) + if (bfd_link_relocatable (link_info)) (*link_info->callbacks->einfo) (_("%P%F: --relax and -r may not be used together\n")); @@ -3287,7 +3287,7 @@ mn10300_elf_relax_section (bfd *abfd, /* We don't have to do anything for a relocatable link, if this section does not have relocs, or if this is not a code section. */ - if (link_info->relocatable + if (bfd_link_relocatable (link_info) || (sec->flags & SEC_RELOC) == 0 || sec->reloc_count == 0 || (sec->flags & SEC_CODE) == 0) @@ -4776,11 +4776,11 @@ static const bfd_byte elf_mn10300_pic_plt_entry[PIC_PLT_ENTRY_SIZE] = /* Return size of the first PLT entry. */ #define elf_mn10300_sizeof_plt0(info) \ - (info->shared ? PIC_PLT_ENTRY_SIZE : PLT0_ENTRY_SIZE) + (bfd_link_pic (info) ? PIC_PLT_ENTRY_SIZE : PLT0_ENTRY_SIZE) /* Return size of a PLT entry. */ #define elf_mn10300_sizeof_plt(info) \ - (info->shared ? PIC_PLT_ENTRY_SIZE : PLT_ENTRY_SIZE) + (bfd_link_pic (info) ? PIC_PLT_ENTRY_SIZE : PLT_ENTRY_SIZE) /* Return offset of the PLT0 address in an absolute PLT entry. */ #define elf_mn10300_plt_plt0_offset(info) 16 @@ -4872,7 +4872,7 @@ _bfd_mn10300_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) be needed, we can discard it later. We will never need this section when generating a shared object, since they do not use copy relocs. */ - if (! info->shared) + if (! bfd_link_pic (info)) { s = bfd_make_section_anyway_with_flags (abfd, (bed->default_use_rela_p @@ -4917,7 +4917,7 @@ _bfd_mn10300_elf_adjust_dynamic_symbol (struct bfd_link_info * info, if (h->type == STT_FUNC || h->needs_plt) { - if (! info->shared + if (! bfd_link_pic (info) && !h->def_dynamic && !h->ref_dynamic) { @@ -4950,7 +4950,7 @@ _bfd_mn10300_elf_adjust_dynamic_symbol (struct bfd_link_info * info, location in the .plt. This is required to make function pointers compare as equal between the normal executable and the shared library. */ - if (! info->shared + if (! bfd_link_pic (info) && !h->def_regular) { h->root.u.def.section = s; @@ -4995,7 +4995,7 @@ _bfd_mn10300_elf_adjust_dynamic_symbol (struct bfd_link_info * info, only references to the symbol are via the global offset table. For such cases we need not do anything here; the relocations will be handled correctly by relocate_section. */ - if (info->shared) + if (bfd_link_pic (info)) return TRUE; /* If there are no references to this symbol that do not use the @@ -5052,7 +5052,7 @@ _bfd_mn10300_elf_size_dynamic_sections (bfd * output_bfd, if (elf_hash_table (info)->dynamic_sections_created) { /* Set the contents of the .interp section to the interpreter. */ - if (info->executable) + if (bfd_link_executable (info)) { s = bfd_get_linker_section (dynobj, ".interp"); BFD_ASSERT (s != NULL); @@ -5174,7 +5174,7 @@ _bfd_mn10300_elf_size_dynamic_sections (bfd * output_bfd, but we must add the entries now so that we get the correct size for the .dynamic section. The DT_DEBUG entry is filled in by the dynamic linker and used by the debugger. */ - if (! info->shared) + if (! bfd_link_pic (info)) { if (!_bfd_elf_add_dynamic_entry (info, DT_DEBUG, 0)) return FALSE; @@ -5254,7 +5254,7 @@ _bfd_mn10300_elf_finish_dynamic_symbol (bfd * output_bfd, got_offset = (plt_index + 3) * 4; /* Fill in the entry in the procedure linkage table. */ - if (! info->shared) + if (! bfd_link_pic (info)) { memcpy (splt->contents + h->plt.offset, elf_mn10300_plt_entry, elf_mn10300_sizeof_plt (info)); @@ -5357,7 +5357,7 @@ _bfd_mn10300_elf_finish_dynamic_symbol (bfd * output_bfd, the symbol was forced to be local because of a version file. The entry in the global offset table will already have been initialized in the relocate_section function. */ - if (info->shared + if (bfd_link_pic (info) && (info->symbolic || h->dynindx == -1) && h->def_regular) { @@ -5497,7 +5497,7 @@ _bfd_mn10300_elf_finish_dynamic_sections (bfd * output_bfd, splt = htab->root.splt; if (splt && splt->size > 0) { - if (info->shared) + if (bfd_link_pic (info)) { memcpy (splt->contents, elf_mn10300_pic_plt_entry, elf_mn10300_sizeof_plt (info)); diff --git a/bfd/elf-s390-common.c b/bfd/elf-s390-common.c index 09d4e5c3414..5c36ec8700f 100644 --- a/bfd/elf-s390-common.c +++ b/bfd/elf-s390-common.c @@ -45,7 +45,7 @@ s390_elf_create_ifunc_sections (bfd *abfd, struct bfd_link_info *info) flags = bed->dynamic_sec_flags; - if (info->shared) + if (bfd_link_pic (info)) { s = bfd_make_section_with_flags (abfd, ".rela.ifunc", flags | SEC_READONLY); @@ -105,7 +105,7 @@ s390_elf_allocate_ifunc_dyn_relocs (struct bfd_link_info *info, where it is marked with regular reference, but not non-GOT reference. It may happen if we didn't see STT_GNU_IFUNC symbol at the time when checking relocations. */ - if (info->shared + if (bfd_link_pic (info) && !h->non_got_ref && h->ref_regular) for (p = *head; p != NULL; p = p->next) @@ -151,7 +151,10 @@ keep: point to the IPLT slot. That way the referencing shared lib will always get the PLT slot address when resolving the respective R_390_GLOB_DAT/R_390_64 relocs on that symbol. */ - if (info->executable && !info->shared && h->def_regular && h->ref_dynamic) + if (bfd_link_executable (info) + && !bfd_link_pic (info) + && h->def_regular + && h->ref_dynamic) { h->root.u.def.section = htab->iplt; h->root.u.def.value = h->plt.offset; @@ -161,7 +164,7 @@ keep: /* We need dynamic relocation for STT_GNU_IFUNC symbol only when there is a non-GOT reference in a shared object. */ - if (!info->shared || !h->non_got_ref) + if (!bfd_link_pic (info) || !h->non_got_ref) *head = NULL; /* Finally, allocate space. */ @@ -182,9 +185,9 @@ keep: avoided if the values in the GOT slots could differ for pointer equality reasons. */ if (h->got.refcount <= 0 - || (info->shared + || (bfd_link_pic (info) && (h->dynindx == -1 || h->forced_local)) - || (info->executable && info->shared) + || (bfd_link_executable (info) && bfd_link_pic (info)) || htab->sgot == NULL) { /* Use .got.iplt. */ @@ -194,7 +197,7 @@ keep: { h->got.offset = htab->sgot->size; htab->sgot->size += GOT_ENTRY_SIZE; - if (info->shared) + if (bfd_link_pic (info)) htab->srelgot->size += RELA_ENTRY_SIZE; } diff --git a/bfd/elf-vxworks.c b/bfd/elf-vxworks.c index acc25c04449..56fdec0e83f 100644 --- a/bfd/elf-vxworks.c +++ b/bfd/elf-vxworks.c @@ -64,7 +64,7 @@ elf_vxworks_add_symbol_hook (bfd *abfd, give the symbol weak binding to get the desired samantics. This transformation will be undone in elf_i386_vxworks_link_output_symbol_hook. */ - if ((info->shared || abfd->flags & DYNAMIC) + if ((bfd_link_pic (info) || abfd->flags & DYNAMIC) && elf_vxworks_gott_symbol_p (abfd, *namep)) { sym->st_info = ELF_ST_INFO (STB_WEAK, ELF_ST_TYPE (sym->st_info)); @@ -89,7 +89,7 @@ elf_vxworks_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info, htab = elf_hash_table (info); bed = get_elf_backend_data (dynobj); - if (!info->shared) + if (!bfd_link_pic (info)) { s = bfd_make_section_anyway_with_flags (dynobj, bed->default_use_rela_p diff --git a/bfd/elf.c b/bfd/elf.c index 5be48d98289..f20679e303c 100644 --- a/bfd/elf.c +++ b/bfd/elf.c @@ -3081,7 +3081,8 @@ elf_fake_sections (bfd *abfd, asection *asect, void *fsarg) if (arg->link_info /* Do the normal setup if we wouldn't create any sections here. */ && esd->rel.count + esd->rela.count > 0 - && (arg->link_info->relocatable || arg->link_info->emitrelocations)) + && (bfd_link_relocatable (arg->link_info) + || arg->link_info->emitrelocations)) { if (esd->rel.count && esd->rel.hdr == NULL && !_bfd_elf_init_reloc_shdr (abfd, &esd->rel, name, FALSE, @@ -3298,7 +3299,7 @@ assign_section_numbers (bfd *abfd, struct bfd_link_info *link_info) _bfd_elf_strtab_clear_all_refs (elf_shstrtab (abfd)); /* SHT_GROUP sections are in relocatable files only. */ - if (link_info == NULL || link_info->relocatable) + if (link_info == NULL || bfd_link_relocatable (link_info)) { /* Put SHT_GROUP sections first. */ for (sec = abfd->sections; sec != NULL; sec = sec->next) @@ -5555,9 +5556,7 @@ assign_file_positions_except_relocs (bfd *abfd, } /* Set e_type in ELF header to ET_EXEC for -pie -Ttext-segment=. */ - if (link_info != NULL - && link_info->executable - && link_info->shared) + if (link_info != NULL && bfd_link_pie (link_info)) { unsigned int num_segments = elf_elfheader (abfd)->e_phnum; Elf_Internal_Phdr *segment = elf_tdata (abfd)->phdr; @@ -6894,7 +6893,8 @@ _bfd_elf_init_private_section_data (bfd *ibfd, { Elf_Internal_Shdr *ihdr, *ohdr; - bfd_boolean final_link = link_info != NULL && !link_info->relocatable; + bfd_boolean final_link = (link_info != NULL + && !bfd_link_relocatable (link_info)); if (ibfd->xvec->flavour != bfd_target_elf_flavour || obfd->xvec->flavour != bfd_target_elf_flavour) @@ -8187,7 +8187,7 @@ _bfd_elf_sizeof_headers (bfd *abfd, struct bfd_link_info *info) const struct elf_backend_data *bed = get_elf_backend_data (abfd); int ret = bed->s->sizeof_ehdr; - if (!info->relocatable) + if (!bfd_link_relocatable (info)) { bfd_size_type phdr_size = elf_program_header_size (abfd); diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c index d313de41d32..bd4b5763cfb 100644 --- a/bfd/elf32-arm.c +++ b/bfd/elf32-arm.c @@ -3409,7 +3409,7 @@ elf32_arm_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info) return FALSE; htab->sdynbss = bfd_get_linker_section (dynobj, ".dynbss"); - if (!info->shared) + if (!bfd_link_pic (info)) htab->srelbss = bfd_get_linker_section (dynobj, RELOC_SECTION (htab, ".bss")); @@ -3418,7 +3418,7 @@ elf32_arm_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info) if (!elf_vxworks_create_dynamic_sections (dynobj, info, &htab->srelplt2)) return FALSE; - if (info->shared) + if (bfd_link_pic (info)) { htab->plt_header_size = 0; htab->plt_entry_size @@ -3452,7 +3452,7 @@ elf32_arm_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info) if (!htab->root.splt || !htab->root.srelplt || !htab->sdynbss - || (!info->shared && !htab->srelbss)) + || (!bfd_link_pic (info) && !htab->srelbss)) abort (); return TRUE; @@ -3746,7 +3746,7 @@ arm_type_of_stub (struct bfd_link_info *info, /* Thumb to thumb. */ if (!thumb_only) { - stub_type = (info->shared | globals->pic_veneer) + stub_type = (bfd_link_pic (info) | globals->pic_veneer) /* PIC stubs. */ ? ((globals->use_blx && (r_type == R_ARM_THM_CALL)) @@ -3768,7 +3768,7 @@ arm_type_of_stub (struct bfd_link_info *info, } else { - stub_type = (info->shared | globals->pic_veneer) + stub_type = (bfd_link_pic (info) | globals->pic_veneer) /* PIC stub. */ ? arm_stub_long_branch_thumb_only_pic /* non-PIC stub. */ @@ -3789,7 +3789,7 @@ arm_type_of_stub (struct bfd_link_info *info, } stub_type = - (info->shared | globals->pic_veneer) + (bfd_link_pic (info) | globals->pic_veneer) /* PIC stubs. */ ? (r_type == R_ARM_THM_TLS_CALL /* TLS PIC stubs. */ @@ -3843,7 +3843,7 @@ arm_type_of_stub (struct bfd_link_info *info, || (r_type == R_ARM_JUMP24) || (r_type == R_ARM_PLT32)) { - stub_type = (info->shared | globals->pic_veneer) + stub_type = (bfd_link_pic (info) | globals->pic_veneer) /* PIC stubs. */ ? ((globals->use_blx) /* V5T and above. */ @@ -3866,7 +3866,7 @@ arm_type_of_stub (struct bfd_link_info *info, || (branch_offset < ARM_MAX_BWD_BRANCH_OFFSET)) { stub_type = - (info->shared | globals->pic_veneer) + (bfd_link_pic (info) | globals->pic_veneer) /* PIC stubs. */ ? (r_type == R_ARM_TLS_CALL /* TLS PIC Stub. */ @@ -4097,7 +4097,8 @@ elf32_arm_tls_transition (struct bfd_link_info *info, int r_type, { int is_local = (h == NULL); - if (info->shared || (h && h->root.type == bfd_link_hash_undefweak)) + if (bfd_link_pic (info) + || (h && h->root.type == bfd_link_hash_undefweak)) return r_type; /* We do not support relaxations for Old TLS models. */ @@ -5838,7 +5839,8 @@ record_arm_to_thumb_glue (struct bfd_link_info * link_info, free (tmp_name); - if (link_info->shared || globals->root.is_relocatable_executable + if (bfd_link_pic (link_info) + || globals->root.is_relocatable_executable || globals->pic_veneer) size = ARM2THUMB_PIC_GLUE_SIZE; else if (globals->use_blx) @@ -6110,7 +6112,7 @@ bfd_elf32_arm_add_glue_sections_to_bfd (bfd *abfd, { /* If we are only performing a partial link do not bother adding the glue. */ - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; return arm_make_glue_section (abfd, ARM2THUMB_GLUE_SECTION_NAME) @@ -6130,7 +6132,7 @@ bfd_elf32_arm_get_bfd_for_interworking (bfd *abfd, struct bfd_link_info *info) /* If we are only performing a partial link do not bother getting a bfd to hold the glue. */ - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; /* Make sure we don't attach the glue sections to a dynamic object. */ @@ -6182,7 +6184,7 @@ bfd_elf32_arm_process_before_allocation (bfd *abfd, /* If we are only performing a partial link do not bother to construct any glue. */ - if (link_info->relocatable) + if (bfd_link_relocatable (link_info)) return TRUE; /* Here we have a bfd that is to be included on the link. We have a @@ -6746,7 +6748,7 @@ bfd_elf32_arm_vfp11_erratum_scan (bfd *abfd, struct bfd_link_info *link_info) /* If we are only performing a partial link do not bother to construct any glue. */ - if (link_info->relocatable) + if (bfd_link_relocatable (link_info)) return TRUE; /* Skip if this bfd does not correspond to an ELF image. */ @@ -6932,7 +6934,7 @@ bfd_elf32_arm_vfp11_fix_veneer_locations (bfd *abfd, struct elf32_arm_link_hash_table *globals; char *tmp_name; - if (link_info->relocatable) + if (bfd_link_relocatable (link_info)) return; /* Skip if this bfd does not correspond to an ELF image. */ @@ -7220,7 +7222,8 @@ elf32_arm_create_thumb_stub (struct bfd_link_info * info, --my_offset; myh->root.u.def.value = my_offset; - if (info->shared || globals->root.is_relocatable_executable + if (bfd_link_pic (info) + || globals->root.is_relocatable_executable || globals->pic_veneer) { /* For relocatable objects we can't use absolute addresses, @@ -7671,7 +7674,7 @@ elf32_arm_populate_plt_entry (bfd *output_bfd, struct bfd_link_info *info, + root_plt->offset); ptr = splt->contents + root_plt->offset; - if (htab->vxworks_p && info->shared) + if (htab->vxworks_p && bfd_link_pic (info)) { unsigned int i; bfd_vma val; @@ -8383,7 +8386,8 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto, /* When generating a shared object or relocatable executable, these relocations are copied into the output file to be resolved at run time. */ - if ((info->shared || globals->root.is_relocatable_executable) + if ((bfd_link_pic (info) + || globals->root.is_relocatable_executable) && (input_section->flags & SEC_ALLOC) && !(globals->vxworks_p && strcmp (input_section->output_section->name, @@ -8409,7 +8413,7 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto, { char *v = _("shared object"); - if (info->executable) + if (bfd_link_executable (info)) v = _("PIE executable"); (*_bfd_error_handler) @@ -8448,7 +8452,7 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto, memset (&outrel, 0, sizeof outrel); else if (h != NULL && h->dynindx != -1 - && (!info->shared + && (!bfd_link_pic (info) || !SYMBOLIC_BIND (info, h) || !h->def_regular)) outrel.r_info = ELF32_R_INFO (h->dynindx, r_type); @@ -9398,7 +9402,7 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto, { if (dynreloc_st_type == STT_GNU_IFUNC) outrel.r_info = ELF32_R_INFO (0, R_ARM_IRELATIVE); - else if (info->shared && + else if (bfd_link_pic (info) && (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT || h->root.type != bfd_link_hash_undefweak)) outrel.r_info = ELF32_R_INFO (0, R_ARM_RELATIVE); @@ -9447,7 +9451,7 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto, if (globals->use_rel) bfd_put_32 (output_bfd, dynreloc_value, sgot->contents + off); - if (info->shared || dynreloc_st_type == STT_GNU_IFUNC) + if (bfd_link_pic (info) || dynreloc_st_type == STT_GNU_IFUNC) { Elf_Internal_Rela outrel; @@ -9496,7 +9500,7 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto, { /* If we don't know the module number, create a relocation for it. */ - if (info->shared) + if (bfd_link_pic (info)) { Elf_Internal_Rela outrel; @@ -9546,8 +9550,10 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto, { bfd_boolean dyn; dyn = globals->root.dynamic_sections_created; - if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h) - && (!info->shared + if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, + bfd_link_pic (info), + h) + && (!bfd_link_pic (info) || !SYMBOL_REFERENCES_LOCAL (info, h))) { *unresolved_reloc_p = FALSE; @@ -9584,7 +9590,7 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto, now, and emit any relocations. If both an IE GOT and a GD GOT are necessary, we emit the GD first. */ - if ((info->shared || indx != 0) + if ((bfd_link_pic (info) || indx != 0) && (h == NULL || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT || h->root.type != bfd_link_hash_undefweak)) @@ -9600,7 +9606,7 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto, /* We should have relaxed, unless this is an undefined weak symbol. */ BFD_ASSERT ((h && (h->root.type == bfd_link_hash_undefweak)) - || info->shared); + || bfd_link_pic (info)); BFD_ASSERT (globals->sgotplt_jump_table_size + offplt + 8 <= globals->root.sgotplt->size); @@ -9875,7 +9881,7 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto, } case R_ARM_TLS_LE32: - if (info->shared && !info->pie) + if (bfd_link_pic (info) && !bfd_link_pie (info)) { (*_bfd_error_handler) (_("%B(%A+0x%lx): R_ARM_TLS_LE32 relocation not permitted in shared object"), @@ -10596,7 +10602,7 @@ elf32_arm_relocate_section (bfd * output_bfd, relocation = (sec->output_section->vma + sec->output_offset + sym->st_value); - if (!info->relocatable + if (!bfd_link_relocatable (info) && (sec->flags & SEC_MERGE) && ELF_ST_TYPE (sym->st_info) == STT_SECTION) { @@ -10703,7 +10709,7 @@ elf32_arm_relocate_section (bfd * output_bfd, RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) { /* This is a relocatable link. We don't have to change anything, unless the reloc is against a section symbol, @@ -12448,7 +12454,7 @@ elf32_arm_gc_sweep_hook (bfd * abfd, const Elf_Internal_Rela *rel, *relend; struct elf32_arm_link_hash_table * globals; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; globals = elf32_arm_hash_table (info); @@ -12546,7 +12552,7 @@ elf32_arm_gc_sweep_hook (bfd * abfd, case R_ARM_THM_MOVW_PREL_NC: case R_ARM_THM_MOVT_PREL: /* Should the interworking branches be here also? */ - if ((info->shared || globals->root.is_relocatable_executable) + if ((bfd_link_pic (info) || globals->root.is_relocatable_executable) && (sec->flags & SEC_ALLOC) != 0) { if (h == NULL @@ -12644,7 +12650,7 @@ elf32_arm_check_relocs (bfd *abfd, struct bfd_link_info *info, bfd_boolean may_need_local_target_p; unsigned long nsyms; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; BFD_ASSERT (is_arm_elf (abfd)); @@ -12761,7 +12767,7 @@ elf32_arm_check_relocs (bfd *abfd, struct bfd_link_info *info, default: tls_type = GOT_NORMAL; break; } - if (!info->executable && (tls_type & GOT_TLS_IE)) + if (!bfd_link_executable (info) && (tls_type & GOT_TLS_IE)) info->flags |= DF_STATIC_TLS; if (h != NULL) @@ -12846,7 +12852,7 @@ elf32_arm_check_relocs (bfd *abfd, struct bfd_link_info *info, case R_ARM_MOVT_ABS: case R_ARM_THM_MOVW_ABS_NC: case R_ARM_THM_MOVT_ABS: - if (info->shared) + if (bfd_link_pic (info)) { (*_bfd_error_handler) (_("%B: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC"), @@ -12859,7 +12865,7 @@ elf32_arm_check_relocs (bfd *abfd, struct bfd_link_info *info, /* Fall through. */ case R_ARM_ABS32: case R_ARM_ABS32_NOI: - if (h != NULL && info->executable) + if (h != NULL && bfd_link_executable (info)) { h->pointer_equality_needed = 1; } @@ -12872,7 +12878,7 @@ elf32_arm_check_relocs (bfd *abfd, struct bfd_link_info *info, case R_ARM_THM_MOVT_PREL: /* Should the interworking branches be listed here? */ - if ((info->shared || htab->root.is_relocatable_executable) + if ((bfd_link_pic (info) || htab->root.is_relocatable_executable) && (sec->flags & SEC_ALLOC) != 0) { if (h == NULL @@ -13315,7 +13321,7 @@ elf32_arm_adjust_dynamic_symbol (struct bfd_link_info * info, be handled correctly by relocate_section. Relocatable executables can reference data in shared objects directly, so we don't need to do anything here. */ - if (info->shared || globals->root.is_relocatable_executable) + if (bfd_link_pic (info) || globals->root.is_relocatable_executable) return TRUE; /* We must allocate the symbol in our .dynbss section, which will @@ -13397,7 +13403,7 @@ allocate_dynrelocs_for_symbol (struct elf_link_hash_entry *h, void * inf) h->got.refcount = 0; } - if (info->shared + if (bfd_link_pic (info) || eh->is_iplt || WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, 0, h)) { @@ -13408,7 +13414,7 @@ allocate_dynrelocs_for_symbol (struct elf_link_hash_entry *h, void * inf) location in the .plt. This is required to make function pointers compare as equal between the normal executable and the shared library. */ - if (! info->shared + if (! bfd_link_pic (info) && !h->def_regular) { h->root.u.def.section = htab->root.splt; @@ -13423,7 +13429,7 @@ allocate_dynrelocs_for_symbol (struct elf_link_hash_entry *h, void * inf) /* VxWorks executables have a second set of relocations for each PLT entry. They go in a separate relocation section, which is processed by the kernel loader. */ - if (htab->vxworks_p && !info->shared) + if (htab->vxworks_p && !bfd_link_pic (info)) { /* There is a relocation for the initial PLT entry: an R_ARM_32 relocation for _GLOBAL_OFFSET_TABLE_. */ @@ -13510,13 +13516,15 @@ allocate_dynrelocs_for_symbol (struct elf_link_hash_entry *h, void * inf) dyn = htab->root.dynamic_sections_created; indx = 0; - if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h) - && (!info->shared + if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, + bfd_link_pic (info), + h) + && (!bfd_link_pic (info) || !SYMBOL_REFERENCES_LOCAL (info, h))) indx = h->dynindx; if (tls_type != GOT_NORMAL - && (info->shared || indx != 0) + && (bfd_link_pic (info) || indx != 0) && (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT || h->root.type != bfd_link_hash_undefweak)) { @@ -13550,8 +13558,9 @@ allocate_dynrelocs_for_symbol (struct elf_link_hash_entry *h, void * inf) they all resolve dynamically instead. Reserve room for the GOT entry's R_ARM_IRELATIVE relocation. */ elf32_arm_allocate_irelocs (info, htab->root.srelgot, 1); - else if (info->shared && (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT - || h->root.type != bfd_link_hash_undefweak)) + else if (bfd_link_pic (info) + && (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT + || h->root.type != bfd_link_hash_undefweak)) /* Reserve room for the GOT entry's R_ARM_RELATIVE relocation. */ elf32_arm_allocate_dynrelocs (info, htab->root.srelgot, 1); } @@ -13601,7 +13610,7 @@ allocate_dynrelocs_for_symbol (struct elf_link_hash_entry *h, void * inf) space for pc-relative relocs that have become local due to symbol visibility changes. */ - if (info->shared || htab->root.is_relocatable_executable) + if (bfd_link_pic (info) || htab->root.is_relocatable_executable) { /* Relocs that use pc_count are PC-relative forms, which will appear on something like ".long foo - ." or "movw REG, foo - .". We want @@ -13777,7 +13786,7 @@ elf32_arm_size_dynamic_sections (bfd * output_bfd ATTRIBUTE_UNUSED, if (elf_hash_table (info)->dynamic_sections_created) { /* Set the contents of the .interp section to the interpreter. */ - if (info->executable) + if (bfd_link_executable (info)) { s = bfd_get_linker_section (dynobj, ".interp"); BFD_ASSERT (s != NULL); @@ -13929,13 +13938,13 @@ elf32_arm_size_dynamic_sections (bfd * output_bfd ATTRIBUTE_UNUSED, && (local_iplt == NULL || local_iplt->arm.noncall_refcount == 0)) elf32_arm_allocate_irelocs (info, srel, 1); - else if (info->shared || output_bfd->flags & DYNAMIC) + else if (bfd_link_pic (info) || output_bfd->flags & DYNAMIC) { - if ((info->shared && !(*local_tls_type & GOT_TLS_GDESC)) + if ((bfd_link_pic (info) && !(*local_tls_type & GOT_TLS_GDESC)) || *local_tls_type & GOT_TLS_GD) elf32_arm_allocate_dynrelocs (info, srel, 1); - if (info->shared && *local_tls_type & GOT_TLS_GDESC) + if (bfd_link_pic (info) && *local_tls_type & GOT_TLS_GDESC) { elf32_arm_allocate_dynrelocs (info, htab->root.srelplt, 1); @@ -13954,7 +13963,7 @@ elf32_arm_size_dynamic_sections (bfd * output_bfd ATTRIBUTE_UNUSED, for R_ARM_TLS_LDM32 relocations. */ htab->tls_ldm_got.offset = htab->root.sgot->size; htab->root.sgot->size += 8; - if (info->shared) + if (bfd_link_pic (info)) elf32_arm_allocate_dynrelocs (info, htab->root.srelgot, 1); } else @@ -14090,7 +14099,7 @@ elf32_arm_size_dynamic_sections (bfd * output_bfd ATTRIBUTE_UNUSED, #define add_dynamic_entry(TAG, VAL) \ _bfd_elf_add_dynamic_entry (info, TAG, VAL) - if (info->executable) + if (bfd_link_executable (info)) { if (!add_dynamic_entry (DT_DEBUG, 0)) return FALSE; @@ -14158,7 +14167,7 @@ elf32_arm_always_size_sections (bfd *output_bfd, { asection *tls_sec; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; tls_sec = elf_hash_table (info)->tls_sec; @@ -14649,7 +14658,9 @@ elf32_arm_finish_dynamic_sections (bfd * output_bfd, struct bfd_link_info * info #endif } - if (htab->vxworks_p && !info->shared && htab->root.splt->size > 0) + if (htab->vxworks_p + && !bfd_link_pic (info) + && htab->root.splt->size > 0) { /* Correct the .rel(a).plt.unloaded relocations. They will have incorrect symbol indexes. */ @@ -15168,7 +15179,7 @@ elf32_arm_output_arch_local_syms (bfd *output_bfd, osi.sec_shndx = _bfd_elf_section_from_bfd_section (output_bfd, osi.sec->output_section); - if (info->shared || htab->root.is_relocatable_executable + if (bfd_link_pic (info) || htab->root.is_relocatable_executable || htab->pic_veneer) size = ARM2THUMB_PIC_GLUE_SIZE; else if (htab->use_blx) @@ -15246,7 +15257,7 @@ elf32_arm_output_arch_local_syms (bfd *output_bfd, if (htab->vxworks_p) { /* VxWorks shared libraries have no PLT header. */ - if (!info->shared) + if (!bfd_link_pic (info)) { if (!elf32_arm_output_map_sym (&osi, ARM_MAP_ARM, 0)) return FALSE; diff --git a/bfd/elf32-avr.c b/bfd/elf32-avr.c index bd57ab79a0e..86b9f8406bb 100644 --- a/bfd/elf32-avr.c +++ b/bfd/elf32-avr.c @@ -1474,7 +1474,7 @@ elf32_avr_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) continue; r = avr_final_link_relocate (howto, input_bfd, input_section, @@ -2375,7 +2375,7 @@ elf32_avr_relax_section (bfd *abfd, || !strcmp (sec->name,".jumptables")) shrinkable = FALSE; - if (link_info->relocatable) + if (bfd_link_relocatable (link_info)) (*link_info->callbacks->einfo) (_("%P%F: --relax and -r may not be used together\n")); @@ -2413,7 +2413,7 @@ elf32_avr_relax_section (bfd *abfd, /* We don't have to do anything for a relocatable link, if this section does not have relocs, or if this is not a code section. */ - if (link_info->relocatable + if (bfd_link_relocatable (link_info) || (sec->flags & SEC_RELOC) == 0 || sec->reloc_count == 0 || (sec->flags & SEC_CODE) == 0) @@ -3641,7 +3641,7 @@ elf32_avr_size_stubs (bfd *output_bfd, } else if (hh->root.type == bfd_link_hash_undefweak) { - if (! info->shared) + if (! bfd_link_pic (info)) continue; } else if (hh->root.type == bfd_link_hash_undefined) diff --git a/bfd/elf32-bfin.c b/bfd/elf32-bfin.c index 80d20ca224f..49ef360bcdf 100644 --- a/bfd/elf32-bfin.c +++ b/bfd/elf32-bfin.c @@ -1165,7 +1165,7 @@ bfin_check_relocs (bfd * abfd, asection *sgot; asection *srelgot; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; dynobj = elf_hash_table (info)->dynobj; @@ -1232,7 +1232,7 @@ bfin_check_relocs (bfd * abfd, BFD_ASSERT (sgot != NULL); } - if (srelgot == NULL && (h != NULL || info->shared)) + if (srelgot == NULL && (h != NULL || bfd_link_pic (info))) { srelgot = bfd_get_linker_section (dynobj, ".rela.got"); if (srelgot == NULL) @@ -1285,7 +1285,7 @@ bfin_check_relocs (bfd * abfd, if (local_got_refcounts[r_symndx] == 0) { sgot->size += 4; - if (info->shared) + if (bfd_link_pic (info)) { /* If we are generating a shared object, we need to output a R_68K_RELATIVE reloc so that the dynamic @@ -1455,7 +1455,7 @@ bfin_relocate_section (bfd * output_bfd, RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) continue; address = rel->r_offset; @@ -1502,8 +1502,10 @@ bfin_relocate_section (bfd * output_bfd, BFD_ASSERT (off != (bfd_vma) - 1); dyn = elf_hash_table (info)->dynamic_sections_created; - if (!WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h) - || (info->shared + if (!WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, + bfd_link_pic (info), + h) + || (bfd_link_pic (info) && (info->symbolic || h->dynindx == -1 || h->forced_local) @@ -1548,7 +1550,7 @@ bfin_relocate_section (bfd * output_bfd, { bfd_put_32 (output_bfd, relocation, sgot->contents + off); - if (info->shared) + if (bfd_link_pic (info)) { asection *s; Elf_Internal_Rela outrel; @@ -1719,7 +1721,7 @@ bfin_gc_sweep_hook (bfd * abfd, { /* We don't need the .got entry any more. */ sgot->size -= 4; - if (info->shared) + if (bfd_link_pic (info)) srelgot->size -= sizeof (Elf32_External_Rela); } } @@ -2213,7 +2215,7 @@ _bfinfdpic_emit_got_relocs_plt_entries (struct bfinfdpic_relocs_info *entry, /* If we're linking an executable at a fixed address, we can omit the dynamic relocation as long as the symbol is local to this module. */ - if (info->executable && !info->pie + if (bfd_link_executable (info) && !bfd_link_pic (info) && (entry->symndx != -1 || BFINFDPIC_SYM_LOCAL (info, entry->d.h))) { @@ -2268,7 +2270,7 @@ _bfinfdpic_emit_got_relocs_plt_entries (struct bfinfdpic_relocs_info *entry, if (entry->symndx == -1 && ! BFINFDPIC_FUNCDESC_LOCAL (info, entry->d.h) && BFINFDPIC_SYM_LOCAL (info, entry->d.h) - && !(info->executable && !info->pie)) + && !(bfd_link_executable (info) && !bfd_link_pic (info))) { reloc = R_BFIN_FUNCDESC; idx = elf_section_data (entry->d.h->root.u.def.section @@ -2304,7 +2306,7 @@ _bfinfdpic_emit_got_relocs_plt_entries (struct bfinfdpic_relocs_info *entry, dynamic symbol entry for the got section, so idx will be zero, which means we can and should compute the address of the private descriptor ourselves. */ - if (info->executable && !info->pie + if (bfd_link_executable (info) && !bfd_link_pic (info) && (entry->symndx != -1 || BFINFDPIC_FUNCDESC_LOCAL (info, entry->d.h))) { @@ -2367,7 +2369,7 @@ _bfinfdpic_emit_got_relocs_plt_entries (struct bfinfdpic_relocs_info *entry, /* If we're linking an executable at a fixed address, we can omit the dynamic relocation as long as the symbol is local to this module. */ - if (info->executable && !info->pie + if (bfd_link_executable (info) && !bfd_link_pic (info) && (entry->symndx != -1 || BFINFDPIC_SYM_LOCAL (info, entry->d.h))) { if (sec) @@ -2415,7 +2417,10 @@ _bfinfdpic_emit_got_relocs_plt_entries (struct bfinfdpic_relocs_info *entry, /* If we've omitted the dynamic relocation, just emit the fixed addresses of the symbol and of the local GOT base offset. */ - if (info->executable && !info->pie && sec && sec->output_section) + if (bfd_link_executable (info) + && !bfd_link_pic (info) + && sec + && sec->output_section) { lowword = ad; highword = bfinfdpic_got_section (info)->output_section->vma @@ -2595,7 +2600,7 @@ bfinfdpic_relocate_section (bfd * output_bfd, Elf_Internal_Rela *relend; unsigned isec_segment, got_segment, plt_segment, check_segment[2]; - int silence_segment_error = !(info->shared || info->pie); + int silence_segment_error = !bfd_link_pic (info); symtab_hdr = & elf_tdata (input_bfd)->symtab_hdr; sym_hashes = elf_sym_hashes (input_bfd); @@ -2675,7 +2680,7 @@ bfinfdpic_relocate_section (bfd * output_bfd, RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) continue; if (h != NULL @@ -2829,7 +2834,8 @@ bfinfdpic_relocate_section (bfd * output_bfd, section+offset. */ if (h && ! BFINFDPIC_FUNCDESC_LOCAL (info, h) && BFINFDPIC_SYM_LOCAL (info, h) - && !(info->executable && !info->pie)) + && !(bfd_link_executable (info) + && !bfd_link_pic (info))) { dynindx = elf_section_data (h->root.u.def.section ->output_section)->dynindx; @@ -2866,7 +2872,7 @@ bfinfdpic_relocate_section (bfd * output_bfd, dynamic symbol entry for the got section, so idx will be zero, which means we can and should compute the address of the private descriptor ourselves. */ - if (info->executable && !info->pie + if (bfd_link_executable (info) && !bfd_link_pic (info) && (!h || BFINFDPIC_FUNCDESC_LOCAL (info, h))) { bfd_vma offset; @@ -2989,7 +2995,7 @@ bfinfdpic_relocate_section (bfd * output_bfd, can omit the dynamic relocation as long as the symbol is defined in the current link unit (which is implied by its output section not being NULL). */ - if (info->executable && !info->pie + if (bfd_link_executable (info) && !bfd_link_pic (info) && (!h || BFINFDPIC_SYM_LOCAL (info, h))) { if (osec) @@ -3069,7 +3075,7 @@ bfinfdpic_relocate_section (bfd * output_bfd, /* If we've omitted the dynamic relocation, just emit the fixed addresses of the symbol and of the local GOT base offset. */ - if (info->executable && !info->pie + if (bfd_link_executable (info) && !bfd_link_pic (info) && (!h || BFINFDPIC_SYM_LOCAL (info, h))) bfd_put_32 (output_bfd, bfinfdpic_got_section (info)->output_section->vma @@ -3127,11 +3133,11 @@ bfinfdpic_relocate_section (bfd * output_bfd, && picrel->d.h->root.type == bfd_link_hash_undefined)) info->callbacks->warning (info, - (info->shared || info->pie) + bfd_link_pic (info) ? _("relocations between different segments are not supported") : _("warning: relocation references a different segment"), name, input_bfd, input_section, rel->r_offset); - if (!silence_segment_error && (info->shared || info->pie)) + if (!silence_segment_error && bfd_link_pic (info)) return FALSE; elf_elfheader (output_bfd)->e_flags |= EF_BFIN_PIC; } @@ -3497,7 +3503,7 @@ _bfin_create_got_section (bfd *abfd, struct bfd_link_info *info) h->def_regular = 1; h->type = STT_OBJECT; - if (! info->executable + if (! bfd_link_executable (info) && ! bfd_elf_link_record_dynamic_symbol (info, h)) return FALSE; } @@ -3566,7 +3572,7 @@ elf32_bfinfdpic_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) be needed, we can discard it later. We will never need this section when generating a shared object, since they do not use copy relocs. */ - if (! info->shared) + if (! bfd_link_pic (info)) { s = bfd_make_section_anyway_with_flags (abfd, ".rela.bss", @@ -3649,7 +3655,7 @@ _bfinfdpic_count_relocs_fixups (struct bfinfdpic_relocs_info *entry, { bfd_vma relocs = 0, fixups = 0; - if (!dinfo->info->executable || dinfo->info->pie) + if (!bfd_link_executable (dinfo->info) || bfd_link_pie (dinfo->info)) relocs = entry->relocs32 + entry->relocsfd + entry->relocsfdv; else { @@ -4251,7 +4257,7 @@ elf32_bfinfdpic_size_dynamic_sections (bfd *output_bfd, if (htab->dynamic_sections_created) { /* Set the contents of the .interp section to the interpreter. */ - if (info->executable) + if (bfd_link_executable (info)) { s = bfd_get_linker_section (dynobj, ".interp"); BFD_ASSERT (s != NULL); @@ -4318,7 +4324,7 @@ static bfd_boolean elf32_bfinfdpic_always_size_sections (bfd *output_bfd, struct bfd_link_info *info) { - if (!info->relocatable + if (!bfd_link_relocatable (info) && !bfd_elf_stack_segment_size (output_bfd, info, "__stacksize", DEFAULT_STACK_SIZE)) return FALSE; @@ -4735,7 +4741,7 @@ bfinfdpic_check_relocs (bfd *abfd, struct bfd_link_info *info, bfd *dynobj; struct bfinfdpic_relocs_info *picrel; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; symtab_hdr = &elf_tdata (abfd)->symtab_hdr; @@ -5145,7 +5151,7 @@ bfin_finish_dynamic_symbol (bfd * output_bfd, the symbol was forced to be local because of a version file. The entry in the global offset table will already have been initialized in the relocate_section function. */ - if (info->shared + if (bfd_link_pic (info) && (info->symbolic || h->dynindx == -1 || h->forced_local) && h->def_regular) { @@ -5232,7 +5238,7 @@ bfin_adjust_dynamic_symbol (struct bfd_link_info *info, only references to the symbol are via the global offset table. For such cases we need not do anything here; the relocations will be handled correctly by relocate_section. */ - if (info->shared) + if (bfd_link_pic (info)) return TRUE; /* We must allocate the symbol in our .dynbss section, which will @@ -5362,7 +5368,7 @@ bfin_size_dynamic_sections (bfd * output_bfd ATTRIBUTE_UNUSED, if (elf_hash_table (info)->dynamic_sections_created) { /* Set the contents of the .interp section to the interpreter. */ - if (info->executable) + if (bfd_link_executable (info)) { s = bfd_get_linker_section (dynobj, ".interp"); BFD_ASSERT (s != NULL); @@ -5388,7 +5394,7 @@ bfin_size_dynamic_sections (bfd * output_bfd ATTRIBUTE_UNUSED, against symbols that have become local due to visibility changes. We allocated space for them in the check_relocs routine, but we will not fill them in in the relocate_section routine. */ - if (info->shared) + if (bfd_link_pic (info)) elf_link_hash_traverse (elf_hash_table (info), bfin_discard_copies, info); @@ -5467,7 +5473,7 @@ bfin_size_dynamic_sections (bfd * output_bfd ATTRIBUTE_UNUSED, #define add_dynamic_entry(TAG, VAL) \ _bfd_elf_add_dynamic_entry (info, TAG, VAL) - if (!info->shared) + if (!bfd_link_pic (info)) { if (!add_dynamic_entry (DT_DEBUG, 0)) return FALSE; @@ -5515,7 +5521,7 @@ bfd_bfin_elf32_create_embedded_relocs (bfd *abfd, bfd_byte *p; bfd_size_type amt; - BFD_ASSERT (! info->relocatable); + BFD_ASSERT (! bfd_link_relocatable (info)); *errmsg = NULL; diff --git a/bfd/elf32-cr16.c b/bfd/elf32-cr16.c index 047d720575d..5d8ffbcaa60 100644 --- a/bfd/elf32-cr16.c +++ b/bfd/elf32-cr16.c @@ -705,7 +705,7 @@ cr16_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec, srelgot = NULL; bfd_boolean result = FALSE; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; symtab_hdr = &elf_tdata (abfd)->symtab_hdr; @@ -767,7 +767,7 @@ cr16_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec, } if (srelgot == NULL - && (h != NULL || info->executable)) + && (h != NULL || bfd_link_executable (info))) { srelgot = bfd_get_linker_section (dynobj, ".rela.got"); if (srelgot == NULL) @@ -828,7 +828,7 @@ cr16_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec, local_got_offsets[r_symndx] = sgot->size; - if (info->executable) + if (bfd_link_executable (info)) /* If we are generating a shared object, we need to output a R_CR16_RELATIVE reloc so that the dynamic linker can adjust this GOT entry. */ @@ -1443,7 +1443,7 @@ elf32_cr16_relocate_section (bfd *output_bfd, struct bfd_link_info *info, RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) continue; r = cr16_elf_final_link_relocate (howto, input_bfd, output_bfd, @@ -1776,7 +1776,7 @@ elf32_cr16_relax_section (bfd *abfd, asection *sec, /* We don't have to do anything for a relocatable link, if this section does not have relocs, or if this is not a code section. */ - if (link_info->relocatable + if (bfd_link_relocatable (link_info) || (sec->flags & SEC_RELOC) == 0 || sec->reloc_count == 0 || (sec->flags & SEC_CODE) == 0) @@ -2309,7 +2309,7 @@ _bfd_cr16_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) be needed, we can discard it later. We will never need this section when generating a shared object, since they do not use copy relocs. */ - if (! info->executable) + if (! bfd_link_executable (info)) { s = bfd_make_section_anyway_with_flags (abfd, (bed->default_use_rela_p @@ -2353,7 +2353,7 @@ _bfd_cr16_elf_adjust_dynamic_symbol (struct bfd_link_info * info, if (h->type == STT_FUNC || h->needs_plt) { - if (! info->executable + if (! bfd_link_executable (info) && !h->def_dynamic && !h->ref_dynamic) { @@ -2408,7 +2408,7 @@ _bfd_cr16_elf_adjust_dynamic_symbol (struct bfd_link_info * info, only references to the symbol are via the global offset table. For such cases we need not do anything here; the relocations will be handled correctly by relocate_section. */ - if (info->executable) + if (bfd_link_executable (info)) return TRUE; /* If there are no references to this symbol that do not use the @@ -2464,7 +2464,7 @@ _bfd_cr16_elf_size_dynamic_sections (bfd * output_bfd, if (elf_hash_table (info)->dynamic_sections_created) { /* Set the contents of the .interp section to the interpreter. */ - if (info->executable) + if (bfd_link_executable (info)) { #if 0 s = bfd_get_linker_section (dynobj, ".interp"); @@ -2581,7 +2581,7 @@ _bfd_cr16_elf_size_dynamic_sections (bfd * output_bfd, but we must add the entries now so that we get the correct size for the .dynamic section. The DT_DEBUG entry is filled in by the dynamic linker and used by the debugger. */ - if (! info->executable) + if (! bfd_link_executable (info)) { if (!_bfd_elf_add_dynamic_entry (info, DT_DEBUG, 0)) return FALSE; @@ -2649,7 +2649,7 @@ _bfd_cr16_elf_finish_dynamic_symbol (bfd * output_bfd, the symbol was forced to be local because of a version file. The entry in the global offset table will already have been initialized in the relocate_section function. */ - if (info->executable + if (bfd_link_executable (info) && (info->symbolic || h->dynindx == -1) && h->def_regular) { @@ -2819,7 +2819,7 @@ bfd_cr16_elf32_create_embedded_relocs (bfd *abfd, bfd_byte *p; bfd_size_type amt; - BFD_ASSERT (! info->relocatable); + BFD_ASSERT (! bfd_link_relocatable (info)); *errmsg = NULL; diff --git a/bfd/elf32-cr16c.c b/bfd/elf32-cr16c.c index 6547ec142e3..00adb69c553 100644 --- a/bfd/elf32-cr16c.c +++ b/bfd/elf32-cr16c.c @@ -730,7 +730,7 @@ elf32_cr16c_relocate_section (bfd *output_bfd, RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) { /* This is a relocatable link. We don't have to change anything, unless the reloc is against a section symbol, diff --git a/bfd/elf32-cris.c b/bfd/elf32-cris.c index 439ce1157e8..303117393fc 100644 --- a/bfd/elf32-cris.c +++ b/bfd/elf32-cris.c @@ -1092,7 +1092,7 @@ cris_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, time. FIXME: Not sure this example covers the h->elf_link_hash_flags test, though it's there in other targets. */ - if (info->shared + if (bfd_link_pic (info) && ((!SYMBOLIC_BIND (info, h) && h->dynindx != -1) || !h->def_regular) && (input_section->flags & SEC_ALLOC) != 0 @@ -1103,7 +1103,7 @@ cris_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, || r_type == R_CRIS_16_PCREL || r_type == R_CRIS_32_PCREL)) relocation = 0; - else if (!info->relocatable && unresolved_reloc + else if (!bfd_link_relocatable (info) && unresolved_reloc && (_bfd_elf_section_offset (output_bfd, info, input_section, rel->r_offset) @@ -1125,7 +1125,7 @@ cris_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) continue; switch (r_type) @@ -1165,7 +1165,7 @@ cris_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, these call-specific relocs don't address non-functions. */ if (h != NULL && (h->got.offset == (bfd_vma) -1 - || (!info->shared + || (!bfd_link_pic (info) && !(h->def_regular || (!h->def_dynamic && h->root.type == bfd_link_hash_undefweak))))) @@ -1207,20 +1207,20 @@ cris_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, BFD_ASSERT (off != (bfd_vma) -1); if (!elf_hash_table (info)->dynamic_sections_created - || (! info->shared + || (! bfd_link_pic (info) && (h->def_regular || h->type == STT_FUNC || h->needs_plt)) - || (info->shared + || (bfd_link_pic (info) && (SYMBOLIC_BIND (info, h) || h->dynindx == -1) && h->def_regular)) { - /* This wasn't checked above for ! info->shared, but + /* This wasn't checked above for ! bfd_link_pic (info), but must hold there if we get here; the symbol must be defined in the regular program or be undefweak or be a function or otherwise need a PLT. */ BFD_ASSERT (!elf_hash_table (info)->dynamic_sections_created - || info->shared + || bfd_link_pic (info) || h->def_regular || h->type == STT_FUNC || h->needs_plt @@ -1266,7 +1266,7 @@ cris_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, { bfd_put_32 (output_bfd, relocation, sgot->contents + off); - if (info->shared) + if (bfd_link_pic (info)) { Elf_Internal_Rela outrel; bfd_byte *loc; @@ -1327,7 +1327,7 @@ cris_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, defined in an ordinary (non-DSO) object or is undefined weak. */ if (h != NULL && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT - && !(!info->shared + && !(!bfd_link_pic (info) && (h->def_regular || (!h->def_dynamic && h->root.type == bfd_link_hash_undefweak)))) @@ -1426,7 +1426,7 @@ cris_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, case R_CRIS_8: case R_CRIS_16: case R_CRIS_32: - if (info->shared + if (bfd_link_pic (info) && r_symndx != STN_UNDEF && (input_section->flags & SEC_ALLOC) != 0 && ((r_type != R_CRIS_8_PCREL @@ -1557,7 +1557,7 @@ cris_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, if (h != NULL && (input_section->flags & SEC_ALLOC) != 0 && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT - && (info->shared + && (bfd_link_pic (info) || (!h->def_regular && h->root.type != bfd_link_hash_undefined))) { @@ -1592,7 +1592,7 @@ cris_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, asection *sgotplt = bfd_get_linker_section (dynobj, ".got.plt"); BFD_ASSERT (sgotplt != NULL); - if (info->shared) + if (bfd_link_pic (info)) { Elf_Internal_Rela outrel; bfd_byte *loc; @@ -1631,7 +1631,7 @@ cris_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, break; case R_CRIS_32_GD: - if (info->shared) + if (bfd_link_pic (info)) { bfd_set_error (bfd_error_invalid_operation); @@ -1662,7 +1662,7 @@ cris_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, return FALSE; } - if (!info->shared + if (!bfd_link_pic (info) && (h == NULL || h->def_regular || ELF_COMMON_DEF_P (h))) { /* Known contents of the GOT. */ @@ -1783,7 +1783,7 @@ cris_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, break; case R_CRIS_32_IE: - if (info->shared) + if (bfd_link_pic (info)) { bfd_set_error (bfd_error_invalid_operation); @@ -1814,7 +1814,7 @@ cris_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, return FALSE; } - if (!info->shared + if (!bfd_link_pic (info) && (h == NULL || h->def_regular || ELF_COMMON_DEF_P (h))) { /* Known contents of the GOT. */ @@ -1920,7 +1920,7 @@ cris_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, case R_CRIS_32_TPREL: /* This relocation must only be performed against symbols defined in an ordinary (non-DSO) object. */ - if (info->shared) + if (bfd_link_pic (info)) { bfd_set_error (bfd_error_invalid_operation); @@ -2139,7 +2139,7 @@ elf_cris_finish_dynamic_symbol (bfd *output_bfd, got_base = sgotplt->output_section->vma + sgotplt->output_offset; /* Fill in the entry in the procedure linkage table. */ - if (! info->shared) + if (! bfd_link_pic (info)) { memcpy (splt->contents + h->plt.offset, plt_entry, plt_entry_size); @@ -2215,7 +2215,7 @@ elf_cris_finish_dynamic_symbol (bfd *output_bfd, references to the function symbol are redirected to the PLT. */ if (h->got.offset != (bfd_vma) -1 && (elf_cris_hash_entry (h)->reg_got_refcount > 0) - && (info->shared + && (bfd_link_pic (info) || (h->dynindx != -1 && h->plt.offset == (bfd_vma) -1 && !h->def_regular @@ -2244,7 +2244,7 @@ elf_cris_finish_dynamic_symbol (bfd *output_bfd, initialized in the relocate_section function. */ where = sgot->contents + (h->got.offset &~ (bfd_vma) 1); if (! elf_hash_table (info)->dynamic_sections_created - || (info->shared + || (bfd_link_pic (info) && (SYMBOLIC_BIND (info, h) || h->dynindx == -1) && h->def_regular)) { @@ -2380,7 +2380,7 @@ elf_cris_finish_dynamic_sections (bfd *output_bfd, { if (bfd_get_mach (output_bfd) == bfd_mach_cris_v32) { - if (info->shared) + if (bfd_link_pic (info)) memcpy (splt->contents, elf_cris_pic_plt0_entry_v32, PLT_ENTRY_SIZE_V32); else @@ -2398,7 +2398,7 @@ elf_cris_finish_dynamic_sections (bfd *output_bfd, } else { - if (info->shared) + if (bfd_link_pic (info)) memcpy (splt->contents, elf_cris_pic_plt0_entry, PLT_ENTRY_SIZE); else @@ -2481,7 +2481,7 @@ cris_elf_gc_sweep_hook (bfd *abfd, asection *sgot; asection *srelgot; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; dynobj = elf_hash_table (info)->dynobj; @@ -2592,7 +2592,7 @@ cris_elf_gc_sweep_hook (bfd *abfd, { /* We don't need the .got entry any more. */ sgot->size -= got_element_size; - if (info->shared) + if (bfd_link_pic (info)) srelgot->size -= sizeof (Elf32_External_Rela); } } @@ -2886,7 +2886,7 @@ elf_cris_adjust_dynamic_symbol (struct bfd_link_info *info, result as one built without -fpic, specifically considering weak symbols. FIXME: m68k and i386 differ here, for unclear reasons. */ - if (! info->shared + if (! bfd_link_pic (info) && !h->def_dynamic) { /* This case can occur if we saw a PLT reloc in an input file, @@ -2908,7 +2908,7 @@ elf_cris_adjust_dynamic_symbol (struct bfd_link_info *info, like R_CRIS_JUMP_SLOT after symbol evaluation) we could get rid of the PLT. We can't for the executable, because the GOT entries will point to the PLT there (and be constant). */ - if (info->shared + if (bfd_link_pic (info) && !elf_cris_try_fold_plt_to_got ((struct elf_cris_link_hash_entry*) h, info)) return FALSE; @@ -2939,7 +2939,7 @@ elf_cris_adjust_dynamic_symbol (struct bfd_link_info *info, /* If this symbol is not defined in a regular file, and we are not generating a shared library, then set the symbol to this location in the .plt. */ - if (!info->shared + if (!bfd_link_pic (info) && !h->def_regular) { h->root.u.def.section = s; @@ -2952,7 +2952,7 @@ elf_cris_adjust_dynamic_symbol (struct bfd_link_info *info, executable, because then the reloc associated with the PLT would get a non-PLT reloc pointing to the PLT. FIXME: Move this to elf_cris_try_fold_plt_to_got. */ - if (info->shared && h->got.refcount > 0) + if (bfd_link_pic (info) && h->got.refcount > 0) { h->got.refcount += h->plt.refcount; @@ -3023,7 +3023,7 @@ elf_cris_adjust_dynamic_symbol (struct bfd_link_info *info, only references to the symbol are via the global offset table. For such cases we need not do anything here; the relocations will be handled correctly by relocate_section. */ - if (info->shared) + if (bfd_link_pic (info)) return TRUE; /* If there are no references to this symbol that do not use the @@ -3143,7 +3143,7 @@ cris_elf_check_relocs (bfd *abfd, asection *srelgot; asection *sreloc; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; htab = elf_cris_hash_table (info); @@ -3286,7 +3286,7 @@ cris_elf_check_relocs (bfd *abfd, of the first entry is constant there. For a shared library, we need .got.rela for the R_CRIS_DTPMOD relocation at index 3. */ - if (!info->shared) + if (!bfd_link_pic (info)) break; /* Fall through. */ @@ -3310,7 +3310,7 @@ cris_elf_check_relocs (bfd *abfd, case R_CRIS_16_GOT: case R_CRIS_32_GOT: if (srelgot == NULL - && (h != NULL || info->shared)) + && (h != NULL || bfd_link_pic (info))) { srelgot = bfd_get_linker_section (dynobj, ".rela.got"); if (srelgot == NULL) @@ -3339,7 +3339,7 @@ cris_elf_check_relocs (bfd *abfd, case R_CRIS_32_TPREL: case R_CRIS_16_TPREL: case R_CRIS_32_GD: - if (info->shared) + if (bfd_link_pic (info)) { (*_bfd_error_handler) (_("%B, section %A:\n relocation %s not valid" @@ -3381,7 +3381,7 @@ cris_elf_check_relocs (bfd *abfd, /* Those relocs also require that a DSO is of type Initial Exec. Like other targets, we don't reset this flag even if the relocs are GC:ed away. */ - if (info->shared) + if (bfd_link_pic (info)) info->flags |= DF_STATIC_TLS; break; @@ -3484,7 +3484,7 @@ cris_elf_check_relocs (bfd *abfd, if (local_got_refcounts[r_symndx_lgot] == 0) { sgot->size += got_element_size; - if (info->shared) + if (bfd_link_pic (info)) { /* If we are generating a shared object, we need to output a R_CRIS_RELATIVE reloc so that the @@ -3550,7 +3550,7 @@ cris_elf_check_relocs (bfd *abfd, can't help tables of (global) function pointers, for example, though they must be emitted in a (writable) data section to avoid having impure text sections. */ - if (info->shared + if (bfd_link_pic (info) && (sec->flags & SEC_ALLOC) != 0 && (sec->flags & SEC_READONLY) != 0) { @@ -3594,7 +3594,7 @@ cris_elf_check_relocs (bfd *abfd, render the symbol local. */ /* No need to do anything if we're not creating a shared object. */ - if (! info->shared) + if (! bfd_link_pic (info)) break; /* We may need to create a reloc section in the dynobj and made room @@ -3643,7 +3643,7 @@ cris_elf_check_relocs (bfd *abfd, render the symbol local. */ /* No need to do anything if we're not creating a shared object. */ - if (! info->shared) + if (! bfd_link_pic (info)) break; /* We don't need to handle relocs into sections not going into @@ -3764,7 +3764,7 @@ elf_cris_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, if (elf_hash_table (info)->dynamic_sections_created) { /* Set the contents of the .interp section to the interpreter. */ - if (info->executable) + if (bfd_link_executable (info)) { s = bfd_get_linker_section (dynobj, ".interp"); BFD_ASSERT (s != NULL); @@ -3795,7 +3795,7 @@ elf_cris_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, for relocs that have become for local symbols due to symbol visibility changes. For programs, we discard space for relocs for symbols not referenced by any dynamic object. */ - if (info->shared) + if (bfd_link_pic (info)) elf_cris_link_hash_traverse (htab, elf_cris_discard_excess_dso_dynamics, info); @@ -3837,7 +3837,7 @@ elf_cris_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, { if (strcmp (name, ".rela.got") == 0 && htab->dtpmod_refcount != 0 - && info->shared) + && bfd_link_pic (info)) s->size += sizeof (Elf32_External_Rela); if (s->size != 0) @@ -3897,7 +3897,7 @@ elf_cris_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, #define add_dynamic_entry(TAG, VAL) \ _bfd_elf_add_dynamic_entry (info, TAG, VAL) - if (!info->shared) + if (!bfd_link_pic (info)) { if (!add_dynamic_entry (DT_DEBUG, 0)) return FALSE; diff --git a/bfd/elf32-crx.c b/bfd/elf32-crx.c index 0f9069c8b79..b14520ce716 100644 --- a/bfd/elf32-crx.c +++ b/bfd/elf32-crx.c @@ -882,7 +882,7 @@ elf32_crx_relocate_section (bfd *output_bfd, struct bfd_link_info *info, RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) continue; r = crx_elf_final_link_relocate (howto, input_bfd, output_bfd, @@ -979,7 +979,7 @@ elf32_crx_relax_section (bfd *abfd, asection *sec, /* We don't have to do anything for a relocatable link, if this section does not have relocs, or if this is not a code section. */ - if (link_info->relocatable + if (bfd_link_relocatable (link_info) || (sec->flags & SEC_RELOC) == 0 || sec->reloc_count == 0 || (sec->flags & SEC_CODE) == 0) diff --git a/bfd/elf32-d10v.c b/bfd/elf32-d10v.c index a7d30c9584c..5c0dd95af82 100644 --- a/bfd/elf32-d10v.c +++ b/bfd/elf32-d10v.c @@ -269,7 +269,7 @@ elf32_d10v_check_relocs (bfd *abfd, const Elf_Internal_Rela *rel; const Elf_Internal_Rela *rel_end; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; symtab_hdr = &elf_tdata (abfd)->symtab_hdr; @@ -439,7 +439,7 @@ elf32_d10v_relocate_section (bfd *output_bfd, + sym->st_value); if (ELF_ST_TYPE (sym->st_info) == STT_SECTION && ((sec->flags & SEC_MERGE) != 0 - || (info->relocatable + || (bfd_link_relocatable (info) && sec->output_offset != 0))) { bfd_vma addend; @@ -447,7 +447,7 @@ elf32_d10v_relocate_section (bfd *output_bfd, addend = extract_rel_addend (input_bfd, where, howto); - if (info->relocatable) + if (bfd_link_relocatable (info)) addend += sec->output_offset; else { @@ -474,7 +474,7 @@ elf32_d10v_relocate_section (bfd *output_bfd, RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) continue; if (h != NULL) diff --git a/bfd/elf32-dlx.c b/bfd/elf32-dlx.c index b8b73ab5b9c..7ff1fe154e5 100644 --- a/bfd/elf32-dlx.c +++ b/bfd/elf32-dlx.c @@ -429,7 +429,7 @@ elf32_dlx_check_relocs (bfd *abfd, const Elf_Internal_Rela *rel; const Elf_Internal_Rela *rel_end; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; symtab_hdr = &elf_tdata (abfd)->symtab_hdr; diff --git a/bfd/elf32-epiphany.c b/bfd/elf32-epiphany.c index 6c576836113..6d662988e7f 100644 --- a/bfd/elf32-epiphany.c +++ b/bfd/elf32-epiphany.c @@ -212,7 +212,7 @@ epiphany_elf_relax_section (bfd *abfd, asection *sec, /* We don't have to do anything for a relocatable link, if this section does not have relocs, or if this is not a code section. */ - if (link_info->relocatable + if (bfd_link_relocatable (link_info) || (sec->flags & SEC_RELOC) == 0 || sec->reloc_count == 0 || (sec->flags & SEC_CODE) == 0) @@ -533,7 +533,7 @@ epiphany_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) continue; /* Finally, the sole EPIPHANY-specific part. */ diff --git a/bfd/elf32-fr30.c b/bfd/elf32-fr30.c index 13f6f19911d..c3bda80c2ad 100644 --- a/bfd/elf32-fr30.c +++ b/bfd/elf32-fr30.c @@ -563,7 +563,7 @@ fr30_elf_relocate_section (bfd *output_bfd, RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) continue; r = fr30_final_link_relocate (howto, input_bfd, input_section, @@ -652,7 +652,7 @@ fr30_elf_check_relocs (bfd *abfd, const Elf_Internal_Rela *rel; const Elf_Internal_Rela *rel_end; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; symtab_hdr = &elf_tdata (abfd)->symtab_hdr; diff --git a/bfd/elf32-frv.c b/bfd/elf32-frv.c index f374df08284..b55a7ab4f03 100644 --- a/bfd/elf32-frv.c +++ b/bfd/elf32-frv.c @@ -1384,7 +1384,7 @@ _frvfdpic_emit_got_relocs_plt_entries (struct frvfdpic_relocs_info *entry, /* If we're linking an executable at a fixed address, we can omit the dynamic relocation as long as the symbol is local to this module. */ - if (info->executable && !info->pie + if (bfd_link_executable (info) && !bfd_link_pic (info) && (entry->symndx != -1 || FRVFDPIC_SYM_LOCAL (info, entry->d.h))) { @@ -1439,7 +1439,7 @@ _frvfdpic_emit_got_relocs_plt_entries (struct frvfdpic_relocs_info *entry, if (entry->symndx == -1 && ! FRVFDPIC_FUNCDESC_LOCAL (info, entry->d.h) && FRVFDPIC_SYM_LOCAL (info, entry->d.h) - && !(info->executable && !info->pie)) + && !(bfd_link_executable (info) && !bfd_link_pic (info))) { reloc = R_FRV_FUNCDESC; idx = elf_section_data (entry->d.h->root.u.def.section @@ -1482,7 +1482,7 @@ _frvfdpic_emit_got_relocs_plt_entries (struct frvfdpic_relocs_info *entry, dynamic symbol entry for the got section, so idx will be zero, which means we can and should compute the address of the private descriptor ourselves. */ - if (info->executable && !info->pie + if (bfd_link_executable (info) && !bfd_link_pic (info) && (entry->symndx != -1 || FRVFDPIC_FUNCDESC_LOCAL (info, entry->d.h))) { @@ -1545,7 +1545,7 @@ _frvfdpic_emit_got_relocs_plt_entries (struct frvfdpic_relocs_info *entry, /* If we're linking an executable at a fixed address, we can omit the dynamic relocation as long as the symbol is local to this module. */ - if (info->executable && !info->pie + if (bfd_link_executable (info) && !bfd_link_pic (info) && (entry->symndx != -1 || FRVFDPIC_SYM_LOCAL (info, entry->d.h))) { if (sec) @@ -1593,7 +1593,10 @@ _frvfdpic_emit_got_relocs_plt_entries (struct frvfdpic_relocs_info *entry, /* If we've omitted the dynamic relocation, just emit the fixed addresses of the symbol and of the local GOT base offset. */ - if (info->executable && !info->pie && sec && sec->output_section) + if (bfd_link_executable (info) + && !bfd_link_pic (info) + && sec + && sec->output_section) { lowword = ad; highword = frvfdpic_got_section (info)->output_section->vma @@ -1768,14 +1771,14 @@ _frvfdpic_emit_got_relocs_plt_entries (struct frvfdpic_relocs_info *entry, /* *ABS*+addend is special for TLS relocations, use only the addend. */ - if (info->executable + if (bfd_link_executable (info) && idx == 0 && (bfd_is_abs_section (sec) || bfd_is_und_section (sec))) ; /* If we're linking an executable, we can entirely omit the dynamic relocation if the symbol is local to this module. */ - else if (info->executable + else if (bfd_link_executable (info) && (entry->symndx != -1 || FRVFDPIC_SYM_LOCAL (info, entry->d.h))) { @@ -1841,10 +1844,10 @@ _frvfdpic_emit_got_relocs_plt_entries (struct frvfdpic_relocs_info *entry, /* If we didn't set up a TLS offset entry, but we're linking an executable and the symbol binds locally, we can use the module offset in the TLS descriptor in relaxations. */ - if (info->executable && ! entry->tlsoff_entry) + if (bfd_link_executable (info) && ! entry->tlsoff_entry) entry->tlsoff_entry = entry->tlsdesc_entry + 4; - if (info->executable && !info->pie + if (bfd_link_executable (info) && !bfd_link_pic (info) && ((idx == 0 && (bfd_is_abs_section (sec) || bfd_is_und_section (sec))) @@ -1943,7 +1946,7 @@ _frvfdpic_emit_got_relocs_plt_entries (struct frvfdpic_relocs_info *entry, bfd_byte *plt_code = frvfdpic_plt_section (info)->contents + entry->tlsplt_entry; - if (info->executable + if (bfd_link_executable (info) && (entry->symndx != -1 || FRVFDPIC_SYM_LOCAL (info, entry->d.h))) { @@ -2666,7 +2669,7 @@ elf32_frv_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, Elf_Internal_Rela *relend; unsigned isec_segment, got_segment, plt_segment, gprel_segment, tls_segment, check_segment[2]; - int silence_segment_error = !(info->shared || info->pie); + int silence_segment_error = !bfd_link_pic (info); unsigned long insn; symtab_hdr = & elf_tdata (input_bfd)->symtab_hdr; @@ -2754,7 +2757,7 @@ elf32_frv_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) continue; if (r_type != R_FRV_TLSMOFF @@ -2880,10 +2883,10 @@ elf32_frv_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, { #define LOCAL_EXEC_P(info, picrel) \ - ((info)->executable \ + (bfd_link_executable (info) \ && (picrel->symndx != -1 || FRVFDPIC_SYM_LOCAL ((info), (picrel)->d.h))) #define INITIAL_EXEC_P(info, picrel) \ - (((info)->executable || (info)->flags & DF_STATIC_TLS) \ + ((bfd_link_executable (info)|| (info)->flags & DF_STATIC_TLS) \ && (picrel)->tlsoff_entry) #define IN_RANGE_FOR_OFST12_P(value) \ @@ -3520,7 +3523,8 @@ elf32_frv_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, section+offset. */ if (h && ! FRVFDPIC_FUNCDESC_LOCAL (info, h) && FRVFDPIC_SYM_LOCAL (info, h) - && !(info->executable && !info->pie)) + && !(bfd_link_executable (info) + && !bfd_link_pic (info))) { dynindx = elf_section_data (h->root.u.def.section ->output_section)->dynindx; @@ -3558,7 +3562,7 @@ elf32_frv_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, dynamic symbol entry for the got section, so idx will be zero, which means we can and should compute the address of the private descriptor ourselves. */ - if (info->executable && !info->pie + if (bfd_link_executable (info) && !bfd_link_pic (info) && (!h || FRVFDPIC_FUNCDESC_LOCAL (info, h))) { addend += frvfdpic_got_section (info)->output_section->vma; @@ -3680,7 +3684,7 @@ elf32_frv_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, can omit the dynamic relocation as long as the symbol is defined in the current link unit (which is implied by its output section not being NULL). */ - if (info->executable && !info->pie + if (bfd_link_executable (info) && !bfd_link_pic (info) && (!h || FRVFDPIC_SYM_LOCAL (info, h))) { if (osec) @@ -3769,7 +3773,7 @@ elf32_frv_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, /* If we've omitted the dynamic relocation, just emit the fixed addresses of the symbol and of the local GOT base offset. */ - if (info->executable && !info->pie + if (bfd_link_executable (info) && !bfd_link_pic (info) && (!h || FRVFDPIC_SYM_LOCAL (info, h))) bfd_put_32 (output_bfd, frvfdpic_got_section (info)->output_section->vma @@ -3912,7 +3916,7 @@ elf32_frv_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, (_("%H: reloc against `%s' references a different segment\n"), input_bfd, input_section, rel->r_offset, name); } - if (!silence_segment_error && (info->shared || info->pie)) + if (!silence_segment_error && bfd_link_pic (info)) return FALSE; elf_elfheader (output_bfd)->e_flags |= EF_FRV_PIC; } @@ -4106,7 +4110,7 @@ elf32_frv_add_symbol_hook (bfd *abfd, bfd_vma *valp) { if (sym->st_shndx == SHN_COMMON - && !info->relocatable + && !bfd_link_relocatable (info) && (int)sym->st_size <= (int)bfd_get_gp_size (abfd)) { /* Common symbols less than or equal to -G nn bytes are @@ -4371,7 +4375,7 @@ elf32_frvfdpic_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) be needed, we can discard it later. We will never need this section when generating a shared object, since they do not use copy relocs. */ - if (! info->shared) + if (! bfd_link_pic (info)) { s = bfd_make_section_anyway_with_flags (abfd, (bed->default_use_rela_p @@ -4508,7 +4512,7 @@ _frvfdpic_count_relocs_fixups (struct frvfdpic_relocs_info *entry, { bfd_vma relocs = 0, fixups = 0, tlsrets = 0; - if (!dinfo->info->executable || dinfo->info->pie) + if (!bfd_link_executable (dinfo->info) || bfd_link_pie (dinfo->info)) { relocs = entry->relocs32 + entry->relocsfd + entry->relocsfdv + entry->relocstlsd; @@ -4520,7 +4524,7 @@ _frvfdpic_count_relocs_fixups (struct frvfdpic_relocs_info *entry, emit dynamic relocations even for local symbols, because we don't know the module id the library is going to get at run-time, nor its TLS base offset. */ - if (!dinfo->info->executable + if (!bfd_link_executable (dinfo->info) || (entry->symndx == -1 && ! FRVFDPIC_SYM_LOCAL (dinfo->info, entry->d.h))) relocs += entry->relocstlsoff; @@ -4579,7 +4583,7 @@ _frvfdpic_relax_tls_entries (struct frvfdpic_relocs_info *entry, { bfd_boolean changed = ! relaxing; - BFD_ASSERT (dinfo->info->executable + BFD_ASSERT (bfd_link_executable (dinfo->info) || (dinfo->info->flags & DF_STATIC_TLS)); if (entry->tlsdesc12 || entry->tlsdesclos || entry->tlsdeschilo) @@ -4598,7 +4602,7 @@ _frvfdpic_relax_tls_entries (struct frvfdpic_relocs_info *entry, to GOTTLSOFF, we must keep the GOT entry in range. We know it has to fit because we'll be trading the 4 words of hte TLS descriptor for a single word in the same range. */ - if (! dinfo->info->executable + if (! bfd_link_executable (dinfo->info) || (entry->symndx == -1 && ! FRVFDPIC_SYM_LOCAL (dinfo->info, entry->d.h))) { @@ -4622,7 +4626,7 @@ _frvfdpic_relax_tls_entries (struct frvfdpic_relocs_info *entry, do better than this. */ if ((entry->tlsplt || entry->tlsoff12 || entry->tlsofflos || entry->tlsoffhilo) - && dinfo->info->executable && relaxing + && bfd_link_executable (dinfo->info) && relaxing && ((entry->symndx == -1 && FRVFDPIC_SYM_LOCAL (dinfo->info, entry->d.h) /* The above may hold for an undefweak TLS symbol, so make @@ -4695,7 +4699,8 @@ _frvfdpic_count_got_plt_entries (void **entryp, void *dinfo_) _frvfdpic_count_nontls_entries (entry, dinfo); - if (dinfo->info->executable || (dinfo->info->flags & DF_STATIC_TLS)) + if (bfd_link_executable (dinfo->info) + || (dinfo->info->flags & DF_STATIC_TLS)) _frvfdpic_relax_tls_entries (entry, dinfo, FALSE); else { @@ -5088,7 +5093,7 @@ _frvfdpic_assign_plt_entries (void **entryp, void *info_) entry->tlsplt_entry = frvfdpic_plt_section (dinfo->g.info)->size; - if (dinfo->g.info->executable + if (bfd_link_executable (dinfo->g.info) && (entry->symndx != -1 || FRVFDPIC_SYM_LOCAL (dinfo->g.info, entry->d.h))) { @@ -5439,7 +5444,7 @@ elf32_frvfdpic_size_dynamic_sections (bfd *output_bfd, if (elf_hash_table (info)->dynamic_sections_created) { /* Set the contents of the .interp section to the interpreter. */ - if (info->executable) + if (bfd_link_executable (info)) { s = bfd_get_linker_section (dynobj, ".interp"); BFD_ASSERT (s != NULL); @@ -5498,7 +5503,7 @@ static bfd_boolean elf32_frvfdpic_always_size_sections (bfd *output_bfd, struct bfd_link_info *info) { - if (!info->relocatable + if (!bfd_link_relocatable (info) && !bfd_elf_stack_segment_size (output_bfd, info, "__stacksize", DEFAULT_STACK_SIZE)) return FALSE; @@ -5640,7 +5645,7 @@ elf32_frvfdpic_relax_section (bfd *abfd ATTRIBUTE_UNUSED, asection *sec, { struct _frvfdpic_dynamic_got_plt_info gpinfo; - if (info->relocatable) + if (bfd_link_relocatable (info)) (*info->callbacks->einfo) (_("%P%F: --relax and -r may not be used together\n")); @@ -5653,7 +5658,7 @@ elf32_frvfdpic_relax_section (bfd *abfd ATTRIBUTE_UNUSED, asection *sec, /* We can only relax when linking the main executable or a library that can't be dlopened. */ - if (! info->executable && ! (info->flags & DF_STATIC_TLS)) + if (! bfd_link_executable (info) && ! (info->flags & DF_STATIC_TLS)) return TRUE; /* If there isn't a TLS section for this binary, we can't do @@ -6028,7 +6033,7 @@ elf32_frv_check_relocs (bfd *abfd, bfd *dynobj; struct frvfdpic_relocs_info *picrel; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; symtab_hdr = &elf_tdata (abfd)->symtab_hdr; diff --git a/bfd/elf32-ft32.c b/bfd/elf32-ft32.c index ea73d97371b..76900dd27d1 100644 --- a/bfd/elf32-ft32.c +++ b/bfd/elf32-ft32.c @@ -306,7 +306,7 @@ ft32_elf_relocate_section (bfd *output_bfd, RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) continue; r = _bfd_final_link_relocate (howto, input_bfd, input_section, diff --git a/bfd/elf32-h8300.c b/bfd/elf32-h8300.c index a2d5fc3c597..2192eb69488 100644 --- a/bfd/elf32-h8300.c +++ b/bfd/elf32-h8300.c @@ -480,7 +480,7 @@ elf32_h8_relocate_section (bfd *output_bfd, struct bfd_link_info *info, RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) continue; r = elf32_h8_final_link_relocate (r_type, input_bfd, output_bfd, @@ -707,7 +707,7 @@ elf32_h8_relax_section (bfd *abfd, asection *sec, /* We don't have to do anything for a relocatable link, if this section does not have relocs, or if this is not a code section. */ - if (link_info->relocatable + if (bfd_link_relocatable (link_info) || (sec->flags & SEC_RELOC) == 0 || sec->reloc_count == 0 || (sec->flags & SEC_CODE) == 0) diff --git a/bfd/elf32-hppa.c b/bfd/elf32-hppa.c index f611e0d7da8..41bf5c57c59 100644 --- a/bfd/elf32-hppa.c +++ b/bfd/elf32-hppa.c @@ -609,7 +609,7 @@ hppa_type_of_stub (asection *input_sec, && hh->eh.plt.offset != (bfd_vma) -1 && hh->eh.dynindx != -1 && !hh->plabel - && (info->shared + && (bfd_link_pic (info) || !hh->eh.def_regular || hh->eh.root.type == bfd_link_hash_defweak)) { @@ -1137,7 +1137,7 @@ elf32_hppa_check_relocs (bfd *abfd, asection *sreloc; int tls_type = GOT_UNKNOWN, old_tls_type = GOT_UNKNOWN; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; htab = hppa_link_hash_table (info); @@ -1266,7 +1266,7 @@ elf32_hppa_check_relocs (bfd *abfd, case R_PARISC_DPREL14F: /* Used for gp rel data load/store. */ case R_PARISC_DPREL14R: case R_PARISC_DPREL21L: - if (info->shared) + if (bfd_link_pic (info)) { (*_bfd_error_handler) (_("%B: relocation %s can not be used when making a shared object; recompile with -fPIC"), @@ -1312,7 +1312,7 @@ elf32_hppa_check_relocs (bfd *abfd, case R_PARISC_TLS_IE21L: case R_PARISC_TLS_IE14R: - if (info->shared) + if (bfd_link_pic (info)) info->flags |= DF_STATIC_TLS; need_entry = NEED_GOT; break; @@ -1432,7 +1432,7 @@ elf32_hppa_check_relocs (bfd *abfd, /* Flag this symbol as having a non-got, non-plt reference so that we generate copy relocs if it turns out to be dynamic. */ - if (hh != NULL && !info->shared) + if (hh != NULL && !bfd_link_pic (info)) hh->eh.non_got_ref = 1; /* If we are creating a shared library then we need to copy @@ -1463,7 +1463,7 @@ elf32_hppa_check_relocs (bfd *abfd, may need to keep relocations for symbols satisfied by a dynamic library if we manage to avoid copy relocs for the symbol. */ - if ((info->shared + if ((bfd_link_pic (info) && (sec->flags & SEC_ALLOC) != 0 && (IS_ABSOLUTE_RELOC (r_type) || (hh != NULL @@ -1471,7 +1471,7 @@ elf32_hppa_check_relocs (bfd *abfd, || hh->eh.root.type == bfd_link_hash_defweak || !hh->eh.def_regular)))) || (ELIMINATE_COPY_RELOCS - && !info->shared + && !bfd_link_pic (info) && (sec->flags & SEC_ALLOC) != 0 && hh != NULL && (hh->eh.root.type == bfd_link_hash_defweak @@ -1589,7 +1589,7 @@ elf32_hppa_gc_sweep_hook (bfd *abfd, const Elf_Internal_Rela *rela, *relend; struct elf32_hppa_link_hash_table *htab; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; htab = hppa_link_hash_table (info); @@ -1819,7 +1819,7 @@ elf32_hppa_adjust_dynamic_symbol (struct bfd_link_info *info, || (eh->def_regular && eh->root.type != bfd_link_hash_defweak && ! hppa_elf_hash_entry (eh)->plabel - && (!info->shared || SYMBOLIC_BIND (info, eh)))) + && (!bfd_link_pic (info) || SYMBOLIC_BIND (info, eh)))) { /* The .plt entry is not needed when: a) Garbage collection has removed all references to the @@ -1860,7 +1860,7 @@ elf32_hppa_adjust_dynamic_symbol (struct bfd_link_info *info, only references to the symbol are via the global offset table. For such cases we need not do anything here; the relocations will be handled correctly by relocate_section. */ - if (info->shared) + if (bfd_link_pic (info)) return TRUE; /* If there are no references to this symbol that do not use the @@ -1951,7 +1951,7 @@ allocate_plt_static (struct elf_link_hash_entry *eh, void *inf) return FALSE; } - if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, info->shared, eh)) + if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, bfd_link_pic (info), eh)) { /* Allocate these later. From this point on, h->plabel means that the plt entry is only used by a plabel. @@ -2042,7 +2042,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *eh, void *inf) else if ((hh->tls_type & GOT_TLS_GD) == GOT_TLS_GD) sec->size += GOT_ENTRY_SIZE; if (htab->etab.dynamic_sections_created - && (info->shared + && (bfd_link_pic (info) || (eh->dynindx != -1 && !eh->forced_local))) { @@ -2064,7 +2064,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *eh, void *inf) defined in a regular object. For the normal shared case, discard space for relocs that have become local due to symbol visibility changes. */ - if (info->shared) + if (bfd_link_pic (info)) { #if RELATIVE_DYNRELOCS if (SYMBOL_CALLS_LOCAL (info, eh)) @@ -2215,7 +2215,7 @@ elf32_hppa_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, if (htab->etab.dynamic_sections_created) { /* Set the contents of the .interp section to the interpreter. */ - if (info->executable) + if (bfd_link_executable (info)) { sec = bfd_get_linker_section (dynobj, ".interp"); if (sec == NULL) @@ -2293,7 +2293,7 @@ elf32_hppa_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, sec->size += 2 * GOT_ENTRY_SIZE; else if ((*local_tls_type & GOT_TLS_GD) == GOT_TLS_GD) sec->size += GOT_ENTRY_SIZE; - if (info->shared) + if (bfd_link_pic (info)) { srel->size += sizeof (Elf32_External_Rela); if ((*local_tls_type & (GOT_TLS_GD | GOT_TLS_IE)) == (GOT_TLS_GD | GOT_TLS_IE)) @@ -2326,7 +2326,7 @@ elf32_hppa_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, { *local_plt = sec->size; sec->size += PLT_ENTRY_SIZE; - if (info->shared) + if (bfd_link_pic (info)) srel->size += sizeof (Elf32_External_Rela); } else @@ -2446,7 +2446,7 @@ elf32_hppa_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, must add the entries now so that we get the correct size for the .dynamic section. The DT_DEBUG entry is filled in by the dynamic linker and used by the debugger. */ - if (info->executable) + if (bfd_link_executable (info)) { if (!add_dynamic_entry (DT_DEBUG, 0)) return FALSE; @@ -2722,7 +2722,7 @@ get_local_syms (bfd *output_bfd, bfd *input_bfd, struct bfd_link_info *info) all_local_syms[bfd_indx] = local_syms; - if (info->shared && htab->multi_subspace) + if (bfd_link_pic (info) && htab->multi_subspace) { struct elf_link_hash_entry **eh_syms; struct elf_link_hash_entry **eh_symend; @@ -2994,7 +2994,7 @@ elf32_hppa_size_stubs } else if (hh->eh.root.type == bfd_link_hash_undefweak) { - if (! info->shared) + if (! bfd_link_pic (info)) continue; } else if (hh->eh.root.type == bfd_link_hash_undefined) @@ -3046,7 +3046,7 @@ elf32_hppa_size_stubs hsh->target_value = sym_value; hsh->target_section = sym_sec; hsh->stub_type = stub_type; - if (info->shared) + if (bfd_link_pic (info)) { if (stub_type == hppa_stub_import) hsh->stub_type = hppa_stub_import_shared; @@ -3251,7 +3251,7 @@ elf32_hppa_final_link (bfd *abfd, struct bfd_link_info *info) /* If we're producing a final executable, sort the contents of the unwind section. */ - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; return elf_hppa_sort_unwind (abfd); @@ -3329,7 +3329,7 @@ final_link_relocate (asection *input_section, /* If we are not building a shared library, convert DLTIND relocs to DPREL relocs. */ - if (!info->shared) + if (!bfd_link_pic (info)) { switch (r_type) { @@ -3366,7 +3366,7 @@ final_link_relocate (asection *input_section, && hh->eh.plt.offset != (bfd_vma) -1 && hh->eh.dynindx != -1 && !hh->plabel - && (info->shared + && (bfd_link_pic (info) || !hh->eh.def_regular || hh->eh.root.type == bfd_link_hash_defweak))) { @@ -3707,7 +3707,7 @@ elf32_hppa_relocate_section (bfd *output_bfd, unresolved_reloc, warned_undef, ignored); - if (!info->relocatable + if (!bfd_link_relocatable (info) && relocation == 0 && eh->root.type != bfd_link_hash_defined && eh->root.type != bfd_link_hash_defweak @@ -3733,7 +3733,7 @@ elf32_hppa_relocate_section (bfd *output_bfd, elf_hppa_howto_table + r_type, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) continue; /* Do any required modifications to the relocation value, and @@ -3757,7 +3757,8 @@ elf32_hppa_relocate_section (bfd *output_bfd, off = hh->eh.got.offset; dyn = htab->etab.dynamic_sections_created; - if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, + if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, + bfd_link_pic (info), &hh->eh)) { /* If we aren't going to call finish_dynamic_symbol, @@ -3797,7 +3798,7 @@ elf32_hppa_relocate_section (bfd *output_bfd, if (do_got) { - if (info->shared) + if (bfd_link_pic (info)) { /* Output a dynamic relocation for this GOT entry. In this case it is relative to the base of the @@ -3849,7 +3850,8 @@ elf32_hppa_relocate_section (bfd *output_bfd, if (hh != NULL) { off = hh->eh.plt.offset; - if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, info->shared, + if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, + bfd_link_pic (info), &hh->eh)) { /* In a non-shared link, adjust_dynamic_symbols @@ -3888,7 +3890,7 @@ elf32_hppa_relocate_section (bfd *output_bfd, if (do_plt) { - if (info->shared) + if (bfd_link_pic (info)) { /* Output a dynamic IPLT relocation for this PLT entry. */ @@ -3962,13 +3964,13 @@ elf32_hppa_relocate_section (bfd *output_bfd, which is why we can't use just that test here. Conversely, DEF_DYNAMIC can't be used in check_relocs as there all files have not been loaded. */ - if ((info->shared + if ((bfd_link_pic (info) && (hh == NULL || ELF_ST_VISIBILITY (hh->eh.other) == STV_DEFAULT || hh->eh.root.type != bfd_link_hash_undefweak) && (IS_ABSOLUTE_RELOC (r_type) || !SYMBOL_CALLS_LOCAL (info, &hh->eh))) - || (!info->shared + || (!bfd_link_pic (info) && hh != NULL && hh->eh.dynindx != -1 && !hh->eh.non_got_ref @@ -4004,7 +4006,7 @@ elf32_hppa_relocate_section (bfd *output_bfd, && hh->eh.dynindx != -1 && (plabel || !IS_ABSOLUTE_RELOC (r_type) - || !info->shared + || !bfd_link_pic (info) || !SYMBOLIC_BIND (info, &hh->eh) || !hh->eh.def_regular)) { @@ -4111,8 +4113,10 @@ elf32_hppa_relocate_section (bfd *output_bfd, bfd_boolean dyn; dyn = htab->etab.dynamic_sections_created; - if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, &hh->eh) - && (!info->shared + if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, + bfd_link_pic (info), + &hh->eh) + && (!bfd_link_pic (info) || !SYMBOL_REFERENCES_LOCAL (info, &hh->eh))) { indx = hh->eh.dynindx; @@ -4142,7 +4146,7 @@ elf32_hppa_relocate_section (bfd *output_bfd, now, and emit any relocations. If both an IE GOT and a GD GOT are necessary, we emit the GD first. */ - if ((info->shared || indx != 0) + if ((bfd_link_pic (info) || indx != 0) && (hh == NULL || ELF_ST_VISIBILITY (hh->eh.other) == STV_DEFAULT || hh->eh.root.type != bfd_link_hash_undefweak)) @@ -4388,7 +4392,7 @@ elf32_hppa_finish_dynamic_symbol (bfd *output_bfd, we just want to emit a RELATIVE reloc. The entry in the global offset table will already have been initialized in the relocate_section function. */ - if (info->shared + if (bfd_link_pic (info) && (SYMBOLIC_BIND (info, eh) || eh->dynindx == -1) && eh->def_regular) { diff --git a/bfd/elf32-i370.c b/bfd/elf32-i370.c index 6e6c8e837b9..7fba4d1f417 100644 --- a/bfd/elf32-i370.c +++ b/bfd/elf32-i370.c @@ -433,7 +433,7 @@ i370_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) if (s == NULL) return FALSE; - if (! info->shared) + if (! bfd_link_pic (info)) { s = bfd_make_section_anyway_with_flags (abfd, ".rela.sbss", flags | SEC_READONLY); @@ -503,7 +503,7 @@ i370_elf_adjust_dynamic_symbol (struct bfd_link_info *info, only references to the symbol are via the global offset table. For such cases we need not do anything here; the relocations will be handled correctly by relocate_section. */ - if (info->shared) + if (bfd_link_pic (info)) return TRUE; /* We must allocate the symbol in our .dynbss section, which will @@ -594,7 +594,7 @@ i370_elf_size_dynamic_sections (bfd *output_bfd, if (elf_hash_table (info)->dynamic_sections_created) { /* Set the contents of the .interp section to the interpreter. */ - if (info->executable) + if (bfd_link_executable (info)) { s = bfd_get_linker_section (dynobj, ".interp"); BFD_ASSERT (s != NULL); @@ -713,7 +713,7 @@ i370_elf_size_dynamic_sections (bfd *output_bfd, #define add_dynamic_entry(TAG, VAL) \ _bfd_elf_add_dynamic_entry (info, TAG, VAL) - if (!info->shared) + if (!bfd_link_pic (info)) { if (!add_dynamic_entry (DT_DEBUG, 0)) return FALSE; @@ -755,7 +755,7 @@ i370_elf_size_dynamic_sections (bfd *output_bfd, locations in linker-created sections that do not have externally-visible names. Instead, we should work out precisely which sections relocations are targeted at. */ - if (info->shared) + if (bfd_link_pic (info)) { int c; @@ -804,7 +804,7 @@ i370_elf_check_relocs (bfd *abfd, const Elf_Internal_Rela *rel_end; asection *sreloc; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; #ifdef DEBUG @@ -839,7 +839,7 @@ i370_elf_check_relocs (bfd *abfd, h->root.non_ir_ref = 1; } - if (info->shared) + if (bfd_link_pic (info)) { #ifdef DEBUG fprintf (stderr, @@ -948,7 +948,7 @@ i370_elf_finish_dynamic_sections (bfd *output_bfd, elf_section_data (sgot->output_section)->this_hdr.sh_entsize = 4; } - if (info->shared) + if (bfd_link_pic (info)) { asection *sdynsym; asection *s; @@ -1049,7 +1049,7 @@ i370_elf_relocate_section (bfd *output_bfd, _bfd_error_handler ("i370_elf_relocate_section called for %B section %A, %ld relocations%s", input_bfd, input_section, (long) input_section->reloc_count, - (info->relocatable) ? " (relocatable)" : ""); + (bfd_link_relocatable (info)) ? " (relocatable)" : ""); #endif if (!i370_elf_howto_table[ R_I370_ADDR31 ]) @@ -1113,7 +1113,7 @@ i370_elf_relocate_section (bfd *output_bfd, || h->root.type == bfd_link_hash_defweak) { sec = h->root.u.def.section; - if (info->shared + if (bfd_link_pic (info) && ((! info->symbolic && h->dynindx != -1) || !h->def_regular) && (input_section->flags & SEC_ALLOC) != 0 @@ -1135,7 +1135,7 @@ i370_elf_relocate_section (bfd *output_bfd, else if (info->unresolved_syms_in_objects == RM_IGNORE && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT) ; - else if (!info->relocatable) + else if (!bfd_link_relocatable (info)) { if ((*info->callbacks->undefined_symbol) (info, h->root.root.string, input_bfd, @@ -1153,7 +1153,7 @@ i370_elf_relocate_section (bfd *output_bfd, RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) continue; switch ((int) r_type) @@ -1184,7 +1184,7 @@ i370_elf_relocate_section (bfd *output_bfd, object. */ case (int) R_I370_ADDR31: case (int) R_I370_ADDR16: - if (info->shared + if (bfd_link_pic (info) && r_symndx != STN_UNDEF) { Elf_Internal_Rela outrel; diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c index 1e4c3f47184..507eecf365f 100644 --- a/bfd/elf32-i386.c +++ b/bfd/elf32-i386.c @@ -1029,7 +1029,7 @@ elf_i386_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info) if (!htab->sdynbss) abort (); - if (info->executable) + if (bfd_link_executable (info)) { /* Always allow copy relocs for building executables. */ asection *s = bfd_get_linker_section (dynobj, ".rel.bss"); @@ -1354,7 +1354,7 @@ elf_i386_tls_transition (struct bfd_link_info *info, bfd *abfd, case R_386_TLS_IE_32: case R_386_TLS_IE: case R_386_TLS_GOTIE: - if (info->executable) + if (bfd_link_executable (info)) { if (h == NULL) to_type = R_386_TLS_LE_32; @@ -1370,7 +1370,7 @@ elf_i386_tls_transition (struct bfd_link_info *info, bfd *abfd, { unsigned int new_to_type = to_type; - if (info->executable + if (bfd_link_executable (info) && h != NULL && h->dynindx == -1 && (tls_type & GOT_TLS_IE)) @@ -1396,7 +1396,7 @@ elf_i386_tls_transition (struct bfd_link_info *info, bfd *abfd, break; case R_386_TLS_LDM: - if (info->executable) + if (bfd_link_executable (info)) to_type = R_386_TLS_LE_32; break; @@ -1474,7 +1474,7 @@ elf_i386_check_relocs (bfd *abfd, asection *sreloc; bfd_boolean use_plt_got; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; BFD_ASSERT (is_i386_elf (abfd)); @@ -1618,7 +1618,7 @@ elf_i386_check_relocs (bfd *abfd, case R_386_TLS_IE_32: case R_386_TLS_IE: case R_386_TLS_GOTIE: - if (!info->executable) + if (!bfd_link_executable (info)) info->flags |= DF_STATIC_TLS; /* Fall through */ @@ -1738,14 +1738,14 @@ elf_i386_check_relocs (bfd *abfd, case R_386_TLS_LE_32: case R_386_TLS_LE: - if (info->executable) + if (bfd_link_executable (info)) break; info->flags |= DF_STATIC_TLS; /* Fall through */ case R_386_32: case R_386_PC32: - if (h != NULL && info->executable) + if (h != NULL && bfd_link_executable (info)) { /* If this reloc is in a read-only section, we might need a copy reloc. We can't check reliably at this @@ -1785,7 +1785,7 @@ do_size: may need to keep relocations for symbols satisfied by a dynamic library if we manage to avoid copy relocs for the symbol. */ - if ((info->shared + if ((bfd_link_pic (info) && (sec->flags & SEC_ALLOC) != 0 && (r_type != R_386_PC32 || (h != NULL @@ -1793,7 +1793,7 @@ do_size: || h->root.type == bfd_link_hash_defweak || !h->def_regular)))) || (ELIMINATE_COPY_RELOCS - && !info->shared + && !bfd_link_pic (info) && (sec->flags & SEC_ALLOC) != 0 && h != NULL && (h->root.type == bfd_link_hash_defweak @@ -1963,7 +1963,7 @@ elf_i386_gc_sweep_hook (bfd *abfd, bfd_signed_vma *local_got_refcounts; const Elf_Internal_Rela *rel, *relend; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; htab = elf_i386_hash_table (info); @@ -2066,7 +2066,7 @@ elf_i386_gc_sweep_hook (bfd *abfd, case R_386_32: case R_386_PC32: case R_386_SIZE32: - if (info->shared + if (bfd_link_pic (info) && (h == NULL || h->type != STT_GNU_IFUNC)) break; /* Fall through */ @@ -2206,7 +2206,7 @@ elf_i386_adjust_dynamic_symbol (struct bfd_link_info *info, only references to the symbol are via the global offset table. For such cases we need not do anything here; the relocations will be handled correctly by relocate_section. */ - if (!info->executable) + if (!bfd_link_executable (info)) return TRUE; /* If there are no references to this symbol that do not use the @@ -2349,7 +2349,7 @@ elf_i386_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) return FALSE; } - if (info->shared + if (bfd_link_pic (info) || WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, 0, h)) { asection *s = htab->elf.splt; @@ -2371,7 +2371,7 @@ elf_i386_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) location in the .plt. This is required to make function pointers compare as equal between the normal executable and the shared library. */ - if (! info->shared + if (! bfd_link_pic (info) && !h->def_regular) { if (use_plt_got) @@ -2406,7 +2406,7 @@ elf_i386_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) } if (get_elf_i386_backend_data (info->output_bfd)->is_vxworks - && !info->shared) + && !bfd_link_pic (info)) { /* VxWorks has a second set of relocations for each PLT entry in executables. They go in a separate relocation section, @@ -2443,7 +2443,7 @@ elf_i386_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) /* If R_386_TLS_{IE_32,IE,GOTIE} symbol is now local to the binary, make it a R_386_TLS_LE_32 requiring no TLS entry. */ if (h->got.refcount > 0 - && info->executable + && bfd_link_executable (info) && h->dynindx == -1 && (elf_i386_hash_entry(h)->tls_type & GOT_TLS_IE)) h->got.offset = (bfd_vma) -1; @@ -2495,7 +2495,7 @@ elf_i386_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) else if (! GOT_TLS_GDESC_P (tls_type) && (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT || h->root.type != bfd_link_hash_undefweak) - && (info->shared + && (bfd_link_pic (info) || WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h))) htab->elf.srelgot->size += sizeof (Elf32_External_Rel); if (GOT_TLS_GDESC_P (tls_type)) @@ -2513,7 +2513,7 @@ elf_i386_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) space for pc-relative relocs that have become local due to symbol visibility changes. */ - if (info->shared) + if (bfd_link_pic (info)) { /* The only reloc that uses pc_count is R_386_PC32, which will appear on a call or on something like ".long foo - .". We @@ -2655,7 +2655,7 @@ elf_i386_readonly_dynrelocs (struct elf_link_hash_entry *h, void *inf) info->flags |= DF_TEXTREL; - if ((info->warn_shared_textrel && info->shared) + if ((info->warn_shared_textrel && bfd_link_pic (info)) || info->error_textrel) info->callbacks->einfo (_("%P: %B: warning: relocation against `%s' in readonly section `%A'\n"), p->sec->owner, h->root.root.string, @@ -2834,7 +2834,7 @@ elf_i386_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info) if (htab->elf.dynamic_sections_created) { /* Set the contents of the .interp section to the interpreter. */ - if (info->executable) + if (bfd_link_executable (info)) { s = bfd_get_linker_section (dynobj, ".interp"); if (s == NULL) @@ -2894,7 +2894,7 @@ elf_i386_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info) && (info->flags & DF_TEXTREL) == 0) { info->flags |= DF_TEXTREL; - if ((info->warn_shared_textrel && info->shared) + if ((info->warn_shared_textrel && bfd_link_pic (info)) || info->error_textrel) info->callbacks->einfo (_("%P: %B: warning: relocation in readonly section `%A'\n"), p->sec->owner, p->sec); @@ -2936,7 +2936,7 @@ elf_i386_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info) || *local_tls_type == GOT_TLS_IE_BOTH) s->size += 4; } - if (info->shared + if (bfd_link_pic (info) || GOT_TLS_GD_ANY_P (*local_tls_type) || (*local_tls_type & GOT_TLS_IE)) { @@ -3115,7 +3115,7 @@ elf_i386_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info) #define add_dynamic_entry(TAG, VAL) \ _bfd_elf_add_dynamic_entry (info, TAG, VAL) - if (info->executable) + if (bfd_link_executable (info)) { if (!add_dynamic_entry (DT_DEBUG, 0)) return FALSE; @@ -3263,7 +3263,7 @@ elf_i386_set_tls_module_base (struct bfd_link_info *info) struct elf_i386_link_hash_table *htab; struct bfd_link_hash_entry *base; - if (!info->executable) + if (!bfd_link_executable (info)) return; htab = elf_i386_hash_table (info); @@ -3343,7 +3343,7 @@ elf_i386_relocate_section (bfd *output_bfd, /* We have to handle relocations in vxworks .tls_vars sections specially, because the dynamic loader is 'weird'. */ is_vxworks_tls = (get_elf_i386_backend_data (output_bfd)->is_vxworks - && info->shared + && bfd_link_pic (info) && !strcmp (input_section->output_section->name, ".tls_vars")); @@ -3406,7 +3406,7 @@ elf_i386_relocate_section (bfd *output_bfd, if (ELF_ST_TYPE (sym->st_info) == STT_SECTION && ((sec->flags & SEC_MERGE) != 0 - || (info->relocatable + || (bfd_link_relocatable (info) && sec->output_offset != 0))) { bfd_vma addend; @@ -3442,7 +3442,7 @@ elf_i386_relocate_section (bfd *output_bfd, abort (); } - if (info->relocatable) + if (bfd_link_relocatable (info)) addend += sec->output_offset; else { @@ -3473,7 +3473,7 @@ elf_i386_relocate_section (bfd *output_bfd, break; } } - else if (!info->relocatable + else if (!bfd_link_relocatable (info) && ELF32_ST_TYPE (sym->st_info) == STT_GNU_IFUNC) { /* Relocate against local STT_GNU_IFUNC symbol. */ @@ -3503,7 +3503,7 @@ elf_i386_relocate_section (bfd *output_bfd, RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) continue; /* Since STT_GNU_IFUNC symbol must go through PLT, we handle @@ -3562,7 +3562,7 @@ elf_i386_relocate_section (bfd *output_bfd, case R_386_32: /* Generate dynamic relcoation only when there is a non-GOT reference in a shared object. */ - if (info->shared && h->non_got_ref) + if (bfd_link_pic (info) && h->non_got_ref) { Elf_Internal_Rela outrel; asection *sreloc; @@ -3584,7 +3584,7 @@ elf_i386_relocate_section (bfd *output_bfd, if (h->dynindx == -1 || h->forced_local - || info->executable) + || bfd_link_executable (info)) { /* This symbol is resolved locally. */ outrel.r_info = ELF32_R_INFO (0, R_386_IRELATIVE); @@ -3701,8 +3701,10 @@ elf_i386_relocate_section (bfd *output_bfd, off = h->got.offset; dyn = htab->elf.dynamic_sections_created; - if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h) - || (info->shared + if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, + bfd_link_pic (info), + h) + || (bfd_link_pic (info) && SYMBOL_REFERENCES_LOCAL (info, h)) || (ELF_ST_VISIBILITY (h->other) && h->root.type == bfd_link_hash_undefweak)) @@ -3748,7 +3750,7 @@ elf_i386_relocate_section (bfd *output_bfd, bfd_put_32 (output_bfd, relocation, htab->elf.sgot->contents + off); - if (info->shared) + if (bfd_link_pic (info)) { asection *s; Elf_Internal_Rela outrel; @@ -3785,7 +3787,7 @@ elf_i386_relocate_section (bfd *output_bfd, symbol for shared library since it may not be local when used as function address or with copy relocation. We also need to make sure that a symbol is referenced locally. */ - if (!info->executable && h) + if (!bfd_link_executable (info) && h) { if (!h->def_regular) { @@ -3892,14 +3894,14 @@ elf_i386_relocate_section (bfd *output_bfd, || is_vxworks_tls) break; - if ((info->shared + if ((bfd_link_pic (info) && (h == NULL || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT || h->root.type != bfd_link_hash_undefweak) && ((r_type != R_386_PC32 && r_type != R_386_SIZE32) || !SYMBOL_CALLS_LOCAL (info, h))) || (ELIMINATE_COPY_RELOCS - && !info->shared + && !bfd_link_pic (info) && h != NULL && h->dynindx != -1 && !h->non_got_ref @@ -3934,7 +3936,7 @@ elf_i386_relocate_section (bfd *output_bfd, else if (h != NULL && h->dynindx != -1 && (r_type == R_386_PC32 - || !info->shared + || !bfd_link_pic (info) || !SYMBOLIC_BIND (info, h) || !h->def_regular)) outrel.r_info = ELF32_R_INFO (h->dynindx, r_type); @@ -3965,7 +3967,7 @@ elf_i386_relocate_section (bfd *output_bfd, break; case R_386_TLS_IE: - if (!info->executable) + if (!bfd_link_executable (info)) { Elf_Internal_Rela outrel; asection *sreloc; @@ -4506,7 +4508,8 @@ elf_i386_relocate_section (bfd *output_bfd, break; case R_386_TLS_LDO_32: - if (!info->executable || (input_section->flags & SEC_CODE) == 0) + if (!bfd_link_executable (info) + || (input_section->flags & SEC_CODE) == 0) relocation -= elf_i386_dtpoff_base (info); else /* When converting LDO to LE, we must negate. */ @@ -4515,7 +4518,7 @@ elf_i386_relocate_section (bfd *output_bfd, case R_386_TLS_LE_32: case R_386_TLS_LE: - if (!info->executable) + if (!bfd_link_executable (info)) { Elf_Internal_Rela outrel; asection *sreloc; @@ -4666,7 +4669,7 @@ elf_i386_finish_dynamic_symbol (bfd *output_bfd, it up. */ if ((h->dynindx == -1 - && !((h->forced_local || info->executable) + && !((h->forced_local || bfd_link_executable (info)) && h->def_regular && h->type == STT_GNU_IFUNC)) || plt == NULL @@ -4697,7 +4700,7 @@ elf_i386_finish_dynamic_symbol (bfd *output_bfd, } /* Fill in the entry in the procedure linkage table. */ - if (! info->shared) + if (! bfd_link_pic (info)) { memcpy (plt->contents + h->plt.offset, abed->plt->plt_entry, abed->plt->plt_entry_size); @@ -4719,7 +4722,7 @@ elf_i386_finish_dynamic_symbol (bfd *output_bfd, s = ((h->plt.offset - abed->plt->plt_entry_size) / abed->plt->plt_entry_size); /* K: Number of relocations for PLTResolve. */ - if (info->shared) + if (bfd_link_pic (info)) k = PLTRESOLVE_RELOCS_SHLIB; else k = PLTRESOLVE_RELOCS; @@ -4767,7 +4770,7 @@ elf_i386_finish_dynamic_symbol (bfd *output_bfd, + gotplt->output_offset + got_offset); if (h->dynindx == -1 - || ((info->executable + || ((bfd_link_executable (info) || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT) && h->def_regular && h->type == STT_GNU_IFUNC)) @@ -4826,7 +4829,7 @@ elf_i386_finish_dynamic_symbol (bfd *output_bfd, abort (); /* Fill in the entry in the GOT procedure linkage table. */ - if (! info->shared) + if (! bfd_link_pic (info)) { got_plt_entry = elf_i386_got_plt_entry; got_offset += got->output_section->vma + got->output_offset; @@ -4888,7 +4891,7 @@ elf_i386_finish_dynamic_symbol (bfd *output_bfd, if (h->def_regular && h->type == STT_GNU_IFUNC) { - if (info->shared) + if (bfd_link_pic (info)) { /* Generate R_386_GLOB_DAT. */ goto do_glob_dat; @@ -4911,7 +4914,7 @@ elf_i386_finish_dynamic_symbol (bfd *output_bfd, return TRUE; } } - else if (info->shared + else if (bfd_link_pic (info) && SYMBOL_REFERENCES_LOCAL (info, h)) { BFD_ASSERT((h->got.offset & 1) != 0); @@ -5077,7 +5080,7 @@ elf_i386_finish_dynamic_sections (bfd *output_bfd, /* Fill in the first entry in the procedure linkage table. */ if (htab->elf.splt && htab->elf.splt->size > 0) { - if (info->shared) + if (bfd_link_pic (info)) { memcpy (htab->elf.splt->contents, abed->plt->pic_plt0_entry, abed->plt->plt0_entry_size); @@ -5135,14 +5138,14 @@ elf_i386_finish_dynamic_sections (bfd *output_bfd, ->this_hdr.sh_entsize = 4; /* Correct the .rel.plt.unloaded relocations. */ - if (abed->is_vxworks && !info->shared) + if (abed->is_vxworks && !bfd_link_pic (info)) { int num_plts = (htab->elf.splt->size / abed->plt->plt_entry_size) - 1; unsigned char *p; p = htab->srelplt2->contents; - if (info->shared) + if (bfd_link_pic (info)) p += PLTRESOLVE_RELOCS_SHLIB * sizeof (Elf32_External_Rel); else p += PLTRESOLVE_RELOCS * sizeof (Elf32_External_Rel); diff --git a/bfd/elf32-i860.c b/bfd/elf32-i860.c index c3dcf53efcc..8577f581aad 100644 --- a/bfd/elf32-i860.c +++ b/bfd/elf32-i860.c @@ -1131,7 +1131,7 @@ elf32_i860_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) continue; switch (r_type) diff --git a/bfd/elf32-ip2k.c b/bfd/elf32-ip2k.c index 1379446c187..acc421d177f 100644 --- a/bfd/elf32-ip2k.c +++ b/bfd/elf32-ip2k.c @@ -1096,7 +1096,7 @@ ip2k_elf_relax_section (bfd *abfd, /* We don't have to do anything for a relocatable link, if this section does not have relocs, or if this is not a code section. */ - if (link_info->relocatable + if (bfd_link_relocatable (link_info) || (sec->flags & SEC_RELOC) == 0 || sec->reloc_count == 0 || (sec->flags & SEC_CODE) == 0) @@ -1444,7 +1444,7 @@ ip2k_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) continue; /* Finally, the sole IP2K-specific part. */ diff --git a/bfd/elf32-iq2000.c b/bfd/elf32-iq2000.c index ef43595182a..66b0a9ba939 100644 --- a/bfd/elf32-iq2000.c +++ b/bfd/elf32-iq2000.c @@ -461,7 +461,7 @@ iq2000_elf_check_relocs (bfd *abfd, const Elf_Internal_Rela *rel_end; bfd_boolean changed = FALSE; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; symtab_hdr = &elf_tdata (abfd)->symtab_hdr; @@ -645,7 +645,7 @@ iq2000_elf_relocate_section (bfd * output_bfd ATTRIBUTE_UNUSED, RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) continue; switch (r_type) diff --git a/bfd/elf32-lm32.c b/bfd/elf32-lm32.c index 0c01e08df36..23f6e5ea756 100644 --- a/bfd/elf32-lm32.c +++ b/bfd/elf32-lm32.c @@ -892,7 +892,7 @@ lm32_elf_relocate_section (bfd *output_bfd, RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) { /* This is a relocatable link. We don't have to change anything, unless the reloc is against a section symbol, @@ -945,8 +945,10 @@ lm32_elf_relocate_section (bfd *output_bfd, BFD_ASSERT (off != (bfd_vma) -1); dyn = htab->root.dynamic_sections_created; - if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h) - || (info->shared + if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, + bfd_link_pic (info), + h) + || (bfd_link_pic (info) && (info->symbolic || h->dynindx == -1 || h->forced_local) @@ -1019,7 +1021,7 @@ lm32_elf_relocate_section (bfd *output_bfd, + off); } - if (info->shared) + if (bfd_link_pic (info)) { asection *srelgot; Elf_Internal_Rela outrel; @@ -1277,7 +1279,7 @@ lm32_elf_check_relocs (bfd *abfd, struct elf_lm32_link_hash_table *htab; bfd *dynobj; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; symtab_hdr = &elf_tdata (abfd)->symtab_hdr; @@ -1495,7 +1497,7 @@ lm32_elf_finish_dynamic_sections (bfd *output_bfd, splt = htab->splt; if (splt && splt->size > 0) { - if (info->shared) + if (bfd_link_pic (info)) { bfd_put_32 (output_bfd, PLT0_PIC_ENTRY_WORD0, splt->contents); bfd_put_32 (output_bfd, PLT0_PIC_ENTRY_WORD1, splt->contents + 4); @@ -1635,7 +1637,7 @@ lm32_elf_finish_dynamic_symbol (bfd *output_bfd, got_offset = (plt_index + 3) * 4; /* Fill in the entry in the procedure linkage table. */ - if (! info->shared) + if (! bfd_link_pic (info)) { /* TODO */ } @@ -1692,7 +1694,7 @@ lm32_elf_finish_dynamic_symbol (bfd *output_bfd, the symbol was forced to be local because of a version file. The entry in the global offset table will already have been initialized in the relocate_section function. */ - if (info->shared + if (bfd_link_pic (info) && (info->symbolic || h->dynindx == -1 || h->forced_local) @@ -1794,7 +1796,7 @@ lm32_elf_adjust_dynamic_symbol (struct bfd_link_info *info, if (h->type == STT_FUNC || h->needs_plt) { - if (! info->shared + if (! bfd_link_pic (info) && !h->def_dynamic && !h->ref_dynamic && h->root.type != bfd_link_hash_undefweak @@ -1833,7 +1835,7 @@ lm32_elf_adjust_dynamic_symbol (struct bfd_link_info *info, only references to the symbol are via the global offset table. For such cases we need not do anything here; the relocations will be handled correctly by relocate_section. */ - if (info->shared) + if (bfd_link_pic (info)) return TRUE; /* If there are no references to this symbol that do not use the @@ -1932,7 +1934,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) return FALSE; } - if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, info->shared, h)) + if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, bfd_link_pic (info), h)) { asection *s = htab->splt; @@ -1948,7 +1950,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) location in the .plt. This is required to make function pointers compare as equal between the normal executable and the shared library. */ - if (! info->shared + if (! bfd_link_pic (info) && !h->def_regular) { h->root.u.def.section = s; @@ -1996,7 +1998,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) h->got.offset = s->size; s->size += 4; dyn = htab->root.dynamic_sections_created; - if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h)) + if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), h)) htab->srelgot->size += sizeof (Elf32_External_Rela); } else @@ -2011,7 +2013,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) space for pc-relative relocs that have become local due to symbol visibility changes. */ - if (info->shared) + if (bfd_link_pic (info)) { if (h->def_regular && (h->forced_local @@ -2139,7 +2141,7 @@ lm32_elf_size_dynamic_sections (bfd *output_bfd, if (htab->root.dynamic_sections_created) { /* Set the contents of the .interp section to the interpreter. */ - if (info->executable) + if (bfd_link_executable (info)) { s = bfd_get_linker_section (dynobj, ".interp"); BFD_ASSERT (s != NULL); @@ -2203,7 +2205,7 @@ lm32_elf_size_dynamic_sections (bfd *output_bfd, { *local_got = s->size; s->size += 4; - if (info->shared) + if (bfd_link_pic (info)) srel->size += sizeof (Elf32_External_Rela); } else @@ -2282,7 +2284,7 @@ lm32_elf_size_dynamic_sections (bfd *output_bfd, #define add_dynamic_entry(TAG, VAL) \ _bfd_elf_add_dynamic_entry (info, TAG, VAL) - if (info->executable) + if (bfd_link_executable (info)) { if (! add_dynamic_entry (DT_DEBUG, 0)) return FALSE; @@ -2508,7 +2510,7 @@ lm32_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) h->type = STT_OBJECT; htab->root.hplt = h; - if (info->shared + if (bfd_link_pic (info) && ! bfd_elf_link_record_dynamic_symbol (info, h)) return FALSE; } @@ -2550,7 +2552,7 @@ lm32_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) be needed, we can discard it later. We will never need this section when generating a shared object, since they do not use copy relocs. */ - if (! info->shared) + if (! bfd_link_pic (info)) { s = bfd_make_section_anyway_with_flags (abfd, (bed->default_use_rela_p @@ -2616,7 +2618,7 @@ lm32_elf_copy_indirect_symbol (struct bfd_link_info *info, static bfd_boolean lm32_elf_always_size_sections (bfd *output_bfd, struct bfd_link_info *info) { - if (!info->relocatable) + if (!bfd_link_relocatable (info)) { if (!bfd_elf_stack_segment_size (output_bfd, info, "__stacksize", DEFAULT_STACK_SIZE)) diff --git a/bfd/elf32-m32c.c b/bfd/elf32-m32c.c index 70e9174e9be..953f00ea087 100644 --- a/bfd/elf32-m32c.c +++ b/bfd/elf32-m32c.c @@ -477,7 +477,7 @@ m32c_elf_relocate_section } else if (h->root.type == bfd_link_hash_undefweak) ; - else if (!info->relocatable) + else if (!bfd_link_relocatable (info)) { if (! ((*info->callbacks->undefined_symbol) (info, h->root.root.string, input_bfd, @@ -490,7 +490,7 @@ m32c_elf_relocate_section RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) { /* This is a relocatable link. We don't have to change anything, unless the reloc is against a section symbol, @@ -671,7 +671,7 @@ m32c_elf_check_relocs asection *splt; bfd *dynobj; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; symtab_hdr = &elf_tdata (abfd)->symtab_hdr; @@ -793,7 +793,7 @@ m32c_elf_always_size_sections (bfd *output_bfd ATTRIBUTE_UNUSED, bfd *dynobj; asection *splt; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; dynobj = elf_hash_table (info)->dynobj; @@ -1165,7 +1165,7 @@ m32c_elf_relax_plt_section (asection *splt, /* Assume nothing changes. */ *again = FALSE; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; /* Quick check for an empty plt. */ @@ -1467,7 +1467,7 @@ m32c_elf_relax_section /* We don't have to do anything for a relocatable link, if this section does not have relocs, or if this is not a code section. */ - if (link_info->relocatable + if (bfd_link_relocatable (link_info) || (sec->flags & SEC_RELOC) == 0 || sec->reloc_count == 0 || (sec->flags & SEC_CODE) == 0) diff --git a/bfd/elf32-m32r.c b/bfd/elf32-m32r.c index 85949b147e9..155d07904f3 100644 --- a/bfd/elf32-m32r.c +++ b/bfd/elf32-m32r.c @@ -1369,7 +1369,7 @@ m32r_elf_add_symbol_hook (bfd *abfd, asection **secp, bfd_vma *valp) { - if (! info->relocatable + if (! bfd_link_relocatable (info) && (*namep)[0] == '_' && (*namep)[1] == 'S' && strcmp (*namep, "_SDA_BASE_") == 0 && is_elf_hash_table (info->hash)) @@ -1679,7 +1679,7 @@ m32r_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) h->type = STT_OBJECT; htab->root.hplt = h; - if (info->shared + if (bfd_link_pic (info) && ! bfd_elf_link_record_dynamic_symbol (info, h)) return FALSE; } @@ -1721,7 +1721,7 @@ m32r_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) be needed, we can discard it later. We will never need this section when generating a shared object, since they do not use copy relocs. */ - if (! info->shared) + if (! bfd_link_pic (info)) { s = bfd_make_section_anyway_with_flags (abfd, (bed->default_use_rela_p @@ -1821,7 +1821,7 @@ m32r_elf_adjust_dynamic_symbol (struct bfd_link_info *info, if (h->type == STT_FUNC || h->needs_plt) { - if (! info->shared + if (! bfd_link_pic (info) && !h->def_dynamic && !h->ref_dynamic && h->root.type != bfd_link_hash_undefweak @@ -1860,7 +1860,7 @@ m32r_elf_adjust_dynamic_symbol (struct bfd_link_info *info, only references to the symbol are via the global offset table. For such cases we need not do anything here; the relocations will be handled correctly by relocate_section. */ - if (info->shared) + if (bfd_link_pic (info)) return TRUE; /* If there are no references to this symbol that do not use the @@ -1959,7 +1959,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) return FALSE; } - if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, info->shared, h)) + if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, bfd_link_pic (info), h)) { asection *s = htab->splt; @@ -1975,7 +1975,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) location in the .plt. This is required to make function pointers compare as equal between the normal executable and the shared library. */ - if (! info->shared + if (! bfd_link_pic (info) && !h->def_regular) { h->root.u.def.section = s; @@ -2023,7 +2023,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) h->got.offset = s->size; s->size += 4; dyn = htab->root.dynamic_sections_created; - if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h)) + if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), h)) htab->srelgot->size += sizeof (Elf32_External_Rela); } else @@ -2038,7 +2038,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) space for pc-relative relocs that have become local due to symbol visibility changes. */ - if (info->shared) + if (bfd_link_pic (info)) { if (h->def_regular && (h->forced_local @@ -2170,7 +2170,7 @@ m32r_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, if (htab->root.dynamic_sections_created) { /* Set the contents of the .interp section to the interpreter. */ - if (info->executable) + if (bfd_link_executable (info)) { s = bfd_get_linker_section (dynobj, ".interp"); BFD_ASSERT (s != NULL); @@ -2234,7 +2234,7 @@ m32r_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, { *local_got = s->size; s->size += 4; - if (info->shared) + if (bfd_link_pic (info)) srel->size += sizeof (Elf32_External_Rela); } else @@ -2313,7 +2313,7 @@ m32r_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, #define add_dynamic_entry(TAG, VAL) \ _bfd_elf_add_dynamic_entry (info, TAG, VAL) - if (info->executable) + if (bfd_link_executable (info)) { if (! add_dynamic_entry (DT_DEBUG, 0)) return FALSE; @@ -2524,11 +2524,12 @@ m32r_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, || r_type == R_M32R_GOT16_HI_SLO || r_type == R_M32R_GOT16_LO) && WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, - info->shared, h) - && (! info->shared + bfd_link_pic (info), + h) + && (! bfd_link_pic (info) || (! info->symbolic && h->dynindx != -1) || !h->def_regular)) - || (info->shared + || (bfd_link_pic (info) && ((! info->symbolic && h->dynindx != -1) || !h->def_regular) && (((r_type == R_M32R_16_RELA @@ -2558,7 +2559,7 @@ m32r_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, relocation = (h->root.u.def.value + sec->output_section->vma + sec->output_offset); - else if (!info->relocatable + else if (!bfd_link_relocatable (info) && (_bfd_elf_section_offset (output_bfd, info, input_section, rel->r_offset) @@ -2578,7 +2579,7 @@ m32r_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, else if (info->unresolved_syms_in_objects == RM_IGNORE && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT) ; - else if (!info->relocatable) + else if (!bfd_link_relocatable (info)) { if (! ((*info->callbacks->undefined_symbol) (info, h->root.root.string, input_bfd, @@ -2593,7 +2594,7 @@ m32r_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable && !use_rel) + if (bfd_link_relocatable (info) && !use_rel) { /* This is a relocatable link. We don't have to change anything, unless the reloc is against a section symbol, @@ -2604,7 +2605,7 @@ m32r_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, continue; } - if (info->relocatable && use_rel) + if (bfd_link_relocatable (info) && use_rel) { /* This is a relocatable link. We don't have to change anything, unless the reloc is against a section symbol, @@ -2733,8 +2734,10 @@ m32r_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, BFD_ASSERT (off != (bfd_vma) -1); dyn = htab->root.dynamic_sections_created; - if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h) - || (info->shared + if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, + bfd_link_pic (info), + h) + || (bfd_link_pic (info) && (info->symbolic || h->dynindx == -1 || h->forced_local) @@ -2783,7 +2786,7 @@ m32r_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, { bfd_put_32 (output_bfd, relocation, sgot->contents + off); - if (info->shared) + if (bfd_link_pic (info)) { asection *srelgot; Elf_Internal_Rela outrel; @@ -2854,7 +2857,7 @@ m32r_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, case R_M32R_26_PCREL_RELA: case R_M32R_HI16_ULO_RELA: case R_M32R_LO16_RELA: - if (info->shared + if (bfd_link_pic (info) && r_symndx != STN_UNDEF && (input_section->flags & SEC_ALLOC) != 0 && (( r_type != R_M32R_10_PCREL_RELA @@ -3153,7 +3156,7 @@ m32r_elf_finish_dynamic_symbol (bfd *output_bfd, got_offset = (plt_index + 3) * 4; /* Fill in the entry in the procedure linkage table. */ - if (! info->shared) + if (! bfd_link_pic (info)) { bfd_put_32 (output_bfd, (PLT_ENTRY_WORD0b @@ -3245,7 +3248,7 @@ m32r_elf_finish_dynamic_symbol (bfd *output_bfd, the symbol was forced to be local because of a version file. The entry in the global offset table will already have been initialized in the relocate_section function. */ - if (info->shared + if (bfd_link_pic (info) && (info->symbolic || h->dynindx == -1 || h->forced_local) @@ -3391,7 +3394,7 @@ m32r_elf_finish_dynamic_sections (bfd *output_bfd, splt = htab->splt; if (splt && splt->size > 0) { - if (info->shared) + if (bfd_link_pic (info)) { bfd_put_32 (output_bfd, PLT0_PIC_ENTRY_WORD0, splt->contents); bfd_put_32 (output_bfd, PLT0_PIC_ENTRY_WORD1, splt->contents + 4); @@ -3604,7 +3607,7 @@ m32r_elf_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED, bfd_signed_vma *local_got_refcounts; const Elf_Internal_Rela *rel, *relend; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; elf_section_data (sec)->local_dynrel = NULL; @@ -3671,7 +3674,7 @@ m32r_elf_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED, struct elf_m32r_dyn_relocs **pp; struct elf_m32r_dyn_relocs *p; - if (!info->shared && h->plt.refcount > 0) + if (!bfd_link_pic (info) && h->plt.refcount > 0) h->plt.refcount -= 1; eh = (struct elf_m32r_link_hash_entry *) h; @@ -3726,7 +3729,7 @@ m32r_elf_check_relocs (bfd *abfd, bfd *dynobj; asection *sreloc; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; sreloc = NULL; @@ -3852,7 +3855,7 @@ m32r_elf_check_relocs (bfd *abfd, case R_M32R_18_PCREL_RELA: case R_M32R_26_PCREL_RELA: - if (h != NULL && !info->shared) + if (h != NULL && !bfd_link_pic (info)) { h->non_got_ref = 1; h->plt.refcount += 1; @@ -3877,7 +3880,7 @@ m32r_elf_check_relocs (bfd *abfd, may need to keep relocations for symbols satisfied by a dynamic library if we manage to avoid copy relocs for the symbol. */ - if ((info->shared + if ((bfd_link_pic (info) && (sec->flags & SEC_ALLOC) != 0 && (( r_type != R_M32R_26_PCREL_RELA && r_type != R_M32R_18_PCREL_RELA @@ -3887,7 +3890,7 @@ m32r_elf_check_relocs (bfd *abfd, && (! info->symbolic || h->root.type == bfd_link_hash_defweak || !h->def_regular)))) - || (!info->shared + || (!bfd_link_pic (info) && (sec->flags & SEC_ALLOC) != 0 && h != NULL && (h->root.type == bfd_link_hash_defweak diff --git a/bfd/elf32-m68hc11.c b/bfd/elf32-m68hc11.c index b7a728fe750..44a4b83effd 100644 --- a/bfd/elf32-m68hc11.c +++ b/bfd/elf32-m68hc11.c @@ -696,7 +696,7 @@ m68hc11_elf_relax_section (bfd *abfd, asection *sec, /* We don't have to do anything for a relocatable link, if this section does not have relocs, or if this is not a code section. */ - if (link_info->relocatable + if (bfd_link_relocatable (link_info) || (sec->flags & SEC_RELOC) == 0 || sec->reloc_count == 0 || (sec->flags & SEC_CODE) == 0) diff --git a/bfd/elf32-m68hc1x.c b/bfd/elf32-m68hc1x.c index b64592d20ae..8f02b12ee0d 100644 --- a/bfd/elf32-m68hc1x.c +++ b/bfd/elf32-m68hc1x.c @@ -853,7 +853,7 @@ elf32_m68hc11_check_relocs (bfd *abfd, struct bfd_link_info *info, const Elf_Internal_Rela * rel; const Elf_Internal_Rela * rel_end; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; symtab_hdr = & elf_tdata (abfd)->symtab_hdr; @@ -998,7 +998,7 @@ elf32_m68hc11_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) { /* This is a relocatable link. We don't have to change anything, unless the reloc is against a section symbol, diff --git a/bfd/elf32-m68k.c b/bfd/elf32-m68k.c index 07211b57aec..10d2fcb286d 100644 --- a/bfd/elf32-m68k.c +++ b/bfd/elf32-m68k.c @@ -2232,7 +2232,7 @@ elf_m68k_partition_multi_got_2 (struct elf_m68k_partition_multi_got_arg *arg) arg->n_slots += arg->current_got->n_slots[R_32]; - if (!arg->info->shared) + if (!bfd_link_pic (arg->info)) /* If we are generating a shared object, we need to output a R_68K_RELATIVE reloc so that the dynamic linker can adjust this GOT entry. Overwise we @@ -2554,7 +2554,7 @@ elf_m68k_check_relocs (bfd *abfd, asection *sreloc; struct elf_m68k_got *got; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; dynobj = elf_hash_table (info)->dynobj; @@ -2620,7 +2620,7 @@ elf_m68k_check_relocs (bfd *abfd, case R_68K_TLS_DTPREL32: if (ELF32_R_TYPE (rel->r_info) == R_68K_TLS_TPREL32 - && info->shared) + && bfd_link_pic (info)) /* Do the special chorus for libraries with static TLS. */ info->flags |= DF_STATIC_TLS; @@ -2641,7 +2641,7 @@ elf_m68k_check_relocs (bfd *abfd, } if (srelgot == NULL - && (h != NULL || info->shared)) + && (h != NULL || bfd_link_pic (info))) { srelgot = bfd_get_linker_section (dynobj, ".rela.got"); if (srelgot == NULL) @@ -2755,7 +2755,7 @@ elf_m68k_check_relocs (bfd *abfd, will be set later (it is never cleared). We account for that possibility below by storing information in the pcrel_relocs_copied field of the hash table entry. */ - if (!(info->shared + if (!(bfd_link_pic (info) && (sec->flags & SEC_ALLOC) != 0 && h != NULL && (!SYMBOLIC_BIND (info, h) @@ -2786,14 +2786,14 @@ elf_m68k_check_relocs (bfd *abfd, turns out to be a function defined by a dynamic object. */ h->plt.refcount++; - if (info->executable) + if (bfd_link_executable (info)) /* This symbol needs a non-GOT reference. */ h->non_got_ref = 1; } /* If we are creating a shared library, we need to copy the reloc into the shared library. */ - if (info->shared) + if (bfd_link_pic (info)) { /* When creating a shared object, we must copy these reloc types into the output file. We create a reloc @@ -2938,7 +2938,7 @@ elf_m68k_gc_sweep_hook (bfd *abfd, bfd *dynobj; struct elf_m68k_got *got; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; dynobj = elf_hash_table (info)->dynobj; @@ -3153,7 +3153,7 @@ elf_m68k_adjust_dynamic_symbol (struct bfd_link_info *info, location in the .plt. This is required to make function pointers compare as equal between the normal executable and the shared library. */ - if (!info->shared + if (!bfd_link_pic (info) && !h->def_regular) { h->root.u.def.section = s; @@ -3202,7 +3202,7 @@ elf_m68k_adjust_dynamic_symbol (struct bfd_link_info *info, only references to the symbol are via the global offset table. For such cases we need not do anything here; the relocations will be handled correctly by relocate_section. */ - if (info->shared) + if (bfd_link_pic (info)) return TRUE; /* If there are no references to this symbol that do not use the @@ -3257,7 +3257,7 @@ elf_m68k_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, if (elf_hash_table (info)->dynamic_sections_created) { /* Set the contents of the .interp section to the interpreter. */ - if (info->executable) + if (bfd_link_executable (info)) { s = bfd_get_linker_section (dynobj, ".interp"); BFD_ASSERT (s != NULL); @@ -3283,7 +3283,7 @@ elf_m68k_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, against symbols that have become local due to visibility changes. We allocated space for them in the check_relocs routine, but we will not fill them in in the relocate_section routine. */ - if (info->shared) + if (bfd_link_pic (info)) elf_link_hash_traverse (elf_hash_table (info), elf_m68k_discard_copies, info); @@ -3366,7 +3366,7 @@ elf_m68k_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, #define add_dynamic_entry(TAG, VAL) \ _bfd_elf_add_dynamic_entry (info, TAG, VAL) - if (info->executable) + if (bfd_link_executable (info)) { if (!add_dynamic_entry (DT_DEBUG, 0)) return FALSE; @@ -3680,7 +3680,7 @@ elf_m68k_relocate_section (bfd *output_bfd, RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) continue; switch (r_type) @@ -3810,8 +3810,10 @@ elf_m68k_relocate_section (bfd *output_bfd, bfd_boolean dyn; dyn = elf_hash_table (info)->dynamic_sections_created; - if (!WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h) - || (info->shared + if (!WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, + bfd_link_pic (info), + h) + || (bfd_link_pic (info) && SYMBOL_REFERENCES_LOCAL (info, h)) || (ELF_ST_VISIBILITY (h->other) && h->root.type == bfd_link_hash_undefweak)) @@ -3841,7 +3843,7 @@ elf_m68k_relocate_section (bfd *output_bfd, else unresolved_reloc = FALSE; } - else if (info->shared) /* && h == NULL */ + else if (bfd_link_pic (info)) /* && h == NULL */ /* Process local symbol during dynamic link. */ { if (srela == NULL) @@ -3860,7 +3862,7 @@ elf_m68k_relocate_section (bfd *output_bfd, *off_ptr |= 1; } - else /* h == NULL && !info->shared */ + else /* h == NULL && !bfd_link_pic (info) */ { elf_m68k_init_got_entry_static (info, output_bfd, @@ -3914,7 +3916,7 @@ elf_m68k_relocate_section (bfd *output_bfd, case R_68K_TLS_LE32: case R_68K_TLS_LE16: case R_68K_TLS_LE8: - if (info->shared && !info->pie) + if (bfd_link_pic (info) && !bfd_link_pie (info)) { (*_bfd_error_handler) (_("%B(%A+0x%lx): R_68K_TLS_LE32 relocation not permitted " @@ -3987,7 +3989,7 @@ elf_m68k_relocate_section (bfd *output_bfd, case R_68K_PC8: case R_68K_PC16: case R_68K_PC32: - if (info->shared + if (bfd_link_pic (info) && r_symndx != STN_UNDEF && (input_section->flags & SEC_ALLOC) != 0 && (h == NULL @@ -4026,7 +4028,7 @@ elf_m68k_relocate_section (bfd *output_bfd, && (r_type == R_68K_PC8 || r_type == R_68K_PC16 || r_type == R_68K_PC32 - || !info->shared + || !bfd_link_pic (info) || !SYMBOLIC_BIND (info, h) || !h->def_regular)) { @@ -4335,7 +4337,7 @@ elf_m68k_finish_dynamic_symbol (bfd *output_bfd, the symbol was forced to be local because of a version file. The entry in the global offset table already have been initialized in the relocate_section function. */ - if (info->shared + if (bfd_link_pic (info) && SYMBOL_REFERENCES_LOCAL (info, h)) { bfd_vma relocation; @@ -4591,7 +4593,7 @@ bfd_m68k_elf32_create_embedded_relocs (abfd, info, datasec, relsec, errmsg) bfd_byte *p; bfd_size_type amt; - BFD_ASSERT (! info->relocatable); + BFD_ASSERT (! bfd_link_relocatable (info)); *errmsg = NULL; diff --git a/bfd/elf32-mcore.c b/bfd/elf32-mcore.c index 2e6a33b26ab..33b15319890 100644 --- a/bfd/elf32-mcore.c +++ b/bfd/elf32-mcore.c @@ -409,7 +409,7 @@ mcore_elf_relocate_section (bfd * output_bfd, input_bfd, input_section, (long) input_section->reloc_count, - (info->relocatable) ? " (relocatable)" : ""); + (bfd_link_relocatable (info)) ? " (relocatable)" : ""); #endif if (! mcore_elf_howto_table [R_MCORE_PCRELIMM8BY4]) /* Initialize howto table if needed */ @@ -478,7 +478,7 @@ mcore_elf_relocate_section (bfd * output_bfd, RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) continue; switch (r_type) @@ -598,7 +598,7 @@ mcore_elf_check_relocs (bfd * abfd, const Elf_Internal_Rela * rel; const Elf_Internal_Rela * rel_end; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; symtab_hdr = & elf_tdata (abfd)->symtab_hdr; diff --git a/bfd/elf32-mep.c b/bfd/elf32-mep.c index c791884fc1a..6c41519eca0 100644 --- a/bfd/elf32-mep.c +++ b/bfd/elf32-mep.c @@ -491,7 +491,7 @@ mep_elf_relocate_section RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) continue; if (r_type == R_RELC) diff --git a/bfd/elf32-metag.c b/bfd/elf32-metag.c index 71147472d46..9c54a7140ae 100644 --- a/bfd/elf32-metag.c +++ b/bfd/elf32-metag.c @@ -1418,7 +1418,7 @@ metag_final_link_relocate (reloc_howto_type *howto, _bfd_clear_contents (howto, input_bfd, input_section, \ contents + rel->r_offset); \ \ - if (info->relocatable \ + if (bfd_link_relocatable (info) \ && (input_section->flags & SEC_DEBUGGING)) \ { \ /* Only remove relocations in debug sections since other \ @@ -1559,7 +1559,7 @@ elf_metag_relocate_section (bfd *output_bfd, METAG_RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, relend, howto, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) continue; switch (r_type) @@ -1569,12 +1569,12 @@ elf_metag_relocate_section (bfd *output_bfd, if ((input_section->flags & SEC_ALLOC) == 0) break; - if ((info->shared + if ((bfd_link_pic (info) && r_symndx != STN_UNDEF && (input_section->flags & SEC_ALLOC) != 0 && (r_type != R_METAG_RELBRANCH || !SYMBOL_CALLS_LOCAL (info, &hh->eh))) - || (!info->shared + || (!bfd_link_pic (info) && hh != NULL && hh->eh.dynindx != -1 && !hh->eh.non_got_ref @@ -1709,7 +1709,8 @@ elf_metag_relocate_section (bfd *output_bfd, off = hh->eh.got.offset; dyn = htab->etab.dynamic_sections_created; - if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, + if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, + bfd_link_pic (info), &hh->eh)) { /* If we aren't going to call finish_dynamic_symbol, @@ -1749,7 +1750,7 @@ elf_metag_relocate_section (bfd *output_bfd, if (do_got) { - if (info->shared) + if (bfd_link_pic (info)) { /* Output a dynamic relocation for this GOT entry. In this case it is relative to the base of the @@ -1796,8 +1797,10 @@ elf_metag_relocate_section (bfd *output_bfd, bfd_boolean dyn; dyn = htab->etab.dynamic_sections_created; - if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, &hh->eh) - && (!info->shared + if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, + bfd_link_pic (info), + &hh->eh) + && (!bfd_link_pic (info) || !SYMBOL_REFERENCES_LOCAL (info, &hh->eh))) { indx = hh->eh.dynindx; @@ -1831,7 +1834,7 @@ elf_metag_relocate_section (bfd *output_bfd, now, and emit any relocations. If both an IE GOT and a GD GOT are necessary, we emit the GD first. */ - if ((info->shared || indx != 0) + if ((bfd_link_pic (info) || indx != 0) && (hh == NULL || ELF_ST_VISIBILITY (hh->eh.other) == STV_DEFAULT || hh->eh.root.type != bfd_link_hash_undefweak)) @@ -1923,7 +1926,7 @@ elf_metag_relocate_section (bfd *output_bfd, case R_METAG_TLS_IENONPIC_LO16: case R_METAG_TLS_LE_HI16: case R_METAG_TLS_LE_LO16: - if (info->shared) + if (bfd_link_pic (info)) { (*_bfd_error_handler) (_("%B(%A+0x%lx): R_METAG_TLS_LE/IENONPIC relocation not permitted in shared object"), @@ -1936,7 +1939,7 @@ elf_metag_relocate_section (bfd *output_bfd, break; case R_METAG_TLS_LDO_HI16: case R_METAG_TLS_LDO_LO16: - if (! info->shared) + if (! bfd_link_pic (info)) relocation = tpoff (info, relocation); else relocation -= dtpoff_base (info); @@ -2071,7 +2074,7 @@ elf_metag_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) eh->type = STT_OBJECT; eh->other = STV_HIDDEN; - if (! info->executable + if (! bfd_link_executable (info) && ! bfd_elf_link_record_dynamic_symbol (info, eh)) return FALSE; @@ -2108,7 +2111,7 @@ elf_metag_check_relocs (bfd *abfd, bfd *dynobj; int tls_type = GOT_UNKNOWN, old_tls_type = GOT_UNKNOWN; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; htab = metag_link_hash_table (info); @@ -2163,7 +2166,7 @@ elf_metag_check_relocs (bfd *abfd, case R_METAG_TLS_GD: case R_METAG_TLS_LDM: case R_METAG_TLS_IE: - if (info->shared) + if (bfd_link_pic (info)) info->flags |= DF_STATIC_TLS; /* Fall through. */ @@ -2277,7 +2280,7 @@ elf_metag_check_relocs (bfd *abfd, cannot be used in shared libs. Don't error out for sections we don't care about, such as debug sections or non-constant sections. */ - if (info->shared + if (bfd_link_pic (info) && (sec->flags & SEC_ALLOC) != 0 && (sec->flags & SEC_READONLY) != 0) { @@ -2298,7 +2301,7 @@ elf_metag_check_relocs (bfd *abfd, case R_METAG_ADDR32: case R_METAG_RELBRANCH: case R_METAG_GETSETOFF: - if (hh != NULL && !info->shared) + if (hh != NULL && !bfd_link_pic (info)) { hh->eh.non_got_ref = 1; hh->eh.plt.refcount += 1; @@ -2323,14 +2326,14 @@ elf_metag_check_relocs (bfd *abfd, may need to keep relocations for symbols satisfied by a dynamic library if we manage to avoid copy relocs for the symbol. */ - if ((info->shared + if ((bfd_link_pic (info) && (sec->flags & SEC_ALLOC) != 0 && (r_type != R_METAG_RELBRANCH || (hh != NULL && (! info->symbolic || hh->eh.root.type == bfd_link_hash_defweak || !hh->eh.def_regular)))) - || (!info->shared + || (!bfd_link_pic (info) && (sec->flags & SEC_ALLOC) != 0 && hh != NULL && (hh->eh.root.type == bfd_link_hash_defweak @@ -2537,7 +2540,7 @@ elf_metag_adjust_dynamic_symbol (struct bfd_link_info *info, only references to the symbol are via the global offset table. For such cases we need not do anything here; the relocations will be handled correctly by relocate_section. */ - if (info->shared) + if (bfd_link_pic (info)) return TRUE; /* If there are no references to this symbol that do not use the @@ -2626,7 +2629,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *eh, void *inf) return FALSE; } - if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, info->shared, eh)) + if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, bfd_link_pic (info), eh)) { asection *s = htab->splt; @@ -2642,7 +2645,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *eh, void *inf) location in the .plt. This is required to make function pointers compare as equal between the normal executable and the shared library. */ - if (! info->shared + if (! bfd_link_pic (info) && !eh->def_regular) { eh->root.u.def.section = s; @@ -2701,7 +2704,9 @@ allocate_dynrelocs (struct elf_link_hash_entry *eh, void *inf) htab->srelgot->size += sizeof (Elf32_External_Rela); else if (tls_type == GOT_TLS_GD) htab->srelgot->size += 2 * sizeof (Elf32_External_Rela); - else if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, eh)) + else if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, + bfd_link_pic (info), + eh)) htab->srelgot->size += sizeof (Elf32_External_Rela); } else @@ -2716,7 +2721,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *eh, void *inf) defined in a regular object. For the normal shared case, discard space for relocs that have become local due to symbol visibility changes. */ - if (info->shared) + if (bfd_link_pic (info)) { if (SYMBOL_CALLS_LOCAL (info, eh)) { @@ -2843,7 +2848,7 @@ elf_metag_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, if (htab->etab.dynamic_sections_created) { /* Set the contents of the .interp section to the interpreter. */ - if (info->executable) + if (bfd_link_executable (info)) { s = bfd_get_linker_section (dynobj, ".interp"); if (s == NULL) @@ -2913,7 +2918,7 @@ elf_metag_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, /* R_METAG_TLS_GD relocs need 2 consecutive GOT entries. */ if (*local_tls_type == GOT_TLS_GD) s->size += 4; - if (info->shared) + if (bfd_link_pic (info)) srel->size += sizeof (Elf32_External_Rela); } else @@ -3022,7 +3027,7 @@ elf_metag_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, if (!add_dynamic_entry (DT_PLTGOT, 0)) return FALSE; - if (info->executable) + if (bfd_link_executable (info)) { if (!add_dynamic_entry (DT_DEBUG, 0)) return FALSE; @@ -3114,7 +3119,7 @@ elf_metag_finish_dynamic_symbol (bfd *output_bfd, BFD_ASSERT (plt_index < (1 << 16)); /* Fill in the entry in the procedure linkage table. */ - if (! info->shared) + if (! bfd_link_pic (info)) { bfd_put_32 (output_bfd, (plt_entry[0] @@ -3198,7 +3203,7 @@ elf_metag_finish_dynamic_symbol (bfd *output_bfd, we just want to emit a RELATIVE reloc. The entry in the global offset table will already have been initialized in the relocate_section function. */ - if (info->shared + if (bfd_link_pic (info) && (info->symbolic || eh->dynindx == -1) && eh->def_regular) { @@ -3377,7 +3382,7 @@ elf_metag_finish_dynamic_sections (bfd *output_bfd, /* addr = .got + 4 */ addr = htab->sgot->output_section->vma + htab->sgot->output_offset + 4; - if (info->shared) + if (bfd_link_pic (info)) { addr -= splt->output_section->vma + splt->output_offset; bfd_put_32 (output_bfd, @@ -3463,7 +3468,7 @@ elf_metag_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED, bfd_signed_vma *local_plt_refcounts; const Elf_Internal_Rela *rel, *relend; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; elf_section_data (sec)->local_dynrel = NULL; @@ -3546,7 +3551,7 @@ elf_metag_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED, struct elf_metag_dyn_reloc_entry **hdh_pp; struct elf_metag_dyn_reloc_entry *hdh_p; - if (!info->shared && eh->plt.refcount > 0) + if (!bfd_link_pic (info) && eh->plt.refcount > 0) eh->plt.refcount -= 1; hh = (struct elf_metag_link_hash_entry *) eh; @@ -3604,7 +3609,7 @@ metag_type_of_stub (asection *input_sec, if (branch_offset + max_branch_offset >= 2*max_branch_offset) { - if (info->shared) + if (bfd_link_pic (info)) return metag_stub_long_branch_shared; else return metag_stub_long_branch; @@ -4145,7 +4150,7 @@ elf_metag_size_stubs(bfd *output_bfd, bfd *stub_bfd, } else if (hh->eh.root.type == bfd_link_hash_undefweak) { - if (! info->shared) + if (! bfd_link_pic (info)) continue; } else if (hh->eh.root.type == bfd_link_hash_undefined) diff --git a/bfd/elf32-microblaze.c b/bfd/elf32-microblaze.c index e84b1b966e6..3032161526f 100644 --- a/bfd/elf32-microblaze.c +++ b/bfd/elf32-microblaze.c @@ -966,7 +966,7 @@ microblaze_elf_relocate_section (bfd *output_bfd, howto = microblaze_elf_howto_table[r_type]; r_symndx = ELF32_R_SYM (rel->r_info); - if (info->relocatable) + if (bfd_link_relocatable (info)) { /* This is a relocatable link. We don't have to change anything, unless the reloc is against a section symbol, @@ -1245,13 +1245,16 @@ microblaze_elf_relocate_section (bfd *output_bfd, bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created; - if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h) - && (!info->shared || !SYMBOL_REFERENCES_LOCAL (info, h))) + if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, + bfd_link_pic (info), + h) + && (!bfd_link_pic (info) + || !SYMBOL_REFERENCES_LOCAL (info, h))) indx = h->dynindx; } /* Need to generate relocs ? */ - if ((info->shared || indx != 0) + if ((bfd_link_pic (info) || indx != 0) && (h == NULL || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT || h->root.type != bfd_link_hash_undefweak)) @@ -1272,7 +1275,7 @@ microblaze_elf_relocate_section (bfd *output_bfd, /* Process module-id */ if (IS_TLS_LD(tls_type)) { - if (! info->shared) + if (! bfd_link_pic (info)) { bfd_put_32 (output_bfd, 1, htab->sgot->contents + off); } @@ -1337,7 +1340,7 @@ microblaze_elf_relocate_section (bfd *output_bfd, /* Relocs for dyn symbols generated by finish_dynamic_symbols */ - if (info->shared && h == NULL) + if (bfd_link_pic (info) && h == NULL) { *offp |= 1; microblaze_elf_output_dynamic_relocation (output_bfd, @@ -1427,7 +1430,7 @@ microblaze_elf_relocate_section (bfd *output_bfd, break; } - if ((info->shared + if ((bfd_link_pic (info) && (h == NULL || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT || h->root.type != bfd_link_hash_undefweak) @@ -1436,7 +1439,7 @@ microblaze_elf_relocate_section (bfd *output_bfd, && h->dynindx != -1 && (!info->symbolic || !h->def_regular)))) - || (!info->shared + || (!bfd_link_pic (info) && h != NULL && h->dynindx != -1 && !h->non_got_ref @@ -1688,7 +1691,7 @@ microblaze_elf_relax_section (bfd *abfd, *again = FALSE; /* Only do this for a text section. */ - if (link_info->relocatable + if (bfd_link_relocatable (link_info) || (sec->flags & SEC_RELOC) == 0 || (sec->reloc_count == 0) || (sec->flags & SEC_CODE) == 0) @@ -2330,7 +2333,7 @@ microblaze_elf_check_relocs (bfd * abfd, struct elf32_mb_link_hash_table *htab; asection *sreloc = NULL; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; htab = elf32_mb_hash_table (info); @@ -2423,7 +2426,7 @@ microblaze_elf_check_relocs (bfd * abfd, case R_MICROBLAZE_64_PCREL: case R_MICROBLAZE_32: { - if (h != NULL && !info->shared) + if (h != NULL && !bfd_link_pic (info)) { /* we may need a copy reloc. */ h->non_got_ref = 1; @@ -2457,14 +2460,14 @@ microblaze_elf_check_relocs (bfd * abfd, dynamic library if we manage to avoid copy relocs for the symbol. */ - if ((info->shared + if ((bfd_link_pic (info) && (sec->flags & SEC_ALLOC) != 0 && (r_type != R_MICROBLAZE_64_PCREL || (h != NULL && (! info->symbolic || h->root.type == bfd_link_hash_defweak || !h->def_regular)))) - || (!info->shared + || (!bfd_link_pic (info) && (sec->flags & SEC_ALLOC) != 0 && h != NULL && (h->root.type == bfd_link_hash_defweak @@ -2563,11 +2566,11 @@ microblaze_elf_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info) htab->splt = bfd_get_linker_section (dynobj, ".plt"); htab->srelplt = bfd_get_linker_section (dynobj, ".rela.plt"); htab->sdynbss = bfd_get_linker_section (dynobj, ".dynbss"); - if (!info->shared) + if (!bfd_link_pic (info)) htab->srelbss = bfd_get_linker_section (dynobj, ".rela.bss"); if (!htab->splt || !htab->srelplt || !htab->sdynbss - || (!info->shared && !htab->srelbss)) + || (!bfd_link_pic (info) && !htab->srelbss)) abort (); return TRUE; @@ -2688,7 +2691,7 @@ microblaze_elf_adjust_dynamic_symbol (struct bfd_link_info *info, only references to the symbol are via the global offset table. For such cases we need not do anything here; the relocations will be handled correctly by relocate_section. */ - if (info->shared) + if (bfd_link_pic (info)) return TRUE; /* If there are no references to this symbol that do not use the @@ -2795,7 +2798,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * dat) return FALSE; } - if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, info->shared, h)) + if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, bfd_link_pic (info), h)) { asection *s = htab->splt; @@ -2810,7 +2813,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * dat) location in the .plt. This is required to make function pointers compare as equal between the normal executable and the shared library. */ - if (! info->shared + if (! bfd_link_pic (info) && !h->def_regular) { h->root.u.def.section = s; @@ -2900,7 +2903,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * dat) space for pc-relative relocs that have become local due to symbol visibility changes. */ - if (info->shared) + if (bfd_link_pic (info)) { if (h->def_regular && (h->forced_local @@ -3055,7 +3058,7 @@ microblaze_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, { *local_got = s->size; s->size += need; - if (info->shared) + if (bfd_link_pic (info)) srel->size += need * (sizeof (Elf32_External_Rela) / 4); } } @@ -3072,7 +3075,7 @@ microblaze_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, { htab->tlsld_got.offset = htab->sgot->size; htab->sgot->size += 8; - if (info->shared) + if (bfd_link_pic (info)) htab->srelgot->size += sizeof (Elf32_External_Rela); } else @@ -3155,7 +3158,7 @@ microblaze_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, #define add_dynamic_entry(TAG, VAL) \ _bfd_elf_add_dynamic_entry (info, TAG, VAL) - if (info->executable) + if (bfd_link_executable (info)) { if (!add_dynamic_entry (DT_DEBUG, 0)) return FALSE; @@ -3227,13 +3230,13 @@ microblaze_elf_finish_dynamic_symbol (bfd *output_bfd, got_addr = got_offset; /* For non-PIC objects we need absolute address of the GOT entry. */ - if (!info->shared) + if (!bfd_link_pic (info)) got_addr += htab->sgotplt->output_section->vma + sgotplt->output_offset; /* Fill in the entry in the procedure linkage table. */ bfd_put_32 (output_bfd, PLT_ENTRY_WORD_0 + ((got_addr >> 16) & 0xffff), splt->contents + h->plt.offset); - if (info->shared) + if (bfd_link_pic (info)) bfd_put_32 (output_bfd, PLT_ENTRY_WORD_1 + (got_addr & 0xffff), splt->contents + h->plt.offset + 4); else @@ -3292,7 +3295,7 @@ microblaze_elf_finish_dynamic_symbol (bfd *output_bfd, the symbol was forced to be local because of a version file. The entry in the global offset table will already have been initialized in the relocate_section function. */ - if (info->shared + if (bfd_link_pic (info) && (info->symbolic || h->dynindx == -1) && h->def_regular) { @@ -3459,7 +3462,7 @@ microblaze_elf_add_symbol_hook (bfd *abfd, bfd_vma *valp) { if (sym->st_shndx == SHN_COMMON - && !info->relocatable + && !bfd_link_relocatable (info) && sym->st_size <= elf_gp_size (abfd)) { /* Common symbols less than or equal to -G nn bytes are automatically diff --git a/bfd/elf32-moxie.c b/bfd/elf32-moxie.c index 6b4a5ab757d..09732ac8f02 100644 --- a/bfd/elf32-moxie.c +++ b/bfd/elf32-moxie.c @@ -257,7 +257,7 @@ moxie_elf_relocate_section (bfd *output_bfd, RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) continue; r = moxie_final_link_relocate (howto, input_bfd, input_section, @@ -338,7 +338,7 @@ moxie_elf_check_relocs (bfd *abfd, const Elf_Internal_Rela *rel; const Elf_Internal_Rela *rel_end; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; symtab_hdr = &elf_tdata (abfd)->symtab_hdr; diff --git a/bfd/elf32-msp430.c b/bfd/elf32-msp430.c index 4d50cabbce3..8e87b67e4f5 100644 --- a/bfd/elf32-msp430.c +++ b/bfd/elf32-msp430.c @@ -672,7 +672,7 @@ elf32_msp430_check_relocs (bfd * abfd, struct bfd_link_info * info, const Elf_Internal_Rela *rel; const Elf_Internal_Rela *rel_end; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; symtab_hdr = &elf_tdata (abfd)->symtab_hdr; @@ -1328,7 +1328,7 @@ elf32_msp430_relocate_section (bfd * output_bfd ATTRIBUTE_UNUSED, RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) continue; r = msp430_final_link_relocate (howto, input_bfd, input_section, @@ -1846,7 +1846,7 @@ msp430_elf_relax_section (bfd * abfd, asection * sec, /* We don't have to do anything for a relocatable link, if this section does not have relocs, or if this is not a code section. */ - if (link_info->relocatable + if (bfd_link_relocatable (link_info) || (sec->flags & SEC_RELOC) == 0 || sec->reloc_count == 0 || (sec->flags & SEC_CODE) == 0) return TRUE; diff --git a/bfd/elf32-mt.c b/bfd/elf32-mt.c index 7bfa18e0bd1..18366300a34 100644 --- a/bfd/elf32-mt.c +++ b/bfd/elf32-mt.c @@ -362,7 +362,7 @@ mt_elf_relocate_section RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) continue; /* Finally, the sole MT-specific part. */ @@ -436,7 +436,7 @@ mt_elf_check_relocs const Elf_Internal_Rela * rel; const Elf_Internal_Rela * rel_end; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; symtab_hdr = &elf_tdata (abfd)->symtab_hdr; diff --git a/bfd/elf32-nds32.c b/bfd/elf32-nds32.c index ed4383db5a3..5b8e9d65301 100644 --- a/bfd/elf32-nds32.c +++ b/bfd/elf32-nds32.c @@ -3472,7 +3472,7 @@ nds32_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) h->def_regular = 1; h->type = STT_OBJECT; - if (info->shared && !bfd_elf_link_record_dynamic_symbol (info, h)) + if (bfd_link_pic (info) && !bfd_elf_link_record_dynamic_symbol (info, h)) return FALSE; } @@ -3537,7 +3537,7 @@ nds32_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) be needed, we can discard it later. We will never need this section when generating a shared object, since they do not use copy relocs. */ - if (!info->shared) + if (!bfd_link_pic (info)) { s = bfd_make_section (abfd, (bed->default_use_rela_p ? ".rela.bss" : ".rel.bss")); @@ -3632,7 +3632,7 @@ nds32_elf_adjust_dynamic_symbol (struct bfd_link_info *info, when we know the address of the .got section. */ if (h->type == STT_FUNC || h->needs_plt) { - if (!info->shared + if (!bfd_link_pic (info) && !h->def_dynamic && !h->ref_dynamic && h->root.type != bfd_link_hash_undefweak @@ -3671,7 +3671,7 @@ nds32_elf_adjust_dynamic_symbol (struct bfd_link_info *info, only references to the symbol are via the global offset table. For such cases we need not do anything here; the relocations will be handled correctly by relocate_section. */ - if (info->shared) + if (bfd_link_pic (info)) return TRUE; /* If there are no references to this symbol that do not use the @@ -3790,7 +3790,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) return FALSE; } - if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, info->shared, h)) + if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, bfd_link_pic (info), h)) { asection *s = htab->splt; @@ -3806,7 +3806,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) location in the .plt. This is required to make function pointers compare as equal between the normal executable and the shared library. */ - if (!info->shared && !h->def_regular) + if (!bfd_link_pic (info) && !h->def_regular) { h->root.u.def.section = s; h->root.u.def.value = h->plt.offset; @@ -3859,7 +3859,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) s->size += 4; dyn = htab->root.dynamic_sections_created; - if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h)) + if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), h)) htab->srelgot->size += sizeof (Elf32_External_Rela); } else @@ -3874,7 +3874,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) space for pc-relative relocs that have become local due to symbol visibility changes. */ - if (info->shared) + if (bfd_link_pic (info)) { if (h->def_regular && (h->forced_local || info->symbolic)) { @@ -3980,7 +3980,7 @@ nds32_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, if (htab->root.dynamic_sections_created) { /* Set the contents of the .interp section to the interpreter. */ - if (!info->shared) + if (!bfd_link_pic (info)) { s = bfd_get_section_by_name (dynobj, ".interp"); BFD_ASSERT (s != NULL); @@ -4043,7 +4043,7 @@ nds32_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, { *local_got = s->size; s->size += 4; - if (info->shared) + if (bfd_link_pic (info)) srel->size += sizeof (Elf32_External_Rela); } else @@ -4127,7 +4127,7 @@ nds32_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, #define add_dynamic_entry(TAG, VAL) \ _bfd_elf_add_dynamic_entry (info, TAG, VAL) - if (!info->shared) + if (!bfd_link_pic (info)) { if (!add_dynamic_entry (DT_DEBUG, 0)) return FALSE; @@ -4505,7 +4505,7 @@ nds32_elf_relocate_section (bfd * output_bfd ATTRIBUTE_UNUSED, table = nds32_elf_hash_table (info); eliminate_gc_relocs = table->eliminate_gc_relocs; /* By this time, we can adjust the value of _SDA_BASE_. */ - if ((!info->relocatable)) + if ((!bfd_link_relocatable (info))) { is_SDA_BASE_set = 1; r = nds32_elf_final_sda_base (output_bfd, info, &gp, TRUE); @@ -4597,7 +4597,7 @@ nds32_elf_relocate_section (bfd * output_bfd ATTRIBUTE_UNUSED, if (((r_type >= R_NDS32_DWARF2_OP1_RELA && r_type <= R_NDS32_DWARF2_LEB_RELA) - || r_type >= R_NDS32_RELAX_ENTRY) && !info->relocatable) + || r_type >= R_NDS32_RELAX_ENTRY) && !bfd_link_relocatable (info)) continue; howto = bfd_elf32_bfd_reloc_type_table_lookup (r_type); @@ -4645,7 +4645,7 @@ nds32_elf_relocate_section (bfd * output_bfd ATTRIBUTE_UNUSED, } - if (info->relocatable) + if (bfd_link_relocatable (info)) { /* This is a relocatable link. We don't have to change anything, unless the reloc is against a section symbol, @@ -4805,8 +4805,10 @@ nds32_elf_relocate_section (bfd * output_bfd ATTRIBUTE_UNUSED, off = h->got.offset; BFD_ASSERT (off != (bfd_vma) - 1); dyn = htab->root.dynamic_sections_created; - if (!WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h) - || (info->shared + if (!WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, + bfd_link_pic (info), + h) + || (bfd_link_pic (info) && (info->symbolic || h->dynindx == -1 || h->forced_local) && h->def_regular)) @@ -4853,7 +4855,7 @@ nds32_elf_relocate_section (bfd * output_bfd ATTRIBUTE_UNUSED, { bfd_put_32 (output_bfd, relocation, sgot->contents + off); - if (info->shared) + if (bfd_link_pic (info)) { asection *srelgot; Elf_Internal_Rela outrel; @@ -4899,7 +4901,7 @@ nds32_elf_relocate_section (bfd * output_bfd ATTRIBUTE_UNUSED, case R_NDS32_LO12S1_RELA: case R_NDS32_LO12S0_RELA: case R_NDS32_LO12S0_ORI_RELA: - if (info->shared && r_symndx != 0 + if (bfd_link_pic (info) && r_symndx != 0 && (input_section->flags & SEC_ALLOC) != 0 && (eliminate_gc_relocs == 0 || (sec && (sec->flags & SEC_EXCLUDE) == 0)) @@ -5000,7 +5002,7 @@ nds32_elf_relocate_section (bfd * output_bfd ATTRIBUTE_UNUSED, break; case R_NDS32_25_ABS_RELA: - if (info->shared) + if (bfd_link_pic (info)) { (*_bfd_error_handler) (_("%s: warning: cannot deal R_NDS32_25_ABS_RELA in shared " @@ -5060,11 +5062,12 @@ nds32_elf_relocate_section (bfd * output_bfd ATTRIBUTE_UNUSED, dyn = htab->root.dynamic_sections_created; if (!WILL_CALL_FINISH_DYNAMIC_SYMBOL - (dyn, info->shared, h) || (info->shared - && (info->symbolic - || h->dynindx == -1 - || h->forced_local) - && h->def_regular)) + (dyn, bfd_link_pic (info), h) + || (bfd_link_pic (info) + && (info->symbolic + || h->dynindx == -1 + || h->forced_local) + && h->def_regular)) { /* This is actually a static link, or it is a -Bsymbolic link and the symbol is defined @@ -5106,7 +5109,7 @@ nds32_elf_relocate_section (bfd * output_bfd ATTRIBUTE_UNUSED, { bfd_put_32 (output_bfd, relocation, sgot->contents + off); - if (info->shared) + if (bfd_link_pic (info)) { asection *srelgot; Elf_Internal_Rela outrel; @@ -5242,8 +5245,8 @@ handle_sda: BFD_ASSERT (off != (bfd_vma) - 1); dyn = htab->root.dynamic_sections_created; tls_type = ((struct elf_nds32_link_hash_entry *) h)->tls_type; - if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h) - && (!info->shared + if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), h) + && (!bfd_link_pic (info) || !SYMBOL_REFERENCES_LOCAL (info, h))) indx = h->dynindx; } @@ -5271,7 +5274,7 @@ handle_sda: { bfd_boolean need_relocs = FALSE; srelgot = htab->srelgot; - if ((info->shared || indx != 0) + if ((bfd_link_pic (info) || indx != 0) && (h == NULL || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT || h->root.type != bfd_link_hash_undefweak)) @@ -5505,7 +5508,7 @@ nds32_elf_finish_dynamic_symbol (bfd *output_bfd, struct bfd_link_info *info, got_offset = (plt_index + 3) * 4; /* Fill in the entry in the procedure linkage table. */ - if (!info->shared) + if (!bfd_link_pic (info)) { unsigned long insn; @@ -5609,7 +5612,7 @@ nds32_elf_finish_dynamic_symbol (bfd *output_bfd, struct bfd_link_info *info, the symbol was forced to be local because of a version file. The entry in the global offset table will already have been initialized in the relocate_section function. */ - if (info->shared + if (bfd_link_pic (info) && (info->symbolic || h->dynindx == -1 || h->forced_local) && h->def_regular) { @@ -5748,7 +5751,7 @@ nds32_elf_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info) splt = htab->splt; if (splt && splt->size > 0) { - if (info->shared) + if (bfd_link_pic (info)) { unsigned long insn; long offset; @@ -6299,7 +6302,7 @@ nds32_elf_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info, asection *sec, struct elf_nds32_dyn_relocs **pp; struct elf_nds32_dyn_relocs *p; - if (!info->shared && h->plt.refcount > 0) + if (!bfd_link_pic (info) && h->plt.refcount > 0) h->plt.refcount -= 1; eh = (struct elf_nds32_link_hash_entry *) h; @@ -6352,7 +6355,7 @@ nds32_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, bfd *dynobj; asection *sreloc = NULL; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; symtab_hdr = &elf_tdata (abfd)->symtab_hdr; @@ -6537,7 +6540,7 @@ nds32_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, case R_NDS32_17_PCREL_RELA: case R_NDS32_25_PCREL_RELA: - if (h != NULL && !info->shared) + if (h != NULL && !bfd_link_pic (info)) { h->non_got_ref = 1; h->plt.refcount += 1; @@ -6559,7 +6562,7 @@ nds32_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, If on the other hand, we are creating an executable, we may need to keep relocations for symbols satisfied by a dynamic library if we manage to avoid copy relocs for the symbol. */ - if ((info->shared + if ((bfd_link_pic (info) && (sec->flags & SEC_ALLOC) != 0 && ((r_type != R_NDS32_25_PCREL_RELA && r_type != R_NDS32_15_PCREL_RELA @@ -6570,7 +6573,7 @@ nds32_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, && (!info->symbolic || h->root.type == bfd_link_hash_defweak || !h->def_regular)))) - || (!info->shared + || (!bfd_link_pic (info) && (sec->flags & SEC_ALLOC) != 0 && h != NULL && (h->root.type == bfd_link_hash_defweak @@ -11967,7 +11970,7 @@ nds32_elf_relax_section (bfd *abfd, asection *sec, * non-code section or * empty content or * no reloc entry. */ - if (link_info->relocatable + if (bfd_link_relocatable (link_info) || (sec->flags & SEC_RELOC) == 0 || (sec->flags & SEC_EXCLUDE) == 1 || (sec->flags & SEC_CODE) == 0 diff --git a/bfd/elf32-nios2.c b/bfd/elf32-nios2.c index 8bd25243900..fd70007b7ec 100644 --- a/bfd/elf32-nios2.c +++ b/bfd/elf32-nios2.c @@ -2779,7 +2779,7 @@ nios2_elf32_size_stubs (bfd *output_bfd, bfd *stub_bfd, } else if (hh->root.root.type == bfd_link_hash_undefweak) { - if (! info->shared) + if (! bfd_link_pic (info)) continue; } else if (hh->root.root.type == bfd_link_hash_undefined) @@ -3759,7 +3759,7 @@ nios2_elf32_relocate_section (bfd *output_bfd, rel, 1, relend, howto, 0, contents); /* Nothing more to do unless this is a final link. */ - if (info->relocatable) + if (bfd_link_relocatable (info)) continue; if (sec && sec->output_section) @@ -3986,8 +3986,10 @@ nios2_elf32_relocate_section (bfd *output_bfd, off = h->got.offset; BFD_ASSERT (off != (bfd_vma) -1); dyn = elf_hash_table (info)->dynamic_sections_created; - if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h) - || (info->shared + if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, + bfd_link_pic (info), + h) + || (bfd_link_pic (info) && SYMBOL_REFERENCES_LOCAL (info, h)) || (ELF_ST_VISIBILITY (h->other) && h->root.type == bfd_link_hash_undefweak)) @@ -4031,7 +4033,7 @@ nios2_elf32_relocate_section (bfd *output_bfd, bfd_put_32 (output_bfd, relocation, sgot->contents + off); - if (info->shared) + if (bfd_link_pic (info)) { asection *srelgot; Elf_Internal_Rela outrel; @@ -4055,7 +4057,7 @@ nios2_elf32_relocate_section (bfd *output_bfd, } } - if (use_plt && info->shared) + if (use_plt && bfd_link_pic (info)) { off = ((h->plt.offset - 24) / 12 + 3) * 4; relocation = (htab->root.sgotplt->output_offset + off @@ -4156,7 +4158,7 @@ nios2_elf32_relocate_section (bfd *output_bfd, { /* If we don't know the module number, create a relocation for it. */ - if (info->shared) + if (bfd_link_pic (info)) { Elf_Internal_Rela outrel; bfd_byte *loc; @@ -4203,8 +4205,10 @@ nios2_elf32_relocate_section (bfd *output_bfd, { bfd_boolean dyn; dyn = htab->root.dynamic_sections_created; - if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h) - && (!info->shared + if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, + bfd_link_pic (info), + h) + && (!bfd_link_pic (info) || !SYMBOL_REFERENCES_LOCAL (info, h))) { unresolved_reloc = FALSE; @@ -4239,7 +4243,7 @@ nios2_elf32_relocate_section (bfd *output_bfd, now, and emit any relocations. If both an IE GOT and a GD GOT are necessary, we emit the GD first. */ - if ((info->shared || indx != 0) + if ((bfd_link_pic (info) || indx != 0) && (h == NULL || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT || h->root.type != bfd_link_hash_undefweak)) @@ -4348,7 +4352,7 @@ nios2_elf32_relocate_section (bfd *output_bfd, break; case R_NIOS2_TLS_LE16: - if (info->shared && !info->pie) + if (bfd_link_pic (info) && !bfd_link_pie (info)) { (*_bfd_error_handler) (_("%B(%A+0x%lx): R_NIOS2_TLS_LE16 relocation not " @@ -4366,7 +4370,7 @@ nios2_elf32_relocate_section (bfd *output_bfd, break; case R_NIOS2_BFD_RELOC_32: - if (info->shared + if (bfd_link_pic (info) && (input_section->flags & SEC_ALLOC) != 0 && (h == NULL || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT @@ -4397,7 +4401,7 @@ nios2_elf32_relocate_section (bfd *output_bfd, memset (&outrel, 0, sizeof outrel); else if (h != NULL && h->dynindx != -1 - && (!info->shared + && (!bfd_link_pic (info) || !SYMBOLIC_BIND (info, h) || !h->def_regular)) { @@ -4594,7 +4598,7 @@ nios2_elf32_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info) htab->sdynbss = bfd_get_linker_section (dynobj, ".dynbss"); if (!htab->sdynbss) return FALSE; - if (!info->shared) + if (!bfd_link_pic (info)) { htab->srelbss = bfd_get_linker_section (dynobj, ".rela.bss"); if (!htab->srelbss) @@ -4699,7 +4703,7 @@ nios2_elf32_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sreloc = NULL; bfd_signed_vma *local_got_refcounts; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; dynobj = elf_hash_table (info)->dynobj; @@ -4786,7 +4790,7 @@ nios2_elf32_check_relocs (bfd *abfd, struct bfd_link_info *info, } if (srelgot == NULL - && (h != NULL || info->shared)) + && (h != NULL || bfd_link_pic (info))) { srelgot = htab->root.srelgot; BFD_ASSERT (srelgot != NULL); @@ -4892,7 +4896,7 @@ nios2_elf32_check_relocs (bfd *abfd, struct bfd_link_info *info, sections have not yet been mapped to output sections. Tentatively set the flag for now, and correct in adjust_dynamic_symbol. */ - if (!info->shared) + if (!bfd_link_pic (info)) h->non_got_ref = 1; /* Make sure a plt entry is created for this symbol if it @@ -4905,7 +4909,7 @@ nios2_elf32_check_relocs (bfd *abfd, struct bfd_link_info *info, /* If we are creating a shared library, we need to copy the reloc into the shared library. */ - if (info->shared + if (bfd_link_pic (info) && (sec->flags & SEC_ALLOC) != 0 && (r_type == R_NIOS2_BFD_RELOC_32 || (h != NULL && ! h->needs_plt @@ -5012,7 +5016,7 @@ nios2_elf32_gc_sweep_hook (bfd *abfd, const Elf_Internal_Rela *rel, *relend; bfd *dynobj; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; elf_section_data (sec)->local_dynrel = NULL; @@ -5138,7 +5142,7 @@ nios2_elf32_finish_dynamic_symbol (bfd *output_bfd, BFD_ASSERT (splt != NULL && sgotplt != NULL && srela != NULL); /* Emit the PLT entry. */ - if (info->shared) + if (bfd_link_pic (info)) { nios2_elf32_install_data (splt, nios2_so_plt_entry, h->plt.offset, 3); @@ -5228,7 +5232,7 @@ nios2_elf32_finish_dynamic_symbol (bfd *output_bfd, The entry in the global offset table will already have been initialized in the relocate_section function. */ - if (info->shared && SYMBOL_REFERENCES_LOCAL (info, h)) + if (bfd_link_pic (info) && SYMBOL_REFERENCES_LOCAL (info, h)) { rela.r_info = ELF32_R_INFO (0, R_NIOS2_RELATIVE); rela.r_addend = bfd_get_signed_32 (output_bfd, @@ -5377,7 +5381,7 @@ nios2_elf32_finish_dynamic_sections (bfd *output_bfd, { bfd_vma got_address = (sgotplt->output_section->vma + sgotplt->output_offset); - if (info->shared) + if (bfd_link_pic (info)) { bfd_vma corrected = got_address - (splt->output_section->vma + splt->output_offset + 4); @@ -5506,7 +5510,7 @@ nios2_elf32_adjust_dynamic_symbol (struct bfd_link_info *info, only references to the symbol are via the global offset table. For such cases we need not do anything here; the relocations will be handled correctly by relocate_section. */ - if (info->shared) + if (bfd_link_pic (info)) return TRUE; if (h->size == 0) @@ -5623,14 +5627,14 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, PTR inf) && !bfd_elf_link_record_dynamic_symbol (info, h)) return FALSE; - if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, info->shared, h)) + if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, bfd_link_pic (info), h)) { asection *s = htab->root.splt; /* Allocate room for the header. */ if (s->size == 0) { - if (info->shared) + if (bfd_link_pic (info)) s->size = 24; else s->size = 28; @@ -5643,7 +5647,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, PTR inf) location in the .plt. This is required to make function pointers compare as equal between the normal executable and the shared library. */ - if (! info->shared + if (! bfd_link_pic (info) && !h->def_regular) { h->root.u.def.section = s; @@ -5711,13 +5715,13 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, PTR inf) dyn = htab->root.dynamic_sections_created; indx = 0; - if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h) - && (!info->shared + if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), h) + && (!bfd_link_pic (info) || !SYMBOL_REFERENCES_LOCAL (info, h))) indx = h->dynindx; if (tls_type != GOT_NORMAL - && (info->shared || indx != 0) + && (bfd_link_pic (info) || indx != 0) && (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT || h->root.type != bfd_link_hash_undefweak)) { @@ -5733,7 +5737,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, PTR inf) else if ((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT || h->root.type != bfd_link_hash_undefweak) && !use_plt - && (info->shared + && (bfd_link_pic (info) || WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h))) htab->root.srelgot->size += sizeof (Elf32_External_Rela); } @@ -5749,7 +5753,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, PTR inf) space for pc-relative relocs that have become local due to symbol visibility changes. */ - if (info->shared) + if (bfd_link_pic (info)) { if (h->def_regular && (h->forced_local || SYMBOLIC_BIND (info, h))) @@ -5845,7 +5849,7 @@ nios2_elf32_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, if (elf_hash_table (info)->dynamic_sections_created) { /* Set the contents of the .interp section to the interpreter. */ - if (info->executable) + if (bfd_link_executable (info)) { s = bfd_get_linker_section (dynobj, ".interp"); BFD_ASSERT (s != NULL); @@ -5926,7 +5930,7 @@ nios2_elf32_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, if (*local_tls_type == GOT_NORMAL) s->size += 4; - if (info->shared || *local_tls_type == GOT_TLS_GD) + if (bfd_link_pic (info) || *local_tls_type == GOT_TLS_GD) srel->size += sizeof (Elf32_External_Rela); } else @@ -5940,7 +5944,7 @@ nios2_elf32_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, for R_NIOS2_TLS_LDM16 relocations. */ htab->tls_ldm_got.offset = htab->root.sgot->size; htab->root.sgot->size += 8; - if (info->shared) + if (bfd_link_pic (info)) htab->root.srelgot->size += sizeof (Elf32_External_Rela); } else @@ -5983,7 +5987,7 @@ nios2_elf32_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, plt = s->size != 0; /* Correct for the number of res_N branches. */ - if (plt && !info->shared) + if (plt && !bfd_link_pic (info)) { htab->res_n_size = (s->size-28) / 3; s->size += htab->res_n_size; @@ -6050,7 +6054,7 @@ nios2_elf32_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, #define add_dynamic_entry(TAG, VAL) \ _bfd_elf_add_dynamic_entry (info, TAG, VAL) - if (!info->shared && !add_dynamic_entry (DT_DEBUG, 0)) + if (!bfd_link_pic (info) && !add_dynamic_entry (DT_DEBUG, 0)) return FALSE; if (got && !add_dynamic_entry (DT_PLTGOT, 0)) @@ -6068,7 +6072,7 @@ nios2_elf32_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, || !add_dynamic_entry (DT_RELAENT, sizeof (Elf32_External_Rela)))) return FALSE; - if (!info->shared && !add_dynamic_entry (DT_NIOS2_GP, 0)) + if (!bfd_link_pic (info) && !add_dynamic_entry (DT_NIOS2_GP, 0)) return FALSE; if ((info->flags & DF_TEXTREL) != 0 @@ -6166,7 +6170,7 @@ nios2_elf_add_symbol_hook (bfd *abfd, bfd *dynobj; if (sym->st_shndx == SHN_COMMON - && !info->relocatable + && !bfd_link_relocatable (info) && sym->st_size <= elf_gp_size (abfd) && is_nios2_elf_target (info->output_bfd->xvec)) { diff --git a/bfd/elf32-or1k.c b/bfd/elf32-or1k.c index efcefea4542..d4f92b78fdf 100644 --- a/bfd/elf32-or1k.c +++ b/bfd/elf32-or1k.c @@ -879,7 +879,7 @@ or1k_elf_relocate_section (bfd *output_bfd, RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) continue; switch (howto->type) @@ -909,8 +909,10 @@ or1k_elf_relocate_section (bfd *output_bfd, BFD_ASSERT (off != (bfd_vma) -1); dyn = htab->root.dynamic_sections_created; - if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h) - || (info->shared + if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, + bfd_link_pic (info), + h) + || (bfd_link_pic (info) && SYMBOL_REFERENCES_LOCAL (info, h))) { /* This is actually a static link, or it is a @@ -959,7 +961,7 @@ or1k_elf_relocate_section (bfd *output_bfd, { /* Write entry in GOT. */ bfd_put_32 (output_bfd, relocation, sgot->contents + off); - if (info->shared) + if (bfd_link_pic (info)) { asection *srelgot; Elf_Internal_Rela outrel; @@ -1012,13 +1014,13 @@ or1k_elf_relocate_section (bfd *output_bfd, || (input_section->flags & SEC_ALLOC) == 0) break; - if ((info->shared + if ((bfd_link_pic (info) && (h == NULL || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT || h->root.type != bfd_link_hash_undefweak) && (howto->type != R_OR1K_INSN_REL_26 || !SYMBOL_CALLS_LOCAL (info, h))) - || (!info->shared + || (!bfd_link_pic (info) && h != NULL && h->dynindx != -1 && !h->non_got_ref @@ -1138,7 +1140,7 @@ or1k_elf_relocate_section (bfd *output_bfd, /* Dynamic entries will require relocations. if we do not need them we will just use the default R_OR1K_NONE and not set anything. */ - dynamic = info->shared + dynamic = bfd_link_pic (info) || (sec && (sec->flags & SEC_ALLOC) != 0 && h != NULL && (h->root.type == bfd_link_hash_defweak || !h->def_regular)); @@ -1419,7 +1421,7 @@ or1k_elf_check_relocs (bfd *abfd, bfd *dynobj; asection *sreloc = NULL; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; symtab_hdr = &elf_tdata (abfd)->symtab_hdr; @@ -1574,7 +1576,7 @@ or1k_elf_check_relocs (bfd *abfd, case R_OR1K_32: /* R_OR1K_16? */ { - if (h != NULL && !info->shared) + if (h != NULL && !bfd_link_pic (info)) { /* We may need a copy reloc. */ h->non_got_ref = 1; @@ -1607,14 +1609,14 @@ or1k_elf_check_relocs (bfd *abfd, dynamic library if we manage to avoid copy relocs for the symbol. */ - if ((info->shared + if ((bfd_link_pic (info) && (sec->flags & SEC_ALLOC) != 0 && (ELF32_R_TYPE (rel->r_info) != R_OR1K_INSN_REL_26 || (h != NULL && (!SYMBOLIC_BIND (info, h) || h->root.type == bfd_link_hash_defweak || !h->def_regular)))) - || (!info->shared + || (!bfd_link_pic (info) && (sec->flags & SEC_ALLOC) != 0 && h != NULL && (h->root.type == bfd_link_hash_defweak @@ -1810,7 +1812,7 @@ or1k_elf_finish_dynamic_sections (bfd *output_bfd, splt = htab->splt; if (splt && splt->size > 0) { - if (info->shared) + if (bfd_link_pic (info)) { bfd_put_32 (output_bfd, PLT0_PIC_ENTRY_WORD0, splt->contents); @@ -1911,7 +1913,7 @@ or1k_elf_finish_dynamic_symbol (bfd *output_bfd, got_addr = got_offset; /* Fill in the entry in the procedure linkage table. */ - if (! info->shared) + if (! bfd_link_pic (info)) { got_addr += htab->sgotplt->output_section->vma + htab->sgotplt->output_offset; @@ -1989,7 +1991,7 @@ or1k_elf_finish_dynamic_symbol (bfd *output_bfd, the symbol was forced to be local because of a version file. The entry in the global offset table will already have been initialized in the relocate_section function. */ - if (info->shared && SYMBOL_REFERENCES_LOCAL (info, h)) + if (bfd_link_pic (info) && SYMBOL_REFERENCES_LOCAL (info, h)) { rela.r_info = ELF32_R_INFO (0, R_OR1K_RELATIVE); rela.r_addend = (h->root.u.def.value @@ -2089,7 +2091,7 @@ or1k_elf_adjust_dynamic_symbol (struct bfd_link_info *info, if (h->type == STT_FUNC || h->needs_plt) { - if (! info->shared + if (! bfd_link_pic (info) && !h->def_dynamic && !h->ref_dynamic && h->root.type != bfd_link_hash_undefweak @@ -2128,7 +2130,7 @@ or1k_elf_adjust_dynamic_symbol (struct bfd_link_info *info, only references to the symbol are via the global offset table. For such cases we need not do anything here; the relocations will be handled correctly by relocate_section. */ - if (info->shared) + if (bfd_link_pic (info)) return TRUE; /* If there are no references to this symbol that do not use the @@ -2227,7 +2229,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) return FALSE; } - if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, info->shared, h)) + if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, bfd_link_pic (info), h)) { asection *s = htab->splt; @@ -2243,7 +2245,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) location in the .plt. This is required to make function pointers compare as equal between the normal executable and the shared library. */ - if (! info->shared + if (! bfd_link_pic (info) && !h->def_regular) { h->root.u.def.section = s; @@ -2299,7 +2301,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) else s->size += 4; dyn = htab->root.dynamic_sections_created; - if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h)) + if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), h)) { if (tls_type == TLS_GD) htab->srelgot->size += 2 * sizeof (Elf32_External_Rela); @@ -2319,7 +2321,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) space for pc-relative relocs that have become local due to symbol visibility changes. */ - if (info->shared) + if (bfd_link_pic (info)) { if (SYMBOL_CALLS_LOCAL (info, h)) { @@ -2445,7 +2447,7 @@ or1k_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, if (htab->root.dynamic_sections_created) { /* Set the contents of the .interp section to the interpreter. */ - if (info->executable) + if (bfd_link_executable (info)) { s = bfd_get_section_by_name (dynobj, ".interp"); BFD_ASSERT (s != NULL); @@ -2516,7 +2518,7 @@ or1k_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, s->size += 8; else s->size += 4; - if (info->shared) + if (bfd_link_pic (info)) { if (local_tls_type != NULL && *local_tls_type == TLS_GD) srel->size += 2 * sizeof (Elf32_External_Rela); @@ -2605,7 +2607,7 @@ or1k_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, #define add_dynamic_entry(TAG, VAL) \ _bfd_elf_add_dynamic_entry (info, TAG, VAL) - if (info->executable) + if (bfd_link_executable (info)) { if (! add_dynamic_entry (DT_DEBUG, 0)) return FALSE; @@ -2666,11 +2668,11 @@ or1k_elf_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info) htab->splt = bfd_get_section_by_name (dynobj, ".plt"); htab->srelplt = bfd_get_section_by_name (dynobj, ".rela.plt"); htab->sdynbss = bfd_get_section_by_name (dynobj, ".dynbss"); - if (!info->shared) + if (!bfd_link_pic (info)) htab->srelbss = bfd_get_section_by_name (dynobj, ".rela.bss"); if (!htab->splt || !htab->srelplt || !htab->sdynbss - || (!info->shared && !htab->srelbss)) + || (!bfd_link_pic (info) && !htab->srelbss)) abort (); return TRUE; diff --git a/bfd/elf32-ppc.c b/bfd/elf32-ppc.c index 91942ec297f..8415f1ece2b 100644 --- a/bfd/elf32-ppc.c +++ b/bfd/elf32-ppc.c @@ -3080,7 +3080,7 @@ must_be_dyn_reloc (struct bfd_link_info *info, case R_PPC_TPREL16_LO: case R_PPC_TPREL16_HI: case R_PPC_TPREL16_HA: - return !info->executable; + return !bfd_link_executable (info); } } @@ -3465,7 +3465,7 @@ ppc_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) if (s == NULL) return FALSE; - if (! info->shared) + if (! bfd_link_pic (info)) { htab->relbss = bfd_get_linker_section (abfd, ".rela.bss"); flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_HAS_CONTENTS @@ -3622,7 +3622,7 @@ ppc_elf_add_symbol_hook (bfd *abfd, bfd_vma *valp) { if (sym->st_shndx == SHN_COMMON - && !info->relocatable + && !bfd_link_relocatable (info) && is_ppc_elf (info->output_bfd) && sym->st_size <= elf_gp_size (abfd)) { @@ -3876,7 +3876,7 @@ ppc_elf_check_relocs (bfd *abfd, asection *got2, *sreloc; struct elf_link_hash_entry *tga; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; /* Don't do anything special with non-loaded, non-alloced sections. @@ -3973,14 +3973,14 @@ ppc_elf_check_relocs (bfd *abfd, /* STT_GNU_IFUNC symbols must have a PLT entry; In a non-pie executable even when there are no plt calls. */ - if (!info->shared + if (!bfd_link_pic (info) || is_branch_reloc (r_type)) { bfd_vma addend = 0; if (r_type == R_PPC_PLTREL24) { ppc_elf_tdata (abfd)->makes_plt_call = 1; - if (info->shared) + if (bfd_link_pic (info)) addend = rel->r_addend; } if (!update_plt_info (abfd, ifunc, got2, addend)) @@ -4031,7 +4031,7 @@ ppc_elf_check_relocs (bfd *abfd, case R_PPC_GOT_TPREL16_LO: case R_PPC_GOT_TPREL16_HI: case R_PPC_GOT_TPREL16_HA: - if (info->shared) + if (bfd_link_pic (info)) info->flags |= DF_STATIC_TLS; tls_type = TLS_TLS | TLS_TPREL; goto dogottls; @@ -4070,7 +4070,7 @@ ppc_elf_check_relocs (bfd *abfd, /* We may also need a plt entry if the symbol turns out to be an ifunc. */ - if (h != NULL && !info->shared) + if (h != NULL && !bfd_link_pic (info)) { if (!update_plt_info (abfd, &h->plt.plist, NULL, 0)) return FALSE; @@ -4079,7 +4079,7 @@ ppc_elf_check_relocs (bfd *abfd, /* Indirect .sdata relocation. */ case R_PPC_EMB_SDAI16: - if (info->shared) + if (bfd_link_pic (info)) { bad_shared_reloc (abfd, r_type); return FALSE; @@ -4097,7 +4097,7 @@ ppc_elf_check_relocs (bfd *abfd, /* Indirect .sdata2 relocation. */ case R_PPC_EMB_SDA2I16: - if (info->shared) + if (bfd_link_pic (info)) { bad_shared_reloc (abfd, r_type); return FALSE; @@ -4142,7 +4142,7 @@ ppc_elf_check_relocs (bfd *abfd, break; case R_PPC_EMB_SDA2REL: - if (info->shared) + if (bfd_link_pic (info)) { bad_shared_reloc (abfd, r_type); return FALSE; @@ -4159,7 +4159,7 @@ ppc_elf_check_relocs (bfd *abfd, case R_PPC_VLE_SDA21: case R_PPC_EMB_SDA21: case R_PPC_EMB_RELSDA: - if (info->shared) + if (bfd_link_pic (info)) { bad_shared_reloc (abfd, r_type); return FALSE; @@ -4176,7 +4176,7 @@ ppc_elf_check_relocs (bfd *abfd, case R_PPC_EMB_NADDR16_LO: case R_PPC_EMB_NADDR16_HI: case R_PPC_EMB_NADDR16_HA: - if (info->shared) + if (bfd_link_pic (info)) { bad_shared_reloc (abfd, r_type); return FALSE; @@ -4220,7 +4220,7 @@ ppc_elf_check_relocs (bfd *abfd, if (r_type == R_PPC_PLTREL24) { ppc_elf_tdata (abfd)->makes_plt_call = 1; - if (info->shared) + if (bfd_link_pic (info)) addend = rel->r_addend; } h->needs_plt = 1; @@ -4286,7 +4286,7 @@ ppc_elf_check_relocs (bfd *abfd, } if (h != NULL && h->type == STT_GNU_IFUNC) { - if (info->shared) + if (bfd_link_pic (info)) { info->callbacks->einfo (_("%P: %H: @local call to ifunc %s\n"), abfd, sec, rel->r_offset, @@ -4322,7 +4322,7 @@ ppc_elf_check_relocs (bfd *abfd, case R_PPC_TPREL16_LO: case R_PPC_TPREL16_HI: case R_PPC_TPREL16_HA: - if (info->shared) + if (bfd_link_pic (info)) info->flags |= DF_STATIC_TLS; goto dodyn; @@ -4335,7 +4335,7 @@ ppc_elf_check_relocs (bfd *abfd, if (h == NULL && got2 != NULL && (sec->flags & SEC_CODE) != 0 - && info->shared + && bfd_link_pic (info) && htab->plt_type == PLT_UNSET) { /* Old -fPIC gcc code has .long LCTOC1-LCFx just before @@ -4370,7 +4370,7 @@ ppc_elf_check_relocs (bfd *abfd, case R_PPC_ADDR16_HA: case R_PPC_UADDR32: case R_PPC_UADDR16: - if (h != NULL && !info->shared) + if (h != NULL && !bfd_link_pic (info)) { /* We may need a plt entry if the symbol turns out to be a function defined in a dynamic object. */ @@ -4408,7 +4408,7 @@ ppc_elf_check_relocs (bfd *abfd, case R_PPC_ADDR14: case R_PPC_ADDR14_BRTAKEN: case R_PPC_ADDR14_BRNTAKEN: - if (h != NULL && !info->shared) + if (h != NULL && !bfd_link_pic (info)) { /* We may need a plt entry if the symbol turns out to be a function defined in a dynamic object. */ @@ -4440,14 +4440,14 @@ ppc_elf_check_relocs (bfd *abfd, may need to keep relocations for symbols satisfied by a dynamic library if we manage to avoid copy relocs for the symbol. */ - if ((info->shared + if ((bfd_link_pic (info) && (must_be_dyn_reloc (info, r_type) || (h != NULL && (!SYMBOLIC_BIND (info, h) || h->root.type == bfd_link_hash_defweak || !h->def_regular)))) || (ELIMINATE_COPY_RELOCS - && !info->shared + && !bfd_link_pic (info) && h != NULL && (h->root.type == bfd_link_hash_defweak || !h->def_regular))) @@ -4818,7 +4818,7 @@ ppc_elf_select_plt_layout (bfd *output_bfd ATTRIBUTE_UNUSED, if (htab->params->plt_style == PLT_OLD) htab->plt_type = PLT_OLD; - else if (info->shared + else if (bfd_link_pic (info) && htab->elf.dynamic_sections_created && (h = elf_link_hash_lookup (&htab->elf, "_mcount", FALSE, FALSE, TRUE)) != NULL @@ -4934,7 +4934,7 @@ ppc_elf_gc_sweep_hook (bfd *abfd, const Elf_Internal_Rela *rel, *relend; asection *got2; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; if ((sec->flags & SEC_ALLOC) == 0) @@ -4980,7 +4980,7 @@ ppc_elf_gc_sweep_hook (bfd *abfd, if (!htab->is_vxworks && h == NULL && local_got_refcounts != NULL - && (!info->shared + && (!bfd_link_pic (info) || is_branch_reloc (r_type))) { struct plt_entry **local_plt = (struct plt_entry **) @@ -4993,7 +4993,7 @@ ppc_elf_gc_sweep_hook (bfd *abfd, bfd_vma addend = 0; struct plt_entry *ent; - if (r_type == R_PPC_PLTREL24 && info->shared) + if (r_type == R_PPC_PLTREL24 && bfd_link_pic (info)) addend = rel->r_addend; ent = find_plt_ent (ifunc, got2, addend); if (ent->plt.refcount > 0) @@ -5028,7 +5028,7 @@ ppc_elf_gc_sweep_hook (bfd *abfd, { if (h->got.refcount > 0) h->got.refcount--; - if (!info->shared) + if (!bfd_link_pic (info)) { struct plt_entry *ent; @@ -5064,7 +5064,7 @@ ppc_elf_gc_sweep_hook (bfd *abfd, case R_PPC_ADDR14_BRNTAKEN: case R_PPC_UADDR32: case R_PPC_UADDR16: - if (info->shared) + if (bfd_link_pic (info)) break; case R_PPC_PLT32: @@ -5078,7 +5078,7 @@ ppc_elf_gc_sweep_hook (bfd *abfd, bfd_vma addend = 0; struct plt_entry *ent; - if (r_type == R_PPC_PLTREL24 && info->shared) + if (r_type == R_PPC_PLTREL24 && bfd_link_pic (info)) addend = rel->r_addend; ent = find_plt_ent (&h->plt.plist, got2, addend); if (ent != NULL && ent->plt.refcount > 0) @@ -5204,7 +5204,7 @@ ppc_elf_tls_optimize (bfd *obfd ATTRIBUTE_UNUSED, struct ppc_elf_link_hash_table *htab; int pass; - if (info->relocatable || !info->executable) + if (bfd_link_relocatable (info) || !bfd_link_executable (info)) return TRUE; htab = ppc_elf_hash_table (info); @@ -5377,7 +5377,7 @@ ppc_elf_tls_optimize (bfd *obfd ATTRIBUTE_UNUSED, struct plt_entry *ent; bfd_vma addend = 0; - if (info->shared + if (bfd_link_pic (info) && ELF32_R_TYPE (rel[1].r_info) == R_PPC_PLTREL24) addend = rel[1].r_addend; ent = find_plt_ent (&htab->tls_get_addr->plt.plist, @@ -5589,7 +5589,7 @@ ppc_elf_adjust_dynamic_symbol (struct bfd_link_info *info, only references to the symbol are via the global offset table. For such cases we need not do anything here; the relocations will be handled correctly by relocate_section. */ - if (info->shared) + if (bfd_link_pic (info)) { h->protected_def = 0; return TRUE; @@ -5698,7 +5698,7 @@ add_stub_sym (struct plt_entry *ent, const char *stub; struct ppc_elf_link_hash_table *htab = ppc_elf_hash_table (info); - if (info->shared) + if (bfd_link_pic (info)) stub = ".plt_pic32."; else stub = ".plt_call32."; @@ -5807,7 +5807,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) } dyn = htab->elf.dynamic_sections_created; - if (info->shared + if (bfd_link_pic (info) || h->type == STT_GNU_IFUNC || WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h)) { @@ -5825,7 +5825,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) ent->plt.offset = plt_offset; s = htab->glink; - if (!doneone || info->shared) + if (!doneone || bfd_link_pic (info)) { glink_offset = s->size; s->size += GLINK_ENTRY_SIZE; @@ -5834,7 +5834,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) s->size += TLS_GET_ADDR_GLINK_SIZE - GLINK_ENTRY_SIZE; } if (!doneone - && !info->shared + && !bfd_link_pic (info) && h->def_dynamic && !h->def_regular) { @@ -5873,7 +5873,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) relocations, and is required to make function pointers compare as equal between the normal executable and the shared library. */ - if (! info->shared + if (! bfd_link_pic (info) && h->def_dynamic && !h->def_regular) { @@ -5907,7 +5907,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) if (htab->plt_type == PLT_VXWORKS) { /* Allocate space for the unloaded relocations. */ - if (!info->shared + if (!bfd_link_pic (info) && htab->elf.dynamic_sections_created) { if (ent->plt.offset @@ -5999,7 +5999,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) { eh->elf.got.offset = allocate_got (htab, need); dyn = htab->elf.dynamic_sections_created; - if ((info->shared + if ((bfd_link_pic (info) || WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, &eh->elf)) && (ELF_ST_VISIBILITY (eh->elf.other) == STV_DEFAULT || eh->elf.root.type != bfd_link_hash_undefweak)) @@ -6030,7 +6030,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) space for relocs that have become local due to symbol visibility changes. */ - if (info->shared) + if (bfd_link_pic (info)) { /* Relocs that use pc_count are those that appear on a call insn, or certain REL relocs (see must_be_dyn_reloc) that can be @@ -6191,7 +6191,7 @@ ppc_elf_size_dynamic_sections (bfd *output_bfd, if (elf_hash_table (info)->dynamic_sections_created) { /* Set the contents of the .interp section to the interpreter. */ - if (info->executable) + if (bfd_link_executable (info)) { s = bfd_get_linker_section (htab->elf.dynobj, ".interp"); BFD_ASSERT (s != NULL); @@ -6291,7 +6291,7 @@ ppc_elf_size_dynamic_sections (bfd *output_bfd, else { *local_got = allocate_got (htab, need); - if (info->shared) + if (bfd_link_pic (info)) { asection *srel = htab->relgot; if ((*lgot_masks & PLT_IFUNC) != 0) @@ -6326,7 +6326,7 @@ ppc_elf_size_dynamic_sections (bfd *output_bfd, ent->plt.offset = plt_offset; s = htab->glink; - if (!doneone || info->shared) + if (!doneone || bfd_link_pic (info)) { glink_offset = s->size; s->size += GLINK_ENTRY_SIZE; @@ -6350,7 +6350,7 @@ ppc_elf_size_dynamic_sections (bfd *output_bfd, if (htab->tlsld_got.refcount > 0) { htab->tlsld_got.offset = allocate_got (htab, 8); - if (info->shared) + if (bfd_link_pic (info)) htab->relgot->size += sizeof (Elf32_External_Rela); } else @@ -6374,7 +6374,7 @@ ppc_elf_size_dynamic_sections (bfd *output_bfd, htab->elf.hgot->root.u.def.value = g_o_t; } - if (info->shared) + if (bfd_link_pic (info)) { struct elf_link_hash_entry *sda = htab->sdata[0].sym; @@ -6450,7 +6450,7 @@ ppc_elf_size_dynamic_sections (bfd *output_bfd, { s = htab->glink_eh_frame; s->size = sizeof (glink_eh_frame_cie) + 20; - if (info->shared) + if (bfd_link_pic (info)) { s->size += 4; if (htab->glink->size - GLINK_PLTRESOLVE + 8 >= 256) @@ -6547,7 +6547,7 @@ ppc_elf_size_dynamic_sections (bfd *output_bfd, #define add_dynamic_entry(TAG, VAL) \ _bfd_elf_add_dynamic_entry (info, TAG, VAL) - if (info->executable) + if (bfd_link_executable (info)) { if (!add_dynamic_entry (DT_DEBUG, 0)) return FALSE; @@ -6626,7 +6626,7 @@ ppc_elf_size_dynamic_sections (bfd *output_bfd, /* Augmentation. */ p += 1; - if (info->shared + if (bfd_link_pic (info) && htab->elf.dynamic_sections_created) { bfd_vma adv = (htab->glink->size - GLINK_PLTRESOLVE + 8) >> 2; @@ -6794,7 +6794,7 @@ ppc_elf_relax_section (bfd *abfd, /* We cannot represent the required PIC relocs in the output, so don't do anything. The linker doesn't support mixing -shared and -r anyway. */ - if (link_info->relocatable && link_info->shared) + if (bfd_link_relocatable (link_info) && bfd_link_pic (link_info)) return TRUE; htab = ppc_elf_hash_table (link_info); @@ -6938,7 +6938,7 @@ ppc_elf_relax_section (bfd *abfd, || h->root.type == bfd_link_hash_undefweak) { tsec = bfd_und_section_ptr; - toff = link_info->relocatable ? indx : 0; + toff = bfd_link_relocatable (link_info) ? indx : 0; } else continue; @@ -6946,8 +6946,8 @@ ppc_elf_relax_section (bfd *abfd, /* If this branch is to __tls_get_addr then we may later optimise away the call. We won't be needing a long- branch stub in that case. */ - if (link_info->executable - && !link_info->relocatable + if (bfd_link_executable (link_info) + && !bfd_link_relocatable (link_info) && h == htab->tls_get_addr && irel != internal_relocs) { @@ -7038,7 +7038,7 @@ ppc_elf_relax_section (bfd *abfd, bfd_vma addend = 0; struct plt_entry *ent; - if (r_type == R_PPC_PLTREL24 && link_info->shared) + if (r_type == R_PPC_PLTREL24 && bfd_link_pic (link_info)) addend = irel->r_addend; ent = find_plt_ent (plist, got2, addend); if (ent != NULL) @@ -7104,7 +7104,7 @@ ppc_elf_relax_section (bfd *abfd, toff += irel->r_addend; /* Attempted -shared link of non-pic code loses. */ - if ((!link_info->relocatable + if ((!bfd_link_relocatable (link_info) && tsec == bfd_und_section_ptr) || tsec->output_section == NULL || (tsec->owner != NULL @@ -7115,7 +7115,7 @@ ppc_elf_relax_section (bfd *abfd, /* If the branch is in range, no need to do anything. */ if (tsec != bfd_und_section_ptr - && (!link_info->relocatable + && (!bfd_link_relocatable (link_info) /* A relocatable link may have sections moved during final link, so do not presume they remain in range. */ || tsec->output_section == isec->output_section)) @@ -7145,7 +7145,7 @@ ppc_elf_relax_section (bfd *abfd, one. We'll report an error later. */ continue; - if (link_info->shared) + if (bfd_link_pic (link_info)) { size = 4 * ARRAY_SIZE (shared_stub_entry); insn_offset = 12; @@ -7240,7 +7240,7 @@ ppc_elf_relax_section (bfd *abfd, workaround_change = FALSE; newsize = trampoff; if (htab->params->ppc476_workaround - && (!link_info->relocatable + && (!bfd_link_relocatable (link_info) || isec->output_section->alignment_power >= htab->params->pagesize_p2)) { bfd_vma addr, end_addr; @@ -7448,7 +7448,7 @@ write_glink_stub (struct plt_entry *ent, asection *plt_sec, unsigned char *p, + plt_sec->output_section->vma + plt_sec->output_offset); - if (info->shared) + if (bfd_link_pic (info)) { bfd_vma got = 0; @@ -7666,7 +7666,7 @@ ppc_elf_relocate_section (bfd *output_bfd, "%ld relocations%s", input_bfd, input_section, (long) input_section->reloc_count, - (info->relocatable) ? " (relocatable)" : ""); + (bfd_link_relocatable (info)) ? " (relocatable)" : ""); #endif got2 = bfd_get_section_by_name (input_bfd, ".got2"); @@ -7681,7 +7681,7 @@ ppc_elf_relocate_section (bfd *output_bfd, sym_hashes = elf_sym_hashes (input_bfd); /* We have to handle relocations in vxworks .tls_vars sections specially, because the dynamic loader is 'weird'. */ - is_vxworks_tls = (htab->is_vxworks && info->shared + is_vxworks_tls = (htab->is_vxworks && bfd_link_pic (info) && !strcmp (input_section->output_section->name, ".tls_vars")); if (input_section->sec_info_type == SEC_INFO_TYPE_TARGET) @@ -7747,7 +7747,7 @@ ppc_elf_relocate_section (bfd *output_bfd, rel, 1, relend, howto, 0, contents); } - if (info->relocatable) + if (bfd_link_relocatable (info)) { if (got2 != NULL && r_type == R_PPC_PLTREL24 @@ -8173,11 +8173,11 @@ ppc_elf_relocate_section (bfd *output_bfd, ent = NULL; if (ifunc != NULL - && (!info->shared + && (!bfd_link_pic (info) || is_branch_reloc (r_type))) { addend = 0; - if (r_type == R_PPC_PLTREL24 && info->shared) + if (r_type == R_PPC_PLTREL24 && bfd_link_pic (info)) addend = rel->r_addend; ent = find_plt_ent (ifunc, got2, addend); } @@ -8305,8 +8305,8 @@ ppc_elf_relocate_section (bfd *output_bfd, { bfd_boolean dyn; dyn = htab->elf.dynamic_sections_created; - if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h) - || (info->shared + if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), h) + || (bfd_link_pic (info) && SYMBOL_REFERENCES_LOCAL (info, h))) /* This is actually a static link, or it is a -Bsymbolic link and the symbol is defined @@ -8374,7 +8374,7 @@ ppc_elf_relocate_section (bfd *output_bfd, } /* Generate relocs for the dynamic linker. */ - if ((info->shared || indx != 0) + if ((bfd_link_pic (info) || indx != 0) && (offp == &htab->tlsld_got.offset || h == NULL || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT @@ -8623,7 +8623,7 @@ ppc_elf_relocate_section (bfd *output_bfd, case R_PPC_ADDR14: case R_PPC_ADDR14_BRTAKEN: case R_PPC_ADDR14_BRNTAKEN: - if (h != NULL && !info->shared) + if (h != NULL && !bfd_link_pic (info)) break; /* fall through */ @@ -8632,7 +8632,7 @@ ppc_elf_relocate_section (bfd *output_bfd, || is_vxworks_tls) break; - if ((info->shared + if ((bfd_link_pic (info) && !(h != NULL && ((h->root.type == bfd_link_hash_undefined && (ELF_ST_VISIBILITY (h->other) == STV_HIDDEN @@ -8642,7 +8642,7 @@ ppc_elf_relocate_section (bfd *output_bfd, && (must_be_dyn_reloc (info, r_type) || !SYMBOL_CALLS_LOCAL (info, h))) || (ELIMINATE_COPY_RELOCS - && !info->shared + && !bfd_link_pic (info) && h != NULL && h->dynindx != -1 && !h->non_got_ref @@ -8793,7 +8793,7 @@ ppc_elf_relocate_section (bfd *output_bfd, if (r_type == R_PPC_RELAX_PLTREL24) { - if (info->shared) + if (bfd_link_pic (info)) got2_addend = addend; addend = 0; } @@ -8816,7 +8816,7 @@ ppc_elf_relocate_section (bfd *output_bfd, size_t insn_offset = rel->r_offset; unsigned int insn; - if (info->shared) + if (bfd_link_pic (info)) { relocation -= (input_section->output_section->vma + input_section->output_offset @@ -8835,7 +8835,7 @@ ppc_elf_relocate_section (bfd *output_bfd, } relocation += addend; - if (info->relocatable) + if (bfd_link_relocatable (info)) relocation = 0; /* First insn is HA, second is LO. */ @@ -8921,7 +8921,7 @@ ppc_elf_relocate_section (bfd *output_bfd, if (h != NULL && ifunc == NULL) { struct plt_entry *ent = find_plt_ent (&h->plt.plist, got2, - info->shared ? addend : 0); + bfd_link_pic (info) ? addend : 0); if (ent == NULL || htab->plt == NULL) { @@ -9471,7 +9471,7 @@ ppc_elf_relocate_section (bfd *output_bfd, if (htab->params->ppc476_workaround && input_section->sec_info_type == SEC_INFO_TYPE_TARGET - && (!info->relocatable + && (!bfd_link_relocatable (info) || (input_section->output_section->alignment_power >= htab->params->pagesize_p2))) { @@ -9683,9 +9683,9 @@ ppc_elf_relocate_section (bfd *output_bfd, bfd_vma delta = ((insn & 0xfffc) ^ 0x8000) - 0x8000; delta += offset - patch_off; - if (info->relocatable && rel != NULL) + if (bfd_link_relocatable (info) && rel != NULL) delta = 0; - if (!info->relocatable && rel != NULL) + if (!bfd_link_relocatable (info) && rel != NULL) { enum elf_ppc_reloc_type r_type; @@ -9811,11 +9811,11 @@ ppc_elf_finish_dynamic_symbol (bfd *output_bfd, got_offset = (reloc_index + 3) * 4; /* Use the right PLT. */ - plt_entry = info->shared ? ppc_elf_vxworks_pic_plt_entry + plt_entry = bfd_link_pic (info) ? ppc_elf_vxworks_pic_plt_entry : ppc_elf_vxworks_plt_entry; /* Fill in the .plt on VxWorks. */ - if (info->shared) + if (bfd_link_pic (info)) { bfd_put_32 (output_bfd, plt_entry[0] | PPC_HA (got_offset), @@ -9873,7 +9873,7 @@ ppc_elf_finish_dynamic_symbol (bfd *output_bfd, + ent->plt.offset + 16), htab->sgotplt->contents + got_offset); - if (!info->shared) + if (!bfd_link_pic (info)) { /* Fill in a couple of entries in .rela.plt.unloaded. */ loc = htab->srelplt2->contents @@ -9995,7 +9995,7 @@ ppc_elf_finish_dynamic_symbol (bfd *output_bfd, } } else if (h->type == STT_GNU_IFUNC - && !info->shared) + && !bfd_link_pic (info)) { /* Set the value of ifunc symbols in a non-pie executable to the glink entry. This is to avoid @@ -10047,7 +10047,7 @@ ppc_elf_finish_dynamic_symbol (bfd *output_bfd, write_glink_stub (ent, splt, p, info); - if (!info->shared) + if (!bfd_link_pic (info)) /* We only need one non-PIC glink stub. */ break; } @@ -10242,11 +10242,11 @@ ppc_elf_finish_dynamic_sections (bfd *output_bfd, if (splt && splt->size > 0) { /* Use the right PLT. */ - const bfd_vma *plt_entry = (info->shared + const bfd_vma *plt_entry = (bfd_link_pic (info) ? ppc_elf_vxworks_pic_plt0_entry : ppc_elf_vxworks_plt0_entry); - if (!info->shared) + if (!bfd_link_pic (info)) { bfd_vma got_value = SYM_VAL (htab->elf.hgot); @@ -10267,7 +10267,7 @@ ppc_elf_finish_dynamic_sections (bfd *output_bfd, bfd_put_32 (output_bfd, plt_entry[6], splt->contents + 24); bfd_put_32 (output_bfd, plt_entry[7], splt->contents + 28); - if (! info->shared) + if (! bfd_link_pic (info)) { Elf_Internal_Rela rela; bfd_byte *loc; @@ -10484,7 +10484,7 @@ ppc_elf_finish_dynamic_sections (bfd *output_bfd, } /* Last comes the PLTresolve stub. */ - if (info->shared) + if (bfd_link_pic (info)) { bfd_vma bcl; diff --git a/bfd/elf32-rl78.c b/bfd/elf32-rl78.c index 275529636c7..8cddb58aa8b 100644 --- a/bfd/elf32-rl78.c +++ b/bfd/elf32-rl78.c @@ -758,7 +758,7 @@ rl78_elf_relocate_section RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) { /* This is a relocatable link. We don't have to change anything, unless the reloc is against a section symbol, @@ -1310,7 +1310,7 @@ rl78_elf_check_relocs asection *splt; bfd *dynobj; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; symtab_hdr = &elf_tdata (abfd)->symtab_hdr; @@ -1442,7 +1442,7 @@ rl78_elf_always_size_sections (bfd *output_bfd ATTRIBUTE_UNUSED, bfd *dynobj; asection *splt; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; dynobj = elf_hash_table (info)->dynobj; @@ -1529,7 +1529,7 @@ rl78_elf_relax_plt_section (bfd *dynobj, /* Assume nothing changes. */ *again = FALSE; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; /* We only relax the .plt section at the moment. */ @@ -2088,7 +2088,7 @@ rl78_elf_relax_section /* We don't have to do anything for a relocatable link, if this section does not have relocs, or if this is not a code section. */ - if (link_info->relocatable + if (bfd_link_relocatable (link_info) || (sec->flags & SEC_RELOC) == 0 || sec->reloc_count == 0 || (sec->flags & SEC_CODE) == 0) diff --git a/bfd/elf32-rx.c b/bfd/elf32-rx.c index 8d7162885ac..df765ae2c01 100644 --- a/bfd/elf32-rx.c +++ b/bfd/elf32-rx.c @@ -632,7 +632,7 @@ rx_elf_relocate_section RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) { /* This is a relocatable link. We don't have to change anything, unless the reloc is against a section symbol, @@ -2003,7 +2003,7 @@ elf32_rx_relax_section (bfd * abfd, /* We don't have to do anything for a relocatable link, if this section does not have relocs, or if this is not a code section. */ - if (link_info->relocatable + if (bfd_link_relocatable (link_info) || (sec->flags & SEC_RELOC) == 0 || sec->reloc_count == 0 || (sec->flags & SEC_CODE) == 0) diff --git a/bfd/elf32-s390.c b/bfd/elf32-s390.c index 19ba0442518..de37ca46cc5 100644 --- a/bfd/elf32-s390.c +++ b/bfd/elf32-s390.c @@ -856,11 +856,11 @@ elf_s390_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info) htab->elf.splt = bfd_get_linker_section (dynobj, ".plt"); htab->elf.srelplt = bfd_get_linker_section (dynobj, ".rela.plt"); htab->sdynbss = bfd_get_linker_section (dynobj, ".dynbss"); - if (!info->shared) + if (!bfd_link_pic (info)) htab->srelbss = bfd_get_linker_section (dynobj, ".rela.bss"); if (!htab->elf.splt || !htab->elf.srelplt || !htab->sdynbss - || (!info->shared && !htab->srelbss)) + || (!bfd_link_pic (info) && !htab->srelbss)) abort (); return TRUE; @@ -937,7 +937,7 @@ elf_s390_tls_transition (struct bfd_link_info *info, int r_type, int is_local) { - if (info->shared) + if (bfd_link_pic (info)) return r_type; switch (r_type) @@ -978,7 +978,7 @@ elf_s390_check_relocs (bfd *abfd, int tls_type, old_tls_type; Elf_Internal_Sym *isym; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; BFD_ASSERT (is_s390_elf (abfd)); @@ -1177,7 +1177,7 @@ elf_s390_check_relocs (bfd *abfd, case R_390_TLS_GOTIE20: case R_390_TLS_GOTIE32: case R_390_TLS_IEENT: - if (info->shared) + if (bfd_link_pic (info)) info->flags |= DF_STATIC_TLS; /* Fall through. */ @@ -1253,10 +1253,10 @@ elf_s390_check_relocs (bfd *abfd, /* For static linking and executables this reloc will be calculated at linktime otherwise a TLS_TPOFF runtime reloc will be generated. */ - if (r_type == R_390_TLS_LE32 && info->pie) + if (r_type == R_390_TLS_LE32 && bfd_link_pie (info)) break; - if (!info->shared) + if (!bfd_link_pic (info)) break; info->flags |= DF_STATIC_TLS; /* Fall through. */ @@ -1280,7 +1280,7 @@ elf_s390_check_relocs (bfd *abfd, adjust_dynamic_symbol. */ h->non_got_ref = 1; - if (!info->shared) + if (!bfd_link_pic (info)) { /* We may need a .plt entry if the function this reloc refers to is in a shared lib. */ @@ -1309,7 +1309,7 @@ elf_s390_check_relocs (bfd *abfd, may need to keep relocations for symbols satisfied by a dynamic library if we manage to avoid copy relocs for the symbol. */ - if ((info->shared + if ((bfd_link_pic (info) && (sec->flags & SEC_ALLOC) != 0 && ((ELF32_R_TYPE (rel->r_info) != R_390_PC16 && ELF32_R_TYPE (rel->r_info) != R_390_PC12DBL @@ -1322,7 +1322,7 @@ elf_s390_check_relocs (bfd *abfd, || h->root.type == bfd_link_hash_defweak || !h->def_regular)))) || (ELIMINATE_COPY_RELOCS - && !info->shared + && !bfd_link_pic (info) && (sec->flags & SEC_ALLOC) != 0 && h != NULL && (h->root.type == bfd_link_hash_defweak @@ -1459,7 +1459,7 @@ elf_s390_gc_sweep_hook (bfd *abfd, bfd_signed_vma *local_got_refcounts; const Elf_Internal_Rela *rel, *relend; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; htab = elf_s390_hash_table (info); @@ -1565,7 +1565,7 @@ elf_s390_gc_sweep_hook (bfd *abfd, case R_390_PC24DBL: case R_390_PC32DBL: case R_390_PC32: - if (info->shared) + if (bfd_link_pic (info)) break; /* Fall through. */ @@ -1702,7 +1702,7 @@ elf_s390_adjust_dynamic_symbol (struct bfd_link_info *info, only references to the symbol are via the global offset table. For such cases we need not do anything here; the relocations will be handled correctly by relocate_section. */ - if (info->shared) + if (bfd_link_pic (info)) return TRUE; /* If there are no references to this symbol that do not use the @@ -1799,7 +1799,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) return FALSE; } - if (info->shared + if (bfd_link_pic (info) || WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, 0, h)) { asection *s = htab->elf.splt; @@ -1816,7 +1816,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) location in the .plt. This is required to make function pointers compare as equal between the normal executable and the shared library. */ - if (! info->shared + if (! bfd_link_pic (info) && !h->def_regular) { h->root.u.def.section = s; @@ -1852,7 +1852,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) to R_390_TLS_LE32 requiring no TLS entry. For GOTIE12 and IEENT we can save the dynamic TLS relocation. */ if (h->got.refcount > 0 - && !info->shared + && !bfd_link_pic (info) && h->dynindx == -1 && elf_s390_hash_entry(h)->tls_type >= GOT_TLS_IE) { @@ -1898,7 +1898,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) htab->elf.srelgot->size += 2 * sizeof (Elf32_External_Rela); else if ((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT || h->root.type != bfd_link_hash_undefweak) - && (info->shared + && (bfd_link_pic (info) || WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h))) htab->elf.srelgot->size += sizeof (Elf32_External_Rela); } @@ -1914,7 +1914,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) space for pc-relative relocs that have become local due to symbol visibility changes. */ - if (info->shared) + if (bfd_link_pic (info)) { if (SYMBOL_CALLS_LOCAL (info, h)) { @@ -2039,7 +2039,7 @@ elf_s390_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, if (htab->elf.dynamic_sections_created) { /* Set the contents of the .interp section to the interpreter. */ - if (info->executable) + if (bfd_link_executable (info)) { s = bfd_get_linker_section (dynobj, ".interp"); if (s == NULL) @@ -2107,7 +2107,7 @@ elf_s390_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, s->size += GOT_ENTRY_SIZE; if (*local_tls_type == GOT_TLS_GD) s->size += GOT_ENTRY_SIZE; - if (info->shared) + if (bfd_link_pic (info)) srela->size += sizeof (Elf32_External_Rela); } else @@ -2216,7 +2216,7 @@ elf_s390_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, #define add_dynamic_entry(TAG, VAL) \ _bfd_elf_add_dynamic_entry (info, TAG, VAL) - if (info->executable) + if (bfd_link_executable (info)) { if (!add_dynamic_entry (DT_DEBUG, 0)) return FALSE; @@ -2432,7 +2432,7 @@ elf_s390_relocate_section (bfd *output_bfd, RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) continue; switch (r_type) @@ -2515,8 +2515,10 @@ elf_s390_relocate_section (bfd *output_bfd, finish_dynamic_symbol. */ } } - else if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h) - || (info->shared + else if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, + bfd_link_pic (info), + h) + || (bfd_link_pic (info) && SYMBOL_REFERENCES_LOCAL (info, h)) || (ELF_ST_VISIBILITY (h->other) && h->root.type == bfd_link_hash_undefweak)) @@ -2544,7 +2546,7 @@ elf_s390_relocate_section (bfd *output_bfd, } if ((h->def_regular - && info->shared + && bfd_link_pic (info) && SYMBOL_REFERENCES_LOCAL (info, h)) /* lrl rx,sym@GOTENT -> larl rx, sym */ && ((r_type == R_390_GOTENT @@ -2593,7 +2595,7 @@ elf_s390_relocate_section (bfd *output_bfd, bfd_put_32 (output_bfd, relocation, htab->elf.sgot->contents + off); - if (info->shared) + if (bfd_link_pic (info)) { asection *srelgot; Elf_Internal_Rela outrel; @@ -2726,7 +2728,7 @@ elf_s390_relocate_section (bfd *output_bfd, && s390_is_ifunc_symbol_p (h) && h->def_regular) { - if (!info->shared || !h->non_got_ref) + if (!bfd_link_pic (info) || !h->non_got_ref) { /* For a non-shared object STT_GNU_IFUNC symbol must go through PLT. */ @@ -2757,7 +2759,7 @@ elf_s390_relocate_section (bfd *output_bfd, if (h->dynindx == -1 || h->forced_local - || info->executable) + || bfd_link_executable (info)) { /* This symbol is resolved locally. */ outrel.r_info = ELF32_R_INFO (0, R_390_IRELATIVE); @@ -2786,7 +2788,7 @@ elf_s390_relocate_section (bfd *output_bfd, if ((input_section->flags & SEC_ALLOC) == 0) break; - if ((info->shared + if ((bfd_link_pic (info) && (h == NULL || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT || h->root.type != bfd_link_hash_undefweak) @@ -2798,7 +2800,7 @@ elf_s390_relocate_section (bfd *output_bfd, && r_type != R_390_PC32) || !SYMBOL_CALLS_LOCAL (info, h))) || (ELIMINATE_COPY_RELOCS - && !info->shared + && !bfd_link_pic (info) && h != NULL && h->dynindx != -1 && !h->non_got_ref @@ -2839,7 +2841,7 @@ elf_s390_relocate_section (bfd *output_bfd, || r_type == R_390_PC24DBL || r_type == R_390_PC32DBL || r_type == R_390_PC32 - || !info->shared + || !bfd_link_pic (info) || !SYMBOLIC_BIND (info, h) || !h->def_regular)) { @@ -2909,7 +2911,7 @@ elf_s390_relocate_section (bfd *output_bfd, /* Relocations for tls literal pool entries. */ case R_390_TLS_IE32: - if (info->shared) + if (bfd_link_pic (info)) { Elf_Internal_Rela outrel; asection *sreloc; @@ -2937,7 +2939,9 @@ elf_s390_relocate_section (bfd *output_bfd, else if (h != NULL) { tls_type = elf_s390_hash_entry(h)->tls_type; - if (!info->shared && h->dynindx == -1 && tls_type >= GOT_TLS_IE) + if (!bfd_link_pic (info) + && h->dynindx == -1 + && tls_type >= GOT_TLS_IE) r_type = R_390_TLS_LE32; } if (r_type == R_390_TLS_GD32 && tls_type >= GOT_TLS_IE) @@ -3048,14 +3052,16 @@ elf_s390_relocate_section (bfd *output_bfd, if (local_got_offsets == NULL) abort(); off = local_got_offsets[r_symndx]; - if (info->shared) + if (bfd_link_pic (info)) goto emit_tls_relocs; } else { off = h->got.offset; tls_type = elf_s390_hash_entry(h)->tls_type; - if (info->shared || h->dynindx != -1 || tls_type < GOT_TLS_IE) + if (bfd_link_pic (info) + || h->dynindx != -1 + || tls_type < GOT_TLS_IE) goto emit_tls_relocs; } @@ -3072,7 +3078,7 @@ elf_s390_relocate_section (bfd *output_bfd, break; case R_390_TLS_LDM32: - if (! info->shared) + if (! bfd_link_pic (info)) /* The literal pool entry this relocation refers to gets ignored by the optimized code of the local exec model. Do nothing and the value will turn out zero. */ @@ -3110,7 +3116,7 @@ elf_s390_relocate_section (bfd *output_bfd, break; case R_390_TLS_LE32: - if (info->shared && !info->pie) + if (bfd_link_pic (info) && !bfd_link_pie (info)) { /* Linking a shared library with non-fpic code requires a R_390_TLS_TPOFF relocation. */ @@ -3147,7 +3153,7 @@ elf_s390_relocate_section (bfd *output_bfd, continue; case R_390_TLS_LDO32: - if (info->shared || (input_section->flags & SEC_DEBUGGING)) + if (bfd_link_pic (info) || (input_section->flags & SEC_DEBUGGING)) relocation -= dtpoff_base (info); else /* When converting LDO to LE, we must negate. */ @@ -3169,7 +3175,7 @@ elf_s390_relocate_section (bfd *output_bfd, if (r_type == R_390_TLS_LOAD) { - if (!info->shared && (h == NULL || h->dynindx == -1)) + if (!bfd_link_pic (info) && (h == NULL || h->dynindx == -1)) { /* IE->LE transition. Four valid cases: l %rx,0(0,%ry) -> lr %rx,%ry + bcr 0,0 @@ -3207,7 +3213,7 @@ elf_s390_relocate_section (bfd *output_bfd, (insn & 0xffff0000) != 0xc0e50000 && (insn & 0xff000000) != 0x0d000000) invalid_tls_insn (input_bfd, input_section, rel); - if (!info->shared && (h == NULL || h->dynindx == -1)) + if (!bfd_link_pic (info) && (h == NULL || h->dynindx == -1)) { if ((insn & 0xff000000) == 0x0d000000) { @@ -3257,7 +3263,7 @@ elf_s390_relocate_section (bfd *output_bfd, } else if (r_type == R_390_TLS_LDCALL) { - if (!info->shared) + if (!bfd_link_pic (info)) { unsigned int insn; @@ -3422,7 +3428,7 @@ elf_s390_finish_ifunc_symbol (bfd *output_bfd, = -(unsigned) (((65536 / PLT_ENTRY_SIZE - 1) * PLT_ENTRY_SIZE) / 2); /* Fill in the entry in the procedure linkage table. */ - if (!info->shared) + if (!bfd_link_pic (info)) { memcpy (plt->contents + iplt_offset, elf_s390_plt_entry, PLT_ENTRY_SIZE); @@ -3505,7 +3511,7 @@ elf_s390_finish_ifunc_symbol (bfd *output_bfd, if (!h || h->dynindx == -1 - || ((info->executable + || ((bfd_link_executable (info) || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT) && h->def_regular)) { @@ -3584,7 +3590,7 @@ elf_s390_finish_dynamic_symbol (bfd *output_bfd, = -(unsigned) (((65536 / PLT_ENTRY_SIZE - 1) * PLT_ENTRY_SIZE) / 2); /* Fill in the entry in the procedure linkage table. */ - if (!info->shared) + if (!bfd_link_pic (info)) { memcpy (htab->elf.splt->contents + h->plt.offset, elf_s390_plt_entry, PLT_ENTRY_SIZE); @@ -3708,7 +3714,7 @@ elf_s390_finish_dynamic_symbol (bfd *output_bfd, initialized in the relocate_section function. */ if (h->def_regular && s390_is_ifunc_symbol_p (h)) { - if (info->shared) + if (bfd_link_pic (info)) { /* An explicit GOT slot usage needs GLOB_DAT. If the symbol references local the implicit got.iplt slot @@ -3728,7 +3734,7 @@ elf_s390_finish_dynamic_symbol (bfd *output_bfd, return TRUE; } } - else if (info->shared + else if (bfd_link_pic (info) && SYMBOL_REFERENCES_LOCAL (info, h)) { /* If this is a static link, or it is a -Bsymbolic link and @@ -3870,7 +3876,7 @@ elf_s390_finish_dynamic_sections (bfd *output_bfd, if (htab->elf.splt && htab->elf.splt->size > 0) { memset (htab->elf.splt->contents, 0, PLT_FIRST_ENTRY_SIZE); - if (info->shared) + if (bfd_link_pic (info)) { memcpy (htab->elf.splt->contents, elf_s390_plt_pic_first_entry, PLT_FIRST_ENTRY_SIZE); diff --git a/bfd/elf32-score.c b/bfd/elf32-score.c index 710e6b65bbf..a976a1539f6 100644 --- a/bfd/elf32-score.c +++ b/bfd/elf32-score.c @@ -1447,7 +1447,7 @@ score_elf_create_got_section (bfd *abfd, h->def_regular = 1; h->type = STT_OBJECT; - if (info->shared && ! bfd_elf_link_record_dynamic_symbol (info, h)) + if (bfd_link_pic (info) && ! bfd_elf_link_record_dynamic_symbol (info, h)) return FALSE; amt = sizeof (struct score_got_info); @@ -2003,7 +2003,7 @@ score_elf_final_link_relocate (reloc_howto_type *howto, elf_gp (output_bfd) = (bh->u.def.value + bh->u.def.section->output_section->vma + bh->u.def.section->output_offset); - else if (info->relocatable) + else if (bfd_link_relocatable (info)) { bfd_vma lo = -1; @@ -2067,7 +2067,7 @@ score_elf_final_link_relocate (reloc_howto_type *howto, g = score_elf_global_got_index (elf_hash_table (info)->dynobj, (struct elf_link_hash_entry *) h); if ((! elf_hash_table (info)->dynamic_sections_created - || (info->shared + || (bfd_link_pic (info) && (info->symbolic || h->root.dynindx == -1) && h->root.def_regular))) { @@ -2118,7 +2118,7 @@ score_elf_final_link_relocate (reloc_howto_type *howto, case R_SCORE_ABS32: case R_SCORE_REL32: - if ((info->shared + if ((bfd_link_pic (info) || (elf_hash_table (info)->dynamic_sections_created && h != NULL && h->root.def_dynamic @@ -2413,7 +2413,7 @@ s3_bfd_score_elf_relocate_section (bfd *output_bfd, if (elf_hash_table (info)->dynamic_sections_created) { bfd_size_type dynsecsymcount = 0; - if (info->shared) + if (bfd_link_pic (info)) { asection * p; const struct elf_backend_data *bed = get_elf_backend_data (output_bfd); @@ -2464,7 +2464,7 @@ s3_bfd_score_elf_relocate_section (bfd *output_bfd, + sym->st_value); name = bfd_elf_sym_name (input_bfd, symtab_hdr, sym, sec); - if (!info->relocatable + if (!bfd_link_relocatable (info) && (sec->flags & SEC_MERGE) && ELF_ST_TYPE (sym->st_info) == STT_SECTION) { @@ -2661,11 +2661,11 @@ s3_bfd_score_elf_relocate_section (bfd *output_bfd, /* If this is a dynamic link, we should have created a _DYNAMIC_LINK symbol in s3_bfd_score_elf_create_dynamic_sections. Otherwise, we should define the symbol with a value of 0. */ - BFD_ASSERT (! info->shared); + BFD_ASSERT (! bfd_link_pic (info)); BFD_ASSERT (bfd_get_section_by_name (output_bfd, ".dynamic") == NULL); relocation = 0; } - else if (!info->relocatable) + else if (!bfd_link_relocatable (info)) { if (! ((*info->callbacks->undefined_symbol) (info, h->root.root.root.string, input_bfd, @@ -2681,7 +2681,7 @@ s3_bfd_score_elf_relocate_section (bfd *output_bfd, RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) { /* This is a relocatable link. We don't have to change anything, unless the reloc is against a section symbol, @@ -2783,7 +2783,7 @@ s3_bfd_score_elf_check_relocs (bfd *abfd, asection *sreloc; const struct elf_backend_data *bed; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; dynobj = elf_hash_table (info)->dynobj; @@ -2864,7 +2864,9 @@ s3_bfd_score_elf_check_relocs (bfd *abfd, break; case R_SCORE_ABS32: case R_SCORE_REL32: - if (dynobj == NULL && (info->shared || h != NULL) && (sec->flags & SEC_ALLOC) != 0) + if (dynobj == NULL + && (bfd_link_pic (info) || h != NULL) + && (sec->flags & SEC_ALLOC) != 0) elf_hash_table (info)->dynobj = dynobj = abfd; break; default: @@ -2907,7 +2909,8 @@ s3_bfd_score_elf_check_relocs (bfd *abfd, break; case R_SCORE_ABS32: case R_SCORE_REL32: - if ((info->shared || h != NULL) && (sec->flags & SEC_ALLOC) != 0) + if ((bfd_link_pic (info) || h != NULL) + && (sec->flags & SEC_ALLOC) != 0) { if (sreloc == NULL) { @@ -2916,7 +2919,7 @@ s3_bfd_score_elf_check_relocs (bfd *abfd, return FALSE; } #define SCORE_READONLY_SECTION (SEC_ALLOC | SEC_LOAD | SEC_READONLY) - if (info->shared) + if (bfd_link_pic (info)) { /* When creating a shared object, we must copy these reloc types into the output file as R_SCORE_REL32 relocs. We make room for this reloc @@ -3108,7 +3111,7 @@ s3_bfd_score_elf_adjust_dynamic_symbol (struct bfd_link_info *info, any R_SCORE_ABS32 or R_SCORE_REL32 relocs against it into the output file. */ hscore = (struct score_elf_link_hash_entry *)h; - if (!info->relocatable + if (!bfd_link_relocatable (info) && hscore->possibly_dynamic_relocs != 0 && (h->root.type == bfd_link_hash_defweak || !h->def_regular)) { @@ -3266,7 +3269,7 @@ s3_bfd_score_elf_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *i if (elf_hash_table (info)->dynamic_sections_created) { /* Set the contents of the .interp section to the interpreter. */ - if (!info->shared) + if (!bfd_link_pic (info)) { s = bfd_get_linker_section (dynobj, ".interp"); BFD_ASSERT (s != NULL); @@ -3451,7 +3454,7 @@ s3_bfd_score_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) return FALSE; } - if (!info->shared) + if (!bfd_link_pic (info)) { const char *name; diff --git a/bfd/elf32-score7.c b/bfd/elf32-score7.c index e23f67d126b..1af034eac07 100644 --- a/bfd/elf32-score7.c +++ b/bfd/elf32-score7.c @@ -1305,7 +1305,8 @@ score_elf_create_got_section (bfd *abfd, h->def_regular = 1; h->type = STT_OBJECT; - if (info->shared && ! bfd_elf_link_record_dynamic_symbol (info, h)) + if (bfd_link_pic (info) + && ! bfd_elf_link_record_dynamic_symbol (info, h)) return FALSE; amt = sizeof (struct score_got_info); @@ -1852,7 +1853,7 @@ score_elf_final_link_relocate (reloc_howto_type *howto, elf_gp (output_bfd) = (bh->u.def.value + bh->u.def.section->output_section->vma + bh->u.def.section->output_offset); - else if (info->relocatable) + else if (bfd_link_relocatable (info)) { bfd_vma lo = -1; @@ -1965,7 +1966,7 @@ score_elf_final_link_relocate (reloc_howto_type *howto, g = score_elf_global_got_index (elf_hash_table (info)->dynobj, (struct elf_link_hash_entry *) h); if ((! elf_hash_table(info)->dynamic_sections_created - || (info->shared + || (bfd_link_pic (info) && (info->symbolic || h->root.dynindx == -1) && h->root.def_regular))) { @@ -2017,7 +2018,7 @@ score_elf_final_link_relocate (reloc_howto_type *howto, case R_SCORE_ABS32: case R_SCORE_REL32: - if ((info->shared + if ((bfd_link_pic (info) || (elf_hash_table (info)->dynamic_sections_created && h != NULL && h->root.def_dynamic @@ -2251,7 +2252,7 @@ s7_bfd_score_elf_relocate_section (bfd *output_bfd, if (elf_hash_table (info)->dynamic_sections_created) { bfd_size_type dynsecsymcount = 0; - if (info->shared) + if (bfd_link_pic (info)) { asection * p; const struct elf_backend_data *bed = get_elf_backend_data (output_bfd); @@ -2300,7 +2301,7 @@ s7_bfd_score_elf_relocate_section (bfd *output_bfd, relocation = sec->output_section->vma + sec->output_offset; name = bfd_elf_sym_name (input_bfd, symtab_hdr, sym, sec); - if (!info->relocatable) + if (!bfd_link_relocatable (info)) { if (ELF_ST_TYPE (sym->st_info) != STT_SECTION || (sec->flags & SEC_MERGE)) @@ -2433,11 +2434,11 @@ s7_bfd_score_elf_relocate_section (bfd *output_bfd, /* If this is a dynamic link, we should have created a _DYNAMIC_LINK symbol in s7_bfd_score_elf_create_dynamic_sections. Otherwise, we should define the symbol with a value of 0. */ - BFD_ASSERT (! info->shared); + BFD_ASSERT (! bfd_link_pic (info)); BFD_ASSERT (bfd_get_section_by_name (output_bfd, ".dynamic") == NULL); relocation = 0; } - else if (!info->relocatable) + else if (!bfd_link_relocatable (info)) { if (! ((*info->callbacks->undefined_symbol) (info, h->root.root.root.string, input_bfd, @@ -2453,7 +2454,7 @@ s7_bfd_score_elf_relocate_section (bfd *output_bfd, RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) { /* This is a relocatable link. We don't have to change anything, unless the reloc is against a section symbol, @@ -2588,7 +2589,7 @@ s7_bfd_score_elf_check_relocs (bfd *abfd, asection *sreloc; const struct elf_backend_data *bed; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; dynobj = elf_hash_table (info)->dynobj; @@ -2669,7 +2670,9 @@ s7_bfd_score_elf_check_relocs (bfd *abfd, break; case R_SCORE_ABS32: case R_SCORE_REL32: - if (dynobj == NULL && (info->shared || h != NULL) && (sec->flags & SEC_ALLOC) != 0) + if (dynobj == NULL + && (bfd_link_pic (info) || h != NULL) + && (sec->flags & SEC_ALLOC) != 0) elf_hash_table (info)->dynobj = dynobj = abfd; break; default: @@ -2712,7 +2715,8 @@ s7_bfd_score_elf_check_relocs (bfd *abfd, break; case R_SCORE_ABS32: case R_SCORE_REL32: - if ((info->shared || h != NULL) && (sec->flags & SEC_ALLOC) != 0) + if ((bfd_link_pic (info) || h != NULL) + && (sec->flags & SEC_ALLOC) != 0) { if (sreloc == NULL) { @@ -2721,7 +2725,7 @@ s7_bfd_score_elf_check_relocs (bfd *abfd, return FALSE; } #define SCORE_READONLY_SECTION (SEC_ALLOC | SEC_LOAD | SEC_READONLY) - if (info->shared) + if (bfd_link_pic (info)) { /* When creating a shared object, we must copy these reloc types into the output file as R_SCORE_REL32 relocs. We make room for this reloc @@ -2914,7 +2918,7 @@ s7_bfd_score_elf_adjust_dynamic_symbol (struct bfd_link_info *info, any R_SCORE_ABS32 or R_SCORE_REL32 relocs against it into the output file. */ hscore = (struct score_elf_link_hash_entry *) h; - if (!info->relocatable + if (!bfd_link_relocatable (info) && hscore->possibly_dynamic_relocs != 0 && (h->root.type == bfd_link_hash_defweak || !h->def_regular)) { @@ -3074,7 +3078,7 @@ s7_bfd_score_elf_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *i if (elf_hash_table (info)->dynamic_sections_created) { /* Set the contents of the .interp section to the interpreter. */ - if (!info->shared) + if (!bfd_link_pic (info)) { s = bfd_get_linker_section (dynobj, ".interp"); BFD_ASSERT (s != NULL); @@ -3259,7 +3263,7 @@ s7_bfd_score_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) return FALSE; } - if (!info->shared) + if (!bfd_link_pic (info)) { const char *name; diff --git a/bfd/elf32-sh-symbian.c b/bfd/elf32-sh-symbian.c index fc2d36b7365..e8e918deed8 100644 --- a/bfd/elf32-sh-symbian.c +++ b/bfd/elf32-sh-symbian.c @@ -432,7 +432,7 @@ sh_symbian_relocate_section (bfd * output_bfd, asection ** local_sections) { /* When performing a final link we implement the IMPORT AS directives. */ - if (!info->relocatable) + if (!bfd_link_relocatable (info)) { Elf_Internal_Rela * rel; Elf_Internal_Rela * relend; diff --git a/bfd/elf32-sh.c b/bfd/elf32-sh.c index dbad0711f23..012ee4e6e9f 100644 --- a/bfd/elf32-sh.c +++ b/bfd/elf32-sh.c @@ -519,7 +519,7 @@ sh_elf_relax_section (bfd *abfd, asection *sec, *again = FALSE; - if (link_info->relocatable + if (bfd_link_relocatable (link_info) || (sec->flags & SEC_RELOC) == 0 || sec->reloc_count == 0) return TRUE; @@ -2733,7 +2733,7 @@ sh_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) h->type = STT_OBJECT; htab->root.hplt = h; - if (info->shared + if (bfd_link_pic (info) && ! bfd_elf_link_record_dynamic_symbol (info, h)) return FALSE; } @@ -2776,7 +2776,7 @@ sh_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) be needed, we can discard it later. We will never need this section when generating a shared object, since they do not use copy relocs. */ - if (! info->shared) + if (! bfd_link_pic (info)) { s = bfd_make_section_anyway_with_flags (abfd, (bed->default_use_rela_p @@ -2871,7 +2871,7 @@ sh_elf_adjust_dynamic_symbol (struct bfd_link_info *info, only references to the symbol are via the global offset table. For such cases we need not do anything here; the relocations will be handled correctly by relocate_section. */ - if (info->shared) + if (bfd_link_pic (info)) return TRUE; /* If there are no references to this symbol that do not use the @@ -2978,7 +2978,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) return FALSE; } - if (info->shared + if (bfd_link_pic (info) || WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, 0, h)) { asection *s = htab->splt; @@ -2998,7 +2998,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) the shared library. Skip this for FDPIC, since the function's address will be the address of the canonical function descriptor. */ - if (!htab->fdpic_p && !info->shared && !h->def_regular) + if (!htab->fdpic_p && !bfd_link_pic (info) && !h->def_regular) { h->root.u.def.section = s; h->root.u.def.value = h->plt.offset; @@ -3021,7 +3021,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) /* We also need to make an entry in the .rel.plt section. */ htab->srelplt->size += sizeof (Elf32_External_Rela); - if (htab->vxworks_p && !info->shared) + if (htab->vxworks_p && !bfd_link_pic (info)) { /* VxWorks executables have a second set of relocations for each PLT entry. They go in a separate relocation @@ -3075,13 +3075,15 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) if (!dyn) { /* No dynamic relocations required. */ - if (htab->fdpic_p && !info->shared + if (htab->fdpic_p && !bfd_link_pic (info) && h->root.type != bfd_link_hash_undefweak && (got_type == GOT_NORMAL || got_type == GOT_FUNCDESC)) htab->srofixup->size += 4; } /* No dynamic relocations required when IE->LE conversion happens. */ - else if (got_type == GOT_TLS_IE && !h->def_dynamic && !info->shared) + else if (got_type == GOT_TLS_IE + && !h->def_dynamic + && !bfd_link_pic (info)) ; /* R_SH_TLS_IE_32 needs one dynamic relocation if dynamic, R_SH_TLS_GD needs one if local symbol and two if global. */ @@ -3092,17 +3094,19 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) htab->srelgot->size += 2 * sizeof (Elf32_External_Rela); else if (got_type == GOT_FUNCDESC) { - if (!info->shared && SYMBOL_FUNCDESC_LOCAL (info, h)) + if (!bfd_link_pic (info) && SYMBOL_FUNCDESC_LOCAL (info, h)) htab->srofixup->size += 4; else htab->srelgot->size += sizeof (Elf32_External_Rela); } else if ((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT || h->root.type != bfd_link_hash_undefweak) - && (info->shared + && (bfd_link_pic (info) || WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h))) htab->srelgot->size += sizeof (Elf32_External_Rela); - else if (htab->fdpic_p && !info->shared && got_type == GOT_NORMAL + else if (htab->fdpic_p + && !bfd_link_pic (info) + && got_type == GOT_NORMAL && (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT || h->root.type != bfd_link_hash_undefweak)) htab->srofixup->size += 4; @@ -3129,7 +3133,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) eh->datalabel_got.offset = s->size; s->size += 4; dyn = htab->root.dynamic_sections_created; - if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h)) + if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), h)) htab->srelgot->size += sizeof (Elf32_External_Rela); } else @@ -3146,7 +3150,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) || (htab->root.dynamic_sections_created && ! SYMBOL_CALLS_LOCAL (info, h)))) { - if (!info->shared && SYMBOL_FUNCDESC_LOCAL (info, h)) + if (!bfd_link_pic (info) && SYMBOL_FUNCDESC_LOCAL (info, h)) htab->srofixup->size += eh->abs_funcdesc_refcount * 4; else htab->srelgot->size @@ -3170,7 +3174,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) /* We will need a relocation or two fixups to initialize the function descriptor, so allocate those too. */ - if (!info->shared && SYMBOL_CALLS_LOCAL (info, h)) + if (!bfd_link_pic (info) && SYMBOL_CALLS_LOCAL (info, h)) htab->srofixup->size += 8; else htab->srelfuncdesc->size += sizeof (Elf32_External_Rela); @@ -3185,7 +3189,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) space for pc-relative relocs that have become local due to symbol visibility changes. */ - if (info->shared) + if (bfd_link_pic (info)) { if (SYMBOL_CALLS_LOCAL (info, h)) { @@ -3273,7 +3277,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) sreloc->size += p->count * sizeof (Elf32_External_Rela); /* If we need relocations, we do not need fixups. */ - if (htab->fdpic_p && !info->shared) + if (htab->fdpic_p && !bfd_link_pic (info)) htab->srofixup->size -= 4 * (p->count - p->pc_count); } @@ -3313,9 +3317,10 @@ readonly_dynrelocs (struct elf_link_hash_entry *h, void *inf) static bfd_boolean sh_elf_always_size_sections (bfd *output_bfd, struct bfd_link_info *info) { - sh_elf_hash_table (info)->plt_info = get_plt_info (output_bfd, info->shared); + sh_elf_hash_table (info)->plt_info = get_plt_info (output_bfd, + bfd_link_pic (info)); - if (sh_elf_hash_table (info)->fdpic_p && !info->relocatable + if (sh_elf_hash_table (info)->fdpic_p && !bfd_link_relocatable (info) && !bfd_elf_stack_segment_size (output_bfd, info, "__stacksize", DEFAULT_STACK_SIZE)) return FALSE; @@ -3344,7 +3349,7 @@ sh_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, if (htab->root.dynamic_sections_created) { /* Set the contents of the .interp section to the interpreter. */ - if (info->executable) + if (bfd_link_executable (info)) { s = bfd_get_linker_section (dynobj, ".interp"); BFD_ASSERT (s != NULL); @@ -3400,7 +3405,7 @@ sh_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, info->flags |= DF_TEXTREL; /* If we need relocations, we do not need fixups. */ - if (htab->fdpic_p && !info->shared) + if (htab->fdpic_p && !bfd_link_pic (info)) htab->srofixup->size -= 4 * (p->count - p->pc_count); } } @@ -3429,7 +3434,7 @@ sh_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, s->size += 4; if (*local_got_type == GOT_TLS_GD) s->size += 4; - if (info->shared) + if (bfd_link_pic (info)) srel->size += sizeof (Elf32_External_Rela); else htab->srofixup->size += 4; @@ -3470,7 +3475,7 @@ sh_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, { local_funcdesc->offset = htab->sfuncdesc->size; htab->sfuncdesc->size += 8; - if (!info->shared) + if (!bfd_link_pic (info)) htab->srofixup->size += 8; else htab->srelfuncdesc->size += sizeof (Elf32_External_Rela); @@ -3589,7 +3594,7 @@ sh_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, #define add_dynamic_entry(TAG, VAL) \ _bfd_elf_add_dynamic_entry (info, TAG, VAL) - if (info->executable) + if (bfd_link_executable (info)) { if (! add_dynamic_entry (DT_DEBUG, 0)) return FALSE; @@ -3749,7 +3754,7 @@ sh_elf_initialize_funcdesc (bfd *output_bfd, addr = seg = 0; } - if (!info->shared && SYMBOL_CALLS_LOCAL (info, h)) + if (!bfd_link_pic (info) && SYMBOL_CALLS_LOCAL (info, h)) { if (h == NULL || h->root.type != bfd_link_hash_undefweak) { @@ -3866,7 +3871,7 @@ sh_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, /* We have to handle relocations in vxworks .tls_vars sections specially, because the dynamic loader is 'weird'. */ - is_vxworks_tls = (htab && htab->vxworks_p && info->shared + is_vxworks_tls = (htab && htab->vxworks_p && bfd_link_pic (info) && !strcmp (input_section->output_section->name, ".tls_vars")); @@ -3956,7 +3961,7 @@ sh_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, if (sec != NULL && discarded_section (sec)) /* Handled below. */ ; - else if (info->relocatable) + else if (bfd_link_relocatable (info)) { /* This is a relocatable link. We don't have to change anything, unless the reloc is against a section symbol, @@ -4071,8 +4076,10 @@ sh_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, || r_type == R_SH_GOT_MEDLOW16 || r_type == R_SH_GOT_MEDHI16 || r_type == R_SH_GOT_HI16) - && WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h) - && (! info->shared + && WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, + bfd_link_pic (info), + h) + && (! bfd_link_pic (info) || (! info->symbolic && h->dynindx != -1) || !h->def_regular)) /* The cases above are those in which relocation is @@ -4080,7 +4087,7 @@ sh_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, below are those in which we must defer relocation to run-time, because we can't resolve absolute addresses when creating a shared library. */ - || (info->shared + || (bfd_link_pic (info) && ((! info->symbolic && h->dynindx != -1) || !h->def_regular) && ((r_type == R_SH_DIR32 @@ -4113,7 +4120,7 @@ sh_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, STT_DATALABEL on the way to it. */ | ((h->other & STO_SH5_ISA32) != 0 && ! seen_stt_datalabel)); - else if (!info->relocatable + else if (!bfd_link_relocatable (info) && (_bfd_elf_section_offset (output_bfd, info, input_section, rel->r_offset) @@ -4134,7 +4141,7 @@ sh_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, else if (info->unresolved_syms_in_objects == RM_IGNORE && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT) ; - else if (!info->relocatable) + else if (!bfd_link_relocatable (info)) { if (! info->callbacks->undefined_symbol (info, h->root.root.string, input_bfd, @@ -4149,7 +4156,7 @@ sh_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) continue; /* Check for inter-segment relocations in FDPIC files. Most @@ -4294,7 +4301,7 @@ sh_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, case R_SH_IMM_MEDHI16_PCREL: case R_SH_IMM_HI16_PCREL: #endif - if (info->shared + if (bfd_link_pic (info) && (h == NULL || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT || h->root.type != bfd_link_hash_undefweak) @@ -4409,7 +4416,7 @@ sh_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, if (! relocate) continue; } - else if (fdpic_p && !info->shared + else if (fdpic_p && !bfd_link_pic (info) && r_type == R_SH_DIR32 && (input_section->flags & SEC_ALLOC) != 0) { @@ -4461,7 +4468,7 @@ sh_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, if (h == NULL || h->forced_local - || ! info->shared + || ! bfd_link_pic (info) || info->symbolic || h->dynindx == -1 || h->plt.offset == (bfd_vma) -1 @@ -4518,8 +4525,10 @@ sh_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, BFD_ASSERT (off != (bfd_vma) -1); dyn = htab->root.dynamic_sections_created; - if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h) - || (info->shared + if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, + bfd_link_pic (info), + h) + || (bfd_link_pic (info) && SYMBOL_REFERENCES_LOCAL (info, h)) || (ELF_ST_VISIBILITY (h->other) && h->root.type == bfd_link_hash_undefweak)) @@ -4556,7 +4565,7 @@ sh_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, /* If we initialize the GOT entry here with a valid symbol address, also add a fixup. */ - if (fdpic_p && !info->shared + if (fdpic_p && !bfd_link_pic (info) && sh_elf_hash_entry (h)->got_type == GOT_NORMAL && (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT || h->root.type != bfd_link_hash_undefweak)) @@ -4602,7 +4611,7 @@ sh_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, { bfd_put_32 (output_bfd, relocation, sgot->contents + off); - if (info->shared) + if (bfd_link_pic (info)) { Elf_Internal_Rela outrel; bfd_byte *loc; @@ -4889,7 +4898,7 @@ sh_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, relocation = htab->sfuncdesc->output_offset + (offset & ~1); } - if (!info->shared && SYMBOL_FUNCDESC_LOCAL (info, h)) + if (!bfd_link_pic (info) && SYMBOL_FUNCDESC_LOCAL (info, h)) { bfd_vma offset; @@ -5092,7 +5101,7 @@ sh_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, else if (h != NULL) { got_type = sh_elf_hash_entry (h)->got_type; - if (! info->shared + if (! bfd_link_pic (info) && (h->dynindx == -1 || h->def_regular)) r_type = R_SH_TLS_LE_32; @@ -5336,7 +5345,7 @@ sh_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, case R_SH_TLS_LD_32: BFD_ASSERT (htab); check_segment[0] = check_segment[1] = -1; - if (! info->shared) + if (! bfd_link_pic (info)) { bfd_vma offset; unsigned short insn; @@ -5415,7 +5424,7 @@ sh_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, case R_SH_TLS_LDO_32: check_segment[0] = check_segment[1] = -1; - if (! info->shared) + if (! bfd_link_pic (info)) relocation = tpoff (info, relocation); else relocation -= dtpoff_base (info); @@ -5431,7 +5440,7 @@ sh_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, check_segment[0] = check_segment[1] = -1; - if (! info->shared || info->pie) + if (! bfd_link_pic (info) || bfd_link_pie (info)) { relocation = tpoff (info, relocation); addend = rel->r_addend; @@ -5474,7 +5483,7 @@ sh_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, /* We don't want duplicate errors for undefined symbols. */ if (!h || h->root.type != bfd_link_hash_undefined) { - if (info->shared) + if (bfd_link_pic (info)) { info->callbacks->einfo (_("%X%C: relocation to \"%s\" references a different segment\n"), @@ -5691,7 +5700,7 @@ sh_elf_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info, union gotref *local_funcdesc; const Elf_Internal_Rela *rel, *relend; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; elf_section_data (sec)->local_dynrel = NULL; @@ -5803,7 +5812,7 @@ sh_elf_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info, case R_SH_FUNCDESC: if (h != NULL) sh_elf_hash_entry (h)->abs_funcdesc_refcount -= 1; - else if (sh_elf_hash_table (info)->fdpic_p && !info->shared) + else if (sh_elf_hash_table (info)->fdpic_p && !bfd_link_pic (info)) sh_elf_hash_table (info)->srofixup->size -= 4; /* Fall through. */ @@ -5817,13 +5826,13 @@ sh_elf_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info, break; case R_SH_DIR32: - if (sh_elf_hash_table (info)->fdpic_p && !info->shared + if (sh_elf_hash_table (info)->fdpic_p && !bfd_link_pic (info) && (sec->flags & SEC_ALLOC) != 0) sh_elf_hash_table (info)->srofixup->size -= 4; /* Fall thru */ case R_SH_REL32: - if (info->shared) + if (bfd_link_pic (info)) break; /* Fall thru */ @@ -5972,7 +5981,7 @@ static int sh_elf_optimized_tls_reloc (struct bfd_link_info *info, int r_type, int is_local) { - if (info->shared) + if (bfd_link_pic (info)) return r_type; switch (r_type) @@ -6008,7 +6017,7 @@ sh_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec, sreloc = NULL; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; BFD_ASSERT (is_sh_elf (abfd)); @@ -6052,7 +6061,7 @@ sh_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec, } r_type = sh_elf_optimized_tls_reloc (info, r_type, h == NULL); - if (! info->shared + if (! bfd_link_pic (info) && r_type == R_SH_TLS_IE_32 && h != NULL && h->root.type != bfd_link_hash_undefined @@ -6160,7 +6169,7 @@ sh_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec, break; case R_SH_TLS_IE_32: - if (info->shared) + if (bfd_link_pic (info)) info->flags |= DF_STATIC_TLS; /* FALLTHROUGH */ @@ -6329,7 +6338,7 @@ sh_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec, if (r_type == R_SH_FUNCDESC) { - if (!info->shared) + if (!bfd_link_pic (info)) htab->srofixup->size += 4; else htab->srelgot->size += sizeof (Elf32_External_Rela); @@ -6372,7 +6381,7 @@ sh_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec, if (h == NULL || h->forced_local - || ! info->shared + || ! bfd_link_pic (info) || info->symbolic || h->dynindx == -1) goto force_got; @@ -6417,7 +6426,7 @@ sh_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec, case R_SH_IMM_MEDHI16_PCREL: case R_SH_IMM_HI16_PCREL: #endif - if (h != NULL && ! info->shared) + if (h != NULL && ! bfd_link_pic (info)) { h->non_got_ref = 1; h->plt.refcount += 1; @@ -6442,14 +6451,14 @@ sh_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec, may need to keep relocations for symbols satisfied by a dynamic library if we manage to avoid copy relocs for the symbol. */ - if ((info->shared + if ((bfd_link_pic (info) && (sec->flags & SEC_ALLOC) != 0 && (r_type != R_SH_REL32 || (h != NULL && (! info->symbolic || h->root.type == bfd_link_hash_defweak || !h->def_regular)))) - || (! info->shared + || (! bfd_link_pic (info) && (sec->flags & SEC_ALLOC) != 0 && h != NULL && (h->root.type == bfd_link_hash_defweak @@ -6526,14 +6535,14 @@ sh_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec, /* Allocate the fixup regardless of whether we need a relocation. If we end up generating the relocation, we'll unallocate the fixup. */ - if (htab->fdpic_p && !info->shared + if (htab->fdpic_p && !bfd_link_pic (info) && r_type == R_SH_DIR32 && (sec->flags & SEC_ALLOC) != 0) htab->srofixup->size += 4; break; case R_SH_TLS_LE_32: - if (info->shared && !info->pie) + if (bfd_link_pic (info) && !bfd_link_pie (info)) { (*_bfd_error_handler) (_("%B: TLS local exec code cannot be linked into shared objects"), @@ -6745,7 +6754,7 @@ sh_elf_finish_dynamic_symbol (bfd *output_bfd, struct bfd_link_info *info, got_offset = (plt_index + 3) * 4; #ifdef GOT_BIAS - if (info->shared) + if (bfd_link_pic (info)) got_offset -= GOT_BIAS; #endif @@ -6754,7 +6763,7 @@ sh_elf_finish_dynamic_symbol (bfd *output_bfd, struct bfd_link_info *info, plt_info->symbol_entry, plt_info->symbol_entry_size); - if (info->shared || htab->fdpic_p) + if (bfd_link_pic (info) || htab->fdpic_p) { if (plt_info->symbol_fields.got20) { @@ -6823,7 +6832,7 @@ sh_elf_finish_dynamic_symbol (bfd *output_bfd, struct bfd_link_info *info, /* Make got_offset relative to the start of .got.plt. */ #ifdef GOT_BIAS - if (info->shared) + if (bfd_link_pic (info)) got_offset += GOT_BIAS; #endif if (htab->fdpic_p) @@ -6864,7 +6873,7 @@ sh_elf_finish_dynamic_symbol (bfd *output_bfd, struct bfd_link_info *info, loc = srelplt->contents + plt_index * sizeof (Elf32_External_Rela); bfd_elf32_swap_reloca_out (output_bfd, &rel, loc); - if (htab->vxworks_p && !info->shared) + if (htab->vxworks_p && !bfd_link_pic (info)) { /* Create the .rela.plt.unloaded relocations for this PLT entry. Begin by pointing LOC to the first such relocation. */ @@ -6926,7 +6935,7 @@ sh_elf_finish_dynamic_symbol (bfd *output_bfd, struct bfd_link_info *info, of a version file, we just want to emit a RELATIVE reloc. The entry in the global offset table will already have been initialized in the relocate_section function. */ - if (info->shared + if (bfd_link_pic (info) && SYMBOL_REFERENCES_LOCAL (info, h)) { if (htab->fdpic_p) @@ -6987,7 +6996,7 @@ sh_elf_finish_dynamic_symbol (bfd *output_bfd, struct bfd_link_info *info, of a version file, we just want to emit a RELATIVE reloc. The entry in the global offset table will already have been initialized in the relocate_section function. */ - if (info->shared + if (bfd_link_pic (info) && SYMBOL_REFERENCES_LOCAL (info, h)) { if (htab->fdpic_p) diff --git a/bfd/elf32-sh64.c b/bfd/elf32-sh64.c index 0e696b308d4..df6c6533e48 100644 --- a/bfd/elf32-sh64.c +++ b/bfd/elf32-sh64.c @@ -397,7 +397,7 @@ sh64_elf_add_symbol_hook (bfd *abfd, struct bfd_link_info *info, right, and tweak the name when it's output. Otherwise, we make an indirect symbol of it. */ flagword flags - = info->relocatable || info->emitrelocations + = bfd_link_relocatable (info) || info->emitrelocations ? BSF_GLOBAL : BSF_GLOBAL | BSF_INDIRECT; char *dl_name @@ -441,9 +441,9 @@ sh64_elf_add_symbol_hook (bfd *abfd, struct bfd_link_info *info, free (dl_name); if (h->type != STT_DATALABEL - || ((info->relocatable || info->emitrelocations) + || ((bfd_link_relocatable (info) || info->emitrelocations) && h->root.type != bfd_link_hash_undefined) - || (! info->relocatable && !info->emitrelocations + || (! bfd_link_relocatable (info) && !info->emitrelocations && h->root.type != bfd_link_hash_indirect)) { /* Make sure we don't get confused on invalid input. */ @@ -487,7 +487,7 @@ sh64_elf_link_output_symbol_hook (struct bfd_link_info *info, { char *name = (char *) cname; - if (info->relocatable || info->emitrelocations) + if (bfd_link_relocatable (info) || info->emitrelocations) { if (ELF_ST_TYPE (sym->st_info) == STT_DATALABEL) name[strlen (name) - strlen (DATALABEL_SUFFIX)] = 0; diff --git a/bfd/elf32-spu.c b/bfd/elf32-spu.c index 4472b3aaa85..b321373df86 100644 --- a/bfd/elf32-spu.c +++ b/bfd/elf32-spu.c @@ -4729,7 +4729,7 @@ spu_elf_final_link (bfd *output_bfd, struct bfd_link_info *info) return bfd_elf_final_link (output_bfd, info); } -/* Called when not normally emitting relocs, ie. !info->relocatable +/* Called when not normally emitting relocs, ie. !bfd_link_relocatable (info) and !info->emitrelocations. Returns a count of special relocs that need to be emitted. */ @@ -4902,7 +4902,7 @@ spu_elf_relocate_section (bfd *output_bfd, else if (info->unresolved_syms_in_objects == RM_IGNORE && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT) ; - else if (!info->relocatable + else if (!bfd_link_relocatable (info) && !(r_type == R_SPU_PPU32 || r_type == R_SPU_PPU64)) { bfd_boolean err; @@ -4922,7 +4922,7 @@ spu_elf_relocate_section (bfd *output_bfd, RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) continue; /* Change "a rt,ra,rb" to "ai rt,ra,0". */ @@ -4990,7 +4990,7 @@ spu_elf_relocate_section (bfd *output_bfd, } } - if (htab->params->emit_fixups && !info->relocatable + if (htab->params->emit_fixups && !bfd_link_relocatable (info) && (input_section->flags & SEC_ALLOC) != 0 && r_type == R_SPU_ADDR32) { @@ -5135,7 +5135,7 @@ spu_elf_output_symbol_hook (struct bfd_link_info *info, { struct spu_link_hash_table *htab = spu_hash_table (info); - if (!info->relocatable + if (!bfd_link_relocatable (info) && htab->stub_sec != NULL && h != NULL && (h->root.type == bfd_link_hash_defined diff --git a/bfd/elf32-tic6x.c b/bfd/elf32-tic6x.c index 7fc385b7921..b6640eabc88 100644 --- a/bfd/elf32-tic6x.c +++ b/bfd/elf32-tic6x.c @@ -1591,7 +1591,7 @@ elf32_tic6x_link_hash_table_create (bfd *abfd) static bfd_boolean elf32_tic6x_final_link (bfd *abfd, struct bfd_link_info *info) { - if (info->shared) + if (bfd_link_pic (info)) { obj_attribute *out_attr; out_attr = elf_known_obj_attributes_proc (abfd); @@ -1661,11 +1661,11 @@ elf32_tic6x_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info) return FALSE; htab->sdynbss = bfd_get_linker_section (dynobj, ".dynbss"); - if (!info->shared) + if (!bfd_link_pic (info)) htab->srelbss = bfd_get_linker_section (dynobj, ".rela.bss"); if (!htab->sdynbss - || (!info->shared && !htab->srelbss)) + || (!bfd_link_pic (info) && !htab->srelbss)) abort (); return TRUE; @@ -1761,7 +1761,7 @@ elf32_tic6x_finish_dynamic_symbol (bfd * output_bfd, it up. */ if ((h->dynindx == -1 - && !((h->forced_local || info->executable) + && !((h->forced_local || bfd_link_executable (info)) && h->def_regular && h->type == STT_GNU_IFUNC)) || plt == NULL @@ -1848,7 +1848,7 @@ elf32_tic6x_finish_dynamic_symbol (bfd * output_bfd, the symbol was forced to be local because of a version file. The entry in the global offset table will already have been initialized in the relocate_section function. */ - if (info->shared + if (bfd_link_pic (info) && (SYMBOLIC_BIND (info, h) || h->dynindx == -1 || h->forced_local) && h->def_regular) { @@ -1993,7 +1993,7 @@ elf32_tic6x_gc_sweep_hook (bfd *abfd, bfd_signed_vma *local_got_refcounts; const Elf_Internal_Rela *rel, *relend; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; htab = elf32_tic6x_hash_table (info); @@ -2128,7 +2128,7 @@ elf32_tic6x_adjust_dynamic_symbol (struct bfd_link_info *info, only references to the symbol are via the global offset table. For such cases we need not do anything here; the relocations will be handled correctly by relocate_section. */ - if (info->shared) + if (bfd_link_pic (info)) return TRUE; /* If there are no references to this symbol that do not use the @@ -2321,7 +2321,7 @@ elf32_tic6x_relocate_section (bfd *output_bfd, RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) { if (is_rel && sym != NULL @@ -2403,7 +2403,7 @@ elf32_tic6x_relocate_section (bfd *output_bfd, case R_C6000_DSBT_INDEX: relocation = elf32_tic6x_hash_table (info)->params.dsbt_index; - if (!info->shared || relocation != 0) + if (!bfd_link_pic (info) || relocation != 0) break; /* fall through */ @@ -2416,7 +2416,7 @@ elf32_tic6x_relocate_section (bfd *output_bfd, /* When generating a shared object or relocatable executable, these relocations are copied into the output file to be resolved at run time. */ - if ((info->shared || elf32_tic6x_using_dsbt (output_bfd)) + if ((bfd_link_pic (info) || elf32_tic6x_using_dsbt (output_bfd)) && (input_section->flags & SEC_ALLOC) && (h == NULL || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT @@ -2448,7 +2448,7 @@ elf32_tic6x_relocate_section (bfd *output_bfd, memset (&outrel, 0, sizeof outrel); else if (h != NULL && h->dynindx != -1 - && (!info->shared + && (!bfd_link_pic (info) || !SYMBOLIC_BIND (info, h) || !h->def_regular)) { @@ -2544,8 +2544,10 @@ elf32_tic6x_relocate_section (bfd *output_bfd, off = h->got.offset; dyn = htab->elf.dynamic_sections_created; - if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h) - || (info->shared + if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, + bfd_link_pic (info), + h) + || (bfd_link_pic (info) && SYMBOL_REFERENCES_LOCAL (info, h)) || (ELF_ST_VISIBILITY (h->other) && h->root.type == bfd_link_hash_undefweak)) @@ -2570,7 +2572,8 @@ elf32_tic6x_relocate_section (bfd *output_bfd, htab->elf.sgot->contents + off); h->got.offset |= 1; - if (!WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, + if (!WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, + bfd_link_pic (info), h) && !(ELF_ST_VISIBILITY (h->other) && h->root.type == bfd_link_hash_undefweak)) @@ -2598,7 +2601,7 @@ elf32_tic6x_relocate_section (bfd *output_bfd, bfd_put_32 (output_bfd, relocation, htab->elf.sgot->contents + off); - if (info->shared || elf32_tic6x_using_dsbt (output_bfd)) + if (bfd_link_pic (info) || elf32_tic6x_using_dsbt (output_bfd)) elf32_tic6x_make_got_dynreloc (output_bfd, htab, sec, off); local_got_offsets[r_symndx] |= 1; @@ -2778,7 +2781,7 @@ elf32_tic6x_check_relocs (bfd *abfd, struct bfd_link_info *info, const Elf_Internal_Rela *rel_end; asection *sreloc; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; htab = elf32_tic6x_hash_table (info); @@ -2787,7 +2790,7 @@ elf32_tic6x_check_relocs (bfd *abfd, struct bfd_link_info *info, /* Create dynamic sections for relocatable executables so that we can copy relocations. */ - if ((info->shared || elf32_tic6x_using_dsbt (abfd)) + if ((bfd_link_pic (info) || elf32_tic6x_using_dsbt (abfd)) && ! htab->elf.dynamic_sections_created) { if (! _bfd_elf_link_create_dynamic_sections (abfd, info)) @@ -2902,7 +2905,7 @@ elf32_tic6x_check_relocs (bfd *abfd, struct bfd_link_info *info, store the number of R_C6000_DSBT_INDEX relocs in the pc_count field, and potentially discard the extra space in elf32_tic6x_allocate_dynrelocs. */ - if (!info->shared) + if (!bfd_link_pic (info)) break; /* fall through */ @@ -2933,7 +2936,7 @@ elf32_tic6x_check_relocs (bfd *abfd, struct bfd_link_info *info, may need to keep relocations for symbols satisfied by a dynamic library if we manage to avoid copy relocs for the symbol. */ - if ((info->shared || elf32_tic6x_using_dsbt (abfd)) + if ((bfd_link_pic (info) || elf32_tic6x_using_dsbt (abfd)) && (sec->flags & SEC_ALLOC) != 0) { struct elf_dyn_relocs *p; @@ -3006,7 +3009,7 @@ elf32_tic6x_check_relocs (bfd *abfd, struct bfd_link_info *info, case R_C6000_SBR_H16_B: case R_C6000_SBR_H16_H: case R_C6000_SBR_H16_W: - if (h != NULL && info->executable) + if (h != NULL && bfd_link_executable (info)) { /* For B14-relative addresses, we might need a copy reloc. */ @@ -3130,7 +3133,7 @@ elf32_tic6x_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) return FALSE; } - if (info->shared + if (bfd_link_pic (info) || WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, 0, h)) { asection *s = htab->elf.splt; @@ -3147,7 +3150,7 @@ elf32_tic6x_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) location in the .plt. This is required to make function pointers compare as equal between the normal executable and the shared library. */ - if (! info->shared && !h->def_regular) + if (! bfd_link_pic (info) && !h->def_regular) { h->root.u.def.section = s; h->root.u.def.value = h->plt.offset; @@ -3202,7 +3205,7 @@ elf32_tic6x_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) /* Discard relocs on undefined weak syms with non-default visibility. */ - if (info->shared || elf32_tic6x_using_dsbt (htab->obfd)) + if (bfd_link_pic (info) || elf32_tic6x_using_dsbt (htab->obfd)) { /* We use the pc_count field to hold the number of R_C6000_DSBT_INDEX relocs. */ @@ -3297,7 +3300,7 @@ elf32_tic6x_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info) if (htab->elf.dynamic_sections_created) { /* Set the contents of the .interp section to the interpreter. */ - if (info->executable) + if (bfd_link_executable (info)) { s = bfd_get_linker_section (dynobj, ".interp"); if (s == NULL) @@ -3360,7 +3363,7 @@ elf32_tic6x_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info) *local_got = s->size; s->size += 4; - if (info->shared || elf32_tic6x_using_dsbt (output_bfd)) + if (bfd_link_pic (info) || elf32_tic6x_using_dsbt (output_bfd)) { srel->size += sizeof (Elf32_External_Rela); } @@ -3459,7 +3462,7 @@ elf32_tic6x_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info) #define add_dynamic_entry(TAG, VAL) \ _bfd_elf_add_dynamic_entry (info, TAG, VAL) - if (info->executable) + if (bfd_link_executable (info)) { if (!add_dynamic_entry (DT_DEBUG, 0)) return FALSE; @@ -3511,7 +3514,7 @@ elf32_tic6x_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info) static bfd_boolean elf32_tic6x_always_size_sections (bfd *output_bfd, struct bfd_link_info *info) { - if (elf32_tic6x_using_dsbt (output_bfd) && !info->relocatable + if (elf32_tic6x_using_dsbt (output_bfd) && !bfd_link_relocatable (info) && !bfd_elf_stack_segment_size (output_bfd, info, "__stacksize", DEFAULT_STACK_SIZE)) return FALSE; diff --git a/bfd/elf32-tilepro.c b/bfd/elf32-tilepro.c index f5739781abb..cb3f896281d 100644 --- a/bfd/elf32-tilepro.c +++ b/bfd/elf32-tilepro.c @@ -1308,11 +1308,11 @@ tilepro_elf_create_dynamic_sections (bfd *dynobj, return FALSE; htab->sdynbss = bfd_get_linker_section (dynobj, ".dynbss"); - if (!info->shared) + if (!bfd_link_pic (info)) htab->srelbss = bfd_get_linker_section (dynobj, ".rela.bss"); if (!htab->elf.splt || !htab->elf.srelplt || !htab->sdynbss - || (!info->shared && !htab->srelbss)) + || (!bfd_link_pic (info) && !htab->srelbss)) abort (); return TRUE; @@ -1454,7 +1454,7 @@ static int tilepro_elf_tls_transition (struct bfd_link_info *info, int r_type, int is_local) { - if (info->shared) + if (bfd_link_pic (info)) return r_type; if (is_local) @@ -1479,7 +1479,7 @@ tilepro_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sreloc; int num_relocs; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; htab = tilepro_elf_hash_table (info); @@ -1538,7 +1538,7 @@ tilepro_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, case R_TILEPRO_IMM16_X1_TLS_LE_HI: case R_TILEPRO_IMM16_X0_TLS_LE_HA: case R_TILEPRO_IMM16_X1_TLS_LE_HA: - if (info->shared) + if (bfd_link_pic (info)) goto r_tilepro_plt32; break; @@ -1550,7 +1550,7 @@ tilepro_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, case R_TILEPRO_IMM16_X1_TLS_GD_HI: case R_TILEPRO_IMM16_X0_TLS_GD_HA: case R_TILEPRO_IMM16_X1_TLS_GD_HA: - BFD_ASSERT (info->shared); + BFD_ASSERT (bfd_link_pic (info)); tls_type = GOT_TLS_GD; goto have_got_reference; @@ -1563,7 +1563,7 @@ tilepro_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, case R_TILEPRO_IMM16_X0_TLS_IE_HA: case R_TILEPRO_IMM16_X1_TLS_IE_HA: tls_type = GOT_TLS_IE; - if (info->shared) + if (bfd_link_pic (info)) info->flags |= DF_STATIC_TLS; goto have_got_reference; @@ -1648,7 +1648,7 @@ tilepro_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, break; case R_TILEPRO_TLS_GD_CALL: - if (info->shared) + if (bfd_link_pic (info)) { /* These are basically R_TILEPRO_JOFFLONG_X1_PLT relocs against __tls_get_addr. */ @@ -1737,7 +1737,7 @@ tilepro_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, h->non_got_ref = 1; r_tilepro_plt32: - if (h != NULL && !info->shared) + if (h != NULL && !bfd_link_pic (info)) { /* We may need a .plt entry if the function this reloc refers to is in a shared lib. */ @@ -1765,14 +1765,14 @@ tilepro_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, may need to keep relocations for symbols satisfied by a dynamic library if we manage to avoid copy relocs for the symbol. */ - if ((info->shared + if ((bfd_link_pic (info) && (sec->flags & SEC_ALLOC) != 0 && (! tilepro_elf_howto_table[r_type].pc_relative || (h != NULL && (! info->symbolic || h->root.type == bfd_link_hash_defweak || !h->def_regular)))) - || (!info->shared + || (!bfd_link_pic (info) && (sec->flags & SEC_ALLOC) != 0 && h != NULL && (h->root.type == bfd_link_hash_defweak @@ -1880,8 +1880,8 @@ tilepro_elf_gc_mark_hook (asection *sec, } /* FIXME: The test here, in check_relocs and in relocate_section - dealing with TLS optimization, ought to be !info->executable. */ - if (info->shared) + dealing with TLS optimization, ought to be !bfd_link_executable (info). */ + if (bfd_link_pic (info)) { switch (ELF32_R_TYPE (rel->r_info)) { @@ -1915,7 +1915,7 @@ tilepro_elf_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info, bfd_signed_vma *local_got_refcounts; const Elf_Internal_Rela *rel, *relend; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; BFD_ASSERT (is_tilepro_elf (abfd) || sec->reloc_count == 0); @@ -2048,7 +2048,7 @@ tilepro_elf_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info, case R_TILEPRO_SHAMT_X1: case R_TILEPRO_SHAMT_Y0: case R_TILEPRO_SHAMT_Y1: - if (info->shared) + if (bfd_link_pic (info)) break; /* Fall through. */ @@ -2138,7 +2138,7 @@ tilepro_elf_adjust_dynamic_symbol (struct bfd_link_info *info, only references to the symbol are via the global offset table. For such cases we need not do anything here; the relocations will be handled correctly by relocate_section. */ - if (info->shared) + if (bfd_link_pic (info)) return TRUE; /* If there are no references to this symbol that do not use the @@ -2222,7 +2222,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) return FALSE; } - if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, info->shared, h)) + if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, bfd_link_pic (info), h)) { asection *s = htab->elf.splt; @@ -2239,7 +2239,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) location in the .plt. This is required to make function pointers compare as equal between the normal executable and the shared library. */ - if (! info->shared + if (! bfd_link_pic (info) && !h->def_regular) { h->root.u.def.section = s; @@ -2270,7 +2270,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) /* If a TLS_IE symbol is now local to the binary, make it a TLS_LE requiring no TLS entry. */ if (h->got.refcount > 0 - && !info->shared + && !bfd_link_pic (info) && h->dynindx == -1 && tilepro_elf_hash_entry(h)->tls_type == GOT_TLS_IE) h->got.offset = (bfd_vma) -1; @@ -2301,7 +2301,9 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) global. */ if (tls_type == GOT_TLS_GD || tls_type == GOT_TLS_IE) htab->elf.srelgot->size += 2 * TILEPRO_ELF_RELA_BYTES; - else if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h)) + else if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, + bfd_link_pic (info), + h)) htab->elf.srelgot->size += TILEPRO_ELF_RELA_BYTES; } else @@ -2317,7 +2319,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) space for pc-relative relocs that have become local due to symbol visibility changes. */ - if (info->shared) + if (bfd_link_pic (info)) { if (SYMBOL_CALLS_LOCAL (info, h)) { @@ -2461,7 +2463,7 @@ tilepro_elf_size_dynamic_sections (bfd *output_bfd, if (elf_hash_table (info)->dynamic_sections_created) { /* Set the contents of the .interp section to the interpreter. */ - if (info->executable) + if (bfd_link_executable (info)) { s = bfd_get_linker_section (dynobj, ".interp"); BFD_ASSERT (s != NULL); @@ -2526,7 +2528,7 @@ tilepro_elf_size_dynamic_sections (bfd *output_bfd, s->size += TILEPRO_BYTES_PER_WORD; if (*local_tls_type == GOT_TLS_GD) s->size += TILEPRO_BYTES_PER_WORD; - if (info->shared + if (bfd_link_pic (info) || *local_tls_type == GOT_TLS_GD || *local_tls_type == GOT_TLS_IE) srel->size += TILEPRO_ELF_RELA_BYTES; @@ -2638,7 +2640,7 @@ tilepro_elf_size_dynamic_sections (bfd *output_bfd, #define add_dynamic_entry(TAG, VAL) \ _bfd_elf_add_dynamic_entry (info, TAG, VAL) - if (info->executable) + if (bfd_link_executable (info)) { if (!add_dynamic_entry (DT_DEBUG, 0)) return FALSE; @@ -2915,7 +2917,7 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) continue; if (h != NULL) @@ -2946,8 +2948,8 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, else if (h != NULL) tls_type = tilepro_elf_hash_entry(h)->tls_type; - is_tls_iele = (! info->shared || tls_type == GOT_TLS_IE); - is_tls_le = is_tls_iele && (!info->shared + is_tls_iele = (! bfd_link_pic (info) || tls_type == GOT_TLS_IE); + is_tls_le = is_tls_iele && (!bfd_link_pic (info) && (h == NULL || h->dynindx == -1)); if (r_type == R_TILEPRO_TLS_GD_CALL) @@ -3024,7 +3026,7 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, } break; case R_TILEPRO_TLS_IE_LOAD: - if (!info->shared && (h == NULL || h->dynindx == -1)) + if (!bfd_link_pic (info) && (h == NULL || h->dynindx == -1)) /* IE -> LE */ tilepro_replace_insn (contents + rel->r_offset, insn_mask_X1_no_dest_no_srca, @@ -3063,8 +3065,10 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, BFD_ASSERT (off != (bfd_vma) -1); dyn = elf_hash_table (info)->dynamic_sections_created; - if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h) - || (info->shared + if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, + bfd_link_pic (info), + h) + || (bfd_link_pic (info) && SYMBOL_REFERENCES_LOCAL (info, h))) { /* This is actually a static link, or it is a @@ -3105,7 +3109,7 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, off &= ~1; else { - if (info->shared) + if (bfd_link_pic (info)) { asection *s; Elf_Internal_Rela outrel; @@ -3204,13 +3208,13 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, if ((input_section->flags & SEC_ALLOC) == 0) break; - if ((info->shared + if ((bfd_link_pic (info) && (h == NULL || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT || h->root.type != bfd_link_hash_undefweak) && (! howto->pc_relative || !SYMBOL_CALLS_LOCAL (info, h))) - || (!info->shared + || (!bfd_link_pic (info) && h != NULL && h->dynindx != -1 && !h->non_got_ref @@ -3262,7 +3266,7 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, else if (h != NULL && h->dynindx != -1 && (! is_plt - || !info->shared + || !bfd_link_pic (info) || !SYMBOLIC_BIND (info, h) || !h->def_regular)) { @@ -3345,7 +3349,7 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, case R_TILEPRO_IMM16_X1_TLS_LE_HI: case R_TILEPRO_IMM16_X0_TLS_LE_HA: case R_TILEPRO_IMM16_X1_TLS_LE_HA: - if (info->shared) + if (bfd_link_pic (info)) { Elf_Internal_Rela outrel; bfd_boolean skip; @@ -3400,7 +3404,7 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, else if (h != NULL) { tls_type = tilepro_elf_hash_entry(h)->tls_type; - if (!info->shared && h->dynindx == -1 && tls_type == GOT_TLS_IE) + if (!bfd_link_pic (info) && h->dynindx == -1 && tls_type == GOT_TLS_IE) r_type = tilepro_tls_translate_to_le (r_type); } if (tls_type == GOT_TLS_IE) @@ -3450,8 +3454,10 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, bfd_boolean dyn; dyn = htab->elf.dynamic_sections_created; - if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h) - && (!info->shared + if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, + bfd_link_pic (info), + h) + && (!bfd_link_pic (info) || !SYMBOL_REFERENCES_LOCAL (info, h))) { indx = h->dynindx; @@ -3460,7 +3466,7 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, /* The GOT entries have not been initialized yet. Do it now, and emit any relocations. */ - if ((info->shared || indx != 0) + if ((bfd_link_pic (info) || indx != 0) && (h == NULL || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT || h->root.type != bfd_link_hash_undefweak)) @@ -3783,7 +3789,7 @@ tilepro_elf_finish_dynamic_symbol (bfd *output_bfd, the symbol was forced to be local because of a version file. The entry in the global offset table will already have been initialized in the relocate_section function. */ - if (info->shared + if (bfd_link_pic (info) && (info->symbolic || h->dynindx == -1) && h->def_regular) { diff --git a/bfd/elf32-v850.c b/bfd/elf32-v850.c index 5edba4cde27..859afd2df6e 100644 --- a/bfd/elf32-v850.c +++ b/bfd/elf32-v850.c @@ -57,7 +57,7 @@ v850_elf_check_relocs (bfd *abfd, int other = 0; const char *common = NULL; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; #ifdef DEBUG @@ -2243,7 +2243,7 @@ v850_elf_relocate_section (bfd *output_bfd, RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) continue; /* FIXME: We should use the addend, but the COFF relocations don't. */ @@ -3433,7 +3433,7 @@ v850_elf_relax_section (bfd *abfd, *again = FALSE; - if (link_info->relocatable + if (bfd_link_relocatable (link_info) || (sec->flags & SEC_RELOC) == 0 || sec->reloc_count == 0) return TRUE; diff --git a/bfd/elf32-vax.c b/bfd/elf32-vax.c index 85fe5f49534..6089e8c8f33 100644 --- a/bfd/elf32-vax.c +++ b/bfd/elf32-vax.c @@ -564,7 +564,7 @@ elf_vax_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec, asection *srelgot; asection *sreloc; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; dynobj = elf_hash_table (info)->dynobj; @@ -626,7 +626,7 @@ elf_vax_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec, } if (srelgot == NULL - && (h != NULL || info->shared)) + && (h != NULL || bfd_link_pic (info))) { srelgot = bfd_get_linker_section (dynobj, ".rela.got"); if (srelgot == NULL) @@ -703,7 +703,7 @@ elf_vax_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec, will be set later (it is never cleared). We account for that possibility below by storing information in the pcrel_relocs_copied field of the hash table entry. */ - if (!(info->shared + if (!(bfd_link_pic (info) && (sec->flags & SEC_ALLOC) != 0 && h != NULL && (!info->symbolic @@ -745,7 +745,7 @@ elf_vax_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec, /* If we are creating a shared library, we need to copy the reloc into the shared library. */ - if (info->shared + if (bfd_link_pic (info) && (sec->flags & SEC_ALLOC) != 0) { /* When creating a shared object, we must copy these @@ -860,7 +860,7 @@ elf_vax_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info, asection *sec, const Elf_Internal_Rela *rel, *relend; bfd *dynobj; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; dynobj = elf_hash_table (info)->dynobj; @@ -970,7 +970,7 @@ elf_vax_adjust_dynamic_symbol (struct bfd_link_info *info, location in the .plt. This is required to make function pointers compare as equal between the normal executable and the shared library. */ - if (!info->shared + if (!bfd_link_pic (info) && !h->def_regular) { h->root.u.def.section = s; @@ -1021,7 +1021,7 @@ elf_vax_adjust_dynamic_symbol (struct bfd_link_info *info, only references to the symbol are via the global offset table. For such cases we need not do anything here; the relocations will be handled correctly by relocate_section. */ - if (info->shared) + if (bfd_link_pic (info)) return TRUE; /* We must allocate the symbol in our .dynbss section, which will @@ -1124,7 +1124,7 @@ elf_vax_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info) if (elf_hash_table (info)->dynamic_sections_created) { /* Set the contents of the .interp section to the interpreter. */ - if (info->executable) + if (bfd_link_executable (info)) { s = bfd_get_linker_section (dynobj, ".interp"); BFD_ASSERT (s != NULL); @@ -1137,7 +1137,7 @@ elf_vax_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info) relative relocs against symbols defined in a regular object. We allocated space for them in the check_relocs routine, but we will not fill them in in the relocate_section routine. */ - if (info->shared && info->symbolic) + if (bfd_link_pic (info) && info->symbolic) elf_vax_link_hash_traverse (elf_hash_table (info), elf_vax_discard_copies, NULL); @@ -1244,7 +1244,7 @@ elf_vax_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info) #define add_dynamic_entry(TAG, VAL) \ _bfd_elf_add_dynamic_entry (info, TAG, VAL) - if (!info->shared) + if (!bfd_link_pic (info)) { if (!add_dynamic_entry (DT_DEBUG, 0)) return FALSE; @@ -1431,10 +1431,10 @@ elf_vax_relocate_section (bfd *output_bfd, && h->got.offset != (bfd_vma) -1 && !h->forced_local && elf_hash_table (info)->dynamic_sections_created - && (! info->shared + && (! bfd_link_pic (info) || (! info->symbolic && h->dynindx != -1) || !h->def_regular)) - || (info->shared + || (bfd_link_pic (info) && ((! info->symbolic && h->dynindx != -1) || !h->def_regular) && ((input_section->flags & SEC_ALLOC) != 0 @@ -1458,7 +1458,7 @@ elf_vax_relocate_section (bfd *output_bfd, RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) continue; switch (r_type) @@ -1502,7 +1502,7 @@ elf_vax_relocate_section (bfd *output_bfd, reloc refers to is in a shared lib, then we made a PLT entry for this symbol and need to handle the reloc like a PLT reloc. */ - if (info->shared) + if (bfd_link_pic (info)) goto r_vax_pc32_shared; /* Fall through. */ case R_VAX_PLT32: @@ -1565,7 +1565,7 @@ elf_vax_relocate_section (bfd *output_bfd, case R_VAX_8: case R_VAX_16: case R_VAX_32: - if (info->shared + if (bfd_link_pic (info) && r_symndx != STN_UNDEF && (input_section->flags & SEC_ALLOC) != 0 && ((r_type != R_VAX_PC8 diff --git a/bfd/elf32-visium.c b/bfd/elf32-visium.c index d6256f63014..637d72bc2f2 100644 --- a/bfd/elf32-visium.c +++ b/bfd/elf32-visium.c @@ -524,7 +524,7 @@ visium_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, const Elf_Internal_Rela *rel; const Elf_Internal_Rela *rel_end; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; symtab_hdr = &elf_tdata (abfd)->symtab_hdr; @@ -649,7 +649,7 @@ visium_elf_relocate_section (bfd *output_bfd, continue; } - if (info->relocatable) + if (bfd_link_relocatable (info)) continue; switch (r_type) diff --git a/bfd/elf32-xc16x.c b/bfd/elf32-xc16x.c index 33fafe3606a..b00abba6364 100644 --- a/bfd/elf32-xc16x.c +++ b/bfd/elf32-xc16x.c @@ -392,7 +392,7 @@ elf32_xc16x_relocate_section (bfd *output_bfd, rel, 1, relend, howto, 0, contents); } - if (info->relocatable) + if (bfd_link_relocatable (info)) continue; elf32_xc16x_final_link_relocate (r_type, input_bfd, output_bfd, diff --git a/bfd/elf32-xstormy16.c b/bfd/elf32-xstormy16.c index 6bf277cb120..39b9d8bd495 100644 --- a/bfd/elf32-xstormy16.c +++ b/bfd/elf32-xstormy16.c @@ -411,7 +411,7 @@ xstormy16_elf_check_relocs (bfd *abfd, asection *splt; bfd *dynobj; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; symtab_hdr = &elf_tdata(abfd)->symtab_hdr; @@ -589,7 +589,7 @@ xstormy16_elf_relax_section (bfd *dynobj, /* Assume nothing changes. */ *again = FALSE; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; /* We only relax the .plt section at the moment. */ @@ -712,7 +712,7 @@ xstormy16_elf_always_size_sections (bfd *output_bfd ATTRIBUTE_UNUSED, bfd *dynobj; asection *splt; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; dynobj = elf_hash_table (info)->dynobj; @@ -829,7 +829,7 @@ xstormy16_elf_relocate_section (bfd * output_bfd ATTRIBUTE_UNU RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) continue; if (h != NULL) diff --git a/bfd/elf32-xtensa.c b/bfd/elf32-xtensa.c index 25236707dae..73538cde651 100644 --- a/bfd/elf32-xtensa.c +++ b/bfd/elf32-xtensa.c @@ -971,7 +971,7 @@ elf_xtensa_check_relocs (bfd *abfd, const Elf_Internal_Rela *rel; const Elf_Internal_Rela *rel_end; - if (info->relocatable || (sec->flags & SEC_ALLOC) == 0) + if (bfd_link_relocatable (info) || (sec->flags & SEC_ALLOC) == 0) return TRUE; BFD_ASSERT (is_xtensa_elf (abfd)); @@ -1021,7 +1021,7 @@ elf_xtensa_check_relocs (bfd *abfd, switch (r_type) { case R_XTENSA_TLSDESC_FN: - if (info->shared) + if (bfd_link_pic (info)) { tls_type = GOT_TLS_GD; is_got = TRUE; @@ -1032,7 +1032,7 @@ elf_xtensa_check_relocs (bfd *abfd, break; case R_XTENSA_TLSDESC_ARG: - if (info->shared) + if (bfd_link_pic (info)) { tls_type = GOT_TLS_GD; is_got = TRUE; @@ -1046,7 +1046,7 @@ elf_xtensa_check_relocs (bfd *abfd, break; case R_XTENSA_TLS_DTPOFF: - if (info->shared) + if (bfd_link_pic (info)) tls_type = GOT_TLS_GD; else tls_type = GOT_TLS_IE; @@ -1054,9 +1054,9 @@ elf_xtensa_check_relocs (bfd *abfd, case R_XTENSA_TLS_TPOFF: tls_type = GOT_TLS_IE; - if (info->shared) + if (bfd_link_pic (info)) info->flags |= DF_STATIC_TLS; - if (info->shared || h) + if (bfd_link_pic (info) || h) is_got = TRUE; break; @@ -1201,7 +1201,7 @@ static void elf_xtensa_make_sym_local (struct bfd_link_info *info, struct elf_link_hash_entry *h) { - if (info->shared) + if (bfd_link_pic (info)) { if (h->plt.refcount > 0) { @@ -1288,7 +1288,7 @@ elf_xtensa_gc_sweep_hook (bfd *abfd, if (htab == NULL) return FALSE; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; if ((sec->flags & SEC_ALLOC) == 0) @@ -1322,7 +1322,7 @@ elf_xtensa_gc_sweep_hook (bfd *abfd, switch (r_type) { case R_XTENSA_TLSDESC_FN: - if (info->shared) + if (bfd_link_pic (info)) { is_got = TRUE; is_tlsfunc = TRUE; @@ -1330,7 +1330,7 @@ elf_xtensa_gc_sweep_hook (bfd *abfd, break; case R_XTENSA_TLSDESC_ARG: - if (info->shared) + if (bfd_link_pic (info)) is_got = TRUE; else { @@ -1340,7 +1340,7 @@ elf_xtensa_gc_sweep_hook (bfd *abfd, break; case R_XTENSA_TLS_TPOFF: - if (info->shared || h) + if (bfd_link_pic (info) || h) is_got = TRUE; break; @@ -1637,7 +1637,7 @@ elf_xtensa_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, && htab->sgotloc != NULL); /* Set the contents of the .interp section to the interpreter. */ - if (info->executable) + if (bfd_link_executable (info)) { s = bfd_get_linker_section (dynobj, ".interp"); if (s == NULL) @@ -1659,7 +1659,7 @@ elf_xtensa_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, /* If we are generating a shared object, we also need space in ".rela.got" for R_XTENSA_RELATIVE relocs for literals that reference local symbols. */ - if (info->shared) + if (bfd_link_pic (info)) elf_xtensa_allocate_local_got_size (info); /* Allocate space in ".plt" to match the size of ".rela.plt". For @@ -1815,7 +1815,7 @@ elf_xtensa_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, #define add_dynamic_entry(TAG, VAL) \ _bfd_elf_add_dynamic_entry (info, TAG, VAL) - if (info->executable) + if (bfd_link_executable (info)) { if (!add_dynamic_entry (DT_DEBUG, 0)) return FALSE; @@ -2627,7 +2627,7 @@ elf_xtensa_relocate_section (bfd *output_bfd, unresolved_reloc = FALSE; warned = FALSE; - if (howto->partial_inplace && !info->relocatable) + if (howto->partial_inplace && !bfd_link_relocatable (info)) { /* Because R_XTENSA_32 was made partial_inplace to fix some problems with DWARF info in partial links, there may be @@ -2665,7 +2665,7 @@ elf_xtensa_relocate_section (bfd *output_bfd, RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) { bfd_vma dest_addr; asection * sym_sec = get_elf_r_symndx_section (input_bfd, r_symndx); @@ -2827,7 +2827,7 @@ elf_xtensa_relocate_section (bfd *output_bfd, case R_XTENSA_PLT: if (elf_hash_table (info)->dynamic_sections_created && (input_section->flags & SEC_ALLOC) != 0 - && (dynamic_symbol || info->shared)) + && (dynamic_symbol || bfd_link_pic (info))) { Elf_Internal_Rela outrel; bfd_byte *loc; @@ -2915,7 +2915,7 @@ elf_xtensa_relocate_section (bfd *output_bfd, case R_XTENSA_TLS_TPOFF: /* Switch to LE model for local symbols in an executable. */ - if (! info->shared && ! dynamic_symbol) + if (! bfd_link_pic (info) && ! dynamic_symbol) { relocation = tpoff (info, relocation); break; @@ -2927,12 +2927,12 @@ elf_xtensa_relocate_section (bfd *output_bfd, { if (r_type == R_XTENSA_TLSDESC_FN) { - if (! info->shared || (tls_type & GOT_TLS_IE) != 0) + if (! bfd_link_pic (info) || (tls_type & GOT_TLS_IE) != 0) r_type = R_XTENSA_NONE; } else if (r_type == R_XTENSA_TLSDESC_ARG) { - if (info->shared) + if (bfd_link_pic (info)) { if ((tls_type & GOT_TLS_IE) != 0) r_type = R_XTENSA_TLS_TPOFF; @@ -3008,7 +3008,7 @@ elf_xtensa_relocate_section (bfd *output_bfd, break; case R_XTENSA_TLS_DTPOFF: - if (! info->shared) + if (! bfd_link_pic (info)) /* Switch from LD model to LE model. */ relocation = tpoff (info, relocation); else @@ -3395,7 +3395,7 @@ elf_xtensa_finish_dynamic_sections (bfd *output_bfd, } /* Combine adjacent literal table entries. */ - BFD_ASSERT (! info->relocatable); + BFD_ASSERT (! bfd_link_relocatable (info)); sxtlit = bfd_get_section_by_name (output_bfd, ".xt.lit"); sgotloc = htab->sgotloc; BFD_ASSERT (sgotloc); @@ -7348,7 +7348,7 @@ is_resolvable_asm_expansion (bfd *abfd, /* For relocatable sections, we can only simplify when the output section of the target is the same as the output section of the source. */ - if (link_info->relocatable + if (bfd_link_relocatable (link_info) && (target_sec->output_section != sec->output_section || is_reloc_sym_weak (abfd, irel))) return FALSE; @@ -9004,7 +9004,7 @@ identify_literal_placement (bfd *abfd, sec_size = bfd_get_section_limit (abfd, sec); final_static_link = - (!link_info->relocatable + (!bfd_link_relocatable (link_info) && !elf_hash_table (link_info)->dynamic_sections_created); /* The placement algorithm first checks to see if the literal is @@ -9043,7 +9043,7 @@ identify_literal_placement (bfd *abfd, /* For relocatable links, do not try to move literals. To do it correctly might increase the number of relocations in an input section making the default relocatable linking fail. */ - if (!link_info->relocatable && !literal_placed + if (!bfd_link_relocatable (link_info) && !literal_placed && values->has_last_loc && !(*last_loc_is_prev_p)) { asection *target_sec = r_reloc_get_section (&values->last_loc); @@ -10119,7 +10119,7 @@ shrink_dynamic_reloc_sections (struct bfd_link_info *info, if ((r_type == R_XTENSA_32 || r_type == R_XTENSA_PLT) && (input_section->flags & SEC_ALLOC) != 0 - && (dynamic_symbol || info->shared)) + && (dynamic_symbol || bfd_link_pic (info))) { asection *srel; bfd_boolean is_plt = FALSE; @@ -10225,7 +10225,7 @@ move_literal (bfd *abfd, bfd_put_32 (abfd, lit->value, contents + offset); /* Currently, we cannot move relocations during a relocatable link. */ - BFD_ASSERT (!link_info->relocatable); + BFD_ASSERT (!bfd_link_relocatable (link_info)); fix = reloc_bfd_fix_init (sec, offset, r_type, r_reloc_get_section (r_rel), r_rel->target_offset + r_rel->virtual_offset, @@ -10464,7 +10464,7 @@ relax_property_section (bfd *abfd, finish_dynamic_sections() but at that point it's too late to reclaim the space in the output section, so we do this twice. */ - if (internal_relocs && (!link_info->relocatable + if (internal_relocs && (!bfd_link_relocatable (link_info) || xtensa_is_littable_section (sec))) { Elf_Internal_Rela *last_irel = NULL; diff --git a/bfd/elf64-alpha.c b/bfd/elf64-alpha.c index cfd328a229e..f67b0afb048 100644 --- a/bfd/elf64-alpha.c +++ b/bfd/elf64-alpha.c @@ -1227,7 +1227,7 @@ elf64_alpha_add_symbol_hook (bfd *abfd, struct bfd_link_info *info, asection **secp, bfd_vma *valp) { if (sym->st_shndx == SHN_COMMON - && !info->relocatable + && !bfd_link_relocatable (info) && sym->st_size <= elf_gp_size (abfd)) { /* Common symbols less than or equal to -G nn bytes are @@ -1770,7 +1770,7 @@ elf64_alpha_check_relocs (bfd *abfd, struct bfd_link_info *info, const Elf_Internal_Rela *rel, *relend; bfd_size_type amt; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; /* Don't do anything special with non-loaded, non-alloced sections. @@ -1830,7 +1830,7 @@ elf64_alpha_check_relocs (bfd *abfd, struct bfd_link_info *info, have yet been processed. Do something with what we know, as this may help reduce memory usage and processing time later. */ maybe_dynamic = FALSE; - if (h && ((info->shared + if (h && ((bfd_link_pic (info) && (!info->symbolic || info->unresolved_syms_in_shared_libs == RM_IGNORE)) || !h->root.def_regular @@ -1871,7 +1871,7 @@ elf64_alpha_check_relocs (bfd *abfd, struct bfd_link_info *info, case R_ALPHA_REFLONG: case R_ALPHA_REFQUAD: - if (info->shared || maybe_dynamic) + if (bfd_link_pic (info) || maybe_dynamic) need = NEED_DYNREL; break; @@ -1891,12 +1891,12 @@ elf64_alpha_check_relocs (bfd *abfd, struct bfd_link_info *info, case R_ALPHA_GOTTPREL: need = NEED_GOT | NEED_GOT_ENTRY; gotent_flags = ALPHA_ELF_LINK_HASH_TLS_IE; - if (info->shared) + if (bfd_link_pic (info)) info->flags |= DF_STATIC_TLS; break; case R_ALPHA_TPREL64: - if (info->shared && !info->pie) + if (bfd_link_pic (info) && !bfd_link_pie (info)) { info->flags |= DF_STATIC_TLS; need = NEED_DYNREL; @@ -1988,7 +1988,7 @@ elf64_alpha_check_relocs (bfd *abfd, struct bfd_link_info *info, else rent->count++; } - else if (info->shared) + else if (bfd_link_pic (info)) { /* If this is a shared library, and the section is to be loaded into memory, we need a RELATIVE reloc. */ @@ -2033,7 +2033,7 @@ elf64_alpha_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info, struct alpha_elf_link_hash_entry **sym_hashes; const Elf_Internal_Rela *rel, *relend; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; symtab_hdr = &elf_symtab_hdr (abfd); @@ -2644,7 +2644,7 @@ elf64_alpha_always_size_sections (bfd *output_bfd ATTRIBUTE_UNUSED, bfd *i; struct alpha_elf_link_hash_table * htab; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; htab = alpha_elf_hash_table (info); @@ -2735,14 +2735,14 @@ elf64_alpha_calc_dynrel_sizes (struct alpha_elf_link_hash_entry *h, /* If the symbol is a hidden undefined weak, then we never have any relocations. Avoid the loop which may want to add RELATIVE relocs - based on info->shared. */ + based on bfd_link_pic (info). */ if (h->root.root.type == bfd_link_hash_undefweak && !dynamic) return TRUE; for (relent = h->reloc_entries; relent; relent = relent->next) { entries = alpha_dynamic_entries_for_reloc (relent->rtype, dynamic, - info->shared, info->pie); + bfd_link_pic (info), bfd_link_pie (info)); if (entries) { relent->srel->size += @@ -2778,7 +2778,7 @@ elf64_alpha_size_rela_got_1 (struct alpha_elf_link_hash_entry *h, /* If the symbol is a hidden undefined weak, then we never have any relocations. Avoid the loop which may want to add RELATIVE relocs - based on info->shared. */ + based on bfd_link_pic (info). */ if (h->root.root.type == bfd_link_hash_undefweak && !dynamic) return TRUE; @@ -2786,7 +2786,8 @@ elf64_alpha_size_rela_got_1 (struct alpha_elf_link_hash_entry *h, for (gotent = h->got_entries; gotent ; gotent = gotent->next) if (gotent->use_count > 0) entries += alpha_dynamic_entries_for_reloc (gotent->reloc_type, dynamic, - info->shared, info->pie); + bfd_link_pic (info), + bfd_link_pie (info)); if (entries > 0) { @@ -2836,7 +2837,8 @@ elf64_alpha_size_rela_got_section (struct bfd_link_info *info) gotent ; gotent = gotent->next) if (gotent->use_count > 0) entries += (alpha_dynamic_entries_for_reloc - (gotent->reloc_type, 0, info->shared, info->pie)); + (gotent->reloc_type, 0, bfd_link_pic (info), + bfd_link_pie (info))); } } @@ -2875,7 +2877,7 @@ elf64_alpha_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, if (elf_hash_table (info)->dynamic_sections_created) { /* Set the contents of the .interp section to the interpreter. */ - if (info->executable) + if (bfd_link_executable (info)) { s = bfd_get_linker_section (dynobj, ".interp"); BFD_ASSERT (s != NULL); @@ -2961,7 +2963,7 @@ elf64_alpha_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, #define add_dynamic_entry(TAG, VAL) \ _bfd_elf_add_dynamic_entry (info, TAG, VAL) - if (info->executable) + if (bfd_link_executable (info)) { if (!add_dynamic_entry (DT_DEBUG, 0)) return FALSE; @@ -3069,7 +3071,8 @@ elf64_alpha_relax_got_load (struct alpha_relax_info *info, bfd_vma symval, /* Can't use local-exec relocations in shared libraries. */ if (r_type == R_ALPHA_GOTTPREL - && (info->link_info->shared && !info->link_info->pie)) + && (bfd_link_pic (info->link_info) + && !bfd_link_pie (info->link_info))) return TRUE; if (r_type == R_ALPHA_LITERAL) @@ -3077,7 +3080,7 @@ elf64_alpha_relax_got_load (struct alpha_relax_info *info, bfd_vma symval, /* Look for nice constant addresses. This includes the not-uncommon special case of 0 for undefweak symbols. */ if ((info->h && info->h->root.root.type == bfd_link_hash_undefweak) - || (!info->link_info->shared + || (!bfd_link_pic (info->link_info) && (symval >= (bfd_vma)-0x8000 || symval < 0x8000))) { disp = 0; @@ -3540,12 +3543,12 @@ elf64_alpha_relax_tls_get_addr (struct alpha_relax_info *info, bfd_vma symval, /* If the symbol is local, and we've already committed to DF_STATIC_TLS, then we might as well relax to IE. */ - else if (info->link_info->shared && !dynamic + else if (bfd_link_pic (info->link_info) && !dynamic && (info->link_info->flags & DF_STATIC_TLS)) ; /* Otherwise we must be building an executable to do anything. */ - else if (info->link_info->shared) + else if (bfd_link_pic (info->link_info)) return TRUE; /* The TLSGD/TLSLDM relocation must be followed by a LITERAL and @@ -3646,7 +3649,7 @@ elf64_alpha_relax_tls_get_addr (struct alpha_relax_info *info, bfd_vma symval, /* Some compilers warn about a Boolean-looking expression being used in a switch. The explicit cast silences them. */ - switch ((int) (!dynamic && !info->link_info->shared)) + switch ((int) (!dynamic && !bfd_link_pic (info->link_info))) { case 1: { @@ -3789,7 +3792,7 @@ elf64_alpha_relax_section (bfd *abfd, asection *sec, /* There's nothing to change, yet. */ *again = FALSE; - if (link_info->relocatable + if (bfd_link_relocatable (link_info) || ((sec->flags & (SEC_CODE | SEC_RELOC | SEC_ALLOC)) != (SEC_CODE | SEC_RELOC | SEC_ALLOC)) || sec->reloc_count == 0) @@ -4206,7 +4209,7 @@ elf64_alpha_relocate_section (bfd *output_bfd, struct bfd_link_info *info, BFD_ASSERT (is_alpha_elf (input_bfd)); /* Handle relocatable links with a smaller loop. */ - if (info->relocatable) + if (bfd_link_relocatable (info)) return elf64_alpha_relocate_section_r (output_bfd, info, input_bfd, input_section, contents, relocs, local_syms, local_sections); @@ -4431,7 +4434,9 @@ elf64_alpha_relocate_section (bfd *output_bfd, struct bfd_link_info *info, /* If the symbol has been forced local, output a RELATIVE reloc, otherwise it will be handled in finish_dynamic_symbol. */ - if (info->shared && !dynamic_symbol_p && !undef_weak_ref) + if (bfd_link_pic (info) + && !dynamic_symbol_p + && !undef_weak_ref) elf64_alpha_emit_dynrel (output_bfd, info, sgot, srelgot, gotent->got_offset, 0, R_ALPHA_RELATIVE, value); @@ -4581,7 +4586,7 @@ elf64_alpha_relocate_section (bfd *output_bfd, struct bfd_link_info *info, else if (r_type == R_ALPHA_TPREL64) { BFD_ASSERT (elf_hash_table (info)->tls_sec != NULL); - if (!info->shared || info->pie) + if (!bfd_link_pic (info) || bfd_link_pie (info)) { value -= tp_base; goto default_reloc; @@ -4589,7 +4594,7 @@ elf64_alpha_relocate_section (bfd *output_bfd, struct bfd_link_info *info, dynindx = 0; dynaddend = value - dtp_base; } - else if (info->shared + else if (bfd_link_pic (info) && r_symndx != STN_UNDEF && (input_section->flags & SEC_ALLOC) && !undef_weak_ref @@ -4631,7 +4636,8 @@ elf64_alpha_relocate_section (bfd *output_bfd, struct bfd_link_info *info, input_bfd, h->root.root.root.string); ret_val = FALSE; } - else if ((info->shared || info->pie) && undef_weak_ref) + else if ((bfd_link_pic (info) || bfd_link_pie (info)) + && undef_weak_ref) { (*_bfd_error_handler) (_("%B: pc-relative relocation against undefined weak symbol %s"), @@ -4664,13 +4670,14 @@ elf64_alpha_relocate_section (bfd *output_bfd, struct bfd_link_info *info, gotent->reloc_done = 1; /* Note that the module index for the main program is 1. */ - bfd_put_64 (output_bfd, !info->shared && !dynamic_symbol_p, + bfd_put_64 (output_bfd, + !bfd_link_pic (info) && !dynamic_symbol_p, sgot->contents + gotent->got_offset); /* If the symbol has been forced local, output a DTPMOD64 reloc, otherwise it will be handled in finish_dynamic_symbol. */ - if (info->shared && !dynamic_symbol_p) + if (bfd_link_pic (info) && !dynamic_symbol_p) elf64_alpha_emit_dynrel (output_bfd, info, sgot, srelgot, gotent->got_offset, 0, R_ALPHA_DTPMOD64, 0); @@ -4711,7 +4718,7 @@ elf64_alpha_relocate_section (bfd *output_bfd, struct bfd_link_info *info, case R_ALPHA_TPRELHI: case R_ALPHA_TPRELLO: case R_ALPHA_TPREL16: - if (info->shared && !info->pie) + if (bfd_link_pic (info) && !bfd_link_pie (info)) { (*_bfd_error_handler) (_("%B: TLS local exec code cannot be linked into shared objects"), @@ -4749,7 +4756,7 @@ elf64_alpha_relocate_section (bfd *output_bfd, struct bfd_link_info *info, BFD_ASSERT (elf_hash_table (info)->tls_sec != NULL); if (r_type == R_ALPHA_GOTDTPREL) value -= dtp_base; - else if (!info->shared) + else if (!bfd_link_pic (info)) value -= tp_base; else { diff --git a/bfd/elf64-hppa.c b/bfd/elf64-hppa.c index 2ee93ad6034..6f40b88481e 100644 --- a/bfd/elf64-hppa.c +++ b/bfd/elf64-hppa.c @@ -503,7 +503,7 @@ elf64_hppa_check_relocs (bfd *abfd, const Elf_Internal_Rela *rel; unsigned int sec_symndx; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; /* If this is the first dynamic object found in the link, create @@ -522,7 +522,7 @@ elf64_hppa_check_relocs (bfd *abfd, /* If necessary, build a new table holding section symbols indices for this BFD. */ - if (info->shared && hppa_info->section_syms_bfd != abfd) + if (bfd_link_pic (info) && hppa_info->section_syms_bfd != abfd) { unsigned long i; unsigned int highest_shndx; @@ -596,7 +596,7 @@ elf64_hppa_check_relocs (bfd *abfd, relocations when building shared libraries. When not building shared libraries this value is never really used, but assign it to zero to prevent out of bounds memory accesses in other routines. */ - if (info->shared) + if (bfd_link_pic (info)) { sec_symndx = _bfd_elf_section_from_bfd_section (abfd, sec); @@ -655,7 +655,7 @@ elf64_hppa_check_relocs (bfd *abfd, have yet been processed. Do something with what we know, as this may help reduce memory usage and processing time later. */ maybe_dynamic = FALSE; - if (hh && ((info->shared + if (hh && ((bfd_link_pic (info) && (!info->symbolic || info->unresolved_syms_in_shared_libs == RM_IGNORE)) || !hh->eh.def_regular @@ -730,7 +730,7 @@ elf64_hppa_check_relocs (bfd *abfd, break; case R_PARISC_DIR64: - if (info->shared || maybe_dynamic) + if (bfd_link_pic (info) || maybe_dynamic) need_entry = (NEED_DYNREL); dynrel_type = R_PARISC_DIR64; break; @@ -747,7 +747,7 @@ elf64_hppa_check_relocs (bfd *abfd, case R_PARISC_LTOFF_FPTR16F: case R_PARISC_LTOFF_FPTR16WF: case R_PARISC_LTOFF_FPTR16DF: - if (info->shared || maybe_dynamic) + if (bfd_link_pic (info) || maybe_dynamic) need_entry = (NEED_DLT | NEED_OPD | NEED_PLT); else need_entry = (NEED_DLT | NEED_OPD | NEED_PLT); @@ -756,7 +756,7 @@ elf64_hppa_check_relocs (bfd *abfd, /* This is a simple OPD entry. */ case R_PARISC_FPTR64: - if (info->shared || maybe_dynamic) + if (bfd_link_pic (info) || maybe_dynamic) need_entry = (NEED_OPD | NEED_PLT | NEED_DYNREL); else need_entry = (NEED_OPD | NEED_PLT); @@ -882,7 +882,7 @@ elf64_hppa_check_relocs (bfd *abfd, a dynamic R_PARISC_FPTR64 relocation, then make sure the section symbol for this section ends up in the dynamic symbol table. */ - if (info->shared && dynrel_type == R_PARISC_FPTR64 + if (bfd_link_pic (info) && dynrel_type == R_PARISC_FPTR64 && ! (bfd_elf_link_record_local_dynamic_symbol (info, abfd, sec_symndx))) return FALSE; @@ -966,7 +966,7 @@ allocate_global_data_dlt (struct elf_link_hash_entry *eh, void *data) if (hh->want_dlt) { - if (x->info->shared) + if (bfd_link_pic (x->info)) { /* Possibly add the symbol to the local dynamic symbol table since we might need to create a dynamic relocation @@ -1062,7 +1062,7 @@ allocate_global_data_opd (struct elf_link_hash_entry *eh, void *data) /* If we are creating a shared library, took the address of a local function or might export this function from this object file, then we have to create an opd descriptor. */ - else if (x->info->shared + else if (bfd_link_pic (x->info) || hh == NULL || (hh->eh.dynindx == -1 && hh->eh.type != STT_PARISC_MILLI) || (hh->eh.root.type == bfd_link_hash_defined @@ -1072,7 +1072,7 @@ allocate_global_data_opd (struct elf_link_hash_entry *eh, void *data) create a runtime relocation for the symbol to properly initialize the .opd entry. Make sure the symbol gets added to the dynamic symbol table. */ - if (x->info->shared + if (bfd_link_pic (x->info) && (hh == NULL || (hh->eh.dynindx == -1))) { bfd *owner; @@ -1089,7 +1089,7 @@ allocate_global_data_opd (struct elf_link_hash_entry *eh, void *data) in dynamic relocs. But name munging does make the result much easier to debug. ie, the EPLT reloc will reference a symbol like .foobar, instead of .text + offset. */ - if (x->info->shared && eh) + if (bfd_link_pic (x->info) && eh) { char *new_name; struct elf_link_hash_entry *nh; @@ -1407,7 +1407,7 @@ allocate_dynrel_entries (struct elf_link_hash_entry *eh, void *data) return FALSE; dynamic_symbol = elf64_hppa_dynamic_symbol_p (eh, x->info); - shared = x->info->shared; + shared = bfd_link_pic (x->info); /* We may need to allocate relocations for a non-dynamic symbol when creating a shared library. */ @@ -1558,7 +1558,7 @@ elf64_hppa_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info) if (elf_hash_table (info)->dynamic_sections_created) { /* Set the contents of the .interp section to the interpreter. */ - if (info->executable) + if (bfd_link_executable (info)) { sec = bfd_get_linker_section (dynobj, ".interp"); BFD_ASSERT (sec != NULL); @@ -1637,7 +1637,7 @@ elf64_hppa_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info) { *local_dlt = sec->size; sec->size += DLT_ENTRY_SIZE; - if (info->shared) + if (bfd_link_pic (info)) { srel->size += sizeof (Elf64_External_Rela); } @@ -1664,7 +1664,7 @@ elf64_hppa_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info) { *local_plt = sec->size; sec->size += PLT_ENTRY_SIZE; - if (info->shared) + if (bfd_link_pic (info)) srel->size += sizeof (Elf64_External_Rela); } else @@ -1690,7 +1690,7 @@ elf64_hppa_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info) { *local_opd = sec->size; sec->size += OPD_ENTRY_SIZE; - if (info->shared) + if (bfd_link_pic (info)) srel->size += sizeof (Elf64_External_Rela); } else @@ -1855,7 +1855,7 @@ elf64_hppa_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info) must add the entries now so that we get the correct size for the .dynamic section. The DT_DEBUG entry is filled in by the dynamic linker and used by the debugger. */ - if (! info->shared) + if (! bfd_link_pic (info)) { if (!add_dynamic_entry (DT_DEBUG, 0) || !add_dynamic_entry (DT_HP_DLD_HOOK, 0) @@ -1997,7 +1997,7 @@ elf64_hppa_finish_dynamic_symbol (bfd *output_bfd, if we are creating a shared library and the symbol is still undefined, we create a dynamic relocation to fill in the correct value. */ - if (info->shared && eh->root.type == bfd_link_hash_undefined) + if (bfd_link_pic (info) && eh->root.type == bfd_link_hash_undefined) value = 0; else value = (eh->root.u.def.value + eh->root.u.def.section->vma); @@ -2152,7 +2152,7 @@ elf64_hppa_finalize_opd (struct elf_link_hash_entry *eh, void *data) /* If we are generating a shared library, we must generate EPLT relocations for each entry in the .opd, even for static functions (they may have had their address taken). */ - if (info->shared && hh->want_opd) + if (bfd_link_pic (info) && hh->want_opd) { Elf_Internal_Rela rel; bfd_byte *loc; @@ -2251,7 +2251,7 @@ elf64_hppa_finalize_dlt (struct elf_link_hash_entry *eh, void *data) address, so there is no need to create a relocation. Just install the proper value into the DLT, note this shortcut can not be skipped when building a shared library. */ - if (! info->shared && hh && hh->want_dlt) + if (! bfd_link_pic (info) && hh && hh->want_dlt) { bfd_vma value; @@ -2289,7 +2289,7 @@ elf64_hppa_finalize_dlt (struct elf_link_hash_entry *eh, void *data) /* Create a relocation for the DLT entry associated with this symbol. When building a shared library the symbol does not have to be dynamic. */ if (hh->want_dlt - && (elf64_hppa_dynamic_symbol_p (eh, info) || info->shared)) + && (elf64_hppa_dynamic_symbol_p (eh, info) || bfd_link_pic (info))) { Elf_Internal_Rela rel; bfd_byte *loc; @@ -2337,7 +2337,7 @@ elf64_hppa_finalize_dynreloc (struct elf_link_hash_entry *eh, dynamic_symbol = elf64_hppa_dynamic_symbol_p (eh, info); - if (!dynamic_symbol && !info->shared) + if (!dynamic_symbol && !bfd_link_pic (info)) return TRUE; if (hh->reloc_entries) @@ -2366,7 +2366,8 @@ elf64_hppa_finalize_dynreloc (struct elf_link_hash_entry *eh, /* Allocate one iff we are building a shared library, the relocation isn't a R_PARISC_FPTR64, or we don't want an opd entry. */ - if (!info->shared && rent->type == R_PARISC_FPTR64 && hh->want_opd) + if (!bfd_link_pic (info) + && rent->type == R_PARISC_FPTR64 && hh->want_opd) continue; /* Create a dynamic relocation for this entry. @@ -2396,7 +2397,8 @@ elf64_hppa_finalize_dynreloc (struct elf_link_hash_entry *eh, We use a section symbol recorded by check_relocs as the base symbol for the relocation. The addend is the difference between the section symbol and the address of the .opd entry. */ - if (info->shared && rent->type == R_PARISC_FPTR64 && hh->want_opd) + if (bfd_link_pic (info) + && rent->type == R_PARISC_FPTR64 && hh->want_opd) { bfd_vma value, value2; @@ -2843,7 +2845,7 @@ elf_hppa_unmark_useless_dynamic_symbols (struct elf_link_hash_entry *h, Ultimately we should have better controls over the generic ELF BFD linker code. */ - if (! info->relocatable + if (! bfd_link_relocatable (info) && info->unresolved_syms_in_shared_libs != RM_IGNORE && h->root.type == bfd_link_hash_undefined && h->ref_dynamic @@ -2874,7 +2876,7 @@ elf_hppa_remark_useless_dynamic_symbols (struct elf_link_hash_entry *h, Ultimately we should have better controls over the generic ELF BFD linker code. */ - if (! info->relocatable + if (! bfd_link_relocatable (info) && info->unresolved_syms_in_shared_libs != RM_IGNORE && h->root.type == bfd_link_hash_undefined && !h->ref_dynamic @@ -2949,7 +2951,7 @@ elf_hppa_final_link (bfd *abfd, struct bfd_link_info *info) if (hppa_info == NULL) return FALSE; - if (! info->relocatable) + if (! bfd_link_relocatable (info)) { struct elf_link_hash_entry *gp; bfd_vma gp_val; @@ -3035,7 +3037,7 @@ elf_hppa_final_link (bfd *abfd, struct bfd_link_info *info) /* If we're producing a final executable, sort the contents of the unwind section. */ - if (retval && !info->relocatable) + if (retval && !bfd_link_relocatable (info)) retval = elf_hppa_sort_unwind (abfd); return retval; @@ -3893,10 +3895,10 @@ elf64_hppa_relocate_section (bfd *output_bfd, else if (info->unresolved_syms_in_objects == RM_IGNORE && ELF_ST_VISIBILITY (eh->other) == STV_DEFAULT) ; - else if (!info->relocatable + else if (!bfd_link_relocatable (info) && elf_hppa_is_dynamic_loader_symbol (eh->root.root.string)) continue; - else if (!info->relocatable) + else if (!bfd_link_relocatable (info)) { bfd_boolean err; err = (info->unresolved_syms_in_objects == RM_GENERATE_ERROR @@ -3909,7 +3911,7 @@ elf64_hppa_relocate_section (bfd *output_bfd, return FALSE; } - if (!info->relocatable + if (!bfd_link_relocatable (info) && relocation == 0 && eh->root.type != bfd_link_hash_defined && eh->root.type != bfd_link_hash_defweak @@ -3931,7 +3933,7 @@ elf64_hppa_relocate_section (bfd *output_bfd, RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) continue; r = elf_hppa_final_link_relocate (rel, input_bfd, output_bfd, diff --git a/bfd/elf64-ia64-vms.c b/bfd/elf64-ia64-vms.c index b1b9f464518..4dc5363f6bc 100644 --- a/bfd/elf64-ia64-vms.c +++ b/bfd/elf64-ia64-vms.c @@ -348,7 +348,7 @@ elf64_ia64_relax_section (bfd *abfd, asection *sec, one pass. */ *again = FALSE; - if (link_info->relocatable) + if (bfd_link_relocatable (link_info)) (*link_info->callbacks->einfo) (_("%P%F: --relax and -r may not be used together\n")); @@ -858,7 +858,7 @@ elf64_ia64_add_symbol_hook (bfd *abfd, bfd_vma *valp) { if (sym->st_shndx == SHN_COMMON - && !info->relocatable + && !bfd_link_relocatable (info) && sym->st_size <= elf_gp_size (abfd)) { /* Common symbols less than or equal to -G nn bytes are @@ -1757,7 +1757,7 @@ get_fptr (bfd *abfd, struct bfd_link_info *info, | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY - | (info->pie ? 0 + | (bfd_link_pie (info) ? 0 : SEC_READONLY) | SEC_LINKER_CREATED)); if (!fptr @@ -1769,7 +1769,7 @@ get_fptr (bfd *abfd, struct bfd_link_info *info, ia64_info->fptr_sec = fptr; - if (info->pie) + if (bfd_link_pie (info)) { asection *fptr_rel; fptr_rel = bfd_make_section_anyway_with_flags (dynobj, ".rela.opd", @@ -1922,7 +1922,7 @@ elf64_ia64_check_relocs (bfd *abfd, struct bfd_link_info *info, unsigned long r_symndx; bfd_boolean maybe_dynamic; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; symtab_hdr = &elf_tdata (abfd)->symtab_hdr; @@ -1955,7 +1955,7 @@ elf64_ia64_check_relocs (bfd *abfd, struct bfd_link_info *info, locally or externally defined, as not all of the input files have yet been processed. Do something with what we know, as this may help reduce memory usage and processing time later. */ - maybe_dynamic = (h && ((!info->executable + maybe_dynamic = (h && ((!bfd_link_executable (info) && (!SYMBOLIC_BIND (info, h) || info->unresolved_syms_in_shared_libs == RM_IGNORE)) || !h->def_regular @@ -1996,7 +1996,7 @@ elf64_ia64_check_relocs (bfd *abfd, struct bfd_link_info *info, case R_IA64_FPTR32LSB: case R_IA64_FPTR64MSB: case R_IA64_FPTR64LSB: - if (info->shared || h) + if (bfd_link_pic (info) || h) need_entry = NEED_FPTR | NEED_DYNREL; else need_entry = NEED_FPTR; @@ -2047,7 +2047,7 @@ elf64_ia64_check_relocs (bfd *abfd, struct bfd_link_info *info, case R_IA64_DIR64MSB: case R_IA64_DIR64LSB: /* Shared objects will always need at least a REL relocation. */ - if (info->shared || maybe_dynamic) + if (bfd_link_pic (info) || maybe_dynamic) need_entry = NEED_DYNREL; break; @@ -2107,7 +2107,7 @@ elf64_ia64_check_relocs (bfd *abfd, struct bfd_link_info *info, locally or externally defined, as not all of the input files have yet been processed. Do something with what we know, as this may help reduce memory usage and processing time later. */ - maybe_dynamic = (h && ((!info->executable + maybe_dynamic = (h && ((!bfd_link_executable (info) && (!SYMBOLIC_BIND (info, h) || info->unresolved_syms_in_shared_libs == RM_IGNORE)) || !h->def_regular @@ -2144,7 +2144,7 @@ elf64_ia64_check_relocs (bfd *abfd, struct bfd_link_info *info, case R_IA64_FPTR32LSB: case R_IA64_FPTR64MSB: case R_IA64_FPTR64LSB: - if (info->shared || h) + if (bfd_link_pic (info) || h) need_entry = NEED_FPTR | NEED_DYNREL; else need_entry = NEED_FPTR; @@ -2190,7 +2190,7 @@ elf64_ia64_check_relocs (bfd *abfd, struct bfd_link_info *info, case R_IA64_DIR64MSB: case R_IA64_DIR64LSB: /* Shared objects will always need at least a REL relocation. */ - if (info->shared || maybe_dynamic) + if (bfd_link_pic (info) || maybe_dynamic) need_entry = NEED_DYNREL; dynrel_type = R_IA64_DIR64LSB; break; @@ -2460,7 +2460,7 @@ allocate_dynrel_entries (struct elf64_ia64_dyn_sym_info *dyn_i, /* Note that this can't be used in relation to FPTR relocs below. */ dynamic_symbol = elf64_ia64_dynamic_symbol_p (dyn_i->h); - shared = x->info->shared; + shared = bfd_link_pic (x->info); resolved_zero = (dyn_i->h && ELF_ST_VISIBILITY (dyn_i->h->other) && dyn_i->h->root.type == bfd_link_hash_undefweak); @@ -2519,7 +2519,7 @@ allocate_dynrel_entries (struct elf64_ia64_dyn_sym_info *dyn_i, will be true only if we're actually allocating one statically in the main executable. Position independent executables need a relative reloc. */ - if (dyn_i->want_fptr && !x->info->pie) + if (dyn_i->want_fptr && !bfd_link_pie (x->info)) continue; break; case R_IA64_PCREL32LSB: @@ -2999,13 +2999,13 @@ set_got_entry (bfd *abfd, struct bfd_link_info *info, bfd_put_64 (abfd, value, got_sec->contents + got_offset); /* Install a dynamic relocation if needed. */ - if (((info->shared + if (((bfd_link_pic (info) && (!dyn_i->h || ELF_ST_VISIBILITY (dyn_i->h->other) == STV_DEFAULT || dyn_i->h->root.type != bfd_link_hash_undefweak)) || elf64_ia64_dynamic_symbol_p (dyn_i->h)) && (!dyn_i->want_ltoff_fptr - || !info->pie + || !bfd_link_pie (info) || !dyn_i->h || dyn_i->h->root.type != bfd_link_hash_undefweak)) { @@ -3109,7 +3109,7 @@ set_pltoff_entry (bfd *abfd, struct bfd_link_info *info, /* Install dynamic relocations if needed. */ if (!is_plt - && info->shared + && bfd_link_pic (info) && (!dyn_i->h || ELF_ST_VISIBILITY (dyn_i->h->other) == STV_DEFAULT || dyn_i->h->root.type != bfd_link_hash_undefweak)) @@ -3309,7 +3309,7 @@ elf64_ia64_final_link (bfd *abfd, struct bfd_link_info *info) return FALSE; /* Make sure we've got ourselves a nice fat __gp value. */ - if (!info->relocatable) + if (!bfd_link_relocatable (info)) { bfd_vma gp_val; struct elf_link_hash_entry *gp; @@ -3335,7 +3335,7 @@ elf64_ia64_final_link (bfd *abfd, struct bfd_link_info *info) of the .IA_64.unwind section. Force this section to be relocated into memory rather than written immediately to the output file. */ unwind_output_sec = NULL; - if (!info->relocatable) + if (!bfd_link_relocatable (info)) { asection *s = bfd_get_section_by_name (abfd, ELF_STRING_ia64_unwind); if (s) @@ -3392,7 +3392,7 @@ elf64_ia64_relocate_section (bfd *output_bfd, return FALSE; /* Infect various flags from the input section to the output section. */ - if (info->relocatable) + if (bfd_link_relocatable (info)) { bfd_vma flags; @@ -3448,7 +3448,7 @@ elf64_ia64_relocate_section (bfd *output_bfd, sym_sec = local_sections[r_symndx]; msec = sym_sec; value = _bfd_elf_rela_local_sym (output_bfd, sym, &msec, rel); - if (!info->relocatable + if (!bfd_link_relocatable (info) && (sym_sec->flags & SEC_MERGE) != 0 && ELF_ST_TYPE (sym->st_info) == STT_SECTION && sym_sec->sec_info_type == SEC_INFO_TYPE_MERGE) @@ -3516,7 +3516,7 @@ elf64_ia64_relocate_section (bfd *output_bfd, RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) continue; hit_addr = contents + rel->r_offset; @@ -3537,7 +3537,7 @@ elf64_ia64_relocate_section (bfd *output_bfd, case R_IA64_DIR64MSB: case R_IA64_DIR64LSB: /* Install a dynamic relocation for this reloc. */ - if ((dynamic_symbol_p || info->shared) + if ((dynamic_symbol_p || bfd_link_pic (info)) && r_symndx != 0 && (input_section->flags & SEC_ALLOC) != 0) { @@ -3657,7 +3657,7 @@ elf64_ia64_relocate_section (bfd *output_bfd, if (!undef_weak_ref) value = set_fptr_entry (output_bfd, info, dyn_i, value); } - if (!dyn_i->want_fptr || info->pie) + if (!dyn_i->want_fptr || bfd_link_pie (info)) { /* Otherwise, we expect the dynamic linker to create the entry. */ @@ -3838,7 +3838,7 @@ elf64_ia64_relocate_section (bfd *output_bfd, case R_IA64_IPLTMSB: case R_IA64_IPLTLSB: /* Install a dynamic relocation for this reloc. */ - if ((dynamic_symbol_p || info->shared) + if ((dynamic_symbol_p || bfd_link_pic (info)) && (input_section->flags & SEC_ALLOC) != 0) { /* VMS: FIXFD ?? */ @@ -4740,11 +4740,11 @@ elf64_vms_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info) /* You can't use -r against a dynamic object. Also, there's no hope of using a dynamic object which does not exactly match the format of the output file. */ - if (info->relocatable + if (bfd_link_relocatable (info) || !is_elf_hash_table (htab) || info->output_bfd->xvec != abfd->xvec) { - if (info->relocatable) + if (bfd_link_relocatable (info)) bfd_set_error (bfd_error_invalid_operation); else bfd_set_error (bfd_error_wrong_format); @@ -4759,7 +4759,7 @@ elf64_vms_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info) so we attach them to this BFD, provided it is the right format. FIXME: If there are no input BFD's of the same format as the output, we can't make a shared library. */ - if (info->shared + if (bfd_link_pic (info) && is_elf_hash_table (htab) && info->output_bfd->xvec == abfd->xvec && !htab->dynamic_sections_created) diff --git a/bfd/elf64-mmix.c b/bfd/elf64-mmix.c index 38d07b3cad8..adb54cef2c9 100644 --- a/bfd/elf64-mmix.c +++ b/bfd/elf64-mmix.c @@ -1429,7 +1429,7 @@ mmix_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) { /* This is a relocatable link. For most relocs we don't have to change anything, unless the reloc is against a section @@ -1870,7 +1870,7 @@ mmix_elf_check_common_relocs (bfd *abfd, DSO-related stuff if that member is non-NULL. */ case R_MMIX_BASE_PLUS_OFFSET: /* We don't do anything with this reloc for a relocatable link. */ - if (info->relocatable) + if (bfd_link_relocatable (info)) break; if (bpo_greg_owner == NULL) @@ -1994,7 +1994,7 @@ mmix_elf_check_relocs (bfd *abfd, if (!mmix_elf_check_common_relocs (abfd, info, sec, relocs)) return FALSE; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; rel_end = relocs + sec->reloc_count; @@ -2303,7 +2303,7 @@ mmix_set_relaxable_size (bfd *abfd ATTRIBUTE_UNUSED, /* For use in relocatable link, we start with a max stubs size. See mmix_elf_relax_section. */ - if (info->relocatable && sec->output_section) + if (bfd_link_relocatable (info) && sec->output_section) mmix_elf_section_data (sec->output_section)->pjs.stubs_size_sum += (mmix_elf_section_data (sec)->pjs.n_pushj_relocs * MAX_PUSHJ_STUB_SIZE); @@ -2624,7 +2624,7 @@ mmix_elf_relax_section (bfd *abfd, /* We process relocs in a distinctly different way when this is a relocatable link (for one, we don't look at symbols), so we avoid mixing its code with that for the "normal" relaxation. */ - if (link_info->relocatable) + if (bfd_link_relocatable (link_info)) { /* The only transformation in a relocatable link is to generate a full stub at the location of the stub calculated for the diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c index 4db534491f9..8cff9903053 100644 --- a/bfd/elf64-ppc.c +++ b/bfd/elf64-ppc.c @@ -3716,7 +3716,7 @@ must_be_dyn_reloc (struct bfd_link_info *info, case R_PPC64_TPREL16_HIGHEST: case R_PPC64_TPREL16_HIGHESTA: case R_PPC64_TPREL64: - return !info->executable; + return !bfd_link_executable (info); } } @@ -4315,7 +4315,7 @@ create_linkage_sections (bfd *dynobj, struct bfd_link_info *info) || ! bfd_set_section_alignment (dynobj, htab->brlt, 3)) return FALSE; - if (!info->shared) + if (!bfd_link_pic (info)) return TRUE; flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY @@ -4349,7 +4349,7 @@ ppc64_elf_init_stub_bfd (struct bfd_link_info *info, htab->elf.dynobj = params->stub_bfd; htab->params = params; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; return create_linkage_sections (htab->elf.dynobj, info); @@ -4555,11 +4555,11 @@ ppc64_elf_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info) return FALSE; htab->dynbss = bfd_get_linker_section (dynobj, ".dynbss"); - if (!info->shared) + if (!bfd_link_pic (info)) htab->relbss = bfd_get_linker_section (dynobj, ".rela.bss"); if (!htab->elf.sgot || !htab->elf.splt || !htab->elf.srelplt || !htab->dynbss - || (!info->shared && !htab->relbss)) + || (!bfd_link_pic (info) && !htab->relbss)) abort (); return TRUE; @@ -4834,7 +4834,7 @@ ppc64_elf_add_symbol_hook (bfd *ibfd, /* If the symbol is a function defined in .opd, and the function code is in a discarded group, let it appear to be undefined. */ - if (!info->relocatable + if (!bfd_link_relocatable (info) && (*sec)->reloc_count != 0 && opd_entry_value (*sec, *value, &code_sec, NULL, FALSE) != (bfd_vma) -1 @@ -4949,7 +4949,7 @@ add_symbol_adjust (struct ppc_link_hash_entry *eh, struct bfd_link_info *info) fdh = lookup_fdh (eh, htab); if (fdh == NULL) { - if (!info->relocatable + if (!bfd_link_relocatable (info) && (eh->elf.root.type == bfd_link_hash_undefined || eh->elf.root.type == bfd_link_hash_undefweak) && eh->elf.ref_regular) @@ -5226,7 +5226,7 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, asection **opd_sym_map; struct elf_link_hash_entry *tga, *dottga; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; /* Don't do anything special with non-loaded, non-alloced sections. @@ -5355,7 +5355,7 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, case R_PPC64_GOT_TPREL16_LO_DS: case R_PPC64_GOT_TPREL16_HI: case R_PPC64_GOT_TPREL16_HA: - if (info->shared) + if (bfd_link_pic (info)) info->flags |= DF_STATIC_TLS; tls_type = TLS_TLS | TLS_TPREL; goto dogottls; @@ -5428,7 +5428,7 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, /* We may also need a plt entry if the symbol turns out to be an ifunc. */ - if (h != NULL && !info->shared && abiversion (abfd) != 1) + if (h != NULL && !bfd_link_pic (info) && abiversion (abfd) != 1) { if (!update_plt_info (abfd, &h->plt.plist, rel->r_addend)) return FALSE; @@ -5495,7 +5495,7 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, /* Not supported as a dynamic relocation. */ case R_PPC64_ADDR64_LOCAL: - if (info->shared) + if (bfd_link_pic (info)) { if (!ppc64_elf_howto_table[R_PPC64_ADDR32]) ppc_howto_init (); @@ -5585,7 +5585,7 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, case R_PPC64_TPREL64: tls_type = TLS_EXPLICIT | TLS_TLS | TLS_TPREL; - if (info->shared) + if (bfd_link_pic (info)) info->flags |= DF_STATIC_TLS; goto dotlstoc; @@ -5661,7 +5661,7 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, case R_PPC64_TPREL16_HIGHERA: case R_PPC64_TPREL16_HIGHEST: case R_PPC64_TPREL16_HIGHESTA: - if (info->shared) + if (bfd_link_pic (info)) { info->flags |= DF_STATIC_TLS; goto dodyn; @@ -5711,7 +5711,7 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, case R_PPC64_ADDR16_HIGHESTA: case R_PPC64_ADDR16_LO: case R_PPC64_ADDR16_LO_DS: - if (h != NULL && !info->shared && abiversion (abfd) != 1 + if (h != NULL && !bfd_link_pic (info) && abiversion (abfd) != 1 && rel->r_addend == 0) { /* We may need a .plt entry if this reloc refers to a @@ -5734,7 +5734,7 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, case R_PPC64_UADDR32: case R_PPC64_UADDR64: case R_PPC64_TOC: - if (h != NULL && !info->shared) + if (h != NULL && !bfd_link_pic (info)) /* We may need a copy reloc. */ h->non_got_ref = 1; @@ -5764,18 +5764,18 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, dynamic library if we manage to avoid copy relocs for the symbol. */ dodyn: - if ((info->shared + if ((bfd_link_pic (info) && (must_be_dyn_reloc (info, r_type) || (h != NULL && (!SYMBOLIC_BIND (info, h) || h->root.type == bfd_link_hash_defweak || !h->def_regular)))) || (ELIMINATE_COPY_RELOCS - && !info->shared + && !bfd_link_pic (info) && h != NULL && (h->root.type == bfd_link_hash_defweak || !h->def_regular)) - || (!info->shared + || (!bfd_link_pic (info) && ifunc != NULL)) { /* We must copy these reloc types into the output file. @@ -6256,7 +6256,7 @@ ppc64_elf_gc_mark_dynamic_ref (struct elf_link_hash_entry *h, void *inf) || ((eh->elf.def_regular || ELF_COMMON_DEF_P (&eh->elf)) && ELF_ST_VISIBILITY (eh->elf.other) != STV_INTERNAL && ELF_ST_VISIBILITY (eh->elf.other) != STV_HIDDEN - && (!info->executable + && (!bfd_link_executable (info) || info->export_dynamic || (eh->elf.dynamic && d != NULL @@ -6386,7 +6386,7 @@ ppc64_elf_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info, struct got_entry **local_got_ents; const Elf_Internal_Rela *rel, *relend; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; if ((sec->flags & SEC_ALLOC) == 0) @@ -6836,7 +6836,7 @@ func_desc_adjust (struct elf_link_hash_entry *h, void *inf) fdh = lookup_fdh (fh, htab); if (fdh == NULL - && !info->executable + && !bfd_link_executable (info) && (fh->elf.root.type == bfd_link_hash_undefined || fh->elf.root.type == bfd_link_hash_undefweak)) { @@ -6869,7 +6869,7 @@ func_desc_adjust (struct elf_link_hash_entry *h, void *inf) if (fdh != NULL && !fdh->elf.forced_local - && (!info->executable + && (!bfd_link_executable (info) || fdh->elf.def_dynamic || fdh->elf.ref_dynamic || (fdh->elf.root.type == bfd_link_hash_undefweak @@ -6939,7 +6939,7 @@ ppc64_elf_func_desc_adjust (bfd *obfd ATTRIBUTE_UNUSED, if (htab == NULL) return FALSE; - if (!info->relocatable + if (!bfd_link_relocatable (info) && htab->elf.hgot != NULL) { _bfd_elf_link_hash_hide_symbol (info, htab->elf.hgot, TRUE); @@ -7089,7 +7089,7 @@ ppc64_elf_adjust_dynamic_symbol (struct bfd_link_info *info, only references to the symbol are via the global offset table. For such cases we need not do anything here; the relocations will be handled correctly by relocate_section. */ - if (info->shared) + if (bfd_link_pic (info)) return TRUE; /* If there are no references to this symbol that do not use the @@ -7508,7 +7508,7 @@ dec_dynrel_count (bfd_vma r_info, case R_PPC64_TPREL16_HIGHERA: case R_PPC64_TPREL16_HIGHEST: case R_PPC64_TPREL16_HIGHESTA: - if (!info->shared) + if (!bfd_link_pic (info)) return TRUE; case R_PPC64_TPREL64: @@ -7552,14 +7552,14 @@ dec_dynrel_count (bfd_vma r_info, return FALSE; } - if ((info->shared + if ((bfd_link_pic (info) && (must_be_dyn_reloc (info, r_type) || (h != NULL && (!SYMBOLIC_BIND (info, h) || h->root.type == bfd_link_hash_defweak || !h->def_regular)))) || (ELIMINATE_COPY_RELOCS - && !info->shared + && !bfd_link_pic (info) && h != NULL && (h->root.type == bfd_link_hash_defweak || !h->def_regular))) @@ -7906,7 +7906,7 @@ ppc64_elf_edit_opd (struct bfd_link_info *info) } opd->adjust[OPD_NDX (rel->r_offset)] = -1; - if (NO_OPD_RELOCS || info->relocatable) + if (NO_OPD_RELOCS || bfd_link_relocatable (info)) rel = next_rel; else while (1) @@ -8006,7 +8006,7 @@ ppc64_elf_edit_opd (struct bfd_link_info *info) /* If we are doing a final link and the last .opd entry is just 16 byte long, add a 8 byte padding after it. */ - if (need_pad != NULL && !info->relocatable) + if (need_pad != NULL && !bfd_link_relocatable (info)) { bfd_byte *p; @@ -8184,7 +8184,7 @@ ppc64_elf_tls_optimize (struct bfd_link_info *info) unsigned char *toc_ref; int pass; - if (info->relocatable || !info->executable) + if (bfd_link_relocatable (info) || !bfd_link_executable (info)) return TRUE; htab = ppc_hash_table (info); @@ -9378,7 +9378,7 @@ allocate_got (struct elf_link_hash_entry *h, htab->elf.irelplt->size += rentsize; htab->got_reli_size += rentsize; } - else if ((info->shared + else if ((bfd_link_pic (info) || WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h)) && (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT || h->root.type != bfd_link_hash_undefweak)) @@ -9431,7 +9431,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) if ((htab->elf.dynamic_sections_created && h->dynindx != -1 - && WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, info->shared, h)) + && WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, bfd_link_pic (info), h)) || h->type == STT_GNU_IFUNC) { struct plt_entry *pent; @@ -9574,7 +9574,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) space for relocs that have become local due to symbol visibility changes. */ - if (info->shared) + if (bfd_link_pic (info)) { /* Relocs that use pc_count are those that appear on a call insn, or certain REL relocs (see must_be_dyn_reloc) that can be @@ -9748,7 +9748,7 @@ ppc64_elf_size_dynamic_sections (bfd *output_bfd, if (htab->elf.dynamic_sections_created) { /* Set the contents of the .interp section to the interpreter. */ - if (info->executable) + if (bfd_link_executable (info)) { s = bfd_get_linker_section (dynobj, ".interp"); if (s == NULL) @@ -9840,7 +9840,7 @@ ppc64_elf_size_dynamic_sections (bfd *output_bfd, htab->elf.irelplt->size += rel_size; htab->got_reli_size += rel_size; } - else if (info->shared) + else if (bfd_link_pic (info)) { asection *srel = ppc64_elf_tdata (ibfd)->relgot; srel->size += rel_size; @@ -9878,7 +9878,7 @@ ppc64_elf_size_dynamic_sections (bfd *output_bfd, if (htab->glink != NULL) htab->glink->rawsize = htab->glink->size; - if (!htab->opd_abi && !info->shared) + if (!htab->opd_abi && !bfd_link_pic (info)) elf_link_hash_traverse (&htab->elf, size_global_entry_stubs, info); first_tlsld = NULL; @@ -9905,7 +9905,7 @@ ppc64_elf_size_dynamic_sections (bfd *output_bfd, ent->got.offset = s->size; ent->owner = ibfd; s->size += 16; - if (info->shared) + if (bfd_link_pic (info)) { asection *srel = ppc64_elf_tdata (ibfd)->relgot; srel->size += sizeof (Elf64_External_Rela); @@ -10035,7 +10035,7 @@ ppc64_elf_size_dynamic_sections (bfd *output_bfd, #define add_dynamic_entry(TAG, VAL) \ _bfd_elf_add_dynamic_entry (info, TAG, VAL) - if (info->executable) + if (bfd_link_executable (info)) { if (!add_dynamic_entry (DT_DEBUG, 0)) return FALSE; @@ -11456,7 +11456,7 @@ ppc64_elf_layout_multitoc (struct bfd_link_info *info) htab->elf.irelplt->size += rel_size; htab->got_reli_size += rel_size; } - else if (info->shared) + else if (bfd_link_pic (info)) { asection *srel = ppc64_elf_tdata (ibfd)->relgot; srel->size += rel_size; @@ -11481,7 +11481,7 @@ ppc64_elf_layout_multitoc (struct bfd_link_info *info) asection *s = ppc64_elf_tdata (ibfd)->got; ent->got.offset = s->size; s->size += 16; - if (info->shared) + if (bfd_link_pic (info)) { asection *srel = ppc64_elf_tdata (ibfd)->relgot; srel->size += sizeof (Elf64_External_Rela); @@ -12005,7 +12005,7 @@ ppc64_elf_size_stubs (struct bfd_link_info *info) if (htab == NULL) return FALSE; - if (htab->params->plt_thread_safe == -1 && !info->executable) + if (htab->params->plt_thread_safe == -1 && !bfd_link_executable (info)) htab->params->plt_thread_safe = 1; if (!htab->opd_abi) htab->params->plt_thread_safe = 0; @@ -13229,7 +13229,7 @@ ppc64_elf_relocate_section (bfd *output_bfd, ppc64_elf_howto_table[r_type], 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) continue; if (h != NULL && &h->elf == htab->elf.hgot) @@ -13709,7 +13709,7 @@ ppc64_elf_relocate_section (bfd *output_bfd, . lis 2,.TOC.@ha . addi 2,2,.TOC.@l if .TOC. is in range. */ - if (!info->shared + if (!bfd_link_pic (info) && !info->traditional_format && h != NULL && &h->elf == htab->elf.hgot && rel + 1 < relend @@ -14078,9 +14078,9 @@ ppc64_elf_relocate_section (bfd *output_bfd, if (h != NULL) { bfd_boolean dyn = htab->elf.dynamic_sections_created; - if (!WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, + if (!WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), &h->elf) - || (info->shared + || (bfd_link_pic (info) && SYMBOL_REFERENCES_LOCAL (info, &h->elf))) /* This is actually a static link, or it is a -Bsymbolic link and the symbol is defined @@ -14139,7 +14139,7 @@ ppc64_elf_relocate_section (bfd *output_bfd, : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC); if (ifunc) relgot = htab->elf.irelplt; - else if ((info->shared || indx != 0) + else if ((bfd_link_pic (info) || indx != 0) && (h == NULL || (tls_type == (TLS_TLS | TLS_LD) && !h->elf.def_dynamic) @@ -14357,7 +14357,7 @@ ppc64_elf_relocate_section (bfd *output_bfd, } if (htab->elf.tls_sec != NULL) addend -= htab->elf.tls_sec->vma + TP_OFFSET; - if (info->shared) + if (bfd_link_pic (info)) /* The TPREL16 relocs shouldn't really be used in shared libs as they will result in DT_TEXTREL being set, but support them anyway. */ @@ -14434,19 +14434,19 @@ ppc64_elf_relocate_section (bfd *output_bfd, if (NO_OPD_RELOCS && is_opd) break; - if ((info->shared + if ((bfd_link_pic (info) && (h == NULL || ELF_ST_VISIBILITY (h->elf.other) == STV_DEFAULT || h->elf.root.type != bfd_link_hash_undefweak) && (must_be_dyn_reloc (info, r_type) || !SYMBOL_CALLS_LOCAL (info, &h->elf))) || (ELIMINATE_COPY_RELOCS - && !info->shared + && !bfd_link_pic (info) && h != NULL && h->elf.dynindx != -1 && !h->elf.non_got_ref && !h->elf.def_regular) - || (!info->shared + || (!bfd_link_pic (info) && (h != NULL ? h->elf.type == STT_GNU_IFUNC : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC))) @@ -14909,7 +14909,7 @@ ppc64_elf_relocate_section (bfd *output_bfd, adjusted. Worse, reloc symbol indices will be for the output file rather than the input. Save a copy of the relocs for opd_entry_value. */ - if (is_opd && (info->emitrelocations || info->relocatable)) + if (is_opd && (info->emitrelocations || bfd_link_relocatable (info))) { bfd_size_type amt; amt = input_section->reloc_count * sizeof (Elf_Internal_Rela); @@ -14944,7 +14944,7 @@ ppc64_elf_output_symbol_hook (struct bfd_link_info *info, return 1; value = elfsym->st_value - input_sec->output_offset; - if (!info->relocatable) + if (!bfd_link_relocatable (info)) value -= input_sec->output_section->vma; adjust = opd->adjust[OPD_NDX (value)]; diff --git a/bfd/elf64-s390.c b/bfd/elf64-s390.c index c9db9546a93..2e505f33899 100644 --- a/bfd/elf64-s390.c +++ b/bfd/elf64-s390.c @@ -775,11 +775,11 @@ elf_s390_create_dynamic_sections (bfd *dynobj, htab->elf.splt = bfd_get_linker_section (dynobj, ".plt"); htab->elf.srelplt = bfd_get_linker_section (dynobj, ".rela.plt"); htab->sdynbss = bfd_get_linker_section (dynobj, ".dynbss"); - if (!info->shared) + if (!bfd_link_pic (info)) htab->srelbss = bfd_get_linker_section (dynobj, ".rela.bss"); if (!htab->elf.splt || !htab->elf.srelplt || !htab->sdynbss - || (!info->shared && !htab->srelbss)) + || (!bfd_link_pic (info) && !htab->srelbss)) abort (); return TRUE; @@ -856,7 +856,7 @@ elf_s390_tls_transition (struct bfd_link_info *info, int r_type, int is_local) { - if (info->shared) + if (bfd_link_pic (info)) return r_type; switch (r_type) @@ -896,7 +896,7 @@ elf_s390_check_relocs (bfd *abfd, bfd_signed_vma *local_got_refcounts; int tls_type, old_tls_type; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; BFD_ASSERT (is_s390_elf (abfd)); @@ -1109,7 +1109,7 @@ elf_s390_check_relocs (bfd *abfd, case R_390_TLS_GOTIE20: case R_390_TLS_GOTIE64: case R_390_TLS_IEENT: - if (info->shared) + if (bfd_link_pic (info)) info->flags |= DF_STATIC_TLS; /* Fall through */ @@ -1186,10 +1186,10 @@ elf_s390_check_relocs (bfd *abfd, /* For static linking and executables this reloc will be calculated at linktime otherwise a TLS_TPOFF runtime reloc will be generated. */ - if (r_type == R_390_TLS_LE64 && info->pie) + if (r_type == R_390_TLS_LE64 && bfd_link_pie (info)) break; - if (!info->shared) + if (!bfd_link_pic (info)) break; info->flags |= DF_STATIC_TLS; /* Fall through */ @@ -1215,7 +1215,7 @@ elf_s390_check_relocs (bfd *abfd, adjust_dynamic_symbol. */ h->non_got_ref = 1; - if (!info->shared) + if (!bfd_link_pic (info)) { /* We may need a .plt entry if the function this reloc refers to is in a shared lib. */ @@ -1244,7 +1244,7 @@ elf_s390_check_relocs (bfd *abfd, may need to keep relocations for symbols satisfied by a dynamic library if we manage to avoid copy relocs for the symbol. */ - if ((info->shared + if ((bfd_link_pic (info) && (sec->flags & SEC_ALLOC) != 0 && ((ELF64_R_TYPE (rel->r_info) != R_390_PC16 && ELF64_R_TYPE (rel->r_info) != R_390_PC12DBL @@ -1258,7 +1258,7 @@ elf_s390_check_relocs (bfd *abfd, || h->root.type == bfd_link_hash_defweak || !h->def_regular)))) || (ELIMINATE_COPY_RELOCS - && !info->shared + && !bfd_link_pic (info) && (sec->flags & SEC_ALLOC) != 0 && h != NULL && (h->root.type == bfd_link_hash_defweak @@ -1395,7 +1395,7 @@ elf_s390_gc_sweep_hook (bfd *abfd, bfd_signed_vma *local_got_refcounts; const Elf_Internal_Rela *rel, *relend; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; htab = elf_s390_hash_table (info); @@ -1505,7 +1505,7 @@ elf_s390_gc_sweep_hook (bfd *abfd, case R_390_PC32: case R_390_PC32DBL: case R_390_PC64: - if (info->shared) + if (bfd_link_pic (info)) break; /* Fall through */ @@ -1645,7 +1645,7 @@ elf_s390_adjust_dynamic_symbol (struct bfd_link_info *info, only references to the symbol are via the global offset table. For such cases we need not do anything here; the relocations will be handled correctly by relocate_section. */ - if (info->shared) + if (bfd_link_pic (info)) return TRUE; /* If there are no references to this symbol that do not use the @@ -1747,7 +1747,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, return FALSE; } - if (info->shared + if (bfd_link_pic (info) || WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, 0, h)) { asection *s = htab->elf.splt; @@ -1764,7 +1764,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, location in the .plt. This is required to make function pointers compare as equal between the normal executable and the shared library. */ - if (! info->shared + if (! bfd_link_pic (info) && !h->def_regular) { h->root.u.def.section = s; @@ -1800,7 +1800,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, to R_390_TLS_LE64 requiring no TLS entry. For GOTIE12 and IEENT we can save the dynamic TLS relocation. */ if (h->got.refcount > 0 - && !info->shared + && !bfd_link_pic (info) && h->dynindx == -1 && elf_s390_hash_entry(h)->tls_type >= GOT_TLS_IE) { @@ -1846,7 +1846,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, htab->elf.srelgot->size += 2 * sizeof (Elf64_External_Rela); else if ((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT || h->root.type != bfd_link_hash_undefweak) - && (info->shared + && (bfd_link_pic (info) || WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h))) htab->elf.srelgot->size += sizeof (Elf64_External_Rela); } @@ -1862,7 +1862,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, space for pc-relative relocs that have become local due to symbol visibility changes. */ - if (info->shared) + if (bfd_link_pic (info)) { if (SYMBOL_CALLS_LOCAL (info, h)) { @@ -1989,7 +1989,7 @@ elf_s390_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, if (htab->elf.dynamic_sections_created) { /* Set the contents of the .interp section to the interpreter. */ - if (info->executable) + if (bfd_link_executable (info)) { s = bfd_get_linker_section (dynobj, ".interp"); if (s == NULL) @@ -2057,7 +2057,7 @@ elf_s390_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, s->size += GOT_ENTRY_SIZE; if (*local_tls_type == GOT_TLS_GD) s->size += GOT_ENTRY_SIZE; - if (info->shared) + if (bfd_link_pic (info)) srela->size += sizeof (Elf64_External_Rela); } else @@ -2167,7 +2167,7 @@ elf_s390_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, #define add_dynamic_entry(TAG, VAL) \ _bfd_elf_add_dynamic_entry (info, TAG, VAL) - if (info->executable) + if (bfd_link_executable (info)) { if (!add_dynamic_entry (DT_DEBUG, 0)) return FALSE; @@ -2391,7 +2391,7 @@ elf_s390_relocate_section (bfd *output_bfd, RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) continue; switch (r_type) @@ -2476,8 +2476,10 @@ elf_s390_relocate_section (bfd *output_bfd, finish_dynamic_symbol. */ } } - else if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h) - || (info->shared + else if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, + bfd_link_pic (info), + h) + || (bfd_link_pic (info) && SYMBOL_REFERENCES_LOCAL (info, h)) || (ELF_ST_VISIBILITY (h->other) && h->root.type == bfd_link_hash_undefweak)) @@ -2504,7 +2506,7 @@ elf_s390_relocate_section (bfd *output_bfd, } if ((h->def_regular - && info->shared + && bfd_link_pic (info) && SYMBOL_REFERENCES_LOCAL (info, h)) /* lgrl rx,sym@GOTENT -> larl rx, sym */ && ((r_type == R_390_GOTENT @@ -2554,7 +2556,7 @@ elf_s390_relocate_section (bfd *output_bfd, bfd_put_64 (output_bfd, relocation, htab->elf.sgot->contents + off); - if (info->shared) + if (bfd_link_pic (info)) { asection *s; Elf_Internal_Rela outrel; @@ -2692,7 +2694,7 @@ elf_s390_relocate_section (bfd *output_bfd, && s390_is_ifunc_symbol_p (h) && h->def_regular) { - if (!info->shared || !h->non_got_ref) + if (!bfd_link_pic (info) || !h->non_got_ref) { /* For a non-shared object STT_GNU_IFUNC symbol must go through PLT. */ @@ -2723,7 +2725,7 @@ elf_s390_relocate_section (bfd *output_bfd, if (h->dynindx == -1 || h->forced_local - || info->executable) + || bfd_link_executable (info)) { /* This symbol is resolved locally. */ outrel.r_info = ELF64_R_INFO (0, R_390_IRELATIVE); @@ -2752,7 +2754,7 @@ elf_s390_relocate_section (bfd *output_bfd, if ((input_section->flags & SEC_ALLOC) == 0) break; - if ((info->shared + if ((bfd_link_pic (info) && (h == NULL || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT || h->root.type != bfd_link_hash_undefweak) @@ -2765,7 +2767,7 @@ elf_s390_relocate_section (bfd *output_bfd, && r_type != R_390_PC64) || !SYMBOL_CALLS_LOCAL (info, h))) || (ELIMINATE_COPY_RELOCS - && !info->shared + && !bfd_link_pic (info) && h != NULL && h->dynindx != -1 && !h->non_got_ref @@ -2807,7 +2809,7 @@ elf_s390_relocate_section (bfd *output_bfd, || r_type == R_390_PC32 || r_type == R_390_PC32DBL || r_type == R_390_PC64 - || !info->shared + || !bfd_link_pic (info) || !SYMBOLIC_BIND (info, h) || !h->def_regular)) { @@ -2879,7 +2881,7 @@ elf_s390_relocate_section (bfd *output_bfd, /* Relocations for tls literal pool entries. */ case R_390_TLS_IE64: - if (info->shared) + if (bfd_link_pic (info)) { Elf_Internal_Rela outrel; asection *sreloc; @@ -2907,7 +2909,7 @@ elf_s390_relocate_section (bfd *output_bfd, else if (h != NULL) { tls_type = elf_s390_hash_entry(h)->tls_type; - if (!info->shared && h->dynindx == -1 && tls_type >= GOT_TLS_IE) + if (!bfd_link_pic (info) && h->dynindx == -1 && tls_type >= GOT_TLS_IE) r_type = R_390_TLS_LE64; } if (r_type == R_390_TLS_GD64 && tls_type >= GOT_TLS_IE) @@ -3018,14 +3020,14 @@ elf_s390_relocate_section (bfd *output_bfd, if (local_got_offsets == NULL) abort(); off = local_got_offsets[r_symndx]; - if (info->shared) + if (bfd_link_pic (info)) goto emit_tls_relocs; } else { off = h->got.offset; tls_type = elf_s390_hash_entry(h)->tls_type; - if (info->shared || h->dynindx != -1 || tls_type < GOT_TLS_IE) + if (bfd_link_pic (info) || h->dynindx != -1 || tls_type < GOT_TLS_IE) goto emit_tls_relocs; } @@ -3042,7 +3044,7 @@ elf_s390_relocate_section (bfd *output_bfd, break; case R_390_TLS_LDM64: - if (! info->shared) + if (! bfd_link_pic (info)) /* The literal pool entry this relocation refers to gets ignored by the optimized code of the local exec model. Do nothing and the value will turn out zero. */ @@ -3080,7 +3082,7 @@ elf_s390_relocate_section (bfd *output_bfd, break; case R_390_TLS_LE64: - if (info->shared && !info->pie) + if (bfd_link_pic (info) && !bfd_link_pie (info)) { /* Linking a shared library with non-fpic code requires a R_390_TLS_TPOFF relocation. */ @@ -3117,7 +3119,7 @@ elf_s390_relocate_section (bfd *output_bfd, continue; case R_390_TLS_LDO64: - if (info->shared || (input_section->flags & SEC_DEBUGGING)) + if (bfd_link_pic (info) || (input_section->flags & SEC_DEBUGGING)) relocation -= dtpoff_base (info); else /* When converting LDO to LE, we must negate. */ @@ -3139,7 +3141,7 @@ elf_s390_relocate_section (bfd *output_bfd, if (r_type == R_390_TLS_LOAD) { - if (!info->shared && (h == NULL || h->dynindx == -1)) + if (!bfd_link_pic (info) && (h == NULL || h->dynindx == -1)) { /* IE->LE transition. Four valid cases: lg %rx,(0,%ry) -> sllg %rx,%ry,0 @@ -3181,7 +3183,7 @@ elf_s390_relocate_section (bfd *output_bfd, insn1 = bfd_get_16 (input_bfd, contents + rel->r_offset + 4); if ((insn0 & 0xffff0000) != 0xc0e50000) invalid_tls_insn (input_bfd, input_section, rel); - if (!info->shared && (h == NULL || h->dynindx == -1)) + if (!bfd_link_pic (info) && (h == NULL || h->dynindx == -1)) { /* GD->LE transition. brasl %r14,__tls_get_addr@plt -> brcl 0,. */ @@ -3200,7 +3202,7 @@ elf_s390_relocate_section (bfd *output_bfd, } else if (r_type == R_390_TLS_LDCALL) { - if (!info->shared) + if (!bfd_link_pic (info)) { unsigned int insn0, insn1; @@ -3370,7 +3372,7 @@ elf_s390_finish_ifunc_symbol (bfd *output_bfd, if (!h || h->dynindx == -1 - || ((info->executable + || ((bfd_link_executable (info) || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT) && h->def_regular)) { @@ -3512,7 +3514,7 @@ elf_s390_finish_dynamic_symbol (bfd *output_bfd, if (h->def_regular && s390_is_ifunc_symbol_p (h)) { - if (info->shared) + if (bfd_link_pic (info)) { /* An explicit GOT slot usage needs GLOB_DAT. If the symbol references local the implicit got.iplt slot @@ -3532,7 +3534,7 @@ elf_s390_finish_dynamic_symbol (bfd *output_bfd, return TRUE; } } - else if (info->shared + else if (bfd_link_pic (info) && SYMBOL_REFERENCES_LOCAL (info, h)) { /* If this is a static link, or it is a -Bsymbolic link and diff --git a/bfd/elf64-sh64.c b/bfd/elf64-sh64.c index b539a4601d9..e4608953dff 100644 --- a/bfd/elf64-sh64.c +++ b/bfd/elf64-sh64.c @@ -53,7 +53,7 @@ #define elf_sh64_plt_symbol_offset(info) 0 /* Return offset of the relocation in PLT entry. */ -#define elf_sh64_plt_reloc_offset(info) (info->shared ? 52 : 44) +#define elf_sh64_plt_reloc_offset(info) (bfd_link_pic (info) ? 52 : 44) #define ELF_DYNAMIC_INTERPRETER "/usr/lib/libc.so.1" @@ -1516,7 +1516,7 @@ sh_elf64_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, if (sec != NULL && discarded_section (sec)) /* Handled below. */ ; - else if (info->relocatable) + else if (bfd_link_relocatable (info)) { /* This is a relocatable link. We don't have to change anything, unless the reloc is against a section symbol, @@ -1592,7 +1592,7 @@ sh_elf64_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, || r_type == R_SH_GOT_MEDHI16 || r_type == R_SH_GOT_HI16) && elf_hash_table (info)->dynamic_sections_created - && (! info->shared + && (! bfd_link_pic (info) || (! info->symbolic && h->dynindx != -1) || !h->def_regular)) /* The cases above are those in which relocation is @@ -1600,7 +1600,7 @@ sh_elf64_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, below are those in which we must defer relocation to run-time, because we can't resolve absolute addresses when creating a shared library. */ - || (info->shared + || (bfd_link_pic (info) && ((! info->symbolic && h->dynindx != -1) || !h->def_regular) && ((r_type == R_SH_64 @@ -1629,7 +1629,7 @@ sh_elf64_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, STT_DATALABEL on the way to it. */ | ((h->other & STO_SH5_ISA32) != 0 && ! seen_stt_datalabel)); - else if (!info->relocatable + else if (!bfd_link_relocatable (info) && (_bfd_elf_section_offset (output_bfd, info, input_section, rel->r_offset) @@ -1649,7 +1649,7 @@ sh_elf64_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, else if (info->unresolved_syms_in_objects == RM_IGNORE && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT) ; - else if (!info->relocatable) + else if (!bfd_link_relocatable (info)) { if (! ((*info->callbacks->undefined_symbol) (info, h->root.root.string, input_bfd, @@ -1664,7 +1664,7 @@ sh_elf64_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) continue; disp = (relocation @@ -1691,7 +1691,7 @@ sh_elf64_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, { case R_SH_64: case R_SH_64_PCREL: - if (info->shared + if (bfd_link_pic (info) && (input_section->flags & SEC_ALLOC) != 0 && (r_type != R_SH_64_PCREL || (h != NULL @@ -1785,7 +1785,7 @@ sh_elf64_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, if (h == NULL || ELF_ST_VISIBILITY (h->other) == STV_INTERNAL || ELF_ST_VISIBILITY (h->other) == STV_HIDDEN - || ! info->shared + || ! bfd_link_pic (info) || info->symbolic || h->dynindx == -1 || h->plt.offset == (bfd_vma) -1 @@ -1838,7 +1838,7 @@ sh_elf64_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, BFD_ASSERT (off != (bfd_vma) -1); if (! elf_hash_table (info)->dynamic_sections_created - || (info->shared + || (bfd_link_pic (info) && (info->symbolic || h->dynindx == -1 || ELF_ST_VISIBILITY (h->other) == STV_INTERNAL || ELF_ST_VISIBILITY (h->other) == STV_HIDDEN) @@ -1907,7 +1907,7 @@ sh_elf64_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, { bfd_put_64 (output_bfd, relocation, sgot->contents + off); - if (info->shared) + if (bfd_link_pic (info)) { asection *s; Elf_Internal_Rela outrel; @@ -2378,7 +2378,7 @@ sh_elf64_check_relocs (bfd *abfd, struct bfd_link_info *info, srelgot = NULL; sreloc = NULL; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; symtab_hdr = &elf_tdata (abfd)->symtab_hdr; @@ -2477,7 +2477,7 @@ sh_elf64_check_relocs (bfd *abfd, struct bfd_link_info *info, } if (srelgot == NULL - && (h != NULL || info->shared)) + && (h != NULL || bfd_link_pic (info))) { srelgot = bfd_get_linker_section (dynobj, ".rela.got"); if (srelgot == NULL) @@ -2569,7 +2569,7 @@ sh_elf64_check_relocs (bfd *abfd, struct bfd_link_info *info, local_got_offsets[r_symndx] = sgot->size; } - if (info->shared) + if (bfd_link_pic (info)) { /* If we are generating a shared object, we need to output a R_SH_RELATIVE reloc so that the dynamic @@ -2594,7 +2594,7 @@ sh_elf64_check_relocs (bfd *abfd, struct bfd_link_info *info, if (h == NULL || ELF_ST_VISIBILITY (h->other) == STV_INTERNAL || ELF_ST_VISIBILITY (h->other) == STV_HIDDEN - || ! info->shared + || ! bfd_link_pic (info) || info->symbolic || h->dynindx == -1 || h->got.offset != (bfd_vma) -1) @@ -2652,7 +2652,7 @@ sh_elf64_check_relocs (bfd *abfd, struct bfd_link_info *info, later (it is never cleared). We account for that possibility below by storing information in the pcrel_relocs_copied field of the hash table entry. */ - if (info->shared + if (bfd_link_pic (info) && (sec->flags & SEC_ALLOC) != 0 && (ELF32_R_TYPE (rel->r_info) != R_SH_64_PCREL || (h != NULL @@ -2763,7 +2763,7 @@ sh64_elf64_add_symbol_hook (bfd *abfd, struct bfd_link_info *info, right, and tweak the name when it's output. Otherwise, we make an indirect symbol of it. */ flagword flags - = info->relocatable || info->emitrelocations + = bfd_link_relocatable (info) || info->emitrelocations ? BSF_GLOBAL : BSF_GLOBAL | BSF_INDIRECT; char *dl_name @@ -2807,9 +2807,9 @@ sh64_elf64_add_symbol_hook (bfd *abfd, struct bfd_link_info *info, free (dl_name); if (h->type != STT_DATALABEL - || ((info->relocatable || info->emitrelocations) + || ((bfd_link_relocatable (info) || info->emitrelocations) && h->root.type != bfd_link_hash_undefined) - || (! info->relocatable && !info->emitrelocations + || (! bfd_link_relocatable (info) && !info->emitrelocations && h->root.type != bfd_link_hash_indirect)) { /* Make sure we don't get confused on invalid input. */ @@ -2853,7 +2853,7 @@ sh64_elf64_link_output_symbol_hook (struct bfd_link_info *info, { char *name = (char *) cname; - if (info->relocatable || info->emitrelocations) + if (bfd_link_relocatable (info) || info->emitrelocations) { if (ELF_ST_TYPE (sym->st_info) == STT_DATALABEL) name[strlen (name) - strlen (DATALABEL_SUFFIX)] = 0; @@ -3161,7 +3161,7 @@ sh64_elf64_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) h->type = STT_OBJECT; elf_hash_table (info)->hplt = h; - if (info->shared + if (bfd_link_pic (info) && ! bfd_elf_link_record_dynamic_symbol (info, h)) return FALSE; } @@ -3201,7 +3201,7 @@ sh64_elf64_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) be needed, we can discard it later. We will never need this section when generating a shared object, since they do not use copy relocs. */ - if (! info->shared) + if (! bfd_link_pic (info)) { s = bfd_make_section_anyway_with_flags (abfd, (bed->default_use_rela_p @@ -3245,7 +3245,7 @@ sh64_elf64_adjust_dynamic_symbol (struct bfd_link_info *info, if (h->type == STT_FUNC || h->needs_plt) { - if (! info->shared + if (! bfd_link_pic (info) && !h->def_dynamic && !h->ref_dynamic) { @@ -3278,7 +3278,7 @@ sh64_elf64_adjust_dynamic_symbol (struct bfd_link_info *info, location in the .plt. This is required to make function pointers compare as equal between the normal executable and the shared library. */ - if (! info->shared + if (! bfd_link_pic (info) && !h->def_regular) { h->root.u.def.section = s; @@ -3325,7 +3325,7 @@ sh64_elf64_adjust_dynamic_symbol (struct bfd_link_info *info, only references to the symbol are via the global offset table. For such cases we need not do anything here; the relocations will be handled correctly by relocate_section. */ - if (info->shared) + if (bfd_link_pic (info)) return TRUE; /* If there are no references to this symbol that do not use the @@ -3404,7 +3404,7 @@ sh64_elf64_size_dynamic_sections (bfd *output_bfd, if (elf_hash_table (info)->dynamic_sections_created) { /* Set the contents of the .interp section to the interpreter. */ - if (info->executable) + if (bfd_link_executable (info)) { s = bfd_get_linker_section (dynobj, ".interp"); BFD_ASSERT (s != NULL); @@ -3428,7 +3428,7 @@ sh64_elf64_size_dynamic_sections (bfd *output_bfd, PC relative relocs against symbols defined in a regular object. We allocated space for them in the check_relocs routine, but we will not fill them in in the relocate_section routine. */ - if (info->shared && info->symbolic) + if (bfd_link_pic (info) && info->symbolic) sh64_elf64_link_hash_traverse (elf_hash_table (info), sh64_elf64_discard_copies, NULL); @@ -3525,7 +3525,7 @@ sh64_elf64_size_dynamic_sections (bfd *output_bfd, must add the entries now so that we get the correct size for the .dynamic section. The DT_DEBUG entry is filled in by the dynamic linker and used by the debugger. */ - if (info->executable) + if (bfd_link_executable (info)) { if (!_bfd_elf_add_dynamic_entry (info, DT_DEBUG, 0)) return FALSE; @@ -3604,11 +3604,11 @@ sh64_elf64_finish_dynamic_symbol (bfd *output_bfd, The first three are reserved. */ got_offset = (plt_index + 3) * 8; - if (info->shared) + if (bfd_link_pic (info)) got_offset -= GOT_BIAS; /* Fill in the entry in the procedure linkage table. */ - if (! info->shared) + if (! bfd_link_pic (info)) { if (elf_sh64_plt_entry == NULL) { @@ -3647,7 +3647,7 @@ sh64_elf64_finish_dynamic_symbol (bfd *output_bfd, + elf_sh64_plt_symbol_offset (info))); } - if (info->shared) + if (bfd_link_pic (info)) got_offset += GOT_BIAS; movi_shori_putval (output_bfd, @@ -3704,7 +3704,7 @@ sh64_elf64_finish_dynamic_symbol (bfd *output_bfd, the symbol was forced to be local because of a version file. The entry in the global offset table will already have been initialized in the relocate_section function. */ - if (info->shared + if (bfd_link_pic (info) && (info->symbolic || h->dynindx == -1) && h->def_regular) { @@ -3858,7 +3858,7 @@ sh64_elf64_finish_dynamic_sections (bfd *output_bfd, splt = bfd_get_linker_section (dynobj, ".plt"); if (splt && splt->size > 0) { - if (info->shared) + if (bfd_link_pic (info)) { if (elf_sh64_pic_plt_entry == NULL) { diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c index 348b297d8f4..987ce0e5b77 100644 --- a/bfd/elf64-x86-64.c +++ b/bfd/elf64-x86-64.c @@ -1071,7 +1071,7 @@ elf_x86_64_create_dynamic_sections (bfd *dynobj, if (!htab->sdynbss) abort (); - if (info->executable) + if (bfd_link_executable (info)) { /* Always allow copy relocs for building executables. */ asection *s = bfd_get_linker_section (dynobj, ".rela.bss"); @@ -1434,7 +1434,7 @@ elf_x86_64_tls_transition (struct bfd_link_info *info, bfd *abfd, case R_X86_64_GOTPC32_TLSDESC: case R_X86_64_TLSDESC_CALL: case R_X86_64_GOTTPOFF: - if (info->executable) + if (bfd_link_executable (info)) { if (h == NULL) to_type = R_X86_64_TPOFF32; @@ -1449,7 +1449,7 @@ elf_x86_64_tls_transition (struct bfd_link_info *info, bfd *abfd, { unsigned int new_to_type = to_type; - if (info->executable + if (bfd_link_executable (info) && h != NULL && h->dynindx == -1 && tls_type == GOT_TLS_IE) @@ -1473,7 +1473,7 @@ elf_x86_64_tls_transition (struct bfd_link_info *info, bfd *abfd, break; case R_X86_64_TLSLD: - if (info->executable) + if (bfd_link_executable (info)) to_type = R_X86_64_TPOFF32; break; @@ -1550,7 +1550,7 @@ elf_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sreloc; bfd_boolean use_plt_got; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; BFD_ASSERT (is_x86_64_elf (abfd)); @@ -1742,7 +1742,7 @@ elf_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info, goto create_got; case R_X86_64_TPOFF32: - if (!info->executable && ABI_64_P (abfd)) + if (!bfd_link_executable (info) && ABI_64_P (abfd)) { if (h) name = h->root.root.string; @@ -1759,7 +1759,7 @@ elf_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info, break; case R_X86_64_GOTTPOFF: - if (!info->executable) + if (!bfd_link_executable (info)) info->flags |= DF_STATIC_TLS; /* Fall through */ @@ -1911,7 +1911,7 @@ elf_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info, cannot be used in shared libs. Don't error out for sections we don't care about, such as debug sections or non-constant sections. */ - if (info->shared + if (bfd_link_pic (info) && (sec->flags & SEC_ALLOC) != 0 && (sec->flags & SEC_READONLY) != 0) { @@ -1934,7 +1934,7 @@ elf_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info, case R_X86_64_PC64: case R_X86_64_64: pointer: - if (h != NULL && info->executable) + if (h != NULL && bfd_link_executable (info)) { /* If this reloc is in a read-only section, we might need a copy reloc. We can't check reliably at this @@ -1976,7 +1976,7 @@ do_size: may need to keep relocations for symbols satisfied by a dynamic library if we manage to avoid copy relocs for the symbol. */ - if ((info->shared + if ((bfd_link_pic (info) && (sec->flags & SEC_ALLOC) != 0 && (! IS_X86_64_PCREL_TYPE (r_type) || (h != NULL @@ -1984,7 +1984,7 @@ do_size: || h->root.type == bfd_link_hash_defweak || !h->def_regular)))) || (ELIMINATE_COPY_RELOCS - && !info->shared + && !bfd_link_pic (info) && (sec->flags & SEC_ALLOC) != 0 && h != NULL && (h->root.type == bfd_link_hash_defweak @@ -2157,7 +2157,7 @@ elf_x86_64_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info, bfd_signed_vma *local_got_refcounts; const Elf_Internal_Rela *rel, *relend; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; htab = elf_x86_64_hash_table (info); @@ -2273,7 +2273,7 @@ elf_x86_64_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info, case R_X86_64_PC64: case R_X86_64_SIZE32: case R_X86_64_SIZE64: - if (info->shared + if (bfd_link_pic (info) && (h == NULL || h->type != STT_GNU_IFUNC)) break; /* Fall thru */ @@ -2409,7 +2409,7 @@ elf_x86_64_adjust_dynamic_symbol (struct bfd_link_info *info, only references to the symbol are via the global offset table. For such cases we need not do anything here; the relocations will be handled correctly by relocate_section. */ - if (!info->executable) + if (!bfd_link_executable (info)) return TRUE; /* If there are no references to this symbol that do not use the @@ -2568,7 +2568,7 @@ elf_x86_64_allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) return FALSE; } - if (info->shared + if (bfd_link_pic (info) || WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, 0, h)) { asection *s = htab->elf.splt; @@ -2595,7 +2595,7 @@ elf_x86_64_allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) location in the .plt. This is required to make function pointers compare as equal between the normal executable and the shared library. */ - if (! info->shared + if (! bfd_link_pic (info) && !h->def_regular) { if (use_plt_got) @@ -2659,7 +2659,7 @@ elf_x86_64_allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) /* If R_X86_64_GOTTPOFF symbol is now local to the binary, make it a R_X86_64_TPOFF32 requiring no GOT entry. */ if (h->got.refcount > 0 - && info->executable + && bfd_link_executable (info) && h->dynindx == -1 && elf_x86_64_hash_entry (h)->tls_type == GOT_TLS_IE) { @@ -2708,7 +2708,7 @@ elf_x86_64_allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) else if (! GOT_TLS_GDESC_P (tls_type) && (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT || h->root.type != bfd_link_hash_undefweak) - && (info->shared + && (bfd_link_pic (info) || WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h))) htab->elf.srelgot->size += bed->s->sizeof_rela; if (GOT_TLS_GDESC_P (tls_type)) @@ -2729,7 +2729,7 @@ elf_x86_64_allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) space for pc-relative relocs that have become local due to symbol visibility changes. */ - if (info->shared) + if (bfd_link_pic (info)) { /* Relocs that use pc_count are those that appear on a call insn, or certain REL relocs that can generated via assembly. @@ -2770,7 +2770,7 @@ elf_x86_64_allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) } /* For PIE, discard space for pc-relative relocs against symbols which turn out to need copy relocs. */ - else if (info->executable + else if (bfd_link_executable (info) && (h->needs_copy || eh->needs_copy) && h->def_dynamic && !h->def_regular) @@ -2876,7 +2876,7 @@ elf_x86_64_readonly_dynrelocs (struct elf_link_hash_entry *h, info->flags |= DF_TEXTREL; - if ((info->warn_shared_textrel && info->shared) + if ((info->warn_shared_textrel && bfd_link_pic (info)) || info->error_textrel) info->callbacks->einfo (_("%P: %B: warning: relocation against `%s' in readonly section `%A'\n"), p->sec->owner, h->root.root.string, @@ -3181,7 +3181,7 @@ elf_x86_64_size_dynamic_sections (bfd *output_bfd, if (htab->elf.dynamic_sections_created) { /* Set the contents of the .interp section to the interpreter. */ - if (info->executable) + if (bfd_link_executable (info)) { s = bfd_get_linker_section (dynobj, ".interp"); if (s == NULL) @@ -3234,7 +3234,7 @@ elf_x86_64_size_dynamic_sections (bfd *output_bfd, && (info->flags & DF_TEXTREL) == 0) { info->flags |= DF_TEXTREL; - if ((info->warn_shared_textrel && info->shared) + if ((info->warn_shared_textrel && bfd_link_pic (info)) || info->error_textrel) info->callbacks->einfo (_("%P: %B: warning: relocation in readonly section `%A'\n"), p->sec->owner, p->sec); @@ -3275,7 +3275,7 @@ elf_x86_64_size_dynamic_sections (bfd *output_bfd, if (GOT_TLS_GD_P (*local_tls_type)) s->size += GOT_ENTRY_SIZE; } - if (info->shared + if (bfd_link_pic (info) || GOT_TLS_GD_ANY_P (*local_tls_type) || *local_tls_type == GOT_TLS_IE) { @@ -3470,7 +3470,7 @@ elf_x86_64_size_dynamic_sections (bfd *output_bfd, #define add_dynamic_entry(TAG, VAL) \ _bfd_elf_add_dynamic_entry (info, TAG, VAL) - if (info->executable) + if (bfd_link_executable (info)) { if (!add_dynamic_entry (DT_DEBUG, 0)) return FALSE; @@ -3587,7 +3587,7 @@ elf_x86_64_set_tls_module_base (struct bfd_link_info *info) struct elf_x86_64_link_hash_table *htab; struct bfd_link_hash_entry *base; - if (!info->executable) + if (!bfd_link_executable (info)) return; htab = elf_x86_64_hash_table (info); @@ -3738,7 +3738,7 @@ elf_x86_64_relocate_section (bfd *output_bfd, st_size = sym->st_size; /* Relocate against local STT_GNU_IFUNC symbol. */ - if (!info->relocatable + if (!bfd_link_relocatable (info) && ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC) { h = elf_x86_64_get_local_sym_hash (htab, input_bfd, @@ -3767,7 +3767,7 @@ elf_x86_64_relocate_section (bfd *output_bfd, RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) continue; if (rel->r_addend == 0 && !ABI_64_P (output_bfd)) @@ -3851,7 +3851,7 @@ elf_x86_64_relocate_section (bfd *output_bfd, return FALSE; case R_X86_64_32S: - if (info->shared) + if (bfd_link_pic (info)) abort (); goto do_relocation; @@ -3878,7 +3878,7 @@ elf_x86_64_relocate_section (bfd *output_bfd, /* Generate dynamic relcoation only when there is a non-GOT reference in a shared object. */ - if (info->shared && h->non_got_ref) + if (bfd_link_pic (info) && h->non_got_ref) { Elf_Internal_Rela outrel; asection *sreloc; @@ -3898,7 +3898,7 @@ elf_x86_64_relocate_section (bfd *output_bfd, if (h->dynindx == -1 || h->forced_local - || info->executable) + || bfd_link_executable (info)) { /* This symbol is resolved locally. */ outrel.r_info = htab->r_info (0, R_X86_64_IRELATIVE); @@ -4028,8 +4028,8 @@ elf_x86_64_relocate_section (bfd *output_bfd, dyn = htab->elf.dynamic_sections_created; - if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h) - || (info->shared + if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), h) + || (bfd_link_pic (info) && SYMBOL_REFERENCES_LOCAL (info, h)) || (ELF_ST_VISIBILITY (h->other) && h->root.type == bfd_link_hash_undefweak)) @@ -4076,7 +4076,7 @@ elf_x86_64_relocate_section (bfd *output_bfd, bfd_put_64 (output_bfd, relocation, base_got->contents + off); - if (info->shared) + if (bfd_link_pic (info)) { asection *s; Elf_Internal_Rela outrel; @@ -4118,7 +4118,7 @@ elf_x86_64_relocate_section (bfd *output_bfd, symbol for shared library since it may not be local when used as function address or with copy relocation. We also need to make sure that a symbol is referenced locally. */ - if (info->shared && h) + if (bfd_link_pic (info) && h) { if (!h->def_regular) { @@ -4146,7 +4146,7 @@ elf_x86_64_relocate_section (bfd *output_bfd, bfd_set_error (bfd_error_bad_value); return FALSE; } - else if (!info->executable + else if (!bfd_link_executable (info) && !SYMBOL_REFERENCES_LOCAL (info, h) && (h->type == STT_FUNC || h->type == STT_OBJECT) @@ -4266,11 +4266,11 @@ elf_x86_64_relocate_section (bfd *output_bfd, case R_X86_64_PC32_BND: /* Don't complain about -fPIC if the symbol is undefined when building executable. */ - if (info->shared + if (bfd_link_pic (info) && (input_section->flags & SEC_ALLOC) != 0 && (input_section->flags & SEC_READONLY) != 0 && h != NULL - && !(info->executable + && !(bfd_link_executable (info) && h->root.type == bfd_link_hash_undefined)) { bfd_boolean fail = FALSE; @@ -4285,7 +4285,7 @@ elf_x86_64_relocate_section (bfd *output_bfd, defined locally or for a branch. */ fail = !h->def_regular && !branch; } - else if (!(info->executable + else if (!(bfd_link_executable (info) && (h->needs_copy || eh->needs_copy))) { /* Symbol doesn't need copy reloc and isn't referenced @@ -4347,8 +4347,8 @@ direct: /* Don't copy a pc-relative relocation into the output file if the symbol needs copy reloc or the symbol is undefined when building executable. */ - if ((info->shared - && !(info->executable + if ((bfd_link_pic (info) + && !(bfd_link_executable (info) && h != NULL && (h->needs_copy || eh->needs_copy @@ -4362,7 +4362,7 @@ direct: && r_type != R_X86_64_SIZE64) || ! SYMBOL_CALLS_LOCAL (info, h))) || (ELIMINATE_COPY_RELOCS - && !info->shared + && !bfd_link_pic (info) && h != NULL && h->dynindx != -1 && !h->non_got_ref @@ -4400,7 +4400,7 @@ direct: else if (h != NULL && h->dynindx != -1 && (IS_X86_64_PCREL_TYPE (r_type) - || ! info->shared + || ! bfd_link_pic (info) || ! SYMBOLIC_BIND (info, h) || ! h->def_regular)) { @@ -4978,7 +4978,8 @@ direct: break; case R_X86_64_DTPOFF32: - if (!info->executable|| (input_section->flags & SEC_CODE) == 0) + if (!bfd_link_executable (info) + || (input_section->flags & SEC_CODE) == 0) relocation -= elf_x86_64_dtpoff_base (info); else relocation = elf_x86_64_tpoff (info, relocation); @@ -4986,7 +4987,7 @@ direct: case R_X86_64_TPOFF32: case R_X86_64_TPOFF64: - BFD_ASSERT (info->executable); + BFD_ASSERT (bfd_link_executable (info)); relocation = elf_x86_64_tpoff (info, relocation); break; @@ -5119,7 +5120,7 @@ elf_x86_64_finish_dynamic_symbol (bfd *output_bfd, /* This symbol has an entry in the procedure linkage table. Set it up. */ if ((h->dynindx == -1 - && !((h->forced_local || info->executable) + && !((h->forced_local || bfd_link_executable (info)) && h->def_regular && h->type == STT_GNU_IFUNC)) || plt == NULL @@ -5230,7 +5231,7 @@ elf_x86_64_finish_dynamic_symbol (bfd *output_bfd, + gotplt->output_offset + got_offset); if (h->dynindx == -1 - || ((info->executable + || ((bfd_link_executable (info) || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT) && h->def_regular && h->type == STT_GNU_IFUNC)) @@ -5374,7 +5375,7 @@ elf_x86_64_finish_dynamic_symbol (bfd *output_bfd, if (h->def_regular && h->type == STT_GNU_IFUNC) { - if (info->shared) + if (bfd_link_pic (info)) { /* Generate R_X86_64_GLOB_DAT. */ goto do_glob_dat; @@ -5397,7 +5398,7 @@ elf_x86_64_finish_dynamic_symbol (bfd *output_bfd, return TRUE; } } - else if (info->shared + else if (bfd_link_pic (info) && SYMBOL_REFERENCES_LOCAL (info, h)) { if (!h->def_regular) diff --git a/bfd/elflink.c b/bfd/elflink.c index 9b93431c343..e4a9ceded98 100644 --- a/bfd/elflink.c +++ b/bfd/elflink.c @@ -246,7 +246,7 @@ _bfd_elf_link_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) /* A dynamically linked executable has a .interp section, but a shared library does not. */ - if (info->executable) + if (bfd_link_executable (info)) { s = bfd_make_section_anyway_with_flags (abfd, ".interp", flags | SEC_READONLY); @@ -418,7 +418,7 @@ _bfd_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) be needed, we can discard it later. We will never need this section when generating a shared object, since they do not use copy relocs. */ - if (! info->shared) + if (! bfd_link_pic (info)) { s = bfd_make_section_anyway_with_flags (abfd, (bed->rela_plts_and_copies_p @@ -519,7 +519,7 @@ bfd_elf_link_mark_dynamic_symbol (struct bfd_link_info *info, struct bfd_elf_dynamic_list *d = info->dynamic_list; /* It may be called more than once on the same H. */ - if(h->dynamic || info->relocatable) + if(h->dynamic || bfd_link_relocatable (info)) return; if ((info->dynamic_data @@ -623,7 +623,7 @@ bfd_elf_record_link_assignment (bfd *output_bfd, /* STV_HIDDEN and STV_INTERNAL symbols must be STB_LOCAL in shared objects and executables. */ - if (!info->relocatable + if (!bfd_link_relocatable (info) && h->dynindx != -1 && (ELF_ST_VISIBILITY (h->other) == STV_HIDDEN || ELF_ST_VISIBILITY (h->other) == STV_INTERNAL)) @@ -631,8 +631,9 @@ bfd_elf_record_link_assignment (bfd *output_bfd, if ((h->def_dynamic || h->ref_dynamic - || info->shared - || (info->executable && elf_hash_table (info)->is_relocatable_executable)) + || bfd_link_pic (info) + || (bfd_link_executable (info) + && elf_hash_table (info)->is_relocatable_executable)) && h->dynindx == -1) { if (! bfd_elf_link_record_dynamic_symbol (info, h)) @@ -842,7 +843,8 @@ _bfd_elf_link_renumber_dynsyms (bfd *output_bfd, { unsigned long dynsymcount = 0; - if (info->shared || elf_hash_table (info)->is_relocatable_executable) + if (bfd_link_pic (info) + || elf_hash_table (info)->is_relocatable_executable) { const struct elf_backend_data *bed = get_elf_backend_data (output_bfd); asection *p; @@ -1743,7 +1745,7 @@ _bfd_elf_add_default_symbol (bfd *abfd, if (! override) { /* Add the default symbol if not performing a relocatable link. */ - if (! info->relocatable) + if (! bfd_link_relocatable (info)) { bh = &hi->root; if (! (_bfd_generic_link_add_one_symbol @@ -1824,7 +1826,7 @@ _bfd_elf_add_default_symbol (bfd *abfd, { if (! dynamic) { - if (! info->executable + if (! bfd_link_executable (info) || hi->def_dynamic || hi->ref_dynamic) *dynsym = TRUE; @@ -1896,7 +1898,7 @@ nondefault: { if (! dynamic) { - if (! info->executable + if (! bfd_link_executable (info) || hi->ref_dynamic) *dynsym = TRUE; } @@ -2119,7 +2121,7 @@ _bfd_elf_link_assign_sym_version (struct elf_link_hash_entry *h, void *data) /* If we are building an application, we need to create a version node for this version. */ - if (t == NULL && info->executable) + if (t == NULL && bfd_link_executable (info)) { struct bfd_elf_version_tree **pp; int version_index; @@ -2481,7 +2483,7 @@ bfd_boolean _bfd_elf_link_hash_fixup_symbol (struct bfd_link_info *info, struct elf_link_hash_entry *h) { - if (info->pie + if (bfd_link_pie (info) && h->dynindx == -1 && h->root.type == bfd_link_hash_undefweak) return bfd_elf_link_record_dynamic_symbol (info, h); @@ -2584,7 +2586,7 @@ _bfd_elf_fix_symbol_flags (struct elf_link_hash_entry *h, visibility. If the symbol has hidden or internal visibility, we will force it local. */ if (h->needs_plt - && eif->info->shared + && bfd_link_pic (eif->info) && is_elf_hash_table (eif->info->hash) && (SYMBOLIC_BIND (eif->info, h) || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT) @@ -2856,7 +2858,8 @@ _bfd_elf_dynamic_symbol_p (struct elf_link_hash_entry *h, /* Identify the cases where name binding rules say that a visible symbol resolves locally. */ - binding_stays_local_p = info->executable || SYMBOLIC_BIND (info, h); + binding_stays_local_p = (bfd_link_executable (info) + || SYMBOLIC_BIND (info, h)); switch (ELF_ST_VISIBILITY (h->other)) { @@ -2941,7 +2944,7 @@ _bfd_elf_symbol_refs_local_p (struct elf_link_hash_entry *h, /* At this point, we know the symbol is defined and dynamic. In an executable it must resolve locally, likewise when building symbolic shared libraries. */ - if (info->executable || SYMBOLIC_BIND (info, h)) + if (bfd_link_executable (info) || SYMBOLIC_BIND (info, h)) return TRUE; /* Now deal with defined dynamic symbols in shared libraries. Ones @@ -3488,11 +3491,11 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info) /* You can't use -r against a dynamic object. Also, there's no hope of using a dynamic object which does not exactly match the format of the output file. */ - if (info->relocatable + if (bfd_link_relocatable (info) || !is_elf_hash_table (htab) || info->output_bfd->xvec != abfd->xvec) { - if (info->relocatable) + if (bfd_link_relocatable (info)) bfd_set_error (bfd_error_invalid_operation); else bfd_set_error (bfd_error_wrong_format); @@ -3565,7 +3568,7 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info) FALSE, bed->collect, NULL))) goto error_return; - if (info->executable) + if (bfd_link_executable (info)) { /* Clobber the section size so that the warning does not get copied into the output file. */ @@ -3591,7 +3594,7 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info) are no input BFD's of the same format as the output, we can't make a shared library. */ if (!just_syms - && info->shared + && bfd_link_pic (info) && is_elf_hash_table (htab) && info->output_bfd->xvec == abfd->xvec && !htab->dynamic_sections_created) @@ -4043,7 +4046,7 @@ error_free_dyn: } else if (isym->st_shndx == SHN_COMMON && ELF_ST_TYPE (isym->st_info) == STT_TLS - && !info->relocatable) + && !bfd_link_relocatable (info)) { asection *tcomm = bfd_get_section_by_name (abfd, ".tcommon"); @@ -4339,7 +4342,7 @@ error_free_dyn: /* If the indirect symbol has been forced local, don't make the real symbol dynamic. */ if ((h == hi || !hi->forced_local) - && ((! info->executable && ! info->relocatable) + && (bfd_link_dll (info) || h->def_dynamic || h->ref_dynamic)) dynsym = TRUE; @@ -4491,7 +4494,9 @@ error_free_dyn: elf_merge_st_other (abfd, h, isym, sec, definition, dynamic); /* We don't want to make debug symbol dynamic. */ - if (definition && (sec->flags & SEC_DEBUGGING) && !info->relocatable) + if (definition + && (sec->flags & SEC_DEBUGGING) + && !bfd_link_relocatable (info)) dynsym = FALSE; /* Nor should we make plugin symbols dynamic. */ @@ -4694,7 +4699,7 @@ error_free_dyn: /* Now that all the symbols from this input file are created, if not performing a relocatable link, handle .symver foo, foo@BAR such that any relocs against foo become foo@BAR. */ - if (!info->relocatable && nondeflt_vers != NULL) + if (!bfd_link_relocatable (info) && nondeflt_vers != NULL) { bfd_size_type cnt, symidx; @@ -5696,7 +5701,7 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd, elf_hash_table (info)->init_plt_refcount = elf_hash_table (info)->init_plt_offset; - if (info->relocatable + if (bfd_link_relocatable (info) && !_bfd_elf_size_group_sections (info)) return FALSE; @@ -5739,7 +5744,7 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd, } if (notesec || info->stacksize > 0) elf_stack_flags (output_bfd) = PF_R | PF_W | exec; - if (notesec && exec && info->relocatable + if (notesec && exec && bfd_link_relocatable (info) && notesec->output_section != bfd_abs_section_ptr) notesec->output_section->flags |= SEC_CODE; } @@ -5757,7 +5762,7 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd, bfd_boolean all_defined; *sinterpptr = bfd_get_linker_section (dynobj, ".interp"); - BFD_ASSERT (*sinterpptr != NULL || !info->executable); + BFD_ASSERT (*sinterpptr != NULL || !bfd_link_executable (info)); if (soname != NULL) { @@ -5845,7 +5850,7 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd, /* If we are supposed to export all symbols into the dynamic symbol table (this is not the normal case), then do so. */ if (info->export_dynamic - || (info->executable && info->dynamic)) + || (bfd_link_executable (info) && info->dynamic)) { elf_link_hash_traverse (elf_hash_table (info), _bfd_elf_export_symbol, @@ -5980,7 +5985,7 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd, if (s != NULL && s->linker_has_input) { /* DT_PREINIT_ARRAY is not allowed in shared library. */ - if (! info->executable) + if (! bfd_link_executable (info)) { bfd *sub; asection *o; @@ -6314,7 +6319,7 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd, if (info->flags_1) { - if (info->executable) + if (bfd_link_executable (info)) info->flags_1 &= ~ (DF_1_INITFIRST | DF_1_NODELETE | DF_1_NOOPEN); @@ -8993,7 +8998,7 @@ elf_link_output_extsym (struct bfd_hash_entry *bh, void *data) defined, hidden versioned, not referenced by shared library and not exported when linking executable. */ bfd_boolean local_bind = (h->forced_local - || (flinfo->info->executable + || (bfd_link_executable (flinfo->info) && !flinfo->info->export_dynamic && !h->dynamic && !h->ref_dynamic @@ -9058,7 +9063,7 @@ elf_link_output_extsym (struct bfd_hash_entry *bh, void *data) /* We should also warn if a forced local symbol is referenced from shared libraries. */ - if (flinfo->info->executable + if (bfd_link_executable (flinfo->info) && h->forced_local && h->ref_dynamic && h->def_regular @@ -9189,7 +9194,7 @@ elf_link_output_extsym (struct bfd_hash_entry *bh, void *data) but in nonrelocatable files they are virtual addresses. */ sym.st_value = h->root.u.def.value + input_sec->output_offset; - if (!flinfo->info->relocatable) + if (!bfd_link_relocatable (flinfo->info)) { sym.st_value += input_sec->output_section->vma; if (h->type == STT_TLS) @@ -9233,10 +9238,10 @@ elf_link_output_extsym (struct bfd_hash_entry *bh, void *data) STT_GNU_IFUNC symbol must go through PLT. */ if ((h->type == STT_GNU_IFUNC && h->def_regular - && !flinfo->info->relocatable) + && !bfd_link_relocatable (flinfo->info)) || ((h->dynindx != -1 || h->forced_local) - && ((flinfo->info->shared + && ((bfd_link_pic (flinfo->info) && (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT || h->root.type != bfd_link_hash_undefweak)) || !h->forced_local) @@ -9286,7 +9291,7 @@ elf_link_output_extsym (struct bfd_hash_entry *bh, void *data) /* If a non-weak symbol with non-default visibility is not defined locally, it is a fatal error. */ - if (!flinfo->info->relocatable + if (!bfd_link_relocatable (flinfo->info) && ELF_ST_VISIBILITY (sym.st_other) != STV_DEFAULT && ELF_ST_BIND (sym.st_info) != STB_WEAK && h->root.type == bfd_link_hash_undefined @@ -9322,7 +9327,7 @@ elf_link_output_extsym (struct bfd_hash_entry *bh, void *data) */ if (h->verinfo.verdef == NULL && !local_bind - && (!flinfo->info->executable + && (!bfd_link_executable (flinfo->info) || h->ref_dynamic || !h->def_regular)) { @@ -9410,7 +9415,7 @@ elf_link_output_extsym (struct bfd_hash_entry *bh, void *data) relocatable output or when needed for --emit-relocs. */ else if (input_sec == bfd_und_section_ptr && h->indx != -2 - && !flinfo->info->relocatable) + && !bfd_link_relocatable (flinfo->info)) return TRUE; /* Also strip others that we couldn't earlier due to dynamic symbol processing. */ @@ -9711,7 +9716,8 @@ elf_link_input_bfd (struct elf_final_link_info *flinfo, bfd *input_bfd) && (bfd_hash_lookup (flinfo->info->keep_hash, name, FALSE, FALSE) == NULL)) || (((flinfo->info->discard == discard_sec_merge - && (isec->flags & SEC_MERGE) && !flinfo->info->relocatable) + && (isec->flags & SEC_MERGE) + && !bfd_link_relocatable (flinfo->info)) || flinfo->info->discard == discard_l) && bfd_is_local_label_name (input_bfd, name))) continue; @@ -9762,7 +9768,7 @@ elf_link_input_bfd (struct elf_final_link_info *flinfo, bfd *input_bfd) output_section. Any special sections must be set up to meet these requirements. */ osym.st_value += isec->output_offset; - if (!flinfo->info->relocatable) + if (!bfd_link_relocatable (flinfo->info)) { osym.st_value += isec->output_section->vma; if (ELF_ST_TYPE (osym.st_info) == STT_TLS) @@ -9806,7 +9812,7 @@ elf_link_input_bfd (struct elf_final_link_info *flinfo, bfd *input_bfd) continue; } - if (flinfo->info->relocatable + if (bfd_link_relocatable (flinfo->info) && (o->flags & (SEC_LINKER_CREATED | SEC_GROUP)) == SEC_GROUP) { /* Deal with the group signature symbol. */ @@ -10029,7 +10035,7 @@ elf_link_input_bfd (struct elf_final_link_info *flinfo, bfd *input_bfd) } if ((s_type == STT_RELC || s_type == STT_SRELC) - && !flinfo->info->relocatable) + && !bfd_link_relocatable (flinfo->info)) { bfd_vma val; bfd_vma dot = (rel->r_offset @@ -10119,7 +10125,7 @@ elf_link_input_bfd (struct elf_final_link_info *flinfo, bfd *input_bfd) return FALSE; if (ret == 2 - || flinfo->info->relocatable + || bfd_link_relocatable (flinfo->info) || flinfo->info->emitrelocations) { Elf_Internal_Rela *irela; @@ -10150,7 +10156,7 @@ elf_link_input_bfd (struct elf_final_link_info *flinfo, bfd *input_bfd) rel_hash_list = rel_hash; rela_hash_list = NULL; last_offset = o->output_offset; - if (!flinfo->info->relocatable) + if (!bfd_link_relocatable (flinfo->info)) last_offset += o->output_section->vma; for (next_erel = 0; irela < irelaend; irela++, next_erel++) { @@ -10190,7 +10196,7 @@ elf_link_input_bfd (struct elf_final_link_info *flinfo, bfd *input_bfd) irela->r_offset += o->output_offset; /* Relocs in an executable have to be virtual addresses. */ - if (!flinfo->info->relocatable) + if (!bfd_link_relocatable (flinfo->info)) irela->r_offset += o->output_section->vma; last_offset = irela->r_offset; @@ -10318,7 +10324,7 @@ elf_link_input_bfd (struct elf_final_link_info *flinfo, bfd *input_bfd) return FALSE; sym.st_value += sec->output_offset; - if (!flinfo->info->relocatable) + if (!bfd_link_relocatable (flinfo->info)) { sym.st_value += osec->vma; if (ELF_ST_TYPE (sym.st_info) == STT_TLS) @@ -10594,7 +10600,7 @@ elf_reloc_link_order (bfd *output_bfd, relocatable file, and is a virtual address in an executable file. */ offset = link_order->offset; - if (! info->relocatable) + if (! bfd_link_relocatable (info)) offset += output_section->vma; for (i = 0; i < bed->s->int_rels_per_ext_rel; i++) @@ -10845,13 +10851,13 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info) if (! is_elf_hash_table (info->hash)) return FALSE; - if (info->shared) + if (bfd_link_pic (info)) abfd->flags |= DYNAMIC; dynamic = elf_hash_table (info)->dynamic_sections_created; dynobj = elf_hash_table (info)->dynobj; - emit_relocs = (info->relocatable + emit_relocs = (bfd_link_relocatable (info) || info->emitrelocations); flinfo.info = info; @@ -10964,7 +10970,7 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info) to count particular types of relocs. Of course, reloc sections themselves can't have relocations. */ reloc_count = 0; - else if (info->relocatable || info->emitrelocations) + else if (emit_relocs) reloc_count = sec->reloc_count; else if (bed->elf_backend_count_relocs) reloc_count = (*bed->elf_backend_count_relocs) (info, sec); @@ -11016,8 +11022,7 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info) o->reloc_count += reloc_count; - if (p->type == bfd_indirect_link_order - && (info->relocatable || info->emitrelocations)) + if (p->type == bfd_indirect_link_order && emit_relocs) { if (esdi->rel.hdr) esdo->rel.count += NUM_SHDR_ENTRIES (esdi->rel.hdr); @@ -11052,7 +11057,7 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info) o->vma = 0; } - if (! info->relocatable && merged) + if (! bfd_link_relocatable (info) && merged) elf_link_hash_traverse (elf_hash_table (info), _bfd_elf_link_sec_merge_syms, abfd); @@ -11168,7 +11173,7 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info) { o->target_index = bfd_get_symcount (abfd); elfsym.st_shndx = i; - if (!info->relocatable) + if (!bfd_link_relocatable (info)) elfsym.st_value = o->vma; if (elf_link_output_symstrtab (&flinfo, NULL, &elfsym, o, NULL) != 1) @@ -11410,7 +11415,8 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info) long last_local = 0; /* Write out the section symbols for the output sections. */ - if (info->shared || elf_hash_table (info)->is_relocatable_executable) + if (bfd_link_pic (info) + || elf_hash_table (info)->is_relocatable_executable) { asection *s; @@ -11761,7 +11767,7 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info) goto error_return; /* Check for DT_TEXTREL (late, in case the backend removes it). */ - if (((info->warn_shared_textrel && info->shared) + if (((info->warn_shared_textrel && bfd_link_pic (info)) || info->error_textrel) && (o = bfd_get_linker_section (dynobj, ".dynamic")) != NULL) { @@ -11828,7 +11834,7 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info) } } - if (info->relocatable) + if (bfd_link_relocatable (info)) { bfd_boolean failed = FALSE; @@ -12571,7 +12577,7 @@ bfd_elf_gc_mark_dynamic_ref_symbol (struct elf_link_hash_entry *h, void *inf) || ((h->def_regular || ELF_COMMON_DEF_P (h)) && ELF_ST_VISIBILITY (h->other) != STV_INTERNAL && ELF_ST_VISIBILITY (h->other) != STV_HIDDEN - && (!info->executable + && (!bfd_link_executable (info) || info->export_dynamic || (h->dynamic && d != NULL @@ -13220,7 +13226,7 @@ bfd_elf_discard_info (bfd *output_bfd, struct bfd_link_info *info) _bfd_elf_end_eh_frame_parsing (info); if (info->eh_frame_hdr_type - && !info->relocatable + && !bfd_link_relocatable (info) && _bfd_elf_discard_section_eh_frame_hdr (output_bfd, info)) changed = 1; diff --git a/bfd/elfnn-aarch64.c b/bfd/elfnn-aarch64.c index fe10be60fef..9773e3ec389 100644 --- a/bfd/elfnn-aarch64.c +++ b/bfd/elfnn-aarch64.c @@ -4066,8 +4066,8 @@ aarch64_calculate_got_entry_vma (struct elf_link_hash_entry *h, BFD_ASSERT (basegot != NULL); off = h->got.offset; BFD_ASSERT (off != (bfd_vma) - 1); - if (!WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h) - || (info->shared + if (!WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), h) + || (bfd_link_pic (info) && SYMBOL_REFERENCES_LOCAL (info, h)) || (ELF_ST_VISIBILITY (h->other) && h->root.type == bfd_link_hash_undefweak)) @@ -4229,7 +4229,7 @@ aarch64_can_relax_tls (bfd *input_bfd, if (symbol_got_type == GOT_TLS_IE && GOT_TLS_GD_ANY_P (reloc_got_type)) return TRUE; - if (info->shared) + if (bfd_link_pic (info)) return FALSE; if (h && h->root.type == bfd_link_hash_undefweak) @@ -4669,7 +4669,7 @@ elfNN_aarch64_final_link_relocate (reloc_howto_type *howto, /* Generate dynamic relocation only when there is a non-GOT reference in a shared object. */ - if (info->shared && h->non_got_ref) + if (bfd_link_pic (info) && h->non_got_ref) { Elf_Internal_Rela outrel; asection *sreloc; @@ -4689,7 +4689,7 @@ elfNN_aarch64_final_link_relocate (reloc_howto_type *howto, if (h->dynindx == -1 || h->forced_local - || info->executable) + || bfd_link_executable (info)) { /* This symbol is resolved locally. */ outrel.r_info = ELFNN_R_INFO (0, AARCH64_R (IRELATIVE)); @@ -4810,7 +4810,8 @@ elfNN_aarch64_final_link_relocate (reloc_howto_type *howto, /* When generating a shared object or relocatable executable, these relocations are copied into the output file to be resolved at run time. */ - if (((info->shared == TRUE) || globals->root.is_relocatable_executable) + if (((bfd_link_pic (info) == TRUE) + || globals->root.is_relocatable_executable) && (input_section->flags & SEC_ALLOC) && (h == NULL || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT @@ -4845,7 +4846,9 @@ elfNN_aarch64_final_link_relocate (reloc_howto_type *howto, memset (&outrel, 0, sizeof outrel); else if (h != NULL && h->dynindx != -1 - && (!info->shared || !SYMBOLIC_BIND (info, h) || !h->def_regular)) + && (!bfd_link_pic (info) + || !SYMBOLIC_BIND (info, h) + || !h->def_regular)) outrel.r_info = ELFNN_R_INFO (h->dynindx, r_type); else { @@ -4936,7 +4939,7 @@ elfNN_aarch64_final_link_relocate (reloc_howto_type *howto, case BFD_RELOC_AARCH64_ADR_HI21_PCREL: case BFD_RELOC_AARCH64_ADR_LO21_PCREL: case BFD_RELOC_AARCH64_LD_LO19_PCREL: - if (info->shared + if (bfd_link_pic (info) && (input_section->flags & SEC_ALLOC) != 0 && (input_section->flags & SEC_READONLY) != 0 && h != NULL @@ -5026,7 +5029,7 @@ elfNN_aarch64_final_link_relocate (reloc_howto_type *howto, { bfd_put_64 (output_bfd, value, base_got->contents + off); - if (info->shared) + if (bfd_link_pic (info)) { asection *s; Elf_Internal_Rela outrel; @@ -5463,7 +5466,7 @@ elfNN_aarch64_relocate_section (bfd *output_bfd, relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel); /* Relocate against local STT_GNU_IFUNC symbol. */ - if (!info->relocatable + if (!bfd_link_relocatable (info) && ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC) { h = elfNN_aarch64_get_local_sym_hash (globals, input_bfd, @@ -5492,7 +5495,7 @@ elfNN_aarch64_relocate_section (bfd *output_bfd, RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) continue; if (h != NULL) @@ -5577,7 +5580,7 @@ elfNN_aarch64_relocate_section (bfd *output_bfd, indx = h && h->dynindx != -1 ? h->dynindx : 0; need_relocs = - (info->shared || indx != 0) && + (bfd_link_pic (info) || indx != 0) && (h == NULL || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT || h->root.type != bfd_link_hash_undefweak); @@ -5670,7 +5673,7 @@ elfNN_aarch64_relocate_section (bfd *output_bfd, indx = h && h->dynindx != -1 ? h->dynindx : 0; need_relocs = - (info->shared || indx != 0) && + (bfd_link_pic (info) || indx != 0) && (h == NULL || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT || h->root.type != bfd_link_hash_undefweak); @@ -6020,7 +6023,7 @@ elfNN_aarch64_gc_sweep_hook (bfd *abfd, struct elf_aarch64_local_symbol *locals; const Elf_Internal_Rela *rel, *relend; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; htab = elf_aarch64_hash_table (info); @@ -6157,7 +6160,7 @@ elfNN_aarch64_gc_sweep_hook (bfd *abfd, case BFD_RELOC_AARCH64_MOVW_G2_NC: case BFD_RELOC_AARCH64_MOVW_G3: case BFD_RELOC_AARCH64_NN: - if (h != NULL && info->executable) + if (h != NULL && bfd_link_executable (info)) { if (h->plt.refcount > 0) h->plt.refcount -= 1; @@ -6230,7 +6233,7 @@ elfNN_aarch64_adjust_dynamic_symbol (struct bfd_link_info *info, only references to the symbol are via the global offset table. For such cases we need not do anything here; the relocations will be handled correctly by relocate_section. */ - if (info->shared) + if (bfd_link_pic (info)) return TRUE; /* If there are no references to this symbol that do not use the @@ -6366,7 +6369,7 @@ elfNN_aarch64_check_relocs (bfd *abfd, struct bfd_link_info *info, struct elf_aarch64_link_hash_table *htab; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; BFD_ASSERT (is_aarch64_elf (abfd)); @@ -6482,7 +6485,7 @@ elfNN_aarch64_check_relocs (bfd *abfd, struct bfd_link_info *info, if (h != NULL) { - if (!info->shared) + if (!bfd_link_pic (info)) h->non_got_ref = 1; h->plt.refcount += 1; @@ -6491,7 +6494,7 @@ elfNN_aarch64_check_relocs (bfd *abfd, struct bfd_link_info *info, /* No need to do anything if we're not creating a shared object. */ - if (! info->shared) + if (! bfd_link_pic (info)) break; { @@ -6663,7 +6666,7 @@ elfNN_aarch64_check_relocs (bfd *abfd, struct bfd_link_info *info, case BFD_RELOC_AARCH64_MOVW_G1_NC: case BFD_RELOC_AARCH64_MOVW_G2_NC: case BFD_RELOC_AARCH64_MOVW_G3: - if (info->shared) + if (bfd_link_pic (info)) { int howto_index = bfd_r_type - BFD_RELOC_AARCH64_RELOC_START; (*_bfd_error_handler) @@ -6678,7 +6681,7 @@ elfNN_aarch64_check_relocs (bfd *abfd, struct bfd_link_info *info, case BFD_RELOC_AARCH64_ADR_HI21_NC_PCREL: case BFD_RELOC_AARCH64_ADR_HI21_PCREL: case BFD_RELOC_AARCH64_ADR_LO21_PCREL: - if (h != NULL && info->executable) + if (h != NULL && bfd_link_executable (info)) { /* If this reloc is in a read-only section, we might need a copy reloc. We can't check reliably at this @@ -7281,10 +7284,10 @@ elfNN_aarch64_create_dynamic_sections (bfd *dynobj, htab = elf_aarch64_hash_table (info); htab->sdynbss = bfd_get_linker_section (dynobj, ".dynbss"); - if (!info->shared) + if (!bfd_link_pic (info)) htab->srelbss = bfd_get_linker_section (dynobj, ".rela.bss"); - if (!htab->sdynbss || (!info->shared && !htab->srelbss)) + if (!htab->sdynbss || (!bfd_link_pic (info) && !htab->srelbss)) abort (); return TRUE; @@ -7336,7 +7339,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) return FALSE; } - if (info->shared || WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, 0, h)) + if (bfd_link_pic (info) || WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, 0, h)) { asection *s = htab->root.splt; @@ -7352,7 +7355,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) location in the .plt. This is required to make function pointers compare as equal between the normal executable and the shared library. */ - if (!info->shared && !h->def_regular) + if (!bfd_link_pic (info) && !h->def_regular) { h->root.u.def.section = s; h->root.u.def.value = h->plt.offset; @@ -7426,7 +7429,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) htab->root.sgot->size += GOT_ENTRY_SIZE; if ((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT || h->root.type != bfd_link_hash_undefweak) - && (info->shared + && (bfd_link_pic (info) || WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h))) { htab->root.srelgot->size += RELOC_SIZE (htab); @@ -7459,7 +7462,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) indx = h && h->dynindx != -1 ? h->dynindx : 0; if ((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT || h->root.type != bfd_link_hash_undefweak) - && (info->shared + && (bfd_link_pic (info) || indx != 0 || WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h))) { @@ -7496,7 +7499,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) space for pc-relative relocs that have become local due to symbol visibility changes. */ - if (info->shared) + if (bfd_link_pic (info)) { /* Relocs that use pc_count are those that appear on a call insn, or certain REL relocs that can generated via assembly. @@ -7708,7 +7711,7 @@ elfNN_aarch64_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, if (htab->root.dynamic_sections_created) { - if (info->executable) + if (bfd_link_executable (info)) { s = bfd_get_linker_section (dynobj, ".interp"); if (s == NULL) @@ -7794,7 +7797,7 @@ elfNN_aarch64_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, { } - if (info->shared) + if (bfd_link_pic (info)) { if (got_type & GOT_TLSDESC_GD) { @@ -7947,7 +7950,7 @@ elfNN_aarch64_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, #define add_dynamic_entry(TAG, VAL) \ _bfd_elf_add_dynamic_entry (info, TAG, VAL) - if (info->executable) + if (bfd_link_executable (info)) { if (!add_dynamic_entry (DT_DEBUG, 0)) return FALSE; @@ -8088,7 +8091,7 @@ elfNN_aarch64_create_small_pltn_entry (struct elf_link_hash_entry *h, rela.r_offset = gotplt_entry_address; if (h->dynindx == -1 - || ((info->executable + || ((bfd_link_executable (info) || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT) && h->def_regular && h->type == STT_GNU_IFUNC)) @@ -8123,7 +8126,7 @@ elfNN_aarch64_always_size_sections (bfd *output_bfd, { asection *tls_sec; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; tls_sec = elf_hash_table (info)->tls_sec; @@ -8193,7 +8196,7 @@ elfNN_aarch64_finish_dynamic_symbol (bfd *output_bfd, /* This symbol has an entry in the procedure linkage table. Set it up. */ if ((h->dynindx == -1 - && !((h->forced_local || info->executable) + && !((h->forced_local || bfd_link_executable (info)) && h->def_regular && h->type == STT_GNU_IFUNC)) || plt == NULL @@ -8238,7 +8241,7 @@ elfNN_aarch64_finish_dynamic_symbol (bfd *output_bfd, if (h->def_regular && h->type == STT_GNU_IFUNC) { - if (info->shared) + if (bfd_link_pic (info)) { /* Generate R_AARCH64_GLOB_DAT. */ goto do_glob_dat; @@ -8262,7 +8265,7 @@ elfNN_aarch64_finish_dynamic_symbol (bfd *output_bfd, return TRUE; } } - else if (info->shared && SYMBOL_REFERENCES_LOCAL (info, h)) + else if (bfd_link_pic (info) && SYMBOL_REFERENCES_LOCAL (info, h)) { if (!h->def_regular) return FALSE; diff --git a/bfd/elfnn-ia64.c b/bfd/elfnn-ia64.c index 1bbccd62b63..c45fa2818af 100644 --- a/bfd/elfnn-ia64.c +++ b/bfd/elfnn-ia64.c @@ -346,7 +346,7 @@ elfNN_ia64_relax_section (bfd *abfd, asection *sec, one pass. */ *again = FALSE; - if (link_info->relocatable) + if (bfd_link_relocatable (link_info)) (*link_info->callbacks->einfo) (_("%P%F: --relax and -r may not be used together\n")); @@ -831,7 +831,7 @@ elfNN_ia64_relax_section (bfd *abfd, asection *sec, { /* Resize .rela.got. */ ia64_info->root.srelgot->size = 0; - if (link_info->shared + if (bfd_link_pic (link_info) && ia64_info->self_dtpmod_offset != (bfd_vma) -1) ia64_info->root.srelgot->size += sizeof (ElfNN_External_Rela); data.only_got = TRUE; @@ -1033,7 +1033,7 @@ elfNN_ia64_add_symbol_hook (bfd *abfd, bfd_vma *valp) { if (sym->st_shndx == SHN_COMMON - && !info->relocatable + && !bfd_link_relocatable (info) && sym->st_size <= elf_gp_size (abfd)) { /* Common symbols less than or equal to -G nn bytes are @@ -1993,8 +1993,8 @@ get_fptr (bfd *abfd, struct bfd_link_info *info, | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY - | (info->pie ? 0 - : SEC_READONLY) + | (bfd_link_pie (info) + ? 0 : SEC_READONLY) | SEC_LINKER_CREATED)); if (!fptr || !bfd_set_section_alignment (abfd, fptr, 4)) @@ -2005,7 +2005,7 @@ get_fptr (bfd *abfd, struct bfd_link_info *info, ia64_info->fptr_sec = fptr; - if (info->pie) + if (bfd_link_pie (info)) { asection *fptr_rel; fptr_rel = bfd_make_section_anyway_with_flags (dynobj, ".rela.opd", @@ -2158,7 +2158,7 @@ elfNN_ia64_check_relocs (bfd *abfd, struct bfd_link_info *info, unsigned long r_symndx; bfd_boolean maybe_dynamic; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; symtab_hdr = &elf_tdata (abfd)->symtab_hdr; @@ -2191,7 +2191,7 @@ elfNN_ia64_check_relocs (bfd *abfd, struct bfd_link_info *info, locally or externally defined, as not all of the input files have yet been processed. Do something with what we know, as this may help reduce memory usage and processing time later. */ - maybe_dynamic = (h && ((!info->executable + maybe_dynamic = (h && ((!bfd_link_executable (info) && (!SYMBOLIC_BIND (info, h) || info->unresolved_syms_in_shared_libs == RM_IGNORE)) || !h->def_regular @@ -2202,13 +2202,13 @@ elfNN_ia64_check_relocs (bfd *abfd, struct bfd_link_info *info, { case R_IA64_TPREL64MSB: case R_IA64_TPREL64LSB: - if (info->shared || maybe_dynamic) + if (bfd_link_pic (info) || maybe_dynamic) need_entry = NEED_DYNREL; break; case R_IA64_LTOFF_TPREL22: need_entry = NEED_TPREL; - if (info->shared) + if (bfd_link_pic (info)) info->flags |= DF_STATIC_TLS; break; @@ -2216,7 +2216,7 @@ elfNN_ia64_check_relocs (bfd *abfd, struct bfd_link_info *info, case R_IA64_DTPREL32LSB: case R_IA64_DTPREL64MSB: case R_IA64_DTPREL64LSB: - if (info->shared || maybe_dynamic) + if (bfd_link_pic (info) || maybe_dynamic) need_entry = NEED_DYNREL; break; @@ -2226,7 +2226,7 @@ elfNN_ia64_check_relocs (bfd *abfd, struct bfd_link_info *info, case R_IA64_DTPMOD64MSB: case R_IA64_DTPMOD64LSB: - if (info->shared || maybe_dynamic) + if (bfd_link_pic (info) || maybe_dynamic) need_entry = NEED_DYNREL; break; @@ -2248,7 +2248,7 @@ elfNN_ia64_check_relocs (bfd *abfd, struct bfd_link_info *info, case R_IA64_FPTR32LSB: case R_IA64_FPTR64MSB: case R_IA64_FPTR64LSB: - if (info->shared || h) + if (bfd_link_pic (info) || h) need_entry = NEED_FPTR | NEED_DYNREL; else need_entry = NEED_FPTR; @@ -2299,14 +2299,14 @@ elfNN_ia64_check_relocs (bfd *abfd, struct bfd_link_info *info, case R_IA64_DIR64MSB: case R_IA64_DIR64LSB: /* Shared objects will always need at least a REL relocation. */ - if (info->shared || maybe_dynamic) + if (bfd_link_pic (info) || maybe_dynamic) need_entry = NEED_DYNREL; break; case R_IA64_IPLTMSB: case R_IA64_IPLTLSB: /* Shared objects will always need at least a REL relocation. */ - if (info->shared || maybe_dynamic) + if (bfd_link_pic (info) || maybe_dynamic) need_entry = NEED_DYNREL; break; @@ -2366,7 +2366,7 @@ elfNN_ia64_check_relocs (bfd *abfd, struct bfd_link_info *info, locally or externally defined, as not all of the input files have yet been processed. Do something with what we know, as this may help reduce memory usage and processing time later. */ - maybe_dynamic = (h && ((!info->executable + maybe_dynamic = (h && ((!bfd_link_executable (info) && (!SYMBOLIC_BIND (info, h) || info->unresolved_syms_in_shared_libs == RM_IGNORE)) || !h->def_regular @@ -2377,16 +2377,16 @@ elfNN_ia64_check_relocs (bfd *abfd, struct bfd_link_info *info, { case R_IA64_TPREL64MSB: case R_IA64_TPREL64LSB: - if (info->shared || maybe_dynamic) + if (bfd_link_pic (info) || maybe_dynamic) need_entry = NEED_DYNREL; dynrel_type = R_IA64_TPREL64LSB; - if (info->shared) + if (bfd_link_pic (info)) info->flags |= DF_STATIC_TLS; break; case R_IA64_LTOFF_TPREL22: need_entry = NEED_TPREL; - if (info->shared) + if (bfd_link_pic (info)) info->flags |= DF_STATIC_TLS; break; @@ -2394,7 +2394,7 @@ elfNN_ia64_check_relocs (bfd *abfd, struct bfd_link_info *info, case R_IA64_DTPREL32LSB: case R_IA64_DTPREL64MSB: case R_IA64_DTPREL64LSB: - if (info->shared || maybe_dynamic) + if (bfd_link_pic (info) || maybe_dynamic) need_entry = NEED_DYNREL; dynrel_type = R_IA64_DTPRELNNLSB; break; @@ -2405,7 +2405,7 @@ elfNN_ia64_check_relocs (bfd *abfd, struct bfd_link_info *info, case R_IA64_DTPMOD64MSB: case R_IA64_DTPMOD64LSB: - if (info->shared || maybe_dynamic) + if (bfd_link_pic (info) || maybe_dynamic) need_entry = NEED_DYNREL; dynrel_type = R_IA64_DTPMOD64LSB; break; @@ -2428,7 +2428,7 @@ elfNN_ia64_check_relocs (bfd *abfd, struct bfd_link_info *info, case R_IA64_FPTR32LSB: case R_IA64_FPTR64MSB: case R_IA64_FPTR64LSB: - if (info->shared || h) + if (bfd_link_pic (info) || h) need_entry = NEED_FPTR | NEED_DYNREL; else need_entry = NEED_FPTR; @@ -2474,7 +2474,7 @@ elfNN_ia64_check_relocs (bfd *abfd, struct bfd_link_info *info, case R_IA64_DIR64MSB: case R_IA64_DIR64LSB: /* Shared objects will always need at least a REL relocation. */ - if (info->shared || maybe_dynamic) + if (bfd_link_pic (info) || maybe_dynamic) need_entry = NEED_DYNREL; dynrel_type = R_IA64_DIRNNLSB; break; @@ -2482,7 +2482,7 @@ elfNN_ia64_check_relocs (bfd *abfd, struct bfd_link_info *info, case R_IA64_IPLTMSB: case R_IA64_IPLTLSB: /* Shared objects will always need at least a REL relocation. */ - if (info->shared || maybe_dynamic) + if (bfd_link_pic (info) || maybe_dynamic) need_entry = NEED_DYNREL; dynrel_type = R_IA64_IPLTLSB; break; @@ -2540,7 +2540,7 @@ elfNN_ia64_check_relocs (bfd *abfd, struct bfd_link_info *info, /* FPTRs for shared libraries are allocated by the dynamic linker. Make sure this local symbol will appear in the dynamic symbol table. */ - if (!h && info->shared) + if (!h && bfd_link_pic (info)) { if (! (bfd_elf_link_record_local_dynamic_symbol (info, abfd, (long) r_symndx))) @@ -2712,7 +2712,7 @@ allocate_fptr (struct elfNN_ia64_dyn_sym_info *dyn_i, void * data) || h->root.type == bfd_link_hash_warning) h = (struct elf_link_hash_entry *) h->root.u.i.link; - if (!x->info->executable + if (!bfd_link_executable (x->info) && (!h || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT || (h->root.type != bfd_link_hash_undefweak @@ -2841,7 +2841,7 @@ allocate_dynrel_entries (struct elfNN_ia64_dyn_sym_info *dyn_i, /* Note that this can't be used in relation to FPTR relocs below. */ dynamic_symbol = elfNN_ia64_dynamic_symbol_p (dyn_i->h, x->info, 0); - shared = x->info->shared; + shared = bfd_link_pic (x->info); resolved_zero = (dyn_i->h && ELF_ST_VISIBILITY (dyn_i->h->other) && dyn_i->h->root.type == bfd_link_hash_undefweak); @@ -2856,7 +2856,7 @@ allocate_dynrel_entries (struct elfNN_ia64_dyn_sym_info *dyn_i, && dyn_i->h->dynindx != -1)) { if (!dyn_i->want_ltoff_fptr - || !x->info->pie + || !bfd_link_pie (x->info) || dyn_i->h == NULL || dyn_i->h->root.type != bfd_link_hash_undefweak) ia64_info->root.srelgot->size += sizeof (ElfNN_External_Rela); @@ -2906,7 +2906,7 @@ allocate_dynrel_entries (struct elfNN_ia64_dyn_sym_info *dyn_i, will be true only if we're actually allocating one statically in the main executable. Position independent executables need a relative reloc. */ - if (dyn_i->want_fptr && !x->info->pie) + if (dyn_i->want_fptr && !bfd_link_pie (x->info)) continue; break; case R_IA64_PCREL32LSB: @@ -2992,7 +2992,7 @@ elfNN_ia64_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, /* Set the contents of the .interp section to the interpreter. */ if (ia64_info->root.dynamic_sections_created - && info->executable) + && bfd_link_executable (info)) { sec = bfd_get_linker_section (dynobj, ".interp"); BFD_ASSERT (sec != NULL); @@ -3069,7 +3069,7 @@ elfNN_ia64_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, /* Allocate space for the dynamic relocations that turned out to be required. */ - if (info->shared && ia64_info->self_dtpmod_offset != (bfd_vma) -1) + if (bfd_link_pic (info) && ia64_info->self_dtpmod_offset != (bfd_vma) -1) ia64_info->root.srelgot->size += sizeof (ElfNN_External_Rela); data.only_got = FALSE; elfNN_ia64_dyn_sym_traverse (ia64_info, allocate_dynrel_entries, &data); @@ -3181,7 +3181,7 @@ elfNN_ia64_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, later (in finish_dynamic_sections) but we must add the entries now so that we get the correct size for the .dynamic section. */ - if (info->executable) + if (bfd_link_executable (info)) { /* The DT_DEBUG entry is filled in by the dynamic linker and used by the debugger. */ @@ -3315,7 +3315,7 @@ set_got_entry (bfd *abfd, struct bfd_link_info *info, bfd_put_64 (abfd, value, got_sec->contents + got_offset); /* Install a dynamic relocation if needed. */ - if (((info->shared + if (((bfd_link_pic (info) && (!dyn_i->h || ELF_ST_VISIBILITY (dyn_i->h->other) == STV_DEFAULT || dyn_i->h->root.type != bfd_link_hash_undefweak) @@ -3326,7 +3326,7 @@ set_got_entry (bfd *abfd, struct bfd_link_info *info, && (dyn_r_type == R_IA64_FPTR32LSB || dyn_r_type == R_IA64_FPTR64LSB))) && (!dyn_i->want_ltoff_fptr - || !info->pie + || !bfd_link_pie (info) || !dyn_i->h || dyn_i->h->root.type != bfd_link_hash_undefweak)) { @@ -3479,7 +3479,7 @@ set_pltoff_entry (bfd *abfd, struct bfd_link_info *info, /* Install dynamic relocations if needed. */ if (!is_plt - && info->shared + && bfd_link_pic (info) && (!dyn_i->h || ELF_ST_VISIBILITY (dyn_i->h->other) == STV_DEFAULT || dyn_i->h->root.type != bfd_link_hash_undefweak)) @@ -3715,7 +3715,7 @@ elfNN_ia64_final_link (bfd *abfd, struct bfd_link_info *info) return FALSE; /* Make sure we've got ourselves a nice fat __gp value. */ - if (!info->relocatable) + if (!bfd_link_relocatable (info)) { bfd_vma gp_val; struct elf_link_hash_entry *gp; @@ -3741,7 +3741,7 @@ elfNN_ia64_final_link (bfd *abfd, struct bfd_link_info *info) of the .IA_64.unwind section. Force this section to be relocated into memory rather than written immediately to the output file. */ unwind_output_sec = NULL; - if (!info->relocatable) + if (!bfd_link_relocatable (info)) { asection *s = bfd_get_section_by_name (abfd, ELF_STRING_ia64_unwind); if (s) @@ -3799,7 +3799,7 @@ elfNN_ia64_relocate_section (bfd *output_bfd, return FALSE; /* Infect various flags from the input section to the output section. */ - if (info->relocatable) + if (bfd_link_relocatable (info)) { bfd_vma flags; @@ -3856,7 +3856,7 @@ elfNN_ia64_relocate_section (bfd *output_bfd, sym_sec = local_sections[r_symndx]; msec = sym_sec; value = _bfd_elf_rela_local_sym (output_bfd, sym, &msec, rel); - if (!info->relocatable + if (!bfd_link_relocatable (info) && (sym_sec->flags & SEC_MERGE) != 0 && ELF_ST_TYPE (sym->st_info) == STT_SECTION && sym_sec->sec_info_type == SEC_INFO_TYPE_MERGE) @@ -3913,7 +3913,7 @@ elfNN_ia64_relocate_section (bfd *output_bfd, if (h->root.type == bfd_link_hash_undefweak) undef_weak_ref = TRUE; - else if (warned || (ignored && info->executable)) + else if (warned || (ignored && bfd_link_executable (info))) continue; } @@ -3921,7 +3921,7 @@ elfNN_ia64_relocate_section (bfd *output_bfd, RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) continue; hit_addr = contents + rel->r_offset; @@ -3942,7 +3942,7 @@ elfNN_ia64_relocate_section (bfd *output_bfd, case R_IA64_DIR64MSB: case R_IA64_DIR64LSB: /* Install a dynamic relocation for this reloc. */ - if ((dynamic_symbol_p || info->shared) + if ((dynamic_symbol_p || bfd_link_pic (info)) && r_symndx != STN_UNDEF && (input_section->flags & SEC_ALLOC) != 0) { @@ -4070,7 +4070,7 @@ elfNN_ia64_relocate_section (bfd *output_bfd, if (!undef_weak_ref) value = set_fptr_entry (output_bfd, info, dyn_i, value); } - if (!dyn_i->want_fptr || info->pie) + if (!dyn_i->want_fptr || bfd_link_pie (info)) { long dynindx; unsigned int dyn_r_type = r_type; @@ -4291,7 +4291,7 @@ elfNN_ia64_relocate_section (bfd *output_bfd, case R_IA64_IPLTMSB: case R_IA64_IPLTLSB: /* Install a dynamic relocation for this reloc. */ - if ((dynamic_symbol_p || info->shared) + if ((dynamic_symbol_p || bfd_link_pic (info)) && (input_section->flags & SEC_ALLOC) != 0) { BFD_ASSERT (srel != NULL); @@ -4368,7 +4368,7 @@ elfNN_ia64_relocate_section (bfd *output_bfd, { if (elf_hash_table (info)->tls_sec == NULL) goto missing_tls_sec; - if (!info->shared) + if (!bfd_link_pic (info)) value -= elfNN_ia64_tprel_base (info); else { @@ -4379,7 +4379,7 @@ elfNN_ia64_relocate_section (bfd *output_bfd, got_r_type = R_IA64_TPREL64LSB; break; case R_IA64_LTOFF_DTPMOD22: - if (!dynamic_symbol_p && !info->shared) + if (!dynamic_symbol_p && !bfd_link_pic (info)) value = 1; got_r_type = R_IA64_DTPMOD64LSB; break; diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c index eb7593ac73c..be1e59accb3 100644 --- a/bfd/elfxx-mips.c +++ b/bfd/elfxx-mips.c @@ -1969,7 +1969,7 @@ mips_elf_check_symbols (struct mips_elf_link_hash_entry *h, void *data) struct mips_htab_traverse_info *hti; hti = (struct mips_htab_traverse_info *) data; - if (!hti->info->relocatable) + if (!bfd_link_relocatable (hti->info)) mips_elf_check_mips16_stubs (hti->info, h); if (mips_elf_local_pic_function_p (h)) @@ -1984,7 +1984,7 @@ mips_elf_check_symbols (struct mips_elf_link_hash_entry *h, void *data) being PIC. If we're creating a non-relocatable object with non-PIC branches and jumps to H, make sure that H has an la25 stub. */ - if (hti->info->relocatable) + if (bfd_link_relocatable (hti->info)) { if (!PIC_OBJECT_P (hti->output_bfd)) h->root.other = ELF_ST_SET_MIPS_PIC (h->root.other); @@ -3219,11 +3219,11 @@ mips_tls_got_relocs (struct bfd_link_info *info, unsigned char tls_type, bfd_boolean need_relocs = FALSE; bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created; - if (h && WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h) - && (!info->shared || !SYMBOL_REFERENCES_LOCAL (info, h))) + if (h && WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), h) + && (!bfd_link_pic (info) || !SYMBOL_REFERENCES_LOCAL (info, h))) indx = h->dynindx; - if ((info->shared || indx != 0) + if ((bfd_link_pic (info) || indx != 0) && (h == NULL || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT || h->root.type != bfd_link_hash_undefweak)) @@ -3241,7 +3241,7 @@ mips_tls_got_relocs (struct bfd_link_info *info, unsigned char tls_type, return 1; case GOT_TLS_LDM: - return info->shared ? 1 : 0; + return bfd_link_pic (info) ? 1 : 0; default: return 0; @@ -3325,15 +3325,17 @@ mips_elf_initialize_tls_slots (bfd *abfd, struct bfd_link_info *info, { bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created; - if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, &h->root) - && (!info->shared || !SYMBOL_REFERENCES_LOCAL (info, &h->root))) + if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), + &h->root) + && (!bfd_link_pic (info) + || !SYMBOL_REFERENCES_LOCAL (info, &h->root))) indx = h->root.dynindx; } if (entry->tls_initialized) return; - if ((info->shared || indx != 0) + if ((bfd_link_pic (info) || indx != 0) && (h == NULL || ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT || h->root.type != bfd_link_hash_undefweak)) @@ -3408,7 +3410,7 @@ mips_elf_initialize_tls_slots (bfd *abfd, struct bfd_link_info *info, sgot->contents + got_offset + MIPS_ELF_GOT_SIZE (abfd)); - if (!info->shared) + if (!bfd_link_pic (info)) MIPS_ELF_PUT_WORD (abfd, 1, sgot->contents + got_offset); else @@ -3769,7 +3771,8 @@ count_section_dynsyms (bfd *output_bfd, struct bfd_link_info *info) bfd_size_type count; count = 0; - if (info->shared || elf_hash_table (info)->is_relocatable_executable) + if (bfd_link_pic (info) + || elf_hash_table (info)->is_relocatable_executable) { asection *p; const struct elf_backend_data *bed; @@ -4408,7 +4411,7 @@ mips_use_local_got_p (struct bfd_link_info *info, /* If this is an executable that must provide a definition of the symbol, either though PLTs or copy relocations, then that address should go in the local rather than global GOT. */ - if (info->executable && h->has_static_relocs) + if (bfd_link_executable (info) && h->has_static_relocs) return TRUE; return FALSE; @@ -4716,7 +4719,7 @@ mips_elf_set_global_gotidx (void **entryp, void *data) } arg->g->assigned_low_gotno += 1; - if (arg->info->shared + if (bfd_link_pic (arg->info) || (elf_hash_table (arg->info)->dynamic_sections_created && entry->d.h->root.def_dynamic && !entry->d.h->root.def_regular)) @@ -4923,7 +4926,7 @@ mips_elf_multi_got (bfd *abfd, struct bfd_link_info *info, BFD_ASSERT (g->assigned_low_gotno == g->local_gotno + g->global_gotno); g->assigned_low_gotno = save_assign; - if (info->shared) + if (bfd_link_pic (info)) { g->relocs += g->local_gotno - g->assigned_low_gotno; BFD_ASSERT (g->assigned_low_gotno == g->next->local_gotno @@ -5126,7 +5129,7 @@ mips_elf_create_got_section (bfd *abfd, struct bfd_link_info *info) h->other = (h->other & ~ELF_ST_VISIBILITY (-1)) | STV_HIDDEN; elf_hash_table (info)->hgot = h; - if (info->shared + if (bfd_link_pic (info) && ! bfd_elf_link_record_dynamic_symbol (info, h)) return FALSE; @@ -5155,7 +5158,7 @@ static bfd_boolean is_gott_symbol (struct bfd_link_info *info, struct elf_link_hash_entry *h) { return (mips_elf_hash_table (info)->is_vxworks - && info->shared + && bfd_link_pic (info) && (strcmp (h->root.root.string, "__GOTT_BASE__") == 0 || strcmp (h->root.root.string, "__GOTT_INDEX__") == 0)); } @@ -5395,7 +5398,7 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd, Otherwise, we should define the symbol with a value of 0. FIXME: It should probably get into the symbol table somehow as well. */ - BFD_ASSERT (! info->shared); + BFD_ASSERT (! bfd_link_pic (info)); BFD_ASSERT (bfd_get_section_by_name (abfd, ".dynamic") == NULL); symbol = 0; } @@ -5437,7 +5440,7 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd, (c) the section allows direct references to MIPS16 functions. */ if (r_type != R_MIPS16_26 - && !info->relocatable + && !bfd_link_relocatable (info) && ((h != NULL && h->fn_stub != NULL && (r_type != R_MIPS16_CALL16 || h->need_fn_stub)) @@ -5479,7 +5482,7 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd, to a standard MIPS function, we need to redirect the call to the stub. Note that we specifically exclude R_MIPS16_CALL16 from this behavior; indirect calls should use an indirect stub instead. */ - else if (r_type == R_MIPS16_26 && !info->relocatable + else if (r_type == R_MIPS16_26 && !bfd_link_relocatable (info) && ((h != NULL && (h->call_stub != NULL || h->call_fp_stub != NULL)) || (local_p && mips_elf_tdata (input_bfd)->local_call_stubs != NULL @@ -5532,7 +5535,7 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd, to point to the standard PLT entry, so redirect to the compressed one. */ else if ((r_type == R_MIPS16_26 || r_type == R_MICROMIPS_26_S1) - && !info->relocatable + && !bfd_link_relocatable (info) && h != NULL && h->use_plt_entry && h->root.plt.plist->comp_offset != MINUS_ONE @@ -5567,7 +5570,7 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd, because the assembly writer may have "known" that any definition of the symbol would be 16-bit code, and that direct jumps were therefore acceptable. */ - *cross_mode_jump_p = (!info->relocatable + *cross_mode_jump_p = (!bfd_link_relocatable (info) && !(h && h->root.root.type == bfd_link_hash_undefweak) && ((r_type == R_MIPS16_26 && !target_is_16_bit_code_p) || (r_type == R_MICROMIPS_26_S1 @@ -5718,7 +5721,7 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd, case R_MIPS_32: case R_MIPS_REL32: case R_MIPS_64: - if ((info->shared + if ((bfd_link_pic (info) || (htab->root.dynamic_sections_created && h != NULL && h->root.def_dynamic @@ -6279,7 +6282,7 @@ mips_elf_perform_relocation (struct bfd_link_info *info, /* Try converting JAL to BAL and J(AL)R to B(AL), if the target is in range. */ - if (!info->relocatable + if (!bfd_link_relocatable (info) && !cross_mode_jump_p && ((JAL_TO_BAL_P (input_bfd) && r_type == R_MIPS_26 @@ -6318,7 +6321,7 @@ mips_elf_perform_relocation (struct bfd_link_info *info, if (size != 0) bfd_put (8 * size, input_bfd, x, location); - _bfd_mips_elf_reloc_shuffle (input_bfd, r_type, !info->relocatable, + _bfd_mips_elf_reloc_shuffle (input_bfd, r_type, !bfd_link_relocatable (info), location); return TRUE; @@ -7448,7 +7451,7 @@ _bfd_mips_elf_add_symbol_hook (bfd *abfd, struct bfd_link_info *info, elf_text_symbol->section = elf_text_section; } /* This code used to do *secp = bfd_und_section_ptr if - info->shared. I don't know why, and that doesn't make sense, + bfd_link_pic (info). I don't know why, and that doesn't make sense, so I took it out. */ *secp = mips_elf_tdata (abfd)->elf_text_section; break; @@ -7489,7 +7492,7 @@ _bfd_mips_elf_add_symbol_hook (bfd *abfd, struct bfd_link_info *info, elf_data_symbol->section = elf_data_section; } /* This code used to do *secp = bfd_und_section_ptr if - info->shared. I don't know why, and that doesn't make sense, + bfd_link_pic (info). I don't know why, and that doesn't make sense, so I took it out. */ *secp = mips_elf_tdata (abfd)->elf_data_section; break; @@ -7500,7 +7503,7 @@ _bfd_mips_elf_add_symbol_hook (bfd *abfd, struct bfd_link_info *info, } if (SGI_COMPAT (abfd) - && ! info->shared + && ! bfd_link_pic (info) && info->output_bfd->xvec == abfd->xvec && strcmp (*namep, "__rld_obj_head") == 0) { @@ -7608,7 +7611,7 @@ _bfd_mips_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) htab->sstubs = s; if (!mips_elf_hash_table (info)->use_rld_obj_head - && info->executable + && bfd_link_executable (info) && bfd_get_linker_section (abfd, ".rld_map") == NULL) { s = bfd_make_section_anyway_with_flags (abfd, ".rld_map", @@ -7672,7 +7675,7 @@ _bfd_mips_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) (void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd)); } - if (info->executable) + if (bfd_link_executable (info)) { const char *name; @@ -7734,7 +7737,7 @@ _bfd_mips_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) else htab->srelplt = bfd_get_linker_section (abfd, ".rel.plt"); if (!htab->sdynbss - || (htab->is_vxworks && !htab->srelbss && !info->shared) + || (htab->is_vxworks && !htab->srelbss && !bfd_link_pic (info)) || !htab->srelplt || !htab->splt) abort (); @@ -7912,7 +7915,7 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, bfd_vma addend; reloc_howto_type *howto; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; htab = mips_elf_hash_table (info); @@ -8268,7 +8271,7 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, elf_hash_table (info)->dynobj = dynobj = abfd; if (!mips_elf_create_got_section (dynobj, info)) return FALSE; - if (htab->is_vxworks && !info->shared) + if (htab->is_vxworks && !bfd_link_pic (info)) { (*_bfd_error_handler) (_("%B: GOT reloc at 0x%lx not expected in executables"), @@ -8311,7 +8314,7 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, one or using copy relocations or PLT entries. It is usually better to do the former, unless the relocation is against a read-only section. */ - if ((info->shared + if ((bfd_link_pic (info) || (h != NULL && !htab->is_vxworks && strcmp (h->root.root.string, "__gnu_local_gp") != 0 @@ -8476,7 +8479,7 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, /* This symbol is definitely not overridable. */ if (hmips->root.def_regular - && ! (info->shared && ! info->symbolic + && ! (bfd_link_pic (info) && ! info->symbolic && ! hmips->root.forced_local)) h = NULL; } @@ -8495,7 +8498,7 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, case R_MIPS_TLS_GOTTPREL: case R_MIPS16_TLS_GOTTPREL: case R_MICROMIPS_TLS_GOTTPREL: - if (info->shared) + if (bfd_link_pic (info)) info->flags |= DF_STATIC_TLS; /* Fall through */ @@ -8543,7 +8546,7 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, if (sreloc == NULL) return FALSE; } - if (info->shared && h == NULL) + if (bfd_link_pic (info) && h == NULL) { /* When creating a shared object, we must copy these reloc types into the output file as R_MIPS_REL32 @@ -8657,7 +8660,7 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, not PIC, but we can create dynamic relocations and the result will be fine. Also do not refuse R_MIPS_LO16, which can be combined with R_MIPS_GOT16. */ - if (info->shared) + if (bfd_link_pic (info)) { switch (r_type) { @@ -8721,7 +8724,7 @@ _bfd_mips_relax_section (bfd *abfd, asection *sec, /* We are not currently changing any sizes, so only one pass. */ *again = FALSE; - if (link_info->relocatable) + if (bfd_link_relocatable (link_info)) return TRUE; internal_relocs = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL, @@ -8767,7 +8770,7 @@ _bfd_mips_relax_section (bfd *abfd, asection *sec, if (! ((h->root.root.type == bfd_link_hash_defined || h->root.root.type == bfd_link_hash_defweak) && h->root.root.u.def.section) - || (link_info->shared && ! link_info->symbolic + || (bfd_link_pic (link_info) && ! link_info->symbolic && !h->root.forced_local)) continue; @@ -8883,7 +8886,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) /* VxWorks executables are handled elsewhere; we only need to allocate relocations in shared objects. */ - if (htab->is_vxworks && !info->shared) + if (htab->is_vxworks && !bfd_link_pic (info)) return TRUE; /* Ignore indirect symbols. All relocations against such symbols @@ -8894,11 +8897,11 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) /* If this symbol is defined in a dynamic object, or we are creating a shared library, we will need to copy any R_MIPS_32 or R_MIPS_REL32 relocs against it into the output file. */ - if (! info->relocatable + if (! bfd_link_relocatable (info) && hmips->possibly_dynamic_relocs != 0 && (h->root.type == bfd_link_hash_defweak || (!h->def_regular && !ELF_COMMON_DEF_P (h)) - || info->shared)) + || bfd_link_pic (info))) { bfd_boolean do_copy = TRUE; @@ -9052,11 +9055,11 @@ _bfd_mips_elf_adjust_dynamic_symbol (struct bfd_link_info *info, /* On VxWorks, also allocate room for the header's .rela.plt.unloaded entries. */ - if (htab->is_vxworks && !info->shared) + if (htab->is_vxworks && !bfd_link_pic (info)) htab->srelplt2->size += 2 * sizeof (Elf32_External_Rela); /* Now work out the sizes of individual PLT entries. */ - if (htab->is_vxworks && info->shared) + if (htab->is_vxworks && bfd_link_pic (info)) htab->plt_mips_entry_size = 4 * ARRAY_SIZE (mips_vxworks_shared_plt_entry); else if (htab->is_vxworks) @@ -9140,7 +9143,7 @@ _bfd_mips_elf_adjust_dynamic_symbol (struct bfd_link_info *info, /* If the output file has no definition of the symbol, set the symbol's value to the address of the stub. */ - if (!info->shared && !h->def_regular) + if (!bfd_link_pic (info) && !h->def_regular) hmips->use_plt_entry = TRUE; /* Make room for the R_MIPS_JUMP_SLOT relocation. */ @@ -9149,7 +9152,7 @@ _bfd_mips_elf_adjust_dynamic_symbol (struct bfd_link_info *info, : MIPS_ELF_REL_SIZE (dynobj)); /* Make room for the .rela.plt.unloaded relocations. */ - if (htab->is_vxworks && !info->shared) + if (htab->is_vxworks && !bfd_link_pic (info)) htab->srelplt2->size += 3 * sizeof (Elf32_External_Rela); /* All relocations against this symbol that could have been made @@ -9183,7 +9186,7 @@ _bfd_mips_elf_adjust_dynamic_symbol (struct bfd_link_info *info, /* We're now relying on copy relocations. Complain if we have some that we can't convert. */ - if (!htab->use_plts_and_copy_relocs || info->shared) + if (!htab->use_plts_and_copy_relocs || bfd_link_pic (info)) { (*_bfd_error_handler) (_("non-dynamic relocations refer to " "dynamic symbol %s"), @@ -9364,7 +9367,7 @@ mips_elf_lay_out_got (bfd *output_bfd, struct bfd_link_info *info) == g->global_gotno + g->local_gotno + g->tls_gotno); /* Each VxWorks GOT entry needs an explicit relocation. */ - if (htab->is_vxworks && info->shared) + if (htab->is_vxworks && bfd_link_pic (info)) g->relocs += g->global_gotno + g->local_gotno - htab->reserved_gotno; /* Allocate room for the TLS relocations. */ @@ -9576,7 +9579,7 @@ _bfd_mips_elf_size_dynamic_sections (bfd *output_bfd, if (elf_hash_table (info)->dynamic_sections_created) { /* Set the contents of the .interp section to the interpreter. */ - if (info->executable) + if (bfd_link_executable (info)) { s = bfd_get_linker_section (dynobj, ".interp"); BFD_ASSERT (s != NULL); @@ -9611,7 +9614,7 @@ _bfd_mips_elf_size_dynamic_sections (bfd *output_bfd, BFD_ASSERT (htab->sgotplt->size == 0); BFD_ASSERT (htab->splt->size == 0); - if (htab->is_vxworks && info->shared) + if (htab->is_vxworks && bfd_link_pic (info)) size = 4 * ARRAY_SIZE (mips_vxworks_shared_plt0_entry); else if (htab->is_vxworks) size = 4 * ARRAY_SIZE (mips_vxworks_exec_plt0_entry); @@ -9713,7 +9716,7 @@ _bfd_mips_elf_size_dynamic_sections (bfd *output_bfd, info->combreloc = 0; } } - else if (info->executable + else if (bfd_link_executable (info) && ! mips_elf_hash_table (info)->use_rld_obj_head && CONST_STRNEQ (name, ".rld_map")) { @@ -9772,17 +9775,17 @@ _bfd_mips_elf_size_dynamic_sections (bfd *output_bfd, DT_MIPS_RLD_MAP entry. This must come first because glibc only fills in DT_MIPS_RLD_MAP (not DT_DEBUG) and some tools may only look at the first one they see. */ - if (!info->shared + if (!bfd_link_pic (info) && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_MAP, 0)) return FALSE; - if (info->executable + if (bfd_link_executable (info) && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_MAP_REL, 0)) return FALSE; /* The DT_DEBUG entry may be filled in by the dynamic linker and used by the debugger. */ - if (info->executable + if (bfd_link_executable (info) && !SGI_COMPAT (output_bfd) && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_DEBUG, 0)) return FALSE; @@ -9918,7 +9921,7 @@ mips_elf_adjust_addend (bfd *output_bfd, struct bfd_link_info *info, sym = local_syms + r_symndx; /* Adjust REL's addend to account for section merging. */ - if (!info->relocatable) + if (!bfd_link_relocatable (info)) { sec = local_sections[r_symndx]; _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel); @@ -10109,7 +10112,7 @@ _bfd_mips_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, local_syms, local_sections, rel); } - if (info->relocatable) + if (bfd_link_relocatable (info)) { if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd) && bfd_big_endian (input_bfd)) @@ -10852,7 +10855,7 @@ _bfd_mips_elf_finish_dynamic_symbol (bfd *output_bfd, { offset = p->gotidx; BFD_ASSERT (offset > 0 && offset < htab->sgot->size); - if (info->shared + if (bfd_link_pic (info) || (elf_hash_table (info)->dynamic_sections_created && p->d.h != NULL && p->d.h->root.def_dynamic @@ -11028,7 +11031,7 @@ _bfd_mips_vxworks_finish_dynamic_symbol (bfd *output_bfd, /* Find out where the .plt entry should go. */ loc = htab->splt->contents + plt_offset; - if (info->shared) + if (bfd_link_pic (info)) { plt_entry = mips_vxworks_shared_plt_entry; bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc); @@ -11643,7 +11646,7 @@ _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd, sgot->contents + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd)); - if (! info->shared) + if (! bfd_link_pic (info)) continue; for (; got_index < g->local_gotno; got_index++) @@ -11779,14 +11782,14 @@ _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd, { if (htab->is_vxworks) { - if (info->shared) + if (bfd_link_pic (info)) mips_vxworks_finish_shared_plt (output_bfd, info); else mips_vxworks_finish_exec_plt (output_bfd, info); } else { - BFD_ASSERT (!info->shared); + BFD_ASSERT (!bfd_link_pic (info)); if (!mips_finish_exec_plt (output_bfd, info)) return FALSE; } @@ -12391,7 +12394,7 @@ _bfd_mips_elf_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED, unsigned long r_symndx; struct elf_link_hash_entry *h; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; symtab_hdr = &elf_tdata (abfd)->symtab_hdr; @@ -13405,7 +13408,7 @@ _bfd_mips_elf_relax_section (bfd *abfd, asection *sec, this section does not have relocs, or if this is not a code section. */ - if (link_info->relocatable + if (bfd_link_relocatable (link_info) || (sec->flags & SEC_RELOC) == 0 || sec->reloc_count == 0 || (sec->flags & SEC_CODE) == 0) @@ -14162,7 +14165,7 @@ _bfd_mips_elf_final_link (bfd *abfd, struct bfd_link_info *info) elf_gp (abfd) = (h->u.def.section->output_section->vma + h->u.def.section->output_offset + h->u.def.value); - else if (info->relocatable) + else if (bfd_link_relocatable (info)) { bfd_vma lo = MINUS_ONE; @@ -14448,7 +14451,7 @@ _bfd_mips_elf_final_link (bfd *abfd, struct bfd_link_info *info) input_section->flags &= ~SEC_HAS_CONTENTS; } - if (SGI_COMPAT (abfd) && info->shared) + if (SGI_COMPAT (abfd) && bfd_link_pic (info)) { /* Create .rtproc section. */ rtproc_sec = bfd_get_linker_section (abfd, ".rtproc"); @@ -14504,7 +14507,7 @@ _bfd_mips_elf_final_link (bfd *abfd, struct bfd_link_info *info) information describing how the small data area would change depending upon the -G switch. These sections not used in executables files. */ - if (! info->relocatable) + if (! bfd_link_relocatable (info)) { for (p = o->map_head.link_order; p != NULL; p = p->next) { diff --git a/bfd/elfxx-sparc.c b/bfd/elfxx-sparc.c index 492af3603f0..9bb71a99335 100644 --- a/bfd/elfxx-sparc.c +++ b/bfd/elfxx-sparc.c @@ -1208,14 +1208,14 @@ _bfd_sparc_elf_create_dynamic_sections (bfd *dynobj, return FALSE; htab->sdynbss = bfd_get_linker_section (dynobj, ".dynbss"); - if (!info->shared) + if (!bfd_link_pic (info)) htab->srelbss = bfd_get_linker_section (dynobj, ".rela.bss"); if (htab->is_vxworks) { if (!elf_vxworks_create_dynamic_sections (dynobj, info, &htab->srelplt2)) return FALSE; - if (info->shared) + if (bfd_link_pic (info)) { htab->plt_header_size = 4 * ARRAY_SIZE (sparc_vxworks_shared_plt0_entry); @@ -1232,7 +1232,7 @@ _bfd_sparc_elf_create_dynamic_sections (bfd *dynobj, } if (!htab->elf.splt || !htab->elf.srelplt || !htab->sdynbss - || (!info->shared && !htab->srelbss)) + || (!bfd_link_pic (info) && !htab->srelbss)) abort (); return TRUE; @@ -1330,7 +1330,7 @@ sparc_elf_tls_transition (struct bfd_link_info *info, bfd *abfd, && ! _bfd_sparc_elf_tdata (abfd)->has_tlsgd) r_type = R_SPARC_REV32; - if (info->shared) + if (bfd_link_pic (info)) return r_type; switch (r_type) @@ -1377,7 +1377,7 @@ _bfd_sparc_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, int num_relocs; bfd_boolean checked_tlsgd = FALSE; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; htab = _bfd_sparc_elf_hash_table (info); @@ -1501,13 +1501,13 @@ _bfd_sparc_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, case R_SPARC_TLS_LE_HIX22: case R_SPARC_TLS_LE_LOX10: - if (info->shared) + if (bfd_link_pic (info)) goto r_sparc_plt32; break; case R_SPARC_TLS_IE_HI22: case R_SPARC_TLS_IE_LO10: - if (info->shared) + if (bfd_link_pic (info)) info->flags |= DF_STATIC_TLS; /* Fall through */ @@ -1617,7 +1617,7 @@ _bfd_sparc_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, case R_SPARC_TLS_GD_CALL: case R_SPARC_TLS_LDM_CALL: - if (info->shared) + if (bfd_link_pic (info)) { /* These are basically R_SPARC_TLS_WPLT30 relocs against __tls_get_addr. */ @@ -1735,7 +1735,7 @@ _bfd_sparc_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, h->non_got_ref = 1; r_sparc_plt32: - if (h != NULL && !info->shared) + if (h != NULL && !bfd_link_pic (info)) { /* We may need a .plt entry if the function this reloc refers to is in a shared lib. */ @@ -1763,19 +1763,19 @@ _bfd_sparc_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, may need to keep relocations for symbols satisfied by a dynamic library if we manage to avoid copy relocs for the symbol. */ - if ((info->shared + if ((bfd_link_pic (info) && (sec->flags & SEC_ALLOC) != 0 && (! _bfd_sparc_elf_howto_table[r_type].pc_relative || (h != NULL && (! SYMBOLIC_BIND (info, h) || h->root.type == bfd_link_hash_defweak || !h->def_regular)))) - || (!info->shared + || (!bfd_link_pic (info) && (sec->flags & SEC_ALLOC) != 0 && h != NULL && (h->root.type == bfd_link_hash_defweak || !h->def_regular)) - || (!info->shared + || (!bfd_link_pic (info) && h != NULL && h->type == STT_GNU_IFUNC)) { @@ -1878,8 +1878,8 @@ _bfd_sparc_elf_gc_mark_hook (asection *sec, } /* FIXME: The test here, in check_relocs and in relocate_section - dealing with TLS optimization, ought to be !info->executable. */ - if (info->shared) + dealing with TLS optimization, ought to be !bfd_link_executable (info). */ + if (bfd_link_pic (info)) { switch (SPARC_ELF_R_TYPE (rel->r_info)) { @@ -1928,7 +1928,7 @@ _bfd_sparc_elf_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info, bfd_signed_vma *local_got_refcounts; const Elf_Internal_Rela *rel, *relend; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; BFD_ASSERT (is_sparc_elf (abfd) || sec->reloc_count == 0); @@ -2057,7 +2057,7 @@ _bfd_sparc_elf_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info, case R_SPARC_L44: case R_SPARC_H34: case R_SPARC_UA64: - if (info->shared) + if (bfd_link_pic (info)) break; /* Fall through. */ @@ -2158,7 +2158,7 @@ _bfd_sparc_elf_adjust_dynamic_symbol (struct bfd_link_info *info, only references to the symbol are via the global offset table. For such cases we need not do anything here; the relocations will be handled correctly by relocate_section. */ - if (info->shared) + if (bfd_link_pic (info)) return TRUE; /* If there are no references to this symbol that do not use the @@ -2247,7 +2247,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) return FALSE; } - if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, info->shared, h) + if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, bfd_link_pic (info), h) || (h->type == STT_GNU_IFUNC && h->def_regular)) { @@ -2262,7 +2262,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) s->size = htab->plt_header_size; /* Allocate space for the .rela.plt.unloaded relocations. */ - if (htab->is_vxworks && !info->shared) + if (htab->is_vxworks && !bfd_link_pic (info)) htab->srelplt2->size = sizeof (Elf32_External_Rela) * 2; } @@ -2293,7 +2293,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) location in the .plt. This is required to make function pointers compare as equal between the normal executable and the shared library. */ - if (! info->shared + if (! bfd_link_pic (info) && !h->def_regular) { h->root.u.def.section = s; @@ -2315,7 +2315,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) htab->elf.sgotplt->size += 4; /* ...and for the .rela.plt.unloaded relocations. */ - if (!info->shared) + if (!bfd_link_pic (info)) htab->srelplt2->size += sizeof (Elf32_External_Rela) * 3; } } @@ -2334,7 +2334,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) /* If R_SPARC_TLS_IE_{HI22,LO10} symbol is now local to the binary, make it a R_SPARC_TLS_LE_{HI22,LO10} requiring no TLS entry. */ if (h->got.refcount > 0 - && !info->shared + && !bfd_link_pic (info) && h->dynindx == -1 && _bfd_sparc_elf_hash_entry(h)->tls_type == GOT_TLS_IE) h->got.offset = (bfd_vma) -1; @@ -2369,7 +2369,9 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) htab->elf.srelgot->size += SPARC_ELF_RELA_BYTES (htab); else if (tls_type == GOT_TLS_GD) htab->elf.srelgot->size += 2 * SPARC_ELF_RELA_BYTES (htab); - else if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h)) + else if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, + bfd_link_pic (info), + h)) htab->elf.srelgot->size += SPARC_ELF_RELA_BYTES (htab); } else @@ -2385,7 +2387,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) space for pc-relative relocs that have become local due to symbol visibility changes. */ - if (info->shared) + if (bfd_link_pic (info)) { if (SYMBOL_CALLS_LOCAL (info, h)) { @@ -2557,7 +2559,7 @@ _bfd_sparc_elf_size_dynamic_sections (bfd *output_bfd, if (elf_hash_table (info)->dynamic_sections_created) { /* Set the contents of the .interp section to the interpreter. */ - if (info->executable) + if (bfd_link_executable (info)) { s = bfd_get_linker_section (dynobj, ".interp"); BFD_ASSERT (s != NULL); @@ -2631,7 +2633,7 @@ _bfd_sparc_elf_size_dynamic_sections (bfd *output_bfd, s->size += SPARC_ELF_WORD_BYTES (htab); if (*local_tls_type == GOT_TLS_GD) s->size += SPARC_ELF_WORD_BYTES (htab); - if (info->shared + if (bfd_link_pic (info) || *local_tls_type == GOT_TLS_GD || *local_tls_type == GOT_TLS_IE) srel->size += SPARC_ELF_RELA_BYTES (htab); @@ -2745,7 +2747,7 @@ _bfd_sparc_elf_size_dynamic_sections (bfd *output_bfd, #define add_dynamic_entry(TAG, VAL) \ _bfd_elf_add_dynamic_entry (info, TAG, VAL) - if (info->executable) + if (bfd_link_executable (info)) { if (!add_dynamic_entry (DT_DEBUG, 0)) return FALSE; @@ -2864,7 +2866,7 @@ _bfd_sparc_elf_relax_section (bfd *abfd ATTRIBUTE_UNUSED, struct bfd_link_info *link_info ATTRIBUTE_UNUSED, bfd_boolean *again) { - if (link_info->relocatable) + if (bfd_link_relocatable (link_info)) (*link_info->callbacks->einfo) (_("%P%F: --relax and -r may not be used together\n")); @@ -2957,7 +2959,7 @@ _bfd_sparc_elf_relocate_section (bfd *output_bfd, sreloc = elf_section_data (input_section)->sreloc; /* We have to handle relocations in vxworks .tls_vars sections specially, because the dynamic loader is 'weird'. */ - is_vxworks_tls = (htab->is_vxworks && info->shared + is_vxworks_tls = (htab->is_vxworks && bfd_link_pic (info) && !strcmp (input_section->output_section->name, ".tls_vars")); @@ -3003,7 +3005,7 @@ _bfd_sparc_elf_relocate_section (bfd *output_bfd, sec = local_sections[r_symndx]; relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel); - if (!info->relocatable + if (!bfd_link_relocatable (info) && ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC) { /* Relocate against local STT_GNU_IFUNC symbol. */ @@ -3041,7 +3043,7 @@ _bfd_sparc_elf_relocate_section (bfd *output_bfd, RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) continue; if (h != NULL @@ -3091,7 +3093,7 @@ _bfd_sparc_elf_relocate_section (bfd *output_bfd, case R_SPARC_32: case R_SPARC_64: - if (info->shared && h->non_got_ref) + if (bfd_link_pic (info) && h->non_got_ref) { Elf_Internal_Rela outrel; bfd_vma offset; @@ -3109,7 +3111,7 @@ _bfd_sparc_elf_relocate_section (bfd *output_bfd, if (h->dynindx == -1 || h->forced_local - || info->executable) + || bfd_link_executable (info)) { outrel.r_info = SPARC_ELF_R_INFO (htab, NULL, 0, R_SPARC_IRELATIVE); @@ -3134,7 +3136,7 @@ _bfd_sparc_elf_relocate_section (bfd *output_bfd, case R_SPARC_HI22: case R_SPARC_LO10: /* We should only see such relocs in static links. */ - if (info->shared) + if (bfd_link_pic (info)) abort(); relocation = (plt_sec->output_section->vma + plt_sec->output_offset + h->plt.offset); @@ -3206,8 +3208,10 @@ _bfd_sparc_elf_relocate_section (bfd *output_bfd, BFD_ASSERT (off != (bfd_vma) -1); dyn = elf_hash_table (info)->dynamic_sections_created; - if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h) - || (info->shared + if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, + bfd_link_pic (info), + h) + || (bfd_link_pic (info) && SYMBOL_REFERENCES_LOCAL (info, h))) { /* This is actually a static link, or it is a @@ -3249,7 +3253,7 @@ _bfd_sparc_elf_relocate_section (bfd *output_bfd, else { - if (info->shared) + if (bfd_link_pic (info)) { asection *s; Elf_Internal_Rela outrel; @@ -3382,13 +3386,13 @@ _bfd_sparc_elf_relocate_section (bfd *output_bfd, || is_vxworks_tls) break; - if ((info->shared + if ((bfd_link_pic (info) && (h == NULL || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT || h->root.type != bfd_link_hash_undefweak) && (! howto->pc_relative || !SYMBOL_CALLS_LOCAL (info, h))) - || (!info->shared + || (!bfd_link_pic (info) && h != NULL && h->dynindx != -1 && !h->non_got_ref @@ -3467,7 +3471,7 @@ _bfd_sparc_elf_relocate_section (bfd *output_bfd, else if (h != NULL && h->dynindx != -1 && (! is_plt - || !info->shared + || !bfd_link_pic (info) || !SYMBOLIC_BIND (info, h) || !h->def_regular)) { @@ -3565,7 +3569,9 @@ _bfd_sparc_elf_relocate_section (bfd *output_bfd, else if (h != NULL) { tls_type = _bfd_sparc_elf_hash_entry(h)->tls_type; - if (!info->shared && h->dynindx == -1 && tls_type == GOT_TLS_IE) + if (!bfd_link_pic (info) + && h->dynindx == -1 + && tls_type == GOT_TLS_IE) switch (SPARC_ELF_R_TYPE (rel->r_info)) { case R_SPARC_TLS_GD_HI22: @@ -3687,7 +3693,7 @@ _bfd_sparc_elf_relocate_section (bfd *output_bfd, case R_SPARC_TLS_LDM_HI22: case R_SPARC_TLS_LDM_LO10: - if (! info->shared) + if (! bfd_link_pic (info)) { bfd_put_32 (output_bfd, SPARC_NOP, contents + rel->r_offset); continue; @@ -3698,7 +3704,7 @@ _bfd_sparc_elf_relocate_section (bfd *output_bfd, case R_SPARC_TLS_LDO_HIX22: case R_SPARC_TLS_LDO_LOX10: - if (info->shared) + if (bfd_link_pic (info)) { relocation -= dtpoff_base (info); break; @@ -3710,7 +3716,7 @@ _bfd_sparc_elf_relocate_section (bfd *output_bfd, case R_SPARC_TLS_LE_HIX22: case R_SPARC_TLS_LE_LOX10: - if (info->shared) + if (bfd_link_pic (info)) { Elf_Internal_Rela outrel; bfd_boolean skip; @@ -3742,7 +3748,7 @@ _bfd_sparc_elf_relocate_section (bfd *output_bfd, break; case R_SPARC_TLS_LDM_CALL: - if (! info->shared) + if (! bfd_link_pic (info)) { /* mov %g0, %o0 */ bfd_put_32 (output_bfd, 0x90100000, contents + rel->r_offset); @@ -3756,13 +3762,13 @@ _bfd_sparc_elf_relocate_section (bfd *output_bfd, tls_type = _bfd_sparc_elf_local_got_tls_type (input_bfd) [r_symndx]; else if (h != NULL) tls_type = _bfd_sparc_elf_hash_entry(h)->tls_type; - if (! info->shared + if (! bfd_link_pic (info) || (r_type == R_SPARC_TLS_GD_CALL && tls_type == GOT_TLS_IE)) { Elf_Internal_Rela *rel2; bfd_vma insn; - if (!info->shared && (h == NULL || h->dynindx == -1)) + if (!bfd_link_pic (info) && (h == NULL || h->dynindx == -1)) { /* GD -> LE */ bfd_put_32 (output_bfd, SPARC_NOP, contents + rel->r_offset); @@ -3832,7 +3838,7 @@ _bfd_sparc_elf_relocate_section (bfd *output_bfd, tls_type = _bfd_sparc_elf_local_got_tls_type (input_bfd) [r_symndx]; else if (h != NULL) tls_type = _bfd_sparc_elf_hash_entry(h)->tls_type; - if (! info->shared || tls_type == GOT_TLS_IE) + if (! bfd_link_pic (info) || tls_type == GOT_TLS_IE) { /* add %reg1, %reg2, %reg3, %tgd_add(foo) changed into IE: @@ -3840,7 +3846,7 @@ _bfd_sparc_elf_relocate_section (bfd *output_bfd, or LE: add %g7, %reg2, %reg3. */ bfd_vma insn = bfd_get_32 (input_bfd, contents + rel->r_offset); - if ((h != NULL && h->dynindx != -1) || info->shared) + if ((h != NULL && h->dynindx != -1) || bfd_link_pic (info)) relocation = insn | (ABI_64_P (output_bfd) ? 0xc0580000 : 0xc0000000); else relocation = (insn & ~0x7c000) | 0x1c000; @@ -3849,12 +3855,12 @@ _bfd_sparc_elf_relocate_section (bfd *output_bfd, continue; case R_SPARC_TLS_LDM_ADD: - if (! info->shared) + if (! bfd_link_pic (info)) bfd_put_32 (output_bfd, SPARC_NOP, contents + rel->r_offset); continue; case R_SPARC_TLS_LDO_ADD: - if (! info->shared) + if (! bfd_link_pic (info)) { /* Change rs1 into %g7. */ bfd_vma insn = bfd_get_32 (input_bfd, contents + rel->r_offset); @@ -3865,7 +3871,7 @@ _bfd_sparc_elf_relocate_section (bfd *output_bfd, case R_SPARC_TLS_IE_LD: case R_SPARC_TLS_IE_LDX: - if (! info->shared && (h == NULL || h->dynindx == -1)) + if (! bfd_link_pic (info) && (h == NULL || h->dynindx == -1)) { bfd_vma insn = bfd_get_32 (input_bfd, contents + rel->r_offset); int rs2 = insn & 0x1f; @@ -4226,7 +4232,7 @@ sparc_vxworks_build_plt_entry (bfd *output_bfd, struct bfd_link_info *info, htab = _bfd_sparc_elf_hash_table (info); BFD_ASSERT (htab != NULL); - if (info->shared) + if (bfd_link_pic (info)) { plt_entry = sparc_vxworks_shared_plt_entry; got_base = 0; @@ -4270,7 +4276,7 @@ sparc_vxworks_build_plt_entry (bfd *output_bfd, struct bfd_link_info *info, htab->elf.sgotplt->contents + got_offset); /* Add relocations to .rela.plt.unloaded. */ - if (!info->shared) + if (!bfd_link_pic (info)) { loc = (htab->srelplt2->contents + (2 + 3 * plt_index) * sizeof (Elf32_External_Rela)); @@ -4376,7 +4382,7 @@ _bfd_sparc_elf_finish_dynamic_symbol (bfd *output_bfd, if (h == NULL || h->dynindx == -1 - || ((info->executable + || ((bfd_link_executable (info) || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT) && h->def_regular && h->type == STT_GNU_IFUNC)) @@ -4476,7 +4482,7 @@ _bfd_sparc_elf_finish_dynamic_symbol (bfd *output_bfd, the symbol was forced to be local because of a version file. The entry in the global offset table will already have been initialized in the relocate_section function. */ - if (! info->shared + if (! bfd_link_pic (info) && h->type == STT_GNU_IFUNC && h->def_regular) { @@ -4491,7 +4497,7 @@ _bfd_sparc_elf_finish_dynamic_symbol (bfd *output_bfd, + (h->got.offset & ~(bfd_vma) 1)); return TRUE; } - else if (info->shared + else if (bfd_link_pic (info) && SYMBOL_REFERENCES_LOCAL (info, h)) { asection *sec = h->root.u.def.section; @@ -4779,7 +4785,7 @@ _bfd_sparc_elf_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *i { if (htab->is_vxworks) { - if (info->shared) + if (bfd_link_pic (info)) sparc_vxworks_finish_shared_plt (output_bfd, info); else sparc_vxworks_finish_exec_plt (output_bfd, info); diff --git a/bfd/elfxx-tilegx.c b/bfd/elfxx-tilegx.c index df1fe418d57..59a2f7ef288 100644 --- a/bfd/elfxx-tilegx.c +++ b/bfd/elfxx-tilegx.c @@ -1513,11 +1513,11 @@ tilegx_elf_create_dynamic_sections (bfd *dynobj, return FALSE; htab->sdynbss = bfd_get_linker_section (dynobj, ".dynbss"); - if (!info->shared) + if (!bfd_link_pic (info)) htab->srelbss = bfd_get_linker_section (dynobj, ".rela.bss"); if (!htab->elf.splt || !htab->elf.srelplt || !htab->sdynbss - || (!info->shared && !htab->srelbss)) + || (!bfd_link_pic (info) && !htab->srelbss)) abort (); return TRUE; @@ -1643,7 +1643,7 @@ static int tilegx_elf_tls_transition (struct bfd_link_info *info, int r_type, int is_local, bfd_boolean disable_le_transition) { - if (info->shared) + if (bfd_link_pic (info)) return r_type; if (is_local && !disable_le_transition) @@ -1669,7 +1669,7 @@ tilegx_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, int num_relocs; bfd_boolean has_tls_gd_or_ie = FALSE, has_tls_add = FALSE; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; htab = tilegx_elf_hash_table (info); @@ -1754,7 +1754,7 @@ tilegx_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, case R_TILEGX_IMM16_X1_HW0_LAST_TLS_LE: case R_TILEGX_IMM16_X0_HW1_LAST_TLS_LE: case R_TILEGX_IMM16_X1_HW1_LAST_TLS_LE: - if (info->shared) + if (bfd_link_pic (info)) goto r_tilegx_plt32; break; @@ -1764,7 +1764,7 @@ tilegx_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, case R_TILEGX_IMM16_X1_HW0_LAST_TLS_GD: case R_TILEGX_IMM16_X0_HW1_LAST_TLS_GD: case R_TILEGX_IMM16_X1_HW1_LAST_TLS_GD: - BFD_ASSERT (info->shared); + BFD_ASSERT (bfd_link_pic (info)); tls_type = GOT_TLS_GD; goto have_got_reference; @@ -1775,7 +1775,7 @@ tilegx_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, case R_TILEGX_IMM16_X0_HW1_LAST_TLS_IE: case R_TILEGX_IMM16_X1_HW1_LAST_TLS_IE: tls_type = GOT_TLS_IE; - if (info->shared) + if (bfd_link_pic (info)) info->flags |= DF_STATIC_TLS; goto have_got_reference; @@ -1856,7 +1856,7 @@ tilegx_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, break; case R_TILEGX_TLS_GD_CALL: - if (info->shared) + if (bfd_link_pic (info)) { /* These are basically R_TILEGX_JUMPOFF_X1_PLT relocs against __tls_get_addr. */ @@ -1975,7 +1975,7 @@ tilegx_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, h->non_got_ref = 1; r_tilegx_plt32: - if (h != NULL && !info->shared) + if (h != NULL && !bfd_link_pic (info)) { /* We may need a .plt entry if the function this reloc refers to is in a shared lib. */ @@ -2003,14 +2003,14 @@ tilegx_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, may need to keep relocations for symbols satisfied by a dynamic library if we manage to avoid copy relocs for the symbol. */ - if ((info->shared + if ((bfd_link_pic (info) && (sec->flags & SEC_ALLOC) != 0 && (! tilegx_elf_howto_table[r_type].pc_relative || (h != NULL && (! info->symbolic || h->root.type == bfd_link_hash_defweak || !h->def_regular)))) - || (!info->shared + || (!bfd_link_pic (info) && (sec->flags & SEC_ALLOC) != 0 && h != NULL && (h->root.type == bfd_link_hash_defweak @@ -2119,8 +2119,8 @@ tilegx_elf_gc_mark_hook (asection *sec, } /* FIXME: The test here, in check_relocs and in relocate_section - dealing with TLS optimization, ought to be !info->executable. */ - if (info->shared) + dealing with TLS optimization, ought to be !bfd_link_executable (info). */ + if (bfd_link_pic (info)) { switch (TILEGX_ELF_R_TYPE (rel->r_info)) { @@ -2154,7 +2154,7 @@ tilegx_elf_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info, bfd_signed_vma *local_got_refcounts; const Elf_Internal_Rela *rel, *relend; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; BFD_ASSERT (is_tilegx_elf (abfd) || sec->reloc_count == 0); @@ -2298,7 +2298,7 @@ tilegx_elf_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info, case R_TILEGX_IMM16_X1_HW1_LAST: case R_TILEGX_IMM16_X0_HW2_LAST: case R_TILEGX_IMM16_X1_HW2_LAST: - if (info->shared) + if (bfd_link_pic (info)) break; /* Fall through. */ @@ -2405,7 +2405,7 @@ tilegx_elf_adjust_dynamic_symbol (struct bfd_link_info *info, only references to the symbol are via the global offset table. For such cases we need not do anything here; the relocations will be handled correctly by relocate_section. */ - if (info->shared) + if (bfd_link_pic (info)) return TRUE; /* If there are no references to this symbol that do not use the @@ -2489,7 +2489,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) return FALSE; } - if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, info->shared, h)) + if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, bfd_link_pic (info), h)) { asection *s = htab->elf.splt; @@ -2506,7 +2506,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) location in the .plt. This is required to make function pointers compare as equal between the normal executable and the shared library. */ - if (! info->shared + if (! bfd_link_pic (info) && !h->def_regular) { h->root.u.def.section = s; @@ -2538,7 +2538,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) requiring no TLS entry. */ if (h->got.refcount > 0 && !htab->disable_le_transition - && !info->shared + && !bfd_link_pic (info) && h->dynindx == -1 && tilegx_elf_hash_entry(h)->tls_type == GOT_TLS_IE) h->got.offset = (bfd_vma) -1; @@ -2568,7 +2568,9 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) TLS_GD needs two if local symbol and two if global. */ if (tls_type == GOT_TLS_GD || tls_type == GOT_TLS_IE) htab->elf.srelgot->size += 2 * TILEGX_ELF_RELA_BYTES (htab); - else if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h)) + else if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, + bfd_link_pic (info), + h)) htab->elf.srelgot->size += TILEGX_ELF_RELA_BYTES (htab); } else @@ -2584,7 +2586,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) space for pc-relative relocs that have become local due to symbol visibility changes. */ - if (info->shared) + if (bfd_link_pic (info)) { if (SYMBOL_CALLS_LOCAL (info, h)) { @@ -2722,7 +2724,7 @@ tilegx_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, if (elf_hash_table (info)->dynamic_sections_created) { /* Set the contents of the .interp section to the interpreter. */ - if (info->executable) + if (bfd_link_executable (info)) { s = bfd_get_linker_section (dynobj, ".interp"); BFD_ASSERT (s != NULL); @@ -2787,7 +2789,7 @@ tilegx_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, s->size += TILEGX_ELF_WORD_BYTES (htab); if (*local_tls_type == GOT_TLS_GD) s->size += TILEGX_ELF_WORD_BYTES (htab); - if (info->shared + if (bfd_link_pic (info) || *local_tls_type == GOT_TLS_GD || *local_tls_type == GOT_TLS_IE) srel->size += TILEGX_ELF_RELA_BYTES (htab); @@ -2899,7 +2901,7 @@ tilegx_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, #define add_dynamic_entry(TAG, VAL) \ _bfd_elf_add_dynamic_entry (info, TAG, VAL) - if (info->executable) + if (bfd_link_executable (info)) { if (!add_dynamic_entry (DT_DEBUG, 0)) return FALSE; @@ -3214,7 +3216,7 @@ tilegx_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, rel, 1, relend, howto, 0, contents); - if (info->relocatable) + if (bfd_link_relocatable (info)) continue; if (h != NULL) @@ -3245,9 +3247,9 @@ tilegx_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, else if (h != NULL) tls_type = tilegx_elf_hash_entry(h)->tls_type; - is_tls_iele = (! info->shared || tls_type == GOT_TLS_IE); + is_tls_iele = (! bfd_link_pic (info) || tls_type == GOT_TLS_IE); is_tls_le = is_tls_iele && (!input_section->sec_flg0 - && !info->shared + && !bfd_link_pic (info) && (h == NULL || h->dynindx == -1)); if (r_type == R_TILEGX_TLS_GD_CALL) @@ -3392,7 +3394,7 @@ tilegx_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, break; case R_TILEGX_TLS_IE_LOAD: if (!input_section->sec_flg0 - && !info->shared + && !bfd_link_pic (info) && (h == NULL || h->dynindx == -1)) { /* IE -> LE */ @@ -3439,8 +3441,10 @@ tilegx_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, BFD_ASSERT (off != (bfd_vma) -1); dyn = elf_hash_table (info)->dynamic_sections_created; - if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h) - || (info->shared + if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, + bfd_link_pic (info), + h) + || (bfd_link_pic (info) && SYMBOL_REFERENCES_LOCAL (info, h))) { /* This is actually a static link, or it is a @@ -3481,7 +3485,7 @@ tilegx_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, off &= ~1; else { - if (info->shared) + if (bfd_link_pic (info)) { asection *s; Elf_Internal_Rela outrel; @@ -3611,13 +3615,13 @@ tilegx_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, if ((input_section->flags & SEC_ALLOC) == 0) break; - if ((info->shared + if ((bfd_link_pic (info) && (h == NULL || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT || h->root.type != bfd_link_hash_undefweak) && (! howto->pc_relative || !SYMBOL_CALLS_LOCAL (info, h))) - || (!info->shared + || (!bfd_link_pic (info) && h != NULL && h->dynindx != -1 && !h->non_got_ref @@ -3670,7 +3674,7 @@ tilegx_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, else if (h != NULL && h->dynindx != -1 && (! is_plt - || !info->shared + || !bfd_link_pic (info) || !SYMBOLIC_BIND (info, h) || !h->def_regular)) { @@ -3753,7 +3757,7 @@ tilegx_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, case R_TILEGX_IMM16_X1_HW0_LAST_TLS_LE: case R_TILEGX_IMM16_X0_HW1_LAST_TLS_LE: case R_TILEGX_IMM16_X1_HW1_LAST_TLS_LE: - if (info->shared) + if (bfd_link_pic (info)) { Elf_Internal_Rela outrel; bfd_boolean skip; @@ -3805,7 +3809,9 @@ tilegx_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, else if (h != NULL) { tls_type = tilegx_elf_hash_entry(h)->tls_type; - if (!info->shared && h->dynindx == -1 && tls_type == GOT_TLS_IE) + if (!bfd_link_pic (info) + && h->dynindx == -1 + && tls_type == GOT_TLS_IE) r_type = (!input_section->sec_flg0 ? tilegx_tls_translate_to_le (r_type) : tilegx_tls_translate_to_ie (r_type)); @@ -3856,8 +3862,10 @@ tilegx_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, bfd_boolean dyn; dyn = htab->elf.dynamic_sections_created; - if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h) - && (!info->shared + if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, + bfd_link_pic (info), + h) + && (!bfd_link_pic (info) || !SYMBOL_REFERENCES_LOCAL (info, h))) { indx = h->dynindx; @@ -3866,7 +3874,7 @@ tilegx_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, /* The GOT entries have not been initialized yet. Do it now, and emit any relocations. */ - if ((info->shared || indx != 0) + if ((bfd_link_pic (info) || indx != 0) && (h == NULL || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT || h->root.type != bfd_link_hash_undefweak)) @@ -4171,7 +4179,7 @@ tilegx_elf_finish_dynamic_symbol (bfd *output_bfd, the symbol was forced to be local because of a version file. The entry in the global offset table will already have been initialized in the relocate_section function. */ - if (info->shared + if (bfd_link_pic (info) && (info->symbolic || h->dynindx == -1) && h->def_regular) { diff --git a/bfd/i386linux.c b/bfd/i386linux.c index 8dd1d0d2d0c..2bec98b093e 100644 --- a/bfd/i386linux.c +++ b/bfd/i386linux.c @@ -318,7 +318,7 @@ linux_add_one_symbol (struct bfd_link_info *info, insert = FALSE; - if (! info->relocatable + if (! bfd_link_relocatable (info) && linux_hash_table (info)->dynobj == NULL && strcmp (name, SHARABLE_CONFLICTS) == 0 && (flags & BSF_CONSTRUCTOR) != 0 diff --git a/bfd/linker.c b/bfd/linker.c index dec6d1d0ace..86a7a1945ba 100644 --- a/bfd/linker.c +++ b/bfd/linker.c @@ -1906,7 +1906,7 @@ _bfd_generic_final_link (bfd *abfd, struct bfd_link_info *info) if (! generic_add_output_symbol (abfd, &outsymalloc, NULL)) return FALSE; - if (info->relocatable) + if (bfd_link_relocatable (info)) { /* Allocate space for the output relocs for each section. */ for (o = abfd->sections; o != NULL; o = o->next) @@ -2210,7 +2210,7 @@ _bfd_generic_link_output_symbols (bfd *output_bfd, break; case discard_sec_merge: output = TRUE; - if (info->relocatable + if (bfd_link_relocatable (info) || ! (sym->section->flags & SEC_MERGE)) break; /* FALLTHROUGH */ @@ -2380,7 +2380,7 @@ _bfd_generic_reloc_link_order (bfd *abfd, { arelent *r; - if (! info->relocatable) + if (! bfd_link_relocatable (info)) abort (); if (sec->orelocation == NULL) abort (); @@ -2611,7 +2611,7 @@ default_indirect_link_order (bfd *output_bfd, BFD_ASSERT (input_section->output_offset == link_order->offset); BFD_ASSERT (input_section->size == link_order->size); - if (info->relocatable + if (bfd_link_relocatable (info) && input_section->reloc_count > 0 && output_section->orelocation == NULL) { @@ -2705,7 +2705,7 @@ default_indirect_link_order (bfd *output_bfd, goto error_return; new_contents = (bfd_get_relocated_section_contents (output_bfd, info, link_order, contents, - info->relocatable, + bfd_link_relocatable (info), _bfd_generic_link_get_symbols (input_bfd))); if (!new_contents) goto error_return; diff --git a/bfd/m68klinux.c b/bfd/m68klinux.c index 23341e55bc4..a29cf2be508 100644 --- a/bfd/m68klinux.c +++ b/bfd/m68klinux.c @@ -320,7 +320,7 @@ linux_add_one_symbol (struct bfd_link_info *info, insert = FALSE; - if (! info->relocatable + if (! bfd_link_relocatable (info) && linux_hash_table (info)->dynobj == NULL && strcmp (name, SHARABLE_CONFLICTS) == 0 && (flags & BSF_CONSTRUCTOR) != 0 diff --git a/bfd/pdp11.c b/bfd/pdp11.c index 241e3582f31..41c6cf170e5 100644 --- a/bfd/pdp11.c +++ b/bfd/pdp11.c @@ -3264,7 +3264,7 @@ pdp11_aout_link_input_section (struct aout_final_link_info *flaginfo, BFD_ASSERT (input_bfd->xvec->header_byteorder == output_bfd->xvec->header_byteorder); - relocatable = flaginfo->info->relocatable; + relocatable = bfd_link_relocatable (flaginfo->info); syms = obj_aout_external_syms (input_bfd); strings = obj_aout_external_strings (input_bfd); sym_hashes = obj_aout_sym_hashes (input_bfd); @@ -3474,7 +3474,7 @@ pdp11_aout_link_input_section (struct aout_final_link_info *flaginfo, /* Now warn if a global symbol is undefined. We could not do this earlier, because check_dynamic_reloc might want to skip this reloc. */ - if (hundef && ! flaginfo->info->shared) + if (hundef && ! bfd_link_pic (flaginfo->info)) { const char *name; @@ -3581,7 +3581,7 @@ aout_link_input_section (struct aout_final_link_info *flaginfo, /* If we are producing relocatable output, the relocs were modified, and we now write them out. */ - if (flaginfo->info->relocatable && rel_size > 0) + if (bfd_link_relocatable (flaginfo->info) && rel_size > 0) { if (bfd_seek (flaginfo->output_bfd, *reloff_ptr, SEEK_SET) != 0) return FALSE; @@ -3682,7 +3682,7 @@ NAME (aout, final_link) (bfd *abfd, asection *o; bfd_boolean have_link_order_relocs; - if (info->shared) + if (bfd_link_pic (info)) abfd->flags |= DYNAMIC; aout_info.info = info; @@ -3710,7 +3710,7 @@ NAME (aout, final_link) (bfd *abfd, { size_t sz; - if (info->relocatable) + if (bfd_link_relocatable (info)) { if (bfd_get_flavour (sub) == bfd_target_aout_flavour) { @@ -3754,7 +3754,7 @@ NAME (aout, final_link) (bfd *abfd, } } - if (info->relocatable) + if (bfd_link_relocatable (info)) { if (obj_textsec (abfd) != NULL) trsize += (_bfd_count_link_order_relocs (obj_textsec (abfd) diff --git a/bfd/pe-mips.c b/bfd/pe-mips.c index 7bd6e6de9b1..9ecad0f4c43 100644 --- a/bfd/pe-mips.c +++ b/bfd/pe-mips.c @@ -603,7 +603,7 @@ coff_pe_mips_relocate_section (bfd *output_bfd, struct internal_reloc *rel_end; unsigned int i; - if (info->relocatable) + if (bfd_link_relocatable (info)) { (*_bfd_error_handler) (_("%B: `ld -r' not supported with PE MIPS objects\n"), input_bfd); @@ -661,7 +661,7 @@ coff_pe_mips_relocate_section (bfd *output_bfd, then we should ignore the symbol value. */ if (howto->pc_relative && howto->pcrel_offset) { - if (info->relocatable) + if (bfd_link_relocatable (info)) continue; if (sym != NULL && sym->n_scnum != 0) addend += sym->n_value; @@ -701,7 +701,7 @@ coff_pe_mips_relocate_section (bfd *output_bfd, + sec->output_offset); } - else if (! info->relocatable) + else if (! bfd_link_relocatable (info)) { if (! ((*info->callbacks->undefined_symbol) (info, h->root.root.string, input_bfd, input_section, diff --git a/bfd/peXXigen.c b/bfd/peXXigen.c index e01cfcdd672..a1baaef5c20 100644 --- a/bfd/peXXigen.c +++ b/bfd/peXXigen.c @@ -1060,8 +1060,8 @@ _bfd_XXi_swap_scnhdr_out (bfd * abfd, void * in, void * out) } if (coff_data (abfd)->link_info - && ! coff_data (abfd)->link_info->relocatable - && ! coff_data (abfd)->link_info->shared + && ! bfd_link_relocatable (coff_data (abfd)->link_info) + && ! bfd_link_pic (coff_data (abfd)->link_info) && strcmp (scnhdr_int->s_name, ".text") == 0) { /* By inference from looking at MS output, the 32 bit field diff --git a/bfd/reloc.c b/bfd/reloc.c index 376f0a760d1..83b7cd27766 100644 --- a/bfd/reloc.c +++ b/bfd/reloc.c @@ -7555,7 +7555,7 @@ bfd_generic_relax_section (bfd *abfd ATTRIBUTE_UNUSED, struct bfd_link_info *link_info ATTRIBUTE_UNUSED, bfd_boolean *again) { - if (link_info->relocatable) + if (bfd_link_relocatable (link_info)) (*link_info->callbacks->einfo) (_("%P%F: --relax and -r may not be used together\n")); diff --git a/bfd/reloc16.c b/bfd/reloc16.c index 27d153e97ea..f00886f4b70 100644 --- a/bfd/reloc16.c +++ b/bfd/reloc16.c @@ -153,7 +153,7 @@ bfd_coff_reloc16_relax_section (bfd *abfd, arelent **reloc_vector = NULL; long reloc_count; - if (link_info->relocatable) + if (bfd_link_relocatable (link_info)) (*link_info->callbacks->einfo) (_("%P%F: --relax and -r may not be used together\n")); diff --git a/bfd/sparclinux.c b/bfd/sparclinux.c index e48550b713d..7632dbfd297 100644 --- a/bfd/sparclinux.c +++ b/bfd/sparclinux.c @@ -314,7 +314,7 @@ linux_add_one_symbol (struct bfd_link_info *info, insert = FALSE; - if (! info->relocatable + if (! bfd_link_relocatable (info) && linux_hash_table (info)->dynobj == NULL && strcmp (name, SHARABLE_CONFLICTS) == 0 && (flags & BSF_CONSTRUCTOR) != 0 diff --git a/bfd/sunos.c b/bfd/sunos.c index cdf2a3157e0..3ce73b53a55 100644 --- a/bfd/sunos.c +++ b/bfd/sunos.c @@ -792,7 +792,7 @@ sunos_create_dynamic_sections (bfd *abfd, } if ((needed && ! sunos_hash_table (info)->dynamic_sections_needed) - || info->shared) + || bfd_link_pic (info)) { bfd *dynobj; @@ -828,7 +828,7 @@ sunos_add_dynamic_symbols (bfd *abfd, { if (! sunos_create_dynamic_sections (abfd, info, ((abfd->flags & DYNAMIC) != 0 - && !info->relocatable))) + && !bfd_link_relocatable (info)))) return FALSE; } @@ -860,7 +860,7 @@ sunos_add_dynamic_symbols (bfd *abfd, /* The native linker seems to just ignore dynamic objects when -r is used. */ - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; /* There's no hope of using a dynamic object which does not exactly @@ -1214,7 +1214,7 @@ bfd_sunos_record_link_assignment (bfd *output_bfd, /* In a shared library, the __DYNAMIC symbol does not appear in the dynamic symbol table. */ - if (! info->shared || strcmp (name, "__DYNAMIC") != 0) + if (! bfd_link_pic (info) || strcmp (name, "__DYNAMIC") != 0) { h->flags |= SUNOS_DEF_REGULAR; @@ -1513,7 +1513,7 @@ sunos_scan_ext_relocs (struct bfd_link_info *info, /* If we are making a shared library, or if the symbol is defined by a dynamic object, we will need a dynamic reloc entry. */ - if (info->shared + if (bfd_link_pic (info) || (h != NULL && (h->flags & SUNOS_DEF_DYNAMIC) != 0 && (h->flags & SUNOS_DEF_REGULAR) == 0)) @@ -1529,7 +1529,7 @@ sunos_scan_ext_relocs (struct bfd_link_info *info, { /* But, if we are creating a shared library, we need to generate an absolute reloc. */ - if (info->shared) + if (bfd_link_pic (info)) { if (dynobj == NULL) { @@ -1559,13 +1559,13 @@ sunos_scan_ext_relocs (struct bfd_link_info *info, continue; if (r_type != RELOC_JMP_TBL - && ! info->shared + && ! bfd_link_pic (info) && ((h->flags & SUNOS_DEF_DYNAMIC) == 0 || (h->flags & SUNOS_DEF_REGULAR) != 0)) continue; if (r_type == RELOC_JMP_TBL - && ! info->shared + && ! bfd_link_pic (info) && (h->flags & SUNOS_DEF_DYNAMIC) == 0 && (h->flags & SUNOS_DEF_REGULAR) == 0) { @@ -1595,10 +1595,10 @@ sunos_scan_ext_relocs (struct bfd_link_info *info, } BFD_ASSERT (r_type == RELOC_JMP_TBL - || info->shared + || bfd_link_pic (info) || (h->flags & SUNOS_REF_REGULAR) != 0); BFD_ASSERT (r_type == RELOC_JMP_TBL - || info->shared + || bfd_link_pic (info) || h->plt_offset != 0 || ((h->root.root.type == bfd_link_hash_defined || h->root.root.type == bfd_link_hash_defweak) @@ -1657,13 +1657,13 @@ sunos_scan_ext_relocs (struct bfd_link_info *info, /* We will also need a dynamic reloc entry, unless this is a JMP_TBL reloc produced by linking PIC compiled code, and we are not making a shared library. */ - if (info->shared || (h->flags & SUNOS_DEF_REGULAR) == 0) + if (bfd_link_pic (info) || (h->flags & SUNOS_DEF_REGULAR) == 0) srel->size += RELOC_EXT_SIZE; } /* If we are creating a shared library, we need to copy over any reloc other than a jump table reloc. */ - if (info->shared && r_type != RELOC_JMP_TBL) + if (bfd_link_pic (info) && r_type != RELOC_JMP_TBL) srel->size += RELOC_EXT_SIZE; } } @@ -1880,7 +1880,7 @@ bfd_sunos_size_dynamic_sections (bfd *output_bfd, *sneedptr = NULL; *srulesptr = NULL; - if (info->relocatable) + if (bfd_link_relocatable (info)) return TRUE; if (output_bfd->xvec != &MY(vec)) @@ -2119,7 +2119,7 @@ sunos_write_dynamic_symbol (bfd *output_bfd, switch (bfd_get_arch (output_bfd)) { case bfd_arch_sparc: - if (info->shared || (h->flags & SUNOS_DEF_REGULAR) == 0) + if (bfd_link_pic (info) || (h->flags & SUNOS_DEF_REGULAR) == 0) { bfd_put_32 (output_bfd, SPARC_PLT_ENTRY_WORD0, p); bfd_put_32 (output_bfd, @@ -2146,7 +2146,7 @@ sunos_write_dynamic_symbol (bfd *output_bfd, break; case bfd_arch_m68k: - if (! info->shared && (h->flags & SUNOS_DEF_REGULAR) != 0) + if (! bfd_link_pic (info) && (h->flags & SUNOS_DEF_REGULAR) != 0) abort (); bfd_put_16 (output_bfd, M68K_PLT_ENTRY_WORD0, p); bfd_put_32 (output_bfd, (- (h->plt_offset + 2)), p + 2); @@ -2160,7 +2160,7 @@ sunos_write_dynamic_symbol (bfd *output_bfd, /* We also need to add a jump table reloc, unless this is the result of a JMP_TBL reloc from PIC compiled code. */ - if (info->shared || (h->flags & SUNOS_DEF_REGULAR) == 0) + if (bfd_link_pic (info) || (h->flags & SUNOS_DEF_REGULAR) == 0) { BFD_ASSERT (h->dynindx >= 0); BFD_ASSERT (s->reloc_count * obj_reloc_entry_size (dynobj) @@ -2343,7 +2343,7 @@ sunos_check_dynamic_reloc (struct bfd_link_info *info, if (h != NULL && h->plt_offset != 0 - && (info->shared + && (bfd_link_pic (info) || (h->flags & SUNOS_DEF_REGULAR) == 0)) { asection *splt; @@ -2451,14 +2451,14 @@ sunos_check_dynamic_reloc (struct bfd_link_info *info, if ((*got_offsetp & 1) == 0) { if (h == NULL - || (! info->shared + || (! bfd_link_pic (info) && ((h->flags & SUNOS_DEF_DYNAMIC) == 0 || (h->flags & SUNOS_DEF_REGULAR) != 0))) PUT_WORD (dynobj, *relocationp, sgot->contents + *got_offsetp); else PUT_WORD (dynobj, 0, sgot->contents + *got_offsetp); - if (info->shared + if (bfd_link_pic (info) || (h != NULL && (h->flags & SUNOS_DEF_DYNAMIC) != 0 && (h->flags & SUNOS_DEF_REGULAR) == 0)) @@ -2574,7 +2574,7 @@ sunos_check_dynamic_reloc (struct bfd_link_info *info, if (! sunos_hash_table (info)->dynamic_sections_needed) return TRUE; - if (! info->shared) + if (! bfd_link_pic (info)) { if (h == NULL || h->dynindx == -1 @@ -2726,7 +2726,7 @@ sunos_finish_dynamic_link (bfd *abfd, struct bfd_link_info *info) dynamic information, unless this is a shared library. */ s = bfd_get_linker_section (dynobj, ".got"); BFD_ASSERT (s != NULL); - if (info->shared || sdyn->size == 0) + if (bfd_link_pic (info) || sdyn->size == 0) PUT_WORD (dynobj, 0, s->contents); else PUT_WORD (dynobj, sdyn->output_section->vma + sdyn->output_offset, diff --git a/bfd/vms-alpha.c b/bfd/vms-alpha.c index 920472abd18..a0219d8c670 100644 --- a/bfd/vms-alpha.c +++ b/bfd/vms-alpha.c @@ -8597,7 +8597,7 @@ alpha_vms_bfd_final_link (bfd *abfd, struct bfd_link_info *info) asection *dst; asection *dmt; - if (info->relocatable) + if (bfd_link_relocatable (info)) { /* FIXME: we do not yet support relocatable link. It is not obvious how to do it for debug infos. */ diff --git a/bfd/xcofflink.c b/bfd/xcofflink.c index 9c7da57fa8a..75977501a89 100644 --- a/bfd/xcofflink.c +++ b/bfd/xcofflink.c @@ -1050,7 +1050,7 @@ xcoff_link_create_extra_sections (bfd * abfd, struct bfd_link_info *info) won't work if we're producing an XCOFF output file with no XCOFF input files. FIXME. */ - if (!info->relocatable + if (!bfd_link_relocatable (info) && xcoff_hash_table (info)->loader_section == NULL) { asection *lsec; @@ -2700,7 +2700,7 @@ xcoff_mark_symbol (struct bfd_link_info *info, struct xcoff_link_hash_entry *h) /* If we're marking an undefined symbol, try find some way of defining it. */ - if (!info->relocatable + if (!bfd_link_relocatable (info) && (h->flags & XCOFF_IMPORT) == 0 && (h->flags & XCOFF_DEF_REGULAR) == 0 && (h->root.type == bfd_link_hash_undefined @@ -3714,7 +3714,7 @@ bfd_xcoff_size_dynamic_sections (bfd *output_bfd, } /* Garbage collect unused sections. */ - if (info->relocatable || !gc) + if (bfd_link_relocatable (info) || !gc) { gc = FALSE; xcoff_hash_table (info)->gc = FALSE; @@ -5830,7 +5830,7 @@ _bfd_xcoff_bfd_final_link (bfd *abfd, struct bfd_link_info *info) file_ptr pos; bfd_size_type amt; - if (info->shared) + if (bfd_link_pic (info)) abfd->flags |= DYNAMIC; symesz = bfd_coff_symesz (abfd); diff --git a/include/ChangeLog b/include/ChangeLog index df9e2e22ccc..e1bd6aed715 100644 --- a/include/ChangeLog +++ b/include/ChangeLog @@ -1,3 +1,14 @@ +2015-08-18 H.J. Lu + + * include/bfdlink.h (output_type): New enum. + (bfd_link_executable): New macro. + (bfd_link_dll): Likewise. + (bfd_link_relocatable): Likewise. + (bfd_link_pic): Likewise. + (bfd_link_pie): Likewise. + (bfd_link_info): Remove shared, executable, pie and relocatable. + Add output_type and pic. + 2015-08-12 H.J. Lu Sync with GCC diff --git a/include/bfdlink.h b/include/bfdlink.h index b9dc139d8fe..797a4650e85 100644 --- a/include/bfdlink.h +++ b/include/bfdlink.h @@ -259,22 +259,32 @@ struct flag_info struct bfd_elf_dynamic_list; struct bfd_elf_version_tree; +/* Types of output. */ + +enum output_type +{ + type_executable = 0, + type_dll, + type_relocatable +}; + +#define bfd_link_executable(info) ((info)->type == type_executable) +#define bfd_link_dll(info) ((info)->type == type_dll) +#define bfd_link_relocatable(info) ((info)->type == type_relocatable) +#define bfd_link_pic(info) (info)->pic +#define bfd_link_pie(info) (bfd_link_executable (info) \ + && bfd_link_pic (info)) + /* This structure holds all the information needed to communicate between BFD and the linker when doing a link. */ struct bfd_link_info { - /* TRUE if BFD should generate a shared object (or a pie). */ - unsigned int shared: 1; - - /* TRUE if generating an executable, position independent or not. */ - unsigned int executable : 1; - - /* TRUE if generating a position independent executable. */ - unsigned int pie: 1; + /* Output type. */ + ENUM_BITFIELD (output_type) type : 2; - /* TRUE if BFD should generate a relocatable object file. */ - unsigned int relocatable: 1; + /* TRUE if BFD should generate a position independent object. */ + unsigned int pic : 1; /* TRUE if BFD should pre-bind symbols in a shared object. */ unsigned int symbolic: 1; diff --git a/ld/ChangeLog b/ld/ChangeLog index 62ad6f3f58a..67821df6fd7 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,58 @@ +2015-08-18 H.J. Lu + + * ld/ldctor.c: Replace shared, executable, relocatable and pie + fields with bfd_link_executable, bfd_link_dll, + bfd_link_relocatable, bfd_link_pic and bfd_link_pie. + * ld/ldemul.c: Likewise. + * ld/ldfile.c: Likewise. + * ld/ldlang.c: Likewise. + * ld/ldmain.c: Likewise. + * ld/ldwrite.c: Likewise. + * ld/lexsup.c: Likewise. + * ld/pe-dll.c: Likewise. + * ld/plugin.c: Likewise. + * ld/emultempl/aarch64elf.em: Likewise. + * ld/emultempl/aix.em: Likewise. + * ld/emultempl/alphaelf.em: Likewise. + * ld/emultempl/armcoff.em: Likewise. + * ld/emultempl/armelf.em: Likewise. + * ld/emultempl/avrelf.em: Likewise. + * ld/emultempl/beos.em: Likewise. + * ld/emultempl/cr16elf.em: Likewise. + * ld/emultempl/elf-generic.em: Likewise. + * ld/emultempl/elf32.em: Likewise. + * ld/emultempl/genelf.em: Likewise. + * ld/emultempl/generic.em: Likewise. + * ld/emultempl/gld960.em: Likewise. + * ld/emultempl/gld960c.em: Likewise. + * ld/emultempl/hppaelf.em: Likewise. + * ld/emultempl/irix.em: Likewise. + * ld/emultempl/linux.em: Likewise. + * ld/emultempl/lnk960.em: Likewise. + * ld/emultempl/m68hc1xelf.em: Likewise. + * ld/emultempl/m68kcoff.em: Likewise. + * ld/emultempl/m68kelf.em: Likewise. + * ld/emultempl/metagelf.em: Likewise. + * ld/emultempl/mipself.em: Likewise. + * ld/emultempl/mmo.em: Likewise. + * ld/emultempl/msp430.em: Likewise. + * ld/emultempl/nds32elf.em: Likewise. + * ld/emultempl/needrelax.em: Likewise. + * ld/emultempl/nios2elf.em: Likewise. + * ld/emultempl/pe.em: Likewise. + * ld/emultempl/pep.em: Likewise. + * ld/emultempl/ppc32elf.em: Likewise. + * ld/emultempl/ppc64elf.em: Likewise. + * ld/emultempl/sh64elf.em: Likewise. + * ld/emultempl/solaris2.em: Likewise. + * ld/emultempl/spuelf.em: Likewise. + * ld/emultempl/sunos.em: Likewise. + * ld/emultempl/tic6xdsbt.em: Likewise. + * ld/emultempl/ticoff.em: Likewise. + * ld/emultempl/v850elf.em: Likewise. + * ld/emultempl/vms.em: Likewise. + * ld/emultempl/vxworks.em: Likewise. + 2015-08-18 Alan Modra * ldexp.c (exp_fold_tree_1): Clear linker_def on symbol assignment. diff --git a/ld/emultempl/aarch64elf.em b/ld/emultempl/aarch64elf.em index 313263a1a2b..b75a24b2580 100644 --- a/ld/emultempl/aarch64elf.em +++ b/ld/emultempl/aarch64elf.em @@ -238,7 +238,7 @@ gld${EMULATION_NAME}_after_allocation (void) /* If generating a relocatable output file, then we don't have to examine the relocs. */ - if (stub_file != NULL && !link_info.relocatable) + if (stub_file != NULL && !bfd_link_relocatable (&link_info)) { ret = elf${ELFSIZE}_aarch64_setup_section_lists (link_info.output_bfd, &link_info); @@ -273,7 +273,7 @@ gld${EMULATION_NAME}_after_allocation (void) static void gld${EMULATION_NAME}_finish (void) { - if (! link_info.relocatable) + if (!bfd_link_relocatable (&link_info)) { /* Now build the linker stubs. */ if (stub_file->the_bfd->sections != NULL) diff --git a/ld/emultempl/aix.em b/ld/emultempl/aix.em index 463cf17955b..d4147f3befe 100644 --- a/ld/emultempl/aix.em +++ b/ld/emultempl/aix.em @@ -532,7 +532,8 @@ gld${EMULATION_NAME}_handle_option (int optc) case OPTION_MODTYPE: if (*optarg == 'S') { - link_info.shared = TRUE; + link_info.type = type_dll; + link_info.pic = TRUE; ++optarg; } if (*optarg == '\0' || optarg[1] == '\0') @@ -680,7 +681,7 @@ gld${EMULATION_NAME}_unrecognized_file (lang_input_statement_type *entry) static void gld${EMULATION_NAME}_after_open (void) { - bfd_boolean r; + enum output_type t; struct set_info *p; after_open_default (); @@ -690,11 +691,11 @@ gld${EMULATION_NAME}_after_open (void) entries for all references to symbols, even in a final executable. Of course, we only want to do this if we are producing an XCOFF output file. */ - r = link_info.relocatable; + t = link_info.type; if (strstr (bfd_get_target (link_info.output_bfd), "xcoff") != NULL) - link_info.relocatable = TRUE; + link_info.type = type_relocatable; ldctor_build_sets (); - link_info.relocatable = r; + link_info.type = t; /* For each set, record the size, so that the XCOFF backend can output the correct csect length. */ @@ -953,7 +954,7 @@ gld${EMULATION_NAME}_before_allocation (void) /* Executables and shared objects must always have .text, .data and .bss output sections, so that the header can refer to them. The kernel refuses to load objects that have missing sections. */ - if (!link_info.relocatable) + if (!bfd_link_relocatable (&link_info)) for (i = 0; i < ARRAY_SIZE (must_keep_sections); i++) { asection *sec; @@ -1410,11 +1411,11 @@ fragment <> e${EMULATION_NAME}.c -echo ' ; else if (link_info.relocatable) return' >> e${EMULATION_NAME}.c +echo ' ; else if (bfd_link_relocatable (&link_info)) return' >> e${EMULATION_NAME}.c sed $sc ldscripts/${EMULATION_NAME}.xr >> e${EMULATION_NAME}.c echo ' ; else if (!config.text_read_only) return' >> e${EMULATION_NAME}.c sed $sc ldscripts/${EMULATION_NAME}.xbn >> e${EMULATION_NAME}.c @@ -1431,9 +1432,9 @@ fragment <> e${EMULATION_NAME}.c -echo ' ; else if (link_info.relocatable) return' >> e${EMULATION_NAME}.c +echo ' ; else if (bfd_link_relocatable (&link_info)) return' >> e${EMULATION_NAME}.c sed $sc ldscripts/${EMULATION_NAME}.xr >> e${EMULATION_NAME}.c echo ' ; else if (!config.text_read_only) return' >> e${EMULATION_NAME}.c sed $sc ldscripts/${EMULATION_NAME}.xbn >> e${EMULATION_NAME}.c @@ -236,9 +236,9 @@ fragment <the_bfd->sections != NULL) diff --git a/ld/emultempl/avrelf.em b/ld/emultempl/avrelf.em index f7a3acbe085..18bd51d94da 100644 --- a/ld/emultempl/avrelf.em +++ b/ld/emultempl/avrelf.em @@ -81,7 +81,7 @@ avr_elf_${EMULATION_NAME}_before_allocation (void) /* If generating a relocatable output file, then we don't have to generate the trampolines. */ - if (link_info.relocatable) + if (bfd_link_relocatable (&link_info)) avr_no_stubs = TRUE; if (avr_no_stubs) @@ -182,7 +182,7 @@ avr_finish (void) bfd *abfd; bfd_boolean avr_link_relax; - if (link_info.relocatable) + if (bfd_link_relocatable (&link_info)) { avr_link_relax = TRUE; for (abfd = link_info.input_bfds; abfd != NULL; abfd = abfd->link.next) diff --git a/ld/emultempl/beos.em b/ld/emultempl/beos.em index 3511a55057e..488c0dd4422 100644 --- a/ld/emultempl/beos.em +++ b/ld/emultempl/beos.em @@ -329,7 +329,7 @@ gld_${EMULATION_NAME}_set_symbols (void) if (!init[IMAGEBASEOFF].inited) { - if (link_info.relocatable) + if (bfd_link_relocatable (&link_info)) init[IMAGEBASEOFF].value = 0; else if (init[DLLOFF].value) init[IMAGEBASEOFF].value = BEOS_DLL_IMAGE_BASE; @@ -338,7 +338,7 @@ gld_${EMULATION_NAME}_set_symbols (void) } /* Don't do any symbol assignments if this is a relocatable link. */ - if (link_info.relocatable) + if (bfd_link_relocatable (&link_info)) return; /* Glue the assignments into the abs section */ @@ -674,7 +674,7 @@ gld${EMULATION_NAME}_place_orphan (asection *s, If they're marked as COMDAT sections, we don't want .text\$foo to end up in .text and then have .text disappear because it's marked link-once-discard. */ - if (link_info.relocatable) + if (bfd_link_relocatable (&link_info)) return NULL; /* Everything from the '\$' on gets deleted so don't allow '\$' as the @@ -734,11 +734,11 @@ fragment <> e${EMULATION_NAME}.c -echo ' ; else if (link_info.relocatable) return' >> e${EMULATION_NAME}.c +echo ' ; else if (bfd_link_relocatable (&link_info)) return' >> e${EMULATION_NAME}.c sed $sc ldscripts/${EMULATION_NAME}.xr >> e${EMULATION_NAME}.c echo ' ; else if (!config.text_read_only) return' >> e${EMULATION_NAME}.c sed $sc ldscripts/${EMULATION_NAME}.xbn >> e${EMULATION_NAME}.c diff --git a/ld/emultempl/cr16elf.em b/ld/emultempl/cr16elf.em index 9c07b35f1b5..276dce4b833 100644 --- a/ld/emultempl/cr16elf.em +++ b/ld/emultempl/cr16elf.em @@ -39,7 +39,7 @@ cr16_elf_after_open (void) gld${EMULATION_NAME}_after_open (); if (command_line.embedded_relocs - && (! link_info.relocatable)) + && !bfd_link_relocatable (&link_info)) { bfd *abfd; @@ -132,7 +132,7 @@ cr16elf_before_allocation (void) gld${EMULATION_NAME}_before_allocation (); if (command_line.embedded_relocs - && (! link_info.relocatable)) + && (!bfd_link_relocatable (&link_info))) { bfd *abfd; diff --git a/ld/emultempl/elf-generic.em b/ld/emultempl/elf-generic.em index 99d667195cb..4eceec100f4 100644 --- a/ld/emultempl/elf-generic.em +++ b/ld/emultempl/elf-generic.em @@ -35,7 +35,7 @@ gld${EMULATION_NAME}_map_segments (bfd_boolean need_layout) need_layout = FALSE; if (link_info.output_bfd->xvec->flavour == bfd_target_elf_flavour - && !link_info.relocatable) + && !bfd_link_relocatable (&link_info)) { bfd_size_type phdr_size; diff --git a/ld/emultempl/elf32.em b/ld/emultempl/elf32.em index 8a41347d81d..7fe90894e8f 100644 --- a/ld/emultempl/elf32.em +++ b/ld/emultempl/elf32.em @@ -1029,7 +1029,7 @@ gld${EMULATION_NAME}_after_open (void) } } - if (link_info.relocatable) + if (bfd_link_relocatable (&link_info)) { if (link_info.execstack == ! link_info.noexecstack) /* PR ld/16744: If "-z [no]execstack" has been specified on the @@ -1456,7 +1456,7 @@ gld${EMULATION_NAME}_before_allocation (void) /* Make __ehdr_start hidden if it has been referenced, to prevent the symbol from being dynamic. */ - if (!link_info.relocatable) + if (!bfd_link_relocatable (&link_info)) { struct elf_link_hash_entry *h = elf_link_hash_lookup (elf_hash_table (&link_info), "__ehdr_start", @@ -1827,7 +1827,7 @@ gld${EMULATION_NAME}_place_orphan (asection *s, int iself = s->owner->xvec->flavour == bfd_target_elf_flavour; unsigned int sh_type = iself ? elf_section_type (s) : SHT_NULL; - if (! link_info.relocatable + if (!bfd_link_relocatable (&link_info) && link_info.combreloc && (s->flags & SEC_ALLOC)) { @@ -1909,8 +1909,7 @@ gld${EMULATION_NAME}_place_orphan (asection *s, /* If this is a final link, then always put .gnu.warning.SYMBOL sections into the .text section to get them out of the way. */ - if (link_info.executable - && ! link_info.relocatable + if (bfd_link_executable (&link_info) && CONST_STRNEQ (s->name, ".gnu.warning.") && hold[orphan_text].os != NULL) { @@ -2009,11 +2008,11 @@ fragment <> e${EMULATION_NAME}.c -echo ' ; else if (link_info.relocatable) return' >> e${EMULATION_NAME}.c +echo ' ; else if (bfd_link_relocatable (&link_info)) return' >> e${EMULATION_NAME}.c sed $sc ldscripts/${EMULATION_NAME}.xr >> e${EMULATION_NAME}.c echo ' ; else if (!config.text_read_only) return' >> e${EMULATION_NAME}.c sed $sc ldscripts/${EMULATION_NAME}.xbn >> e${EMULATION_NAME}.c @@ -2023,26 +2022,28 @@ sed $sc ldscripts/${EMULATION_NAME}.xn >> e${EMULATION_NAME}.c fi if test -n "$GENERATE_PIE_SCRIPT" ; then if test -n "$GENERATE_COMBRELOC_SCRIPT" ; then -echo ' ; else if (link_info.pie && link_info.combreloc' >> e${EMULATION_NAME}.c -echo ' && link_info.relro' >> e${EMULATION_NAME}.c +echo ' ; else if (bfd_link_pie (&link_info)' >> e${EMULATION_NAME}.c +echo ' && link_info.combreloc' >> e${EMULATION_NAME}.c +echo ' && link_info.relro' >> e${EMULATION_NAME}.c echo ' && (link_info.flags & DF_BIND_NOW)) return' >> e${EMULATION_NAME}.c sed $sc ldscripts/${EMULATION_NAME}.xdw >> e${EMULATION_NAME}.c -echo ' ; else if (link_info.pie && link_info.combreloc) return' >> e${EMULATION_NAME}.c +echo ' ; else if (bfd_link_pie (&link_info)' >> e${EMULATION_NAME}.c +echo ' && link_info.combreloc) return' >> e${EMULATION_NAME}.c sed $sc ldscripts/${EMULATION_NAME}.xdc >> e${EMULATION_NAME}.c fi -echo ' ; else if (link_info.pie) return' >> e${EMULATION_NAME}.c +echo ' ; else if (bfd_link_pie (&link_info)) return' >> e${EMULATION_NAME}.c sed $sc ldscripts/${EMULATION_NAME}.xd >> e${EMULATION_NAME}.c fi if test -n "$GENERATE_SHLIB_SCRIPT" ; then if test -n "$GENERATE_COMBRELOC_SCRIPT" ; then -echo ' ; else if (link_info.shared && link_info.combreloc' >> e${EMULATION_NAME}.c +echo ' ; else if (bfd_link_dll (&link_info) && link_info.combreloc' >> e${EMULATION_NAME}.c echo ' && link_info.relro' >> e${EMULATION_NAME}.c echo ' && (link_info.flags & DF_BIND_NOW)) return' >> e${EMULATION_NAME}.c sed $sc ldscripts/${EMULATION_NAME}.xsw >> e${EMULATION_NAME}.c -echo ' ; else if (link_info.shared && link_info.combreloc) return' >> e${EMULATION_NAME}.c +echo ' ; else if (bfd_link_dll (&link_info) && link_info.combreloc) return' >> e${EMULATION_NAME}.c sed $sc ldscripts/${EMULATION_NAME}.xsc >> e${EMULATION_NAME}.c fi -echo ' ; else if (link_info.shared) return' >> e${EMULATION_NAME}.c +echo ' ; else if (bfd_link_dll (&link_info)) return' >> e${EMULATION_NAME}.c sed $sc ldscripts/${EMULATION_NAME}.xs >> e${EMULATION_NAME}.c fi if test -n "$GENERATE_COMBRELOC_SCRIPT" ; then @@ -2063,9 +2064,9 @@ fragment <link.next) if ((syms = bfd_get_outsymbols (ibfd)) != NULL && bfd_get_flavour (ibfd) == bfd_target_elf_flavour) @@ -52,7 +52,7 @@ gld${EMULATION_NAME}_after_open (void) static void gld${EMULATION_NAME}_before_allocation (void) { - if (link_info.relocatable + if (bfd_link_relocatable (&link_info) && !_bfd_elf_size_group_sections (&link_info)) einfo ("%X%P: can not size group sections: %E\n"); before_allocation_default (); diff --git a/ld/emultempl/generic.em b/ld/emultempl/generic.em index b08da3c9f99..6fff1cce684 100644 --- a/ld/emultempl/generic.em +++ b/ld/emultempl/generic.em @@ -62,7 +62,7 @@ EOF case ${target} in msp430-*-* ) fragment <> e${EMULATION_NAME}.c -echo ' ; else if (link_info.relocatable) return' >> e${EMULATION_NAME}.c +echo ' ; else if (bfd_link_relocatable (&link_info)) return' >> e${EMULATION_NAME}.c sed $sc ldscripts/${EMULATION_NAME}.xr >> e${EMULATION_NAME}.c echo ' ; else if (!config.text_read_only) return' >> e${EMULATION_NAME}.c sed $sc ldscripts/${EMULATION_NAME}.xbn >> e${EMULATION_NAME}.c @@ -112,9 +112,9 @@ fragment <> e${EMULATION_NAME}.c -echo ' ; else if (link_info.relocatable) return' >> e${EMULATION_NAME}.c +echo ' ; else if (bfd_link_relocatable (&link_info)) return' >> e${EMULATION_NAME}.c sed $sc ldscripts/${EMULATION_NAME}.xr >> e${EMULATION_NAME}.c echo ' ; else if (!config.text_read_only) return' >> e${EMULATION_NAME}.c sed $sc ldscripts/${EMULATION_NAME}.xbn >> e${EMULATION_NAME}.c @@ -105,9 +105,9 @@ fragment <> e${EMULATION_NAME}.c -echo ' ; else if (link_info.relocatable) return' >> e${EMULATION_NAME}.c +echo ' ; else if (bfd_link_relocatable (&link_info)) return' >> e${EMULATION_NAME}.c sed $sc ldscripts/${EMULATION_NAME}.xr >> e${EMULATION_NAME}.c echo ' ; else if (!config.text_read_only) return' >> e${EMULATION_NAME}.c sed $sc ldscripts/${EMULATION_NAME}.xbn >> e${EMULATION_NAME}.c @@ -118,9 +118,9 @@ fragment <> e${EMULATION_NAME}.c -echo ' ; else if (link_info.relocatable) return' >> e${EMULATION_NAME}.c +echo ' ; else if (bfd_link_relocatable (&link_info)) return' >> e${EMULATION_NAME}.c sed $sc ldscripts/${EMULATION_NAME}.xr >> e${EMULATION_NAME}.c echo ' ; else if (!config.text_read_only) return' >> e${EMULATION_NAME}.c sed $sc ldscripts/${EMULATION_NAME}.xbn >> e${EMULATION_NAME}.c @@ -162,9 +162,9 @@ fragment <> e${EMULATION_NAME}.c -echo ' ; else if (link_info.relocatable) return' >> e${EMULATION_NAME}.c +echo ' ; else if (bfd_link_relocatable (&link_info)) return' >> e${EMULATION_NAME}.c sed $sc ldscripts/${EMULATION_NAME}.xr >> e${EMULATION_NAME}.c echo ' ; else if (!config.text_read_only) return' >> e${EMULATION_NAME}.c sed $sc ldscripts/${EMULATION_NAME}.xbn >> e${EMULATION_NAME}.c @@ -299,9 +299,9 @@ fragment <link.next) @@ -130,7 +130,7 @@ gld${EMULATION_NAME}_after_allocation (void) bfd *abfd; if (! command_line.embedded_relocs - || link_info.relocatable) + || bfd_link_relocatable (&link_info)) return; for (abfd = link_info.input_bfds; abfd != NULL; abfd = abfd->link.next) @@ -175,11 +175,11 @@ fragment <> e${EMULATION_NAME}.c -echo ' ; else if (link_info.relocatable) return' >> e${EMULATION_NAME}.c +echo ' ; else if (bfd_link_relocatable (&link_info)) return' >> e${EMULATION_NAME}.c sed $sc ldscripts/${EMULATION_NAME}.xr >> e${EMULATION_NAME}.c echo ' ; else if (!config.text_read_only) return' >> e${EMULATION_NAME}.c sed $sc ldscripts/${EMULATION_NAME}.xbn >> e${EMULATION_NAME}.c @@ -196,9 +196,9 @@ fragment <the_bfd->sections != NULL) diff --git a/ld/emultempl/mipself.em b/ld/emultempl/mipself.em index 611c0bd349f..0eb0813b4e4 100644 --- a/ld/emultempl/mipself.em +++ b/ld/emultempl/mipself.em @@ -216,7 +216,7 @@ mips_before_allocation (void) flagword flags; flags = elf_elfheader (link_info.output_bfd)->e_flags; - if (!link_info.shared + if (!bfd_link_pic (&link_info) && !link_info.nocopyreloc && (flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) == EF_MIPS_CPIC) _bfd_mips_elf_use_plts_and_copy_relocs (&link_info); diff --git a/ld/emultempl/mmo.em b/ld/emultempl/mmo.em index 405b2f0966a..47f77d850da 100644 --- a/ld/emultempl/mmo.em +++ b/ld/emultempl/mmo.em @@ -91,7 +91,7 @@ mmo_place_orphan (asection *s, /* We have nothing to say for anything other than a final link or for sections that are excluded. */ - if (link_info.relocatable + if (bfd_link_relocatable (&link_info) || (s->flags & SEC_EXCLUDE) != 0) return NULL; diff --git a/ld/emultempl/msp430.em b/ld/emultempl/msp430.em index 0eff3f063fc..7533aa51e30 100644 --- a/ld/emultempl/msp430.em +++ b/ld/emultempl/msp430.em @@ -60,7 +60,7 @@ gld${EMULATION_NAME}_before_parse (void) /* The MSP430 port *needs* linker relaxtion in order to cope with large functions where conditional branches do not fit into a +/- 1024 byte range. */ - if (! link_info.relocatable) + if (!bfd_link_relocatable (&link_info)) TARGET_ENABLE_RELAXATION; } @@ -85,11 +85,11 @@ fragment <> e${EMULATION_NAME}.c -echo ' ; else if (link_info.relocatable) return' >> e${EMULATION_NAME}.c +echo ' ; else if (bfd_link_relocatable (&link_info)) return' >> e${EMULATION_NAME}.c sed $sc ldscripts/${EMULATION_NAME}.xr >> e${EMULATION_NAME}.c echo ' ; else if (!config.text_read_only) return' >> e${EMULATION_NAME}.c sed $sc ldscripts/${EMULATION_NAME}.xbn >> e${EMULATION_NAME}.c @@ -106,9 +106,9 @@ fragment <flags & SEC_ALLOC) == 0) return NULL; - if (link_info.relocatable) + if (bfd_link_relocatable (&link_info)) return NULL; /* If constraints are involved let the linker handle the placement normally. */ diff --git a/ld/emultempl/nds32elf.em b/ld/emultempl/nds32elf.em index 8a2be29769d..e74652aa53e 100644 --- a/ld/emultempl/nds32elf.em +++ b/ld/emultempl/nds32elf.em @@ -70,7 +70,7 @@ nds32_elf_create_output_section_statements (void) static void nds32_elf_after_parse (void) { - if (link_info.relocatable) + if (bfd_link_relocatable (&link_info)) DISABLE_RELAXATION; if (!RELAXATION_ENABLED) @@ -88,7 +88,7 @@ nds32_elf_after_parse (void) else update_ex9_table = 0; - if (link_info.shared) + if (bfd_link_pic (&link_info)) { target_optimize = target_optimize & (!NDS32_RELAX_JUMP_IFC_ON); target_optimize = target_optimize & (!NDS32_RELAX_EX9_ON); @@ -157,14 +157,14 @@ nds32_elf_after_open (void) /* Check object files if the target is dynamic linked executable or shared object. */ if (elf_hash_table (&link_info)->dynamic_sections_created - || link_info.shared || link_info.pie) + || bfd_link_pic (&link_info)) { for (abfd = link_info.input_bfds; abfd != NULL; abfd = abfd->link.next) { if (!(elf_elfheader (abfd)->e_flags & E_NDS32_HAS_PIC)) { /* Non-PIC object file is used. */ - if (link_info.shared || link_info.pie) + if (bfd_link_pic (&link_info)) { /* For PIE or shared object, all input must be PIC. */ einfo (_("%B: must use -fpic to compile this file " diff --git a/ld/emultempl/needrelax.em b/ld/emultempl/needrelax.em index fc57fa3fa9d..a2acf19a107 100644 --- a/ld/emultempl/needrelax.em +++ b/ld/emultempl/needrelax.em @@ -33,7 +33,7 @@ need_relax_${EMULATION_NAME}_before_allocation (void) gld${EMULATION_NAME}_before_allocation (); /* Force -relax on if not doing a relocatable link. */ - if (! link_info.relocatable) + if (!bfd_link_relocatable (&link_info)) ENABLE_RELAXATION; } EOF diff --git a/ld/emultempl/nios2elf.em b/ld/emultempl/nios2elf.em index 90c8c62dd39..42ea0df7df0 100644 --- a/ld/emultempl/nios2elf.em +++ b/ld/emultempl/nios2elf.em @@ -50,7 +50,7 @@ nios2elf_create_output_section_statements (void) /* If --no-relax was not explicitly specified by the user, enable relaxation. If it's not enabled (either explicitly or by default), we're done, as we won't need to create any stubs. */ - if (!link_info.relocatable && RELAXATION_DISABLED_BY_DEFAULT) + if (!bfd_link_relocatable (&link_info) && RELAXATION_DISABLED_BY_DEFAULT) ENABLE_RELAXATION; if (!RELAXATION_ENABLED) return; @@ -253,7 +253,9 @@ gld${EMULATION_NAME}_after_allocation (void) /* If generating a relocatable output file, then we don't have to examine the relocs. */ - if (stub_file != NULL && !link_info.relocatable && RELAXATION_ENABLED) + if (stub_file != NULL + && !bfd_link_relocatable (&link_info) + && RELAXATION_ENABLED) { ret = nios2_elf32_setup_section_lists (link_info.output_bfd, &link_info); if (ret != 0) @@ -282,7 +284,7 @@ gld${EMULATION_NAME}_after_allocation (void) if (need_laying_out != -1) gld${EMULATION_NAME}_map_segments (need_laying_out); - if (!link_info.relocatable && RELAXATION_ENABLED) + if (!bfd_link_relocatable (&link_info) && RELAXATION_ENABLED) { /* Now build the linker stubs. */ if (stub_file != NULL && stub_file->the_bfd->sections != NULL) diff --git a/ld/emultempl/pe.em b/ld/emultempl/pe.em index 0a5dcbf6fba..e817b4707a4 100644 --- a/ld/emultempl/pe.em +++ b/ld/emultempl/pe.em @@ -553,7 +553,7 @@ set_entry_point (void) /* Entry point name for arbitrary subsystem numbers. */ static const char default_entry[] = "mainCRTStartup"; - if (link_info.shared || dll) + if (bfd_link_pic (&link_info) || dll) { #if defined (TARGET_IS_i386pe) entry = "DllMainCRTStartup@12"; @@ -960,9 +960,9 @@ gld_${EMULATION_NAME}_set_symbols (void) if (!init[IMAGEBASEOFF].inited) { - if (link_info.relocatable) + if (bfd_link_relocatable (&link_info)) init[IMAGEBASEOFF].value = 0; - else if (init[DLLOFF].value || (link_info.shared && !link_info.pie)) + else if (init[DLLOFF].value || bfd_link_dll (&link_info)) { #ifdef DLL_SUPPORT init[IMAGEBASEOFF].value = (pe_enable_auto_image_base @@ -978,7 +978,7 @@ gld_${EMULATION_NAME}_set_symbols (void) } /* Don't do any symbol assignments if this is a relocatable link. */ - if (link_info.relocatable) + if (bfd_link_relocatable (&link_info)) return; /* Glue the assignments into the abs section. */ @@ -1494,7 +1494,7 @@ gld_${EMULATION_NAME}_after_open (void) find it, so enable it in that case. */ if (pe_use_coff_long_section_names < 0 && link_info.strip == strip_none) { - if (link_info.relocatable) + if (bfd_link_relocatable (&link_info)) pe_use_coff_long_section_names = 1; else { @@ -1533,10 +1533,10 @@ gld_${EMULATION_NAME}_after_open (void) || defined (TARGET_IS_armpe) \ || defined (TARGET_IS_arm_epoc_pe) \ || defined (TARGET_IS_arm_wince_pe) - if (!link_info.relocatable) + if (!bfd_link_relocatable (&link_info)) pe_dll_build_sections (link_info.output_bfd, &link_info); #else - if (link_info.shared) + if (bfd_link_pic (&link_info)) pe_dll_build_sections (link_info.output_bfd, &link_info); else pe_exe_build_sections (link_info.output_bfd, &link_info); @@ -1956,7 +1956,10 @@ gld_${EMULATION_NAME}_unrecognized_file (lang_input_statement_type *entry ATTRIB /* def_file_print (stdout, pe_def_file); */ if (pe_def_file->is_dll == 1) - link_info.shared = 1; + { + link_info.type = type_dll; + link_info.pic = 1; + } if (pe_def_file->base_address != (bfd_vma)(-1)) { @@ -2065,9 +2068,10 @@ gld_${EMULATION_NAME}_finish (void) finish_default (); #ifdef DLL_SUPPORT - if (link_info.shared + if (bfd_link_pic (&link_info) #if !defined(TARGET_IS_shpe) - || (!link_info.relocatable && pe_def_file->num_exports != 0) + || (!bfd_link_relocatable (&link_info) + && pe_def_file->num_exports != 0) #endif ) { @@ -2126,7 +2130,7 @@ gld_${EMULATION_NAME}_place_orphan (asection *s, lang_statement_union_type **pl; /* Look through the script to see where to place this section. */ - if (!link_info.relocatable + if (!bfd_link_relocatable (&link_info) && (dollar = strchr (secname, '\$')) != NULL) { size_t len = dollar - secname; @@ -2260,7 +2264,7 @@ gld_${EMULATION_NAME}_place_orphan (asection *s, address = exp_unop (ALIGN_K, exp_nameop (NAME, "__section_alignment__")); os = lang_insert_orphan (s, secname, constraint, after, place, address, &add_child); - if (link_info.relocatable) + if (bfd_link_relocatable (&link_info)) { os->section_alignment = s->alignment_power; os->bfd_section->alignment_power = s->alignment_power; @@ -2416,11 +2420,11 @@ fragment <> e${EMULATION_NAME}.c -echo ' ; else if (link_info.relocatable) return' >> e${EMULATION_NAME}.c +echo ' ; else if (bfd_link_relocatable (&link_info)) return' >> e${EMULATION_NAME}.c sed $sc ldscripts/${EMULATION_NAME}.xr >> e${EMULATION_NAME}.c echo ' ; else if (!config.text_read_only) return' >> e${EMULATION_NAME}.c sed $sc ldscripts/${EMULATION_NAME}.xbn >> e${EMULATION_NAME}.c diff --git a/ld/emultempl/pep.em b/ld/emultempl/pep.em index bf362760dba..8b30b1cf5d6 100644 --- a/ld/emultempl/pep.em +++ b/ld/emultempl/pep.em @@ -515,7 +515,7 @@ set_entry_point (void) /* Entry point name for arbitrary subsystem numbers. */ static const char default_entry[] = "mainCRTStartup"; - if (link_info.shared || dll) + if (bfd_link_pic (&link_info) || dll) { entry = "DllMainCRTStartup"; } @@ -903,9 +903,9 @@ gld_${EMULATION_NAME}_set_symbols (void) if (!init[IMAGEBASEOFF].inited) { - if (link_info.relocatable) + if (bfd_link_relocatable (&link_info)) init[IMAGEBASEOFF].value = 0; - else if (init[DLLOFF].value || (link_info.shared && !link_info.pie)) + else if (init[DLLOFF].value || bfd_link_dll (&link_info)) { #ifdef DLL_SUPPORT init[IMAGEBASEOFF].value = (pep_enable_auto_image_base @@ -921,7 +921,7 @@ gld_${EMULATION_NAME}_set_symbols (void) } /* Don't do any symbol assignments if this is a relocatable link. */ - if (link_info.relocatable) + if (bfd_link_relocatable (&link_info)) return; /* Glue the assignments into the abs section. */ @@ -1459,7 +1459,7 @@ gld_${EMULATION_NAME}_after_open (void) find it, so enable it in that case. */ if (pep_use_coff_long_section_names < 0 && link_info.strip == strip_none) { - if (link_info.relocatable) + if (bfd_link_relocatable (&link_info)) pep_use_coff_long_section_names = 1; else { @@ -1495,9 +1495,9 @@ gld_${EMULATION_NAME}_after_open (void) pep_fixup_stdcalls (); #ifndef TARGET_IS_i386pep - if (link_info.shared) + if (bfd_link_pic (&link_info)) #else - if (!link_info.relocatable) + if (!bfd_link_relocatable (&link_info)) #endif pep_dll_build_sections (link_info.output_bfd, &link_info); @@ -1789,7 +1789,10 @@ gld_${EMULATION_NAME}_unrecognized_file (lang_input_statement_type *entry ATTRIB /* def_file_print (stdout, pep_def_file); */ if (pep_def_file->is_dll == 1) - link_info.shared = 1; + { + link_info.type = type_dll; + link_info.pic = 1; + } if (pep_def_file->base_address != (bfd_vma)(-1)) { @@ -1846,8 +1849,9 @@ gld_${EMULATION_NAME}_finish (void) finish_default (); #ifdef DLL_SUPPORT - if (link_info.shared - || (!link_info.relocatable && pep_def_file->num_exports != 0)) + if (bfd_link_pic (&link_info) + || (!bfd_link_relocatable (&link_info) + && pep_def_file->num_exports != 0)) { pep_dll_fill_sections (link_info.output_bfd, &link_info); if (pep_implib_filename) @@ -1897,7 +1901,7 @@ gld_${EMULATION_NAME}_place_orphan (asection *s, lang_statement_union_type **pl; /* Look through the script to see where to place this section. */ - if (!link_info.relocatable + if (!bfd_link_relocatable (&link_info) && (dollar = strchr (secname, '\$')) != NULL) { size_t len = dollar - secname; @@ -2031,7 +2035,7 @@ gld_${EMULATION_NAME}_place_orphan (asection *s, address = exp_unop (ALIGN_K, exp_nameop (NAME, "__section_alignment__")); os = lang_insert_orphan (s, secname, constraint, after, place, address, &add_child); - if (link_info.relocatable) + if (bfd_link_relocatable (&link_info)) { os->section_alignment = s->alignment_power; os->bfd_section->alignment_power = s->alignment_power; @@ -2187,11 +2191,11 @@ fragment <> e${EMULATION_NAME}.c -echo ' ; else if (link_info.relocatable) return' >> e${EMULATION_NAME}.c +echo ' ; else if (bfd_link_relocatable (&link_info)) return' >> e${EMULATION_NAME}.c sed $sc ldscripts/${EMULATION_NAME}.xr >> e${EMULATION_NAME}.c echo ' ; else if (!config.text_read_only) return' >> e${EMULATION_NAME}.c sed $sc ldscripts/${EMULATION_NAME}.xbn >> e${EMULATION_NAME}.c diff --git a/ld/emultempl/ppc32elf.em b/ld/emultempl/ppc32elf.em index 41ff7462b09..bbf3ce0ff58 100644 --- a/ld/emultempl/ppc32elf.em +++ b/ld/emultempl/ppc32elf.em @@ -47,7 +47,8 @@ static void ppc_after_open_output (void) { if (params.emit_stub_syms < 0) - params.emit_stub_syms = link_info.emitrelocations || link_info.shared; + params.emit_stub_syms = (link_info.emitrelocations + || bfd_link_pic (&link_info)); if (pagesize == 0) pagesize = config.commonpagesize; params.pagesize_p2 = bfd_log2 (pagesize); diff --git a/ld/emultempl/ppc64elf.em b/ld/emultempl/ppc64elf.em index 2d26a957bd9..41942f900ed 100644 --- a/ld/emultempl/ppc64elf.em +++ b/ld/emultempl/ppc64elf.em @@ -95,7 +95,7 @@ ppc_create_output_section_statements (void) ldlang_add_file (stub_file); params.stub_bfd = stub_file->the_bfd; if (params.save_restore_funcs < 0) - params.save_restore_funcs = !link_info.relocatable; + params.save_restore_funcs = !bfd_link_relocatable (&link_info); if (!ppc64_elf_init_stub_bfd (&link_info, ¶ms)) einfo ("%F%P: can not init BFD: %E\n"); } @@ -295,7 +295,7 @@ ppc_before_allocation (void) } if (!no_toc_opt - && !link_info.relocatable) + && !bfd_link_relocatable (&link_info)) { prelim_size_sections (); @@ -445,7 +445,7 @@ ppc_layout_sections_again (void) add even more stubs. */ gld${EMULATION_NAME}_map_segments (TRUE); - if (!link_info.relocatable) + if (!bfd_link_relocatable (&link_info)) ppc64_elf_set_toc (&link_info, link_info.output_bfd); need_laying_out = -1; @@ -498,7 +498,7 @@ gld${EMULATION_NAME}_after_allocation (void) /* If generating a relocatable output file, then we don't have any stubs. */ - if (stub_file != NULL && !link_info.relocatable) + if (stub_file != NULL && !bfd_link_relocatable (&link_info)) { ret = ppc64_elf_setup_section_lists (&link_info); if (ret < 0) @@ -554,7 +554,7 @@ gld${EMULATION_NAME}_after_allocation (void) innocuous except for confusing ELF_SECTION_IN_SEGMENT. */ gld${EMULATION_NAME}_map_segments (need_laying_out > 0); - if (need_laying_out != -1 && !link_info.relocatable) + if (need_laying_out != -1 && !bfd_link_relocatable (&link_info)) ppc64_elf_set_toc (&link_info, link_info.output_bfd); } @@ -577,7 +577,7 @@ gld${EMULATION_NAME}_finish (void) if (params.emit_stub_syms < 0) params.emit_stub_syms = 1; if (stub_file != NULL - && !link_info.relocatable + && !bfd_link_relocatable (&link_info) && !ppc64_elf_build_stubs (&link_info, config.stats ? &msg : NULL)) einfo ("%X%P: can not build stubs: %E\n"); diff --git a/ld/emultempl/sh64elf.em b/ld/emultempl/sh64elf.em index 794115a9338..29be05b1504 100644 --- a/ld/emultempl/sh64elf.em +++ b/ld/emultempl/sh64elf.em @@ -485,7 +485,8 @@ sh64_elf_${EMULATION_NAME}_after_allocation (void) /* If we emit relocatable contents, we need a relocation for the start address. */ - if (link_info.relocatable || link_info.emitrelocations) + if (bfd_link_relocatable (&link_info) + || link_info.emitrelocations) { /* FIXME: We could perhaps use lang_add_reloc and friends here, but I'm not really sure that diff --git a/ld/emultempl/solaris2.em b/ld/emultempl/solaris2.em index e0edce26461..dfb173ddd31 100644 --- a/ld/emultempl/solaris2.em +++ b/ld/emultempl/solaris2.em @@ -53,7 +53,7 @@ elf_solaris2_before_allocation (void) const char **sym; /* Do this for both executables and shared objects. */ - if (!link_info.relocatable) + if (!bfd_link_relocatable (&link_info)) { for (sym = global_syms; *sym != NULL; sym++) { @@ -75,7 +75,7 @@ elf_solaris2_before_allocation (void) } /* Only do this if emitting a shared object and versioning is in place. */ - if (link_info.shared + if (bfd_link_dll (&link_info) && (link_info.version_info != NULL || link_info.create_default_symver)) { @@ -127,7 +127,7 @@ elf_solaris2_after_allocation (void) const char **sym; /* Do this for both executables and shared objects. */ - if (!link_info.relocatable) + if (!bfd_link_relocatable (&link_info)) { for (sym = local_syms; *sym != NULL; sym++) { diff --git a/ld/emultempl/spuelf.em b/ld/emultempl/spuelf.em index cc9ef2c6ff0..88278ae03f0 100644 --- a/ld/emultempl/spuelf.em +++ b/ld/emultempl/spuelf.em @@ -107,10 +107,10 @@ spu_after_open (void) params.emit_stub_syms |= link_info.emitrelocations; spu_elf_setup (&link_info, ¶ms); - if (link_info.relocatable) + if (bfd_link_relocatable (&link_info)) lang_add_unique (".text.ia.*"); - if (!link_info.relocatable + if (!bfd_link_relocatable (&link_info) && link_info.input_bfds != NULL && !spu_elf_create_sections (&link_info)) einfo ("%X%P: can not create note section: %E\n"); @@ -264,7 +264,7 @@ static void spu_before_allocation (void) { if (is_spu_target () - && !link_info.relocatable + && !bfd_link_relocatable (&link_info) && !no_overlays) { int ret; @@ -318,7 +318,7 @@ spu_before_allocation (void) } if (is_spu_target () - && !link_info.relocatable) + && !bfd_link_relocatable (&link_info)) spu_elf_size_sections (link_info.output_bfd, &link_info); gld${EMULATION_NAME}_before_allocation (); diff --git a/ld/emultempl/sunos.em b/ld/emultempl/sunos.em index 952d731bb41..c026e35a5e5 100644 --- a/ld/emultempl/sunos.em +++ b/ld/emultempl/sunos.em @@ -368,7 +368,7 @@ gld${EMULATION_NAME}_after_open (void) after_open_default (); /* We only need to worry about this when doing a final link. */ - if (link_info.relocatable || link_info.shared) + if (bfd_link_relocatable (&link_info) || bfd_link_pic (&link_info)) return; /* Get the list of files which appear in ld_need entries in dynamic @@ -669,7 +669,9 @@ gld${EMULATION_NAME}_before_allocation (void) /* The SunOS native linker creates a shared library whenever there are any undefined symbols in a link, unless -e is used. This is pretty weird, but we are compatible. */ - if (! link_info.shared && ! link_info.relocatable && ! entry_from_cmdline) + if (! bfd_link_pic (&link_info) + && !bfd_link_relocatable (&link_info) + && ! entry_from_cmdline) { struct bfd_link_hash_entry *h; @@ -686,14 +688,15 @@ gld${EMULATION_NAME}_before_allocation (void) lang_for_each_statement (gld${EMULATION_NAME}_find_assignment); if (! found_assign) { - link_info.shared = TRUE; + link_info.type = type_dll; + link_info.pic = TRUE; break; } } } } - if (link_info.shared) + if (bfd_link_pic (&link_info)) { lang_output_section_statement_type *os; @@ -710,7 +713,7 @@ gld${EMULATION_NAME}_before_allocation (void) one. We need to create the symbol before calling size_dynamic_sections, although we can't set the value until afterward. */ - if (! link_info.relocatable) + if (!bfd_link_relocatable (&link_info)) { hdyn = bfd_link_hash_lookup (link_info.hash, "__DYNAMIC", TRUE, FALSE, FALSE); @@ -803,7 +806,7 @@ gld${EMULATION_NAME}_before_allocation (void) /* We must assign a value to __DYNAMIC. It should be zero if we are not doing a dynamic link, or the start of the .dynamic section if we are doing one. */ - if (! link_info.relocatable) + if (!bfd_link_relocatable (&link_info)) { hdyn->type = bfd_link_hash_defined; hdyn->u.def.value = 0; @@ -969,11 +972,11 @@ fragment <> e${EMULATION_NAME}.c -echo ' ; else if (link_info.relocatable) return' >> e${EMULATION_NAME}.c +echo ' ; else if (bfd_link_relocatable (&link_info)) return' >> e${EMULATION_NAME}.c sed $sc ldscripts/${EMULATION_NAME}.xr >> e${EMULATION_NAME}.c echo ' ; else if (!config.text_read_only) return' >> e${EMULATION_NAME}.c sed $sc ldscripts/${EMULATION_NAME}.xbn >> e${EMULATION_NAME}.c @@ -990,9 +993,9 @@ fragment <flags & (SEC_EXCLUDE | SEC_LOAD)) != SEC_LOAD) return NULL; diff --git a/ld/emultempl/vxworks.em b/ld/emultempl/vxworks.em index c3714338d9d..22bbda7d8d5 100644 --- a/ld/emultempl/vxworks.em +++ b/ld/emultempl/vxworks.em @@ -47,7 +47,7 @@ vxworks_after_open (void) einfo ("%X%P: Cannot create dynamic sections %E\n"); if (!force_dynamic - && !link_info.shared + && !bfd_link_pic (&link_info) && bfd_get_flavour (link_info.output_bfd) == bfd_target_elf_flavour && elf_hash_table (&link_info)->dynamic_sections_created) einfo ("%X%P: Dynamic sections created in non-dynamic link\n"); diff --git a/ld/ldctor.c b/ld/ldctor.c index 9f28b851f18..dc312406212 100644 --- a/ld/ldctor.c +++ b/ld/ldctor.c @@ -274,7 +274,7 @@ ldctor_build_sets (void) howto = bfd_reloc_type_lookup (link_info.output_bfd, p->reloc); if (howto == NULL) { - if (link_info.relocatable) + if (bfd_link_relocatable (&link_info)) { einfo (_("%P%X: %s does not support reloc %s for set %s\n"), bfd_get_target (link_info.output_bfd), @@ -362,7 +362,7 @@ ldctor_build_sets (void) if (! bfd_is_abs_section (e->section)) e->section->flags |= SEC_KEEP; - if (link_info.relocatable) + if (bfd_link_relocatable (&link_info)) lang_add_reloc (p->reloc, howto, e->section, e->name, exp_intop (e->value)); else diff --git a/ld/ldemul.c b/ld/ldemul.c index 4898892c437..596418e911e 100644 --- a/ld/ldemul.c +++ b/ld/ldemul.c @@ -209,7 +209,7 @@ void after_parse_default (void) { if (entry_symbol.name != NULL - && (link_info.executable || entry_from_cmdline)) + && (bfd_link_executable (&link_info) || entry_from_cmdline)) { bfd_boolean is_vma = FALSE; @@ -239,14 +239,14 @@ after_allocation_default (void) void before_allocation_default (void) { - if (!link_info.relocatable) + if (!bfd_link_relocatable (&link_info)) strip_excluded_output_sections (); } void finish_default (void) { - if (!link_info.relocatable) + if (!bfd_link_relocatable (&link_info)) _bfd_fix_excluded_sec_syms (link_info.output_bfd, &link_info); } diff --git a/ld/ldfile.c b/ld/ldfile.c index d4f7cb43a0b..96f9ecc0157 100644 --- a/ld/ldfile.c +++ b/ld/ldfile.c @@ -357,7 +357,7 @@ ldfile_open_file_search (const char *arch, { char *string; - if (entry->flags.dynamic && ! link_info.relocatable) + if (entry->flags.dynamic && !bfd_link_relocatable (&link_info)) { if (ldemul_open_dynamic_archive (arch, search, entry)) return TRUE; diff --git a/ld/ldlang.c b/ld/ldlang.c index 0d6419d91dd..6ee3f843107 100644 --- a/ld/ldlang.c +++ b/ld/ldlang.c @@ -201,7 +201,7 @@ unique_section_p (const asection *sec, struct unique_sections *unam; const char *secnam; - if (link_info.relocatable + if (bfd_link_relocatable (&link_info) && sec->owner != NULL && bfd_is_group_section (sec->owner, sec)) return !(os != NULL @@ -1817,7 +1817,8 @@ lang_insert_orphan (asection *s, push_stat_ptr (&add); } - if (link_info.relocatable || (s->flags & (SEC_LOAD | SEC_ALLOC)) == 0) + if (bfd_link_relocatable (&link_info) + || (s->flags & (SEC_LOAD | SEC_ALLOC)) == 0) address = exp_intop (0); os_tail = ((lang_output_section_statement_type **) @@ -2347,7 +2348,7 @@ lang_add_section (lang_statement_list_type *ptr, format targets, .text$foo sections go into .text and it's odd to see .text with SEC_LINK_ONCE set. */ - if (!link_info.relocatable) + if (!bfd_link_relocatable (&link_info)) flags &= ~(SEC_LINK_ONCE | SEC_LINK_DUPLICATES | SEC_RELOC); switch (output->sectype) @@ -3172,7 +3173,8 @@ ldlang_open_output (lang_statement_union_type *statement) ASSERT (link_info.output_bfd == NULL); open_output (statement->output_statement.name); ldemul_set_output_arch (); - if (config.magic_demand_paged && !link_info.relocatable) + if (config.magic_demand_paged + && !bfd_link_relocatable (&link_info)) link_info.output_bfd->flags |= D_PAGED; else link_info.output_bfd->flags &= ~D_PAGED; @@ -4846,7 +4848,7 @@ lang_size_sections_1 here, in lang_insert_orphan, or in the default linker scripts. This is covering for coff backend linker bugs. See PR6945. */ if (os->addr_tree == NULL - && link_info.relocatable + && bfd_link_relocatable (&link_info) && (bfd_get_flavour (link_info.output_bfd) == bfd_target_coff_flavour)) os->addr_tree = exp_intop (0); @@ -4925,7 +4927,7 @@ lang_size_sections_1 defined, issue an error message. */ if (!os->ignored && !IGNORE_SECTION (os->bfd_section) - && ! link_info.relocatable + && !bfd_link_relocatable (&link_info) && check_regions && strcmp (os->region->name_list.name, DEFAULT_MEMORY_REGION) == 0 @@ -5105,13 +5107,13 @@ lang_size_sections_1 && dot >= (r->last_os->output_section_statement .bfd_section->vma))) && os->lma_region == NULL - && !link_info.relocatable) + && !bfd_link_relocatable (&link_info)) r->last_os = s; /* .tbss sections effectively have zero size. */ if ((os->bfd_section->flags & SEC_HAS_CONTENTS) != 0 || (os->bfd_section->flags & SEC_THREAD_LOCAL) == 0 - || link_info.relocatable) + || bfd_link_relocatable (&link_info)) dotdelta = TO_ADDR (os->bfd_section->size); else dotdelta = 0; @@ -5546,7 +5548,7 @@ lang_do_assignments_1 (lang_statement_union_type *s, /* .tbss sections effectively have zero size. */ if ((os->bfd_section->flags & SEC_HAS_CONTENTS) != 0 || (os->bfd_section->flags & SEC_THREAD_LOCAL) == 0 - || link_info.relocatable) + || bfd_link_relocatable (&link_info)) dot += TO_ADDR (os->bfd_section->size); if (os->update_dot_tree != NULL) @@ -5770,7 +5772,7 @@ lang_set_startof (void) { asection *s; - if (link_info.relocatable) + if (bfd_link_relocatable (&link_info)) return; for (s = link_info.output_bfd->sections; s != NULL; s = s->next) @@ -5810,15 +5812,15 @@ lang_end (void) struct bfd_link_hash_entry *h; bfd_boolean warn; - if ((link_info.relocatable && !link_info.gc_sections) - || (link_info.shared && !link_info.executable)) + if ((bfd_link_relocatable (&link_info) && !link_info.gc_sections) + || bfd_link_dll (&link_info)) warn = entry_from_cmdline; else warn = TRUE; /* Force the user to specify a root when generating a relocatable with --gc-sections. */ - if (link_info.gc_sections && link_info.relocatable + if (link_info.gc_sections && bfd_link_relocatable (&link_info) && !(entry_from_cmdline || undef_from_cmdline)) einfo (_("%P%F: gc-sections requires either an entry or " "an undefined symbol\n")); @@ -5928,7 +5930,8 @@ lang_check (void) input format may not have equivalent representations in the output format (and besides BFD does not translate relocs for other link purposes than a final link). */ - if ((link_info.relocatable || link_info.emitrelocations) + if ((bfd_link_relocatable (&link_info) + || link_info.emitrelocations) && (compatible == NULL || (bfd_get_flavour (input_bfd) != bfd_get_flavour (link_info.output_bfd))) @@ -5984,7 +5987,7 @@ lang_common (void) { if (command_line.inhibit_common_definition) return; - if (link_info.relocatable + if (bfd_link_relocatable (&link_info) && ! command_line.force_common_definition) return; @@ -6126,7 +6129,7 @@ lang_place_orphans (void) /* This is a lonely common section which must have come from an archive. We attach to the section with the wildcard. */ - if (! link_info.relocatable + if (!bfd_link_relocatable (&link_info) || command_line.force_common_definition) { if (default_common_section == NULL) @@ -6153,7 +6156,7 @@ lang_place_orphans (void) constraint, TRUE); if (os->addr_tree == NULL - && (link_info.relocatable + && (bfd_link_relocatable (&link_info) || (s->flags & (SEC_LOAD | SEC_ALLOC)) == 0)) os->addr_tree = exp_intop (0); lang_add_section (&os->children, s, NULL, os); @@ -6434,7 +6437,7 @@ lang_gc_sections (void) /* SEC_EXCLUDE is ignored when doing a relocatable link, except in the special case of debug info. (See bfd/stabs.c) Twiddle the flag here, to simplify later linker code. */ - if (link_info.relocatable) + if (bfd_link_relocatable (&link_info)) { LANG_FOR_EACH_INPUT_STATEMENT (f) { @@ -6800,7 +6803,7 @@ lang_process (void) /* Find any sections not attached explicitly and handle them. */ lang_place_orphans (); - if (! link_info.relocatable) + if (!bfd_link_relocatable (&link_info)) { asection *found; @@ -6831,7 +6834,7 @@ lang_process (void) lang_record_phdrs (); /* Check relro sections. */ - if (link_info.relro && ! link_info.relocatable) + if (link_info.relro && !bfd_link_relocatable (&link_info)) lang_find_relro_sections (); /* Size up the sections. */ diff --git a/ld/ldmain.c b/ld/ldmain.c index 04920343e1a..577928d5504 100644 --- a/ld/ldmain.c +++ b/ld/ldmain.c @@ -420,7 +420,7 @@ main (int argc, char **argv) /* Print error messages for any missing symbols, for any warning symbols, and possibly multiple definitions. */ - if (link_info.relocatable) + if (bfd_link_relocatable (&link_info)) link_info.output_bfd->flags &= ~EXEC_P; else link_info.output_bfd->flags |= EXEC_P; @@ -473,7 +473,8 @@ main (int argc, char **argv) /* If the --force-exe-suffix is enabled, and we're making an executable file and it doesn't end in .exe, copy it to one which does. */ - if (! link_info.relocatable && command_line.force_exe_suffix) + if (!bfd_link_relocatable (&link_info) + && command_line.force_exe_suffix) { int len = strlen (output_filename); @@ -1122,7 +1123,7 @@ constructor_callback (struct bfd_link_info *info, /* Ensure that BFD_RELOC_CTOR exists now, so that we can give a useful error message. */ if (bfd_reloc_type_lookup (info->output_bfd, BFD_RELOC_CTOR) == NULL - && (info->relocatable + && (bfd_link_relocatable (info) || bfd_reloc_type_lookup (abfd, BFD_RELOC_CTOR) == NULL)) einfo (_("%P%F: BFD backend error: BFD_RELOC_CTOR unsupported\n")); diff --git a/ld/ldwrite.c b/ld/ldwrite.c index f57b88dd55a..c833bbbada6 100644 --- a/ld/ldwrite.c +++ b/ld/ldwrite.c @@ -488,13 +488,13 @@ split_sections (bfd *abfd, struct bfd_link_info *info) || info->strip == strip_some) thislines = sec->lineno_count; - if (info->relocatable) + if (bfd_link_relocatable (info)) thisrelocs = sec->reloc_count; thissize = sec->size; } - else if (info->relocatable + else if (bfd_link_relocatable (info) && (p->type == bfd_section_reloc_link_order || p->type == bfd_symbol_reloc_link_order)) thisrelocs++; diff --git a/ld/lexsup.c b/ld/lexsup.c index 28541341f3c..777d6e241a5 100644 --- a/ld/lexsup.c +++ b/ld/lexsup.c @@ -1010,7 +1010,11 @@ parse_args (unsigned argc, char **argv) and will seg-fault the next time around. */ einfo(_("%P%F: unrecognised option: %s\n"), argv[optind]); - link_info.relocatable = TRUE; + if (bfd_link_pic (&link_info)) + einfo (_("%P%F: -r and %s may not be used together\n"), + bfd_link_dll (&link_info) ? "-shared" : "-pie"); + + link_info.type = type_relocatable; config.build_constructors = FALSE; config.magic_demand_paged = FALSE; config.text_read_only = FALSE; @@ -1113,7 +1117,11 @@ parse_args (unsigned argc, char **argv) case OPTION_SHARED: if (config.has_shared) { - link_info.shared = TRUE; + if (bfd_link_relocatable (&link_info)) + einfo (_("%P%F: -r and -shared may not be used together\n")); + + link_info.type = type_dll; + link_info.pic = TRUE; /* When creating a shared library, the default behaviour is to ignore any unresolved references. */ if (link_info.unresolved_syms_in_objects == RM_NOT_YET_SET) @@ -1127,8 +1135,11 @@ parse_args (unsigned argc, char **argv) case OPTION_PIE: if (config.has_shared) { - link_info.shared = TRUE; - link_info.pie = TRUE; + if (bfd_link_relocatable (&link_info)) + einfo (_("%P%F: -r and -pie may not be used together\n")); + + link_info.type = type_executable; + link_info.pic = TRUE; } else einfo (_("%P%F: -pie not supported\n")); @@ -1241,7 +1252,11 @@ parse_args (unsigned argc, char **argv) link_info.task_link = TRUE; /* Fall through - do an implied -r option. */ case OPTION_UR: - link_info.relocatable = TRUE; + if (bfd_link_pic (&link_info)) + einfo (_("%P%F: -r and %s may not be used together\n"), + bfd_link_dll (&link_info) ? "-shared" : "-pie"); + + link_info.type = type_relocatable; config.build_constructors = TRUE; config.magic_demand_paged = FALSE; config.text_read_only = FALSE; @@ -1531,13 +1546,9 @@ parse_args (unsigned argc, char **argv) /* FIXME: Should we allow emulations a chance to set this ? */ link_info.unresolved_syms_in_shared_libs = how_to_report_unresolved_symbols; - if (link_info.relocatable) - { - if (command_line.check_section_addresses < 0) - command_line.check_section_addresses = 0; - if (link_info.shared) - einfo (_("%P%F: -r and -shared may not be used together\n")); - } + if (bfd_link_relocatable (&link_info) + && command_line.check_section_addresses < 0) + command_line.check_section_addresses = 0; /* We may have -Bsymbolic, -Bsymbolic-functions, --dynamic-list-data, --dynamic-list-cpp-new, --dynamic-list-cpp-typeinfo and @@ -1550,7 +1561,7 @@ parse_args (unsigned argc, char **argv) break; case symbolic: /* -Bsymbolic is for shared library only. */ - if (link_info.shared) + if (bfd_link_dll (&link_info)) { link_info.symbolic = TRUE; /* Should we free the unused memory? */ @@ -1560,7 +1571,7 @@ parse_args (unsigned argc, char **argv) break; case symbolic_functions: /* -Bsymbolic-functions is for shared library only. */ - if (link_info.shared) + if (bfd_link_dll (&link_info)) command_line.dynamic_list = dynamic_list_data; break; } @@ -1576,7 +1587,7 @@ parse_args (unsigned argc, char **argv) break; } - if (! link_info.shared) + if (!bfd_link_dll (&link_info)) { if (command_line.filter_shlib) einfo (_("%P%F: -F may not be used without -shared\n")); @@ -1584,13 +1595,10 @@ parse_args (unsigned argc, char **argv) einfo (_("%P%F: -f may not be used without -shared\n")); } - if ((! link_info.shared && ! link_info.relocatable) || link_info.pie) - link_info.executable = TRUE; - /* Treat ld -r -s as ld -r -S -x (i.e., strip all local symbols). I don't see how else this can be handled, since in this case we must preserve all externally visible symbols. */ - if (link_info.relocatable && link_info.strip == strip_all) + if (bfd_link_relocatable (&link_info) && link_info.strip == strip_all) { link_info.strip = strip_debugger; if (link_info.discard == discard_sec_merge) diff --git a/ld/pe-dll.c b/ld/pe-dll.c index e3e1f1f6e5e..fdadeaf2865 100644 --- a/ld/pe-dll.c +++ b/ld/pe-dll.c @@ -693,7 +693,7 @@ process_def_file_and_drectve (bfd *abfd ATTRIBUTE_UNUSED, struct bfd_link_info * /* If we are building an executable and there is nothing to export, we do not build an export table at all. */ - if (info->executable && pe_def_file->num_exports == 0 + if (bfd_link_executable (info) && pe_def_file->num_exports == 0 && (!pe_dll_export_everything || pe_dll_exclude_all_symbols)) return; @@ -3369,7 +3369,7 @@ pe_dll_build_sections (bfd *abfd, struct bfd_link_info *info) pe_output_file_set_long_section_names (abfd); process_def_file_and_drectve (abfd, info); - if (pe_def_file->num_exports == 0 && !info->shared) + if (pe_def_file->num_exports == 0 && !bfd_link_pic (info)) return; generate_edata (abfd, info); @@ -3411,7 +3411,7 @@ pe_dll_fill_sections (bfd *abfd, struct bfd_link_info *info) fill_edata (abfd, info); - if (info->shared && !info->pie) + if (bfd_link_dll (info)) pe_data (abfd)->dll = 1; edata_s->contents = edata_d; diff --git a/ld/plugin.c b/ld/plugin.c index 81bf14348c3..5f7bbd89503 100644 --- a/ld/plugin.c +++ b/ld/plugin.c @@ -611,9 +611,9 @@ is_visible_from_outside (struct ld_plugin_symbol *lsym, { struct bfd_sym_chain *sym; - if (link_info.relocatable) + if (bfd_link_relocatable (&link_info)) return TRUE; - if (link_info.export_dynamic || !link_info.executable) + if (link_info.export_dynamic || bfd_link_dll (&link_info)) { /* Check if symbol is hidden by version script. */ if (bfd_hide_sym_by_version (link_info.version_info, @@ -872,10 +872,10 @@ set_tv_header (struct ld_plugin_tv *tv) TVU(val) = major * 100 + minor; break; case LDPT_LINKER_OUTPUT: - TVU(val) = (link_info.relocatable + TVU(val) = (bfd_link_relocatable (&link_info) ? LDPO_REL - : (link_info.executable - ? (link_info.pie ? LDPO_PIE : LDPO_EXEC) + : (bfd_link_executable (&link_info) + ? (bfd_link_pic (&link_info) ? LDPO_PIE : LDPO_EXEC) : LDPO_DYN)); break; case LDPT_OUTPUT_NAME: