/* VxWorks support for ELF
- Copyright 2005, 2007 Free Software Foundation, Inc.
+ Copyright (C) 2005-2015 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
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));
htab = elf_hash_table (info);
bed = get_elf_backend_data (dynobj);
- if (!info->shared)
+ if (!bfd_link_pic (info))
{
- s = bfd_make_section_with_flags (dynobj,
- bed->default_use_rela_p
- ? ".rela.plt.unloaded"
- : ".rel.plt.unloaded",
- SEC_HAS_CONTENTS | SEC_IN_MEMORY
- | SEC_READONLY | SEC_LINKER_CREATED);
+ s = bfd_make_section_anyway_with_flags (dynobj,
+ bed->default_use_rela_p
+ ? ".rela.plt.unloaded"
+ : ".rel.plt.unloaded",
+ SEC_HAS_CONTENTS | SEC_IN_MEMORY
+ | SEC_READONLY
+ | SEC_LINKER_CREATED);
if (s == NULL
|| !bfd_set_section_alignment (dynobj, s, bed->s->log_file_align))
return FALSE;
{
asection *sec = (*hash_ptr)->root.u.def.section;
int this_idx = sec->output_section->target_index;
-
+
irela[j].r_info
= ELF32_R_INFO (this_idx, ELF32_R_TYPE (irela[j].r_info));
irela[j].r_addend += (*hash_ptr)->root.u.def.value;
if (!sec)
return;
d = elf_section_data (sec);
- d->this_hdr.sh_link = elf_tdata (abfd)->symtab_section;
+ d->this_hdr.sh_link = elf_onesymtab (abfd);
sec = bfd_get_section_by_name (abfd, ".plt");
if (sec)
d->this_hdr.sh_info = elf_section_data (sec)->this_idx;
elf_vxworks_finish_dynamic_entry (bfd *output_bfd, Elf_Internal_Dyn *dyn)
{
asection *sec;
-
+
switch (dyn->d_tag)
{
default:
return FALSE;
-
+
case DT_VX_WRS_TLS_DATA_START:
sec = bfd_get_section_by_name (output_bfd, ".tls_data");
dyn->d_un.d_ptr = sec->vma;
break;
-
+
case DT_VX_WRS_TLS_DATA_SIZE:
sec = bfd_get_section_by_name (output_bfd, ".tls_data");
dyn->d_un.d_val = sec->size;
break;
-
+
case DT_VX_WRS_TLS_DATA_ALIGN:
sec = bfd_get_section_by_name (output_bfd, ".tls_data");
dyn->d_un.d_val
- = (bfd_size_type)1 << bfd_get_section_alignment (abfd, sec);
+ = (bfd_size_type)1 << bfd_get_section_alignment (output_bfd,
+ sec);
break;
-
+
case DT_VX_WRS_TLS_VARS_START:
sec = bfd_get_section_by_name (output_bfd, ".tls_vars");
dyn->d_un.d_ptr = sec->vma;
break;
-
+
case DT_VX_WRS_TLS_VARS_SIZE:
sec = bfd_get_section_by_name (output_bfd, ".tls_vars");
dyn->d_un.d_val = sec->size;