* elfcode.h (NAME(bfd_elf,size_dynamic_sections)): Add soname

argument, and use it to set DT_SONAME dynamic entry.
	* bfd-in.h (bfd_elf32_size_dynamic_sections): Update prototype.
	(bfd_elf64_size_dynamic_sections): Update prototype.
	* bfd-in2.h: Rebuilt.
This commit is contained in:
Ian Lance Taylor 1994-08-30 16:04:40 +00:00
parent 3b21918aa6
commit 0822b56d66
3 changed files with 65 additions and 23 deletions

View File

@ -1,3 +1,11 @@
Tue Aug 30 11:43:30 1994 Eric Youngdale (ericy@cais.cais.com)
* elfcode.h (NAME(bfd_elf,size_dynamic_sections)): Add soname
argument, and use it to set DT_SONAME dynamic entry.
* bfd-in.h (bfd_elf32_size_dynamic_sections): Update prototype.
(bfd_elf64_size_dynamic_sections): Update prototype.
* bfd-in2.h: Rebuilt.
Fri Aug 26 15:47:57 1994 Ian Lance Taylor (ian@sanguine.cygnus.com) Fri Aug 26 15:47:57 1994 Ian Lance Taylor (ian@sanguine.cygnus.com)
* coffgen.c (coff_real_object_p): Set obj_raw_syment_count. * coffgen.c (coff_real_object_p): Set obj_raw_syment_count.

View File

