aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@airs.com>1993-11-09 16:33:28 +0000
committerIan Lance Taylor <ian@airs.com>1993-11-09 16:33:28 +0000
commit95469b0290dd0db99e9c0d294ff46c2ba488c09f (patch)
treefcba1bc9a0917ad86b3e9dee1b355edd54b198e7
parent7420b02b8d21baf352e8059daf2c73cba8d18941 (diff)
downloadfsf-binutils-gdb-95469b0290dd0db99e9c0d294ff46c2ba488c09f.zip
fsf-binutils-gdb-95469b0290dd0db99e9c0d294ff46c2ba488c09f.tar.gz
fsf-binutils-gdb-95469b0290dd0db99e9c0d294ff46c2ba488c09f.tar.bz2
* libelf.h: Added some comments.
(struct elf_backend_data): Added elf_backend_ecoff_debug_swap field. Removed unused write_relocs field. * elf32-target.h: Adjusted elf_backend_data initialization accordingly. * elf64-target.h: Corrected elf_backend_data initialization to fill in all fields and to set elf_64_p to 1.
-rw-r--r--bfd/ChangeLog10
-rw-r--r--bfd/elf32-target.h7
-rw-r--r--bfd/elf64-target.h37
-rw-r--r--bfd/libelf.h75
4 files changed, 114 insertions, 15 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index d0a7f59..0cc7410 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,13 @@
+Tue Nov 9 11:26:05 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * libelf.h: Added some comments.
+ (struct elf_backend_data): Added elf_backend_ecoff_debug_swap
+ field. Removed unused write_relocs field.
+ * elf32-target.h: Adjusted elf_backend_data initialization
+ accordingly.
+ * elf64-target.h: Corrected elf_backend_data initialization to
+ fill in all fields and to set elf_64_p to 1.
+
Mon Nov 8 18:13:14 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
* elfcode.h (bfd_section_from_shdr): Remove duplicate assignment
diff --git a/bfd/elf32-target.h b/bfd/elf32-target.h
index 8d0076b..9b1c832 100644
--- a/bfd/elf32-target.h
+++ b/bfd/elf32-target.h
@@ -79,6 +79,9 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#ifndef elf_backend_section_from_bfd_section
#define elf_backend_section_from_bfd_section 0 /* elf_backend_section_from_bfd_section */
#endif
+#ifndef elf_backend_ecoff_debug_swap
+#define elf_backend_ecoff_debug_swap 0 /* elf_backed_ecoff_debug_swap */
+#endif
static CONST struct elf_backend_data elf32_bed =
{
@@ -89,16 +92,16 @@ static CONST struct elf_backend_data elf32_bed =
#endif
0, /* elf_64_p */
ELF_ARCH, /* arch */
+ ELF_MAXPAGESIZE, /* maxpagesize */
elf_info_to_howto, /* elf_info_to_howto */
elf_info_to_howto_rel, /* elf_info_to_howto_rel */
- ELF_MAXPAGESIZE, /* maxpagesize */
- bfd_elf32__write_relocs, /* write_relocs */
elf_backend_symbol_processing, /* elf_backend_symbol_processing */
elf_backend_symbol_table_processing, /* elf_backend_symbol_table_processing */
elf_backend_section_processing, /* elf_backend_section_processing */
elf_backend_section_from_shdr, /* elf_backend_section_from_shdr */
elf_backend_fake_sections, /* elf_backend_fake_sections */
elf_backend_section_from_bfd_section, /* elf_backend_section_from_bfd_section */
+ elf_backend_ecoff_debug_swap /* elf_backend_ecoff_debug_swap */
};
#ifdef TARGET_BIG_SYM
diff --git a/bfd/elf64-target.h b/bfd/elf64-target.h
index d7ee425..790e4a6 100644
--- a/bfd/elf64-target.h
+++ b/bfd/elf64-target.h
@@ -59,6 +59,28 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#define ELF_MAXPAGESIZE 1
#endif
+#ifndef elf_backend_symbol_processing
+#define elf_backend_symbol_processing 0 /* elf_backend_symbol_processing */
+#endif
+#ifndef elf_backend_symbol_table_processing
+#define elf_backend_symbol_table_processing 0 /* elf_backend_symbol_table_processing */
+#endif
+#ifndef elf_backend_section_processing
+#define elf_backend_section_processing 0 /* elf_backend_section_processing */
+#endif
+#ifndef elf_backend_section_from_shdr
+#define elf_backend_section_from_shdr 0 /* elf_backend_section_from_shdr */
+#endif
+#ifndef elf_backend_fake_sections
+#define elf_backend_fake_sections 0 /* elf_backend_fake_sections */
+#endif
+#ifndef elf_backend_section_from_bfd_section
+#define elf_backend_section_from_bfd_section 0 /* elf_backend_section_from_bfd_section */
+#endif
+#ifndef elf_backend_ecoff_debug_swap
+#define elf_backend_ecoff_debug_swap 0 /* elf_backed_ecoff_debug_swap */
+#endif
+
static CONST struct elf_backend_data elf64_bed =
{
#ifdef USE_REL
@@ -66,15 +88,18 @@ static CONST struct elf_backend_data elf64_bed =
#else
1, /* use_rela_p */
#endif
- 0, /* elf_64_p */
+ 1, /* elf_64_p */
ELF_ARCH, /* arch */
+ ELF_MAXPAGESIZE, /* maxpagesize */
elf_info_to_howto, /* elf_info_to_howto */
-#ifdef elf_info_to_howto_rel
elf_info_to_howto_rel, /* elf_info_to_howto_rel */
-#else
- 0, /* elf_info_to_howto_rel */
-#endif
- ELF_MAXPAGESIZE, /* maxpagesize */
+ elf_backend_symbol_processing, /* elf_backend_symbol_processing */
+ elf_backend_symbol_table_processing, /* elf_backend_symbol_table_processing */
+ elf_backend_section_processing, /* elf_backend_section_processing */
+ elf_backend_section_from_shdr, /* elf_backend_section_from_shdr */
+ elf_backend_fake_sections, /* elf_backend_fake_sections */
+ elf_backend_section_from_bfd_section, /* elf_backend_section_from_bfd_section */
+ elf_backend_ecoff_debug_swap /* elf_backend_ecoff_debug_swap */
};
#ifdef TARGET_BIG_SYM
diff --git a/bfd/libelf.h b/bfd/libelf.h
index 187c51a..2c0969a 100644
--- a/bfd/libelf.h
+++ b/bfd/libelf.h
@@ -42,10 +42,18 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#define ElfNAME(X) NAME(Elf,X)
#define elfNAME(X) NAME(elf,X)
+/* Information held for an ELF symbol. The first field is the
+ corresponding asymbol. Every symbol is an ELF file is actually a
+ pointer to this structure, although it is often handled as a
+ pointer to an asymbol. */
+
typedef struct
{
+ /* The BFD symbol. */
asymbol symbol;
+ /* ELF symbol information. */
Elf_Internal_Sym internal_elf_sym;
+ /* Backend specific information. */
union
{
unsigned int hppa_arg_reloc;
@@ -54,24 +62,77 @@ typedef struct
tc_data;
} elf_symbol_type;
+/* Constant information held for an ELF backend. */
+
struct elf_backend_data
{
+ /* Whether the backend uses REL or RELA relocations. FIXME: some
+ ELF backends use both. When we need to support one, this whole
+ approach will need to be changed. */
int use_rela_p;
+
+ /* Whether this backend is 64 bits or not. FIXME: Who cares? */
int elf_64_p;
+
+ /* The architecture for this backend. */
enum bfd_architecture arch;
+
+ /* The maximum page size for this backend. */
+ bfd_vma maxpagesize;
+
+ /* A function to translate an ELF RELA relocation to a BFD arelent
+ structure. */
void (*elf_info_to_howto) PARAMS ((bfd *, arelent *,
Elf_Internal_Rela *));
+
+ /* A function to translate an ELF REL relocation to a BFD arelent
+ structure. */
void (*elf_info_to_howto_rel) PARAMS ((bfd *, arelent *,
Elf_Internal_Rel *));
- bfd_vma maxpagesize;
- void (*write_relocs) PARAMS ((bfd *, asection *, PTR));
+ /* The remaining functions are hooks which are called only if they
+ are not NULL. */
+
+ /* A function to do additional symbol processing when reading the
+ ELF symbol table. This is where any processor-specific special
+ section indices are handled. */
void (*elf_backend_symbol_processing) PARAMS ((bfd *, asymbol *));
- boolean (*elf_backend_symbol_table_processing) PARAMS ((bfd *, elf_symbol_type *, int));
- boolean (*elf_backend_section_processing) PARAMS ((bfd *, Elf32_Internal_Shdr *));
- boolean (*elf_backend_section_from_shdr) PARAMS ((bfd *, Elf32_Internal_Shdr *, char *));
- boolean (*elf_backend_fake_sections) PARAMS ((bfd *, Elf32_Internal_Shdr *, asection *));
- boolean (*elf_backend_section_from_bfd_section) PARAMS ((bfd *, Elf32_Internal_Shdr *, asection *, int *));
+
+ /* A function to do additional symbol processing after reading the
+ entire ELF symbol table. */
+ boolean (*elf_backend_symbol_table_processing) PARAMS ((bfd *,
+ elf_symbol_type *,
+ int));
+
+ /* A function to do additional processing on the ELF section header
+ just before writing it out. This is used to set the flags and
+ type fields for some sections, or to actually write out data for
+ unusual sections. */
+ boolean (*elf_backend_section_processing) PARAMS ((bfd *,
+ Elf32_Internal_Shdr *));
+
+ /* A function to handle unusual section types when creating BFD
+ sections from ELF sections. */
+ boolean (*elf_backend_section_from_shdr) PARAMS ((bfd *,
+ Elf32_Internal_Shdr *,
+ char *));
+
+ /* A function to set up the ELF section header for a BFD section in
+ preparation for writing it out. This is where the flags and type
+ fields are set for unusual sections. */
+ boolean (*elf_backend_fake_sections) PARAMS ((bfd *, Elf32_Internal_Shdr *,
+ asection *));
+
+ /* A function to get the ELF section index for a BFD section. If
+ this returns true, the section was found. If it is a normal ELF
+ section, *RETVAL should be left unchanged. If it is not a normal
+ ELF section *RETVAL should be set to the SHN_xxxx index. */
+ boolean (*elf_backend_section_from_bfd_section)
+ PARAMS ((bfd *, Elf32_Internal_Shdr *, asection *, int *retval));
+
+ /* The swapping table to use when dealing with ECOFF information.
+ Used for the MIPS ELF .mdebug section. */
+ const struct ecoff_debug_swap *elf_backend_ecoff_debug_swap;
};
struct elf_sym_extra