Thu Jun 24 17:25:51 1993 Ken Raeburn (raeburn@poseidon.cygnus.com)

* elfcode.h (elf_new_section_hook): Do nothing for now.
	(elf_write_object_contents): Output common symbols the way ELF
	wants them.

Wed Jun 23 16:20:07 1993  Ken Raeburn  (raeburn@poseidon.cygnus.com)

	* libelf.h (struct elf_obj_tdata and associated macros): Moved
	here from elfcode.h.  A couple of size-specific structure pointers
	were changed to PTR; uses fixed appropriately.
	(elf32_symbol_type, elf64_symbol_type): Separated definitions.
	(bfd_elf_mkobject): Renamed from bfd_elf32_mkobject.
	(bfd_elf32_mkobject, bfd_elf64_mkobject, elf_mkobject): New
	temporary macros to ease name change.
	* elf.c (elf_read, elf_mkobject, elf_get_str_section,
	elf_string_from_elf_section, bfd_elf_find_section): Moved here
	from elfcode.h.
	* doc/Makefile.in (libbfd.h): Process elf.c too.
	* Makefile.in (elf.o): Note new dependencies.

	* elfcode.h: Lots of stuff moved elsewhere.  Deleted some unused
	code, tweaked some debug hooks.
	(elf_slurp_reloca_table): Translate ELF section symbols into BFD
	section symbols.
This commit is contained in:
Ken Raeburn
1993-06-24 21:30:26 +00:00
parent e704cf435b
commit 998ce1e0c7
2 changed files with 67 additions and 8 deletions

View File

@ -129,7 +129,7 @@ bfd_target TARGET_BIG_SYM =
/* bfd_set_format: set the format of a file being written */ /* bfd_set_format: set the format of a file being written */
{ bfd_false, { bfd_false,
bfd_elf32_mkobject, bfd_elf_mkobject,
_bfd_generic_mkarchive, _bfd_generic_mkarchive,
bfd_false bfd_false
}, },
@ -211,7 +211,7 @@ bfd_target TARGET_LITTLE_SYM =
/* bfd_set_format: set the format of a file being written */ /* bfd_set_format: set the format of a file being written */
{ bfd_false, { bfd_false,
bfd_elf32_mkobject, bfd_elf_mkobject,
_bfd_generic_mkarchive, _bfd_generic_mkarchive,
bfd_false bfd_false
}, },

View File