@ -99,15 +99,16 @@ typedef enum bfd_boolean {bfd_false, bfd_true} boolean;
/* typedef off_t file_ptr; */ /* typedef off_t file_ptr; */
typedef long int file_ptr; typedef long int file_ptr;
/* Support for different sizes of target format ints and addresses. If the /* Support for different sizes of target format ints and addresses.
host implements 64-bit values, it defines BFD_HOST_64_BIT to be the appropriate If the host implements 64-bit values, it defines BFD_HOST_64_BIT to
type. Otherwise, this code will fall back on gcc's "long long" type if gcc be the appropriate type. Otherwise, this code will fall back on
is being used. BFD_HOST_64_BIT must be defined in such a way as to be a valid gcc's "long long" type if gcc is being used. BFD_HOST_64_BIT must
type name by itself or with "unsigned" prefixed. It should be a signed be defined in such a way as to be a valid type name by itself or
type by itself. with "unsigned" prefixed. It should be a signed type by itself.
If neither is the case, then compilation will fail if 64-bit targets are If neither is the case, then compilation will fail if 64-bit
requested. If you don't request any 64-bit targets, you should be safe. */ targets are requested. If you don't request any 64-bit targets,
you should be safe. */
#ifdef BFD64 #ifdef BFD64
@ -213,7 +214,8 @@ typedef enum bfd_format {
#define D_PAGED 0x100 #define D_PAGED 0x100
/* BFD is relaxable (this means that bfd_relax_section may be able to /* BFD is relaxable (this means that bfd_relax_section may be able to
do something). */ do something) (sometimes bfd_relax_section can do something even if
this is not set). */
#define BFD_IS_RELAXABLE 0x200 #define BFD_IS_RELAXABLE 0x200
/* This may be set before writing out a BFD to request using a /* This may be set before writing out a BFD to request using a
@ -271,7 +273,6 @@ typedef struct lineno_cache_entry {
/* object and core file sections */ /* object and core file sections */
#define align_power(addr, align) \ #define align_power(addr, align) \
( ((addr) + ((1<<(align))-1)) & (-1 << (align))) ( ((addr) + ((1<<(align))-1)) & (-1 << (align)))
@ -424,6 +425,18 @@ extern void bfd_hash_traverse PARAMS ((struct bfd_hash_table *,
/* User program access to BFD facilities */ /* User program access to BFD facilities */
/* Direct I/O routines, for programs which know more about the object
file than BFD does. Use higher level routines if possible. */
extern bfd_size_type bfd_read
PARAMS ((PTR, bfd_size_type size, bfd_size_type nitems, bfd *abfd));
extern bfd_size_type bfd_write
PARAMS ((const PTR, bfd_size_type size, bfd_size_type nitems, bfd *abfd));
extern int bfd_seek PARAMS ((bfd *abfd, const file_ptr fp, int direction));
extern long bfd_tell PARAMS ((bfd *abfd));
extern int bfd_flush PARAMS ((bfd *abfd));
extern int bfd_stat PARAMS ((bfd *abfd, struct stat *));
/* Cast from const char * to char * so that caller can assign to /* Cast from const char * to char * so that caller can assign to
a char * without a warning. */ a char * without a warning. */
#define bfd_get_filename(abfd) ((char *) (abfd)->filename) #define bfd_get_filename(abfd) ((char *) (abfd)->filename)
@ -532,9 +545,11 @@ extern boolean bfd_elf32_record_link_assignment
extern boolean bfd_elf64_record_link_assignment extern boolean bfd_elf64_record_link_assignment
PARAMS ((bfd *, struct bfd_link_info *, const char *)); PARAMS ((bfd *, struct bfd_link_info *, const char *));
extern boolean bfd_elf32_size_dynamic_sections extern boolean bfd_elf32_size_dynamic_sections
PARAMS ((bfd *, const char *, struct bfd_link_info *, struct sec **)); PARAMS ((bfd *, const char *, const char *, struct bfd_link_info *,
struct sec **));
extern boolean bfd_elf64_size_dynamic_sections extern boolean bfd_elf64_size_dynamic_sections
PARAMS ((bfd *, const char *, struct bfd_link_info *, struct sec **)); PARAMS ((bfd *, const char *, const char *, struct bfd_link_info *,
struct sec **));
extern void bfd_elf_set_dt_needed_name PARAMS ((bfd *, const char *)); extern void bfd_elf_set_dt_needed_name PARAMS ((bfd *, const char *));
/* SunOS shared library support routines for the linker. */ /* SunOS shared library support routines for the linker. */
@ -1842,6 +1857,9 @@ bfd_copy_private_bfd_data PARAMS ((bfd *ibfd, bfd *obfd));
#define bfd_stat_arch_elt(abfd, stat) \ #define bfd_stat_arch_elt(abfd, stat) \
BFD_SEND (abfd, _bfd_stat_arch_elt,(abfd, stat)) BFD_SEND (abfd, _bfd_stat_arch_elt,(abfd, stat))
#define bfd_update_armap_timestamp(abfd) \
BFD_SEND (abfd, _bfd_update_armap_timestamp, (abfd))
#define bfd_set_arch_mach(abfd, arch, mach)\ #define bfd_set_arch_mach(abfd, arch, mach)\
BFD_SEND ( abfd, _bfd_set_arch_mach, (abfd, arch, mach)) BFD_SEND ( abfd, _bfd_set_arch_mach, (abfd, arch, mach))
@ -2013,7 +2031,8 @@ CAT(NAME,_slurp_extended_name_table),\
CAT(NAME,_truncate_arname),\ CAT(NAME,_truncate_arname),\
CAT(NAME,_write_armap),\ CAT(NAME,_write_armap),\
CAT(NAME,_openr_next_archived_file),\ CAT(NAME,_openr_next_archived_file),\
CAT(NAME,_generic_stat_arch_elt) CAT(NAME,_generic_stat_arch_elt),\
CAT(NAME,_update_armap_timestamp)
boolean (*_bfd_slurp_armap) PARAMS ((bfd *)); boolean (*_bfd_slurp_armap) PARAMS ((bfd *));
boolean (*_bfd_slurp_extended_name_table) PARAMS ((bfd *)); boolean (*_bfd_slurp_extended_name_table) PARAMS ((bfd *));
void (*_bfd_truncate_arname) PARAMS ((bfd *, CONST char *, char *)); void (*_bfd_truncate_arname) PARAMS ((bfd *, CONST char *, char *));
@ -2022,9 +2041,10 @@ CAT(NAME,_generic_stat_arch_elt)
struct orl *map, struct orl *map,
unsigned int orl_count, unsigned int orl_count,
int stridx)); int stridx));
bfd * (*openr_next_archived_file) PARAMS ((bfd *arch, bfd *prev)); bfd * (*openr_next_archived_file) PARAMS ((bfd *arch, bfd *prev));
int (*_bfd_stat_arch_elt) PARAMS ((bfd *, struct stat *)); int (*_bfd_stat_arch_elt) PARAMS ((bfd *, struct stat *));
boolean (*_bfd_update_armap_timestamp) PARAMS ((bfd *));
/* Entry points used for symbols. */ /* Entry points used for symbols. */
#define BFD_JUMP_TABLE_SYMBOLS(NAME)\ #define BFD_JUMP_TABLE_SYMBOLS(NAME)\
CAT(NAME,_get_symtab_upper_bound),\ CAT(NAME,_get_symtab_upper_bound),\

