/* VxWorks support for ELF
- Copyright (C) 2005-2015 Free Software Foundation, Inc.
+ Copyright (C) 2005-2020 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA. */
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
/* This file provides routines used by all VxWorks targets. */
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_anyway_with_flags (dynobj,
bed->default_use_rela_p
| SEC_READONLY
| SEC_LINKER_CREATED);
if (s == NULL
- || !bfd_set_section_alignment (dynobj, s, bed->s->log_file_align))
+ || !bfd_set_section_alignment (s, bed->s->log_file_align))
return FALSE;
*srelplt2_out = s;
&& (*hash_ptr)->root.u.def.section->output_section != NULL)
{
/* This is a relocation from an executable or shared
- library against a symbol in a different shared
- library. We are creating a definition in the output
- file but it does not come from any of our normal (.o)
- files. ie. a PLT stub. Normally this would be a
- relocation against against SHN_UNDEF with the VMA of
- the PLT stub. This upsets the VxWorks loader.
- Convert it to a section-relative relocation. This
- gets some other symbols (for instance .dynbss), but
- is conservatively correct. */
+ library against a symbol in a different shared
+ library. We are creating a definition in the output
+ file but it does not come from any of our normal (.o)
+ files. ie. a PLT stub. Normally this would be a
+ relocation against against SHN_UNDEF with the VMA of
+ the PLT stub. This upsets the VxWorks loader.
+ Convert it to a section-relative relocation. This
+ gets some other symbols (for instance .dynbss), but
+ is conservatively correct. */
for (j = 0; j < bed->s->int_rels_per_ext_rel; j++)
{
asection *sec = (*hash_ptr)->root.u.def.section;
/* Set the sh_link and sh_info fields on the static plt relocation secton. */
-void
-elf_vxworks_final_write_processing (bfd *abfd,
- bfd_boolean linker ATTRIBUTE_UNUSED)
+bfd_boolean
+elf_vxworks_final_write_processing (bfd *abfd)
{
asection * sec;
struct bfd_elf_section_data *d;
sec = bfd_get_section_by_name (abfd, ".rel.plt.unloaded");
if (!sec)
sec = bfd_get_section_by_name (abfd, ".rela.plt.unloaded");
- if (!sec)
- return;
- d = elf_section_data (sec);
- 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;
+ {
+ d = elf_section_data (sec);
+ 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;
+ }
+ return _bfd_elf_final_write_processing (abfd);
}
/* Add the dynamic entries required by VxWorks. These point to the
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 (output_bfd,
- sec);
+ dyn->d_un.d_val = (bfd_size_type) 1 << bfd_section_alignment (sec);
break;
case DT_VX_WRS_TLS_VARS_START: