summaryrefslogtreecommitdiff
path: root/bfd/elfxx-sparc.h
diff options
context:
space:
mode:
authorDavid S. Miller <davem@redhat.com>2005-04-19 21:26:30 +0000
committerDavid S. Miller <davem@redhat.com>2005-04-19 21:26:30 +0000
commit22847711ad0cc0c4f71a4bb908afe46376064660 (patch)
treeeb145155afab0fbae25d05136eb58a9602996d06 /bfd/elfxx-sparc.h
parentf24a9037e3aa8e027664448dcef5c4deafae7155 (diff)
downloadgdb-22847711ad0cc0c4f71a4bb908afe46376064660.tar.gz
* elfxx-sparc.c: New file.
* elfxx-sparc.h: New file. * Makefile.in (BFD32_BACKENDS): Add elfxx-sparc.lo (BFD32_BACKENDS_CFILES): Add elfxx-sparc.c (elfxx-sparc.lo): New rule. (elf32-sparc.lo): Add elfxx-sparc.h dependency. (elf64-sparc.lo): Likewise. * configure.in (bfd_elf32_sparc_vec): Add elfxx-sparc.lo (bfd_elf64_sparc_vec): Likewise. * configure: Regenerate. * elf32-sparc.c: Remove common code now in elfxx-sparc.c * elf64-sparc.c: Likewise, also use elf64_sparc_*() naming which is more consistent with elf32-sparc.c
Diffstat (limited to 'bfd/elfxx-sparc.h')
-rw-r--r--bfd/elfxx-sparc.h134
1 files changed, 134 insertions, 0 deletions
diff --git a/bfd/elfxx-sparc.h b/bfd/elfxx-sparc.h
new file mode 100644
index 00000000000..5223ae7e7b0
--- /dev/null
+++ b/bfd/elfxx-sparc.h
@@ -0,0 +1,134 @@
+/* SPARC ELF specific backend routines.
+ Copyright 2005 Free Software Foundation, Inc.
+
+This file is part of BFD, the Binary File Descriptor library.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+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. */
+
+#include "elf/common.h"
+#include "elf/internal.h"
+
+struct _bfd_sparc_elf_section_data
+{
+ struct bfd_elf_section_data elf;
+ unsigned int do_relax, reloc_count;
+};
+
+#define sec_do_relax(sec) \
+ ((struct _bfd_sparc_elf_section_data *) elf_section_data (sec))->do_relax
+#define canon_reloc_count(sec) \
+ ((struct _bfd_sparc_elf_section_data *) elf_section_data (sec))->reloc_count
+
+struct _bfd_sparc_elf_app_reg
+{
+ unsigned char bind;
+ unsigned short shndx;
+ bfd *abfd;
+ char *name;
+};
+
+/* Sparc ELF linker hash table. */
+
+struct _bfd_sparc_elf_link_hash_table
+{
+ struct elf_link_hash_table elf;
+
+ /* Short-cuts to get to dynamic linker sections. */
+ asection *sgot;
+ asection *srelgot;
+ asection *splt;
+ asection *srelplt;
+ asection *sdynbss;
+ asection *srelbss;
+
+ union {
+ bfd_signed_vma refcount;
+ bfd_vma offset;
+ } tls_ldm_got;
+
+ /* Small local sym to section mapping cache. */
+ struct sym_sec_cache sym_sec;
+
+ void (*put_word) (bfd *, bfd_vma, void *);
+ void (*append_rela) (bfd *, asection *, Elf_Internal_Rela *);
+ bfd_vma (*r_info) (Elf_Internal_Rela *, bfd_vma, bfd_vma);
+ bfd_vma (*r_symndx) (bfd_vma);
+ int (*build_plt_entry) (bfd *, asection *, bfd_vma, bfd_vma, bfd_vma *);
+ const unsigned char *dynamic_interpreter;
+ int dynamic_interpreter_size;
+ unsigned int word_align_power;
+ unsigned int align_power_max;
+ int bytes_per_word;
+ int bytes_per_rela;
+ int dtpoff_reloc;
+ int dtpmod_reloc;
+ int tpoff_reloc;
+
+ struct _bfd_sparc_elf_app_reg app_regs [4];
+};
+
+/* Get the SPARC ELF linker hash table from a link_info structure. */
+
+#define _bfd_sparc_elf_hash_table(p) \
+ ((struct _bfd_sparc_elf_link_hash_table *) ((p)->hash))
+
+extern reloc_howto_type *_bfd_sparc_elf_reloc_type_lookup
+ (bfd *, bfd_reloc_code_real_type);
+extern void _bfd_sparc_elf_info_to_howto
+ (bfd *, arelent *, Elf_Internal_Rela *);
+extern reloc_howto_type *_bfd_sparc_elf_info_to_howto_ptr
+ (unsigned int);
+extern bfd_boolean _bfd_sparc_elf_mkobject
+ (bfd *);
+extern struct bfd_link_hash_table *_bfd_sparc_elf_link_hash_table_create
+ (bfd *);
+extern bfd_boolean _bfd_sparc_elf_create_dynamic_sections
+ (bfd *, struct bfd_link_info *);
+extern void _bfd_sparc_elf_copy_indirect_symbol
+ (const struct elf_backend_data *,
+ struct elf_link_hash_entry *,
+ struct elf_link_hash_entry *);
+extern bfd_boolean _bfd_sparc_elf_check_relocs
+ (bfd *, struct bfd_link_info *,
+ asection *, const Elf_Internal_Rela *);
+extern asection *_bfd_sparc_elf_gc_mark_hook
+ (asection *, struct bfd_link_info *,
+ Elf_Internal_Rela *, struct elf_link_hash_entry *,
+ Elf_Internal_Sym *);
+extern bfd_boolean _bfd_sparc_elf_gc_sweep_hook
+ (bfd *, struct bfd_link_info *,
+ asection *, const Elf_Internal_Rela *);
+extern bfd_boolean _bfd_sparc_elf_adjust_dynamic_symbol
+ (struct bfd_link_info *, struct elf_link_hash_entry *);
+extern bfd_boolean _bfd_sparc_elf_omit_section_dynsym
+ (bfd *, struct bfd_link_info *, asection *);
+extern bfd_boolean _bfd_sparc_elf_size_dynamic_sections
+ (bfd *, struct bfd_link_info *);
+extern bfd_boolean _bfd_sparc_elf_new_section_hook
+ (bfd *, asection *);
+extern bfd_boolean _bfd_sparc_elf_relax_section
+ (bfd *, struct bfd_section *, struct bfd_link_info *, bfd_boolean *);
+extern bfd_boolean _bfd_sparc_elf_relocate_section
+ (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
+ Elf_Internal_Rela *, Elf_Internal_Sym *, asection **);
+extern bfd_boolean _bfd_sparc_elf_finish_dynamic_symbol
+ (bfd *, struct bfd_link_info *, struct elf_link_hash_entry *,
+ Elf_Internal_Sym *sym);
+extern bfd_boolean _bfd_sparc_elf_finish_dynamic_sections
+ (bfd *, struct bfd_link_info *);
+extern bfd_boolean _bfd_sparc_elf_object_p
+ (bfd *);
+extern bfd_vma _bfd_sparc_elf_plt_sym_val
+ (bfd_vma, const asection *, const arelent *);