View File

@ -1211,16 +1211,18 @@ elf_fake_sections (abfd, asect, ignore)
this_hdr->sh_type = SHT_DYNAMIC; this_hdr->sh_type = SHT_DYNAMIC;
this_hdr->sh_entsize = sizeof (Elf_External_Dyn); this_hdr->sh_entsize = sizeof (Elf_External_Dyn);
} }
else if (strncmp (asect->name, ".rel.", 5) == 0) else if (strncmp (asect->name, ".rela", 5) == 0
{ && get_elf_backend_data (abfd)->use_rela_p)
this_hdr->sh_type = SHT_REL;
this_hdr->sh_entsize = sizeof (Elf_External_Rel);
}
else if (strncmp (asect->name, ".rela.", 6) == 0)
{ {
this_hdr->sh_type = SHT_RELA; this_hdr->sh_type = SHT_RELA;
this_hdr->sh_entsize = sizeof (Elf_External_Rela); this_hdr->sh_entsize = sizeof (Elf_External_Rela);
} }
else if (strncmp (asect->name, ".rel", 4) == 0
&& ! get_elf_backend_data (abfd)->use_rela_p)
{
this_hdr->sh_type = SHT_REL;
this_hdr->sh_entsize = sizeof (Elf_External_Rel);
}
else if (strcmp (asect->name, ".note") == 0) else if (strcmp (asect->name, ".note") == 0)
this_hdr->sh_type = SHT_NOTE; this_hdr->sh_type = SHT_NOTE;
else if (strncmp (asect->name, ".stab", 5) == 0 else if (strncmp (asect->name, ".stab", 5) == 0
@ -4857,8 +4859,10 @@ static const size_t elf_buckets[] =
addresses of the various sections. */ addresses of the various sections. */
boolean boolean
NAME(bfd_elf,size_dynamic_sections) (output_bfd, rpath, info, sinterpptr) NAME(bfd_elf,size_dynamic_sections) (output_bfd, soname, rpath, info,
sinterpptr)
bfd *output_bfd; bfd *output_bfd;
const char *soname;
const char *rpath; const char *rpath;
struct bfd_link_info *info; struct bfd_link_info *info;
asection **sinterpptr; asection **sinterpptr;
@ -4933,6 +4937,16 @@ NAME(bfd_elf,size_dynamic_sections) (output_bfd, rpath, info, sinterpptr)
elf_hash_table (info)->bucketcount = bucketcount; elf_hash_table (info)->bucketcount = bucketcount;
if (soname != NULL)
{
unsigned long indx;
indx = bfd_add_to_strtab (dynobj, elf_hash_table (info)->dynstr, soname);
if (indx == (unsigned long) -1
|| ! elf_add_dynamic_entry (info, DT_SONAME, indx))
return false;
}
if (rpath != NULL) if (rpath != NULL)
{ {
unsigned long indx; unsigned long indx;