Home | History | Annotate | Line # | Download | only in bfd
      1       1.1     skrll /* SPARC ELF specific backend routines.
      2  1.1.1.12  christos    Copyright (C) 2005-2026 Free Software Foundation, Inc.
      3       1.1     skrll 
      4       1.1     skrll    This file is part of BFD, the Binary File Descriptor library.
      5       1.1     skrll 
      6       1.1     skrll    This program is free software; you can redistribute it and/or modify
      7       1.1     skrll    it under the terms of the GNU General Public License as published by
      8       1.1     skrll    the Free Software Foundation; either version 3 of the License, or
      9       1.1     skrll    (at your option) any later version.
     10       1.1     skrll 
     11       1.1     skrll    This program is distributed in the hope that it will be useful,
     12       1.1     skrll    but WITHOUT ANY WARRANTY; without even the implied warranty of
     13       1.1     skrll    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     14       1.1     skrll    GNU General Public License for more details.
     15       1.1     skrll 
     16       1.1     skrll    You should have received a copy of the GNU General Public License
     17       1.1     skrll    along with this program; if not, write to the Free Software
     18       1.1     skrll    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
     19       1.1     skrll    MA 02110-1301, USA.  */
     20       1.1     skrll 
     21       1.1     skrll #include "elf/common.h"
     22       1.1     skrll #include "elf/internal.h"
     23       1.1     skrll 
     24       1.1     skrll struct _bfd_sparc_elf_section_data
     25       1.1     skrll {
     26       1.1     skrll   struct bfd_elf_section_data elf;
     27       1.1     skrll   unsigned int do_relax, reloc_count;
     28       1.1     skrll };
     29       1.1     skrll 
     30       1.1     skrll #define sec_do_relax(sec) \
     31       1.1     skrll   ((struct _bfd_sparc_elf_section_data *) elf_section_data (sec))->do_relax
     32       1.1     skrll #define canon_reloc_count(sec) \
     33       1.1     skrll   ((struct _bfd_sparc_elf_section_data *) elf_section_data (sec))->reloc_count
     34       1.1     skrll 
     35       1.1     skrll struct _bfd_sparc_elf_app_reg
     36       1.1     skrll {
     37       1.1     skrll   unsigned char bind;
     38       1.1     skrll   unsigned short shndx;
     39       1.1     skrll   bfd *abfd;
     40       1.1     skrll   char *name;
     41       1.1     skrll };
     42       1.1     skrll 
     43       1.1     skrll /* Sparc ELF linker hash table.  */
     44       1.1     skrll 
     45       1.1     skrll struct _bfd_sparc_elf_link_hash_table
     46       1.1     skrll {
     47       1.1     skrll   struct elf_link_hash_table elf;
     48       1.1     skrll 
     49   1.1.1.2  christos   union
     50   1.1.1.2  christos   {
     51       1.1     skrll     bfd_signed_vma refcount;
     52       1.1     skrll     bfd_vma offset;
     53       1.1     skrll   } tls_ldm_got;
     54       1.1     skrll 
     55   1.1.1.2  christos   /* Used by local STT_GNU_IFUNC symbols.  */
     56   1.1.1.2  christos   htab_t loc_hash_table;
     57   1.1.1.2  christos   void *loc_hash_memory;
     58       1.1     skrll 
     59       1.1     skrll   /* The (unloaded but important) .rela.plt.unloaded section, for VxWorks.  */
     60       1.1     skrll   asection *srelplt2;
     61       1.1     skrll 
     62       1.1     skrll   void (*put_word) (bfd *, bfd_vma, void *);
     63       1.1     skrll   bfd_vma (*r_info) (Elf_Internal_Rela *, bfd_vma, bfd_vma);
     64       1.1     skrll   bfd_vma (*r_symndx) (bfd_vma);
     65       1.1     skrll   int (*build_plt_entry) (bfd *, asection *, bfd_vma, bfd_vma, bfd_vma *);
     66       1.1     skrll   const char *dynamic_interpreter;
     67       1.1     skrll   int dynamic_interpreter_size;
     68       1.1     skrll   unsigned int word_align_power;
     69       1.1     skrll   unsigned int align_power_max;
     70       1.1     skrll   unsigned int plt_header_size;
     71       1.1     skrll   unsigned int plt_entry_size;
     72       1.1     skrll   int bytes_per_word;
     73       1.1     skrll   int bytes_per_rela;
     74       1.1     skrll   int dtpoff_reloc;
     75       1.1     skrll   int dtpmod_reloc;
     76       1.1     skrll   int tpoff_reloc;
     77       1.1     skrll 
     78       1.1     skrll   struct _bfd_sparc_elf_app_reg app_regs [4];
     79       1.1     skrll };
     80       1.1     skrll 
     81       1.1     skrll /* Get the SPARC ELF linker hash table from a link_info structure.  */
     82       1.1     skrll 
     83       1.1     skrll #define _bfd_sparc_elf_hash_table(p) \
     84   1.1.1.9  christos   ((is_elf_hash_table ((p)->hash)					\
     85   1.1.1.9  christos     && elf_hash_table_id (elf_hash_table (p)) == SPARC_ELF_DATA)	\
     86   1.1.1.9  christos    ? (struct _bfd_sparc_elf_link_hash_table *) (p)->hash : NULL)
     87       1.1     skrll 
     88       1.1     skrll extern reloc_howto_type *_bfd_sparc_elf_reloc_type_lookup
     89  1.1.1.12  christos   (bfd *, bfd_reloc_code_real_type) ATTRIBUTE_HIDDEN;
     90       1.1     skrll extern reloc_howto_type *_bfd_sparc_elf_reloc_name_lookup
     91  1.1.1.12  christos   (bfd *, const char *) ATTRIBUTE_HIDDEN;
     92   1.1.1.9  christos extern bool _bfd_sparc_elf_info_to_howto
     93  1.1.1.12  christos   (bfd *, arelent *, Elf_Internal_Rela *) ATTRIBUTE_HIDDEN;
     94       1.1     skrll extern reloc_howto_type *_bfd_sparc_elf_info_to_howto_ptr
     95  1.1.1.12  christos   (bfd*, unsigned int) ATTRIBUTE_HIDDEN;
     96   1.1.1.9  christos extern bool _bfd_sparc_elf_mkobject
     97  1.1.1.12  christos   (bfd *) ATTRIBUTE_HIDDEN;
     98       1.1     skrll extern struct bfd_link_hash_table *_bfd_sparc_elf_link_hash_table_create
     99  1.1.1.12  christos   (bfd *) ATTRIBUTE_HIDDEN;
    100   1.1.1.9  christos extern bool _bfd_sparc_elf_create_dynamic_sections
    101  1.1.1.12  christos   (bfd *, struct bfd_link_info *) ATTRIBUTE_HIDDEN;
    102       1.1     skrll extern void _bfd_sparc_elf_copy_indirect_symbol
    103       1.1     skrll   (struct bfd_link_info *,
    104       1.1     skrll    struct elf_link_hash_entry *,
    105  1.1.1.12  christos    struct elf_link_hash_entry *) ATTRIBUTE_HIDDEN;
    106   1.1.1.9  christos extern bool _bfd_sparc_elf_check_relocs
    107       1.1     skrll   (bfd *, struct bfd_link_info *,
    108  1.1.1.12  christos    asection *, const Elf_Internal_Rela *) ATTRIBUTE_HIDDEN;
    109       1.1     skrll extern asection *_bfd_sparc_elf_gc_mark_hook
    110  1.1.1.12  christos   (asection *, struct bfd_link_info *, struct elf_reloc_cookie *,
    111  1.1.1.12  christos    struct elf_link_hash_entry *, unsigned int) ATTRIBUTE_HIDDEN;
    112   1.1.1.9  christos extern bool _bfd_sparc_elf_adjust_dynamic_symbol
    113  1.1.1.12  christos   (struct bfd_link_info *, struct elf_link_hash_entry *) ATTRIBUTE_HIDDEN;
    114   1.1.1.9  christos extern bool _bfd_sparc_elf_omit_section_dynsym
    115  1.1.1.12  christos   (bfd *, struct bfd_link_info *, asection *) ATTRIBUTE_HIDDEN;
    116  1.1.1.11  christos extern bool _bfd_sparc_elf_late_size_sections
    117  1.1.1.12  christos   (bfd *, struct bfd_link_info *) ATTRIBUTE_HIDDEN;
    118   1.1.1.9  christos extern bool _bfd_sparc_elf_new_section_hook
    119  1.1.1.12  christos   (bfd *, asection *) ATTRIBUTE_HIDDEN;
    120   1.1.1.9  christos extern bool _bfd_sparc_elf_relax_section
    121  1.1.1.12  christos   (bfd *, struct bfd_section *, struct bfd_link_info *, bool *)
    122  1.1.1.12  christos   ATTRIBUTE_HIDDEN;
    123   1.1.1.9  christos extern int _bfd_sparc_elf_relocate_section
    124       1.1     skrll   (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
    125  1.1.1.12  christos    Elf_Internal_Rela *, Elf_Internal_Sym *, asection **) ATTRIBUTE_HIDDEN;
    126   1.1.1.9  christos extern bool _bfd_sparc_elf_finish_dynamic_symbol
    127       1.1     skrll   (bfd *, struct bfd_link_info *, struct elf_link_hash_entry *,
    128  1.1.1.12  christos    Elf_Internal_Sym *sym) ATTRIBUTE_HIDDEN;
    129   1.1.1.9  christos extern bool _bfd_sparc_elf_finish_dynamic_sections
    130  1.1.1.12  christos   (bfd *, struct bfd_link_info *, bfd_byte *) ATTRIBUTE_HIDDEN;
    131   1.1.1.9  christos extern bool _bfd_sparc_elf_fixup_symbol
    132  1.1.1.12  christos   (struct bfd_link_info *, struct elf_link_hash_entry *) ATTRIBUTE_HIDDEN;
    133   1.1.1.9  christos extern bool _bfd_sparc_elf_object_p
    134  1.1.1.12  christos   (bfd *) ATTRIBUTE_HIDDEN;
    135       1.1     skrll extern bfd_vma _bfd_sparc_elf_plt_sym_val
    136  1.1.1.12  christos   (bfd_vma, const asection *, const arelent *) ATTRIBUTE_HIDDEN;
    137   1.1.1.9  christos extern bool _bfd_sparc_elf_merge_private_bfd_data
    138  1.1.1.12  christos   (bfd *, struct bfd_link_info *) ATTRIBUTE_HIDDEN;
    139