@ -37,10 +37,12 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#define CAT4(a,b,c,d) a/**/b/**/c/**/d #define CAT4(a,b,c,d) a/**/b/**/c/**/d
#endif #endif
/* If size isn't specified as 64 or 32, NAME macro should fail. */
#ifndef NAME #ifndef NAME
#if ARCH_SIZE==64 #if ARCH_SIZE==64
#define NAME(x,y) CAT4(x,64,_,y) #define NAME(x,y) CAT4(x,64,_,y)
#else /* ARCH_SIZE==32 */ #endif
#if ARCH_SIZE==32
#define NAME(x,y) CAT4(x,32,_,y) #define NAME(x,y) CAT4(x,32,_,y)
#endif #endif
#endif #endif
@ -62,10 +64,25 @@ typedef struct
PTR any; PTR any;
} }
tc_data; tc_data;
ElfNAME (External_Sym) native_elf_sym; Elf32_External_Sym native_elf_sym;
} } elf32_symbol_type;
elfNAME (symbol_type); typedef struct
{
asymbol symbol;
Elf_Internal_Sym internal_elf_sym;
/* these are used for the generation of .stabX symbols (?) */
short desc;
unsigned char type;
char other;
union
{
unsigned int hppa_arg_reloc;
PTR any;
}
tc_data;
Elf64_External_Sym native_elf_sym;
} elf64_symbol_type;
/* Lacking nested functions and nested types, set up for mapping over /* Lacking nested functions and nested types, set up for mapping over
BFD sections to produce ELF sections. */ BFD sections to produce ELF sections. */
@ -93,12 +110,14 @@ struct elf_backend_data
that would be considered global, e.g., if you've got a program that would be considered global, e.g., if you've got a program
reading and writing many BFDs. My hunch is that it's specific to reading and writing many BFDs. My hunch is that it's specific to
the output BFD. If not, put a comment here explaining why. */ the output BFD. If not, put a comment here explaining why. */
elfNAME (symbol_type) * global_sym; /* @@ Was pointer to elfNAME(symbol_type). This makes it size-
independent. */
PTR global_sym;
}; };
extern bfd_target *bfd_elf32_object_p PARAMS ((bfd *)); extern bfd_target *bfd_elf32_object_p PARAMS ((bfd *));
extern bfd_target *bfd_elf32_core_file_p PARAMS ((bfd *)); extern bfd_target *bfd_elf32_core_file_p PARAMS ((bfd *));
extern boolean bfd_elf32_mkobject PARAMS ((bfd *)); extern boolean bfd_elf_mkobject PARAMS ((bfd *));
extern boolean bfd_elf32_write_object_contents PARAMS ((bfd *)); extern boolean bfd_elf32_write_object_contents PARAMS ((bfd *));
extern char *bfd_elf32_core_file_failing_command PARAMS ((bfd *)); extern char *bfd_elf32_core_file_failing_command PARAMS ((bfd *));
extern int bfd_elf32_core_file_failing_signal PARAMS ((bfd *)); extern int bfd_elf32_core_file_failing_signal PARAMS ((bfd *));
@ -150,4 +169,44 @@ extern struct elf32_internal_shdr *
bfd_elf_locate_sh PARAMS ((bfd *, struct strtab *, bfd_elf_locate_sh PARAMS ((bfd *, struct strtab *,
struct elf32_internal_shdr *, CONST char *)); struct elf32_internal_shdr *, CONST char *));
/* Some private data is stashed away for future use using the tdata pointer
in the bfd structure. */
struct elf_obj_tdata
{
Elf_Internal_Ehdr elf_header[1]; /* Actual data, but ref like ptr */
Elf_Internal_Shdr *elf_sect_ptr;
struct strtab *strtab_ptr;
int symtab_section;
int num_locals;
int num_globals;
int *symtab_map;
void *prstatus; /* The raw /proc prstatus structure */
void *prpsinfo; /* The raw /proc prpsinfo structure */
PTR raw_syms; /* Elf_External_Sym* */
Elf_Internal_Sym *internal_syms;
PTR symbols; /* elf_symbol_type */
};
#define elf_tdata(bfd) ((bfd) -> tdata.elf_obj_data)
#define elf_elfheader(bfd) (elf_tdata(bfd) -> elf_header)
#define elf_elfsections(bfd) (elf_tdata(bfd) -> elf_sect_ptr)
#define elf_shstrtab(bfd) (elf_tdata(bfd) -> strtab_ptr)
#define elf_onesymtab(bfd) (elf_tdata(bfd) -> symtab_section)
#define elf_num_locals(bfd) (elf_tdata(bfd) -> num_locals)
#define elf_num_globals(bfd) (elf_tdata(bfd) -> num_globals)
#define elf_symtab_map(bfd) (elf_tdata(bfd) -> symtab_map)
#define core_prpsinfo(bfd) (elf_tdata(bfd) -> prpsinfo)
#define core_prstatus(bfd) (elf_tdata(bfd) -> prstatus)
#define obj_symbols(bfd) ((elf_symbol_type*)(elf_tdata(bfd) -> symbols))
#define obj_raw_syms(bfd) ((Elf_External_Sym*)(elf_tdata(bfd) -> raw_syms))
#define obj_internal_syms(bfd) (elf_tdata(bfd) -> internal_syms)
extern char * elf_string_from_elf_section ();
extern char * elf_get_str_section ();
#define bfd_elf32_mkobject bfd_elf_mkobject
#define bfd_elf64_mkobject bfd_elf_mkobject
#define elf_mkobject bfd_elf_mkobject
#endif /* _LIBELF_H_ */ #endif /* _LIBELF_H_ */