Allow copy_private_symbol_data to replace osym if a target desires.
Change isym similarly for symmetry. The idea is to make it possible
to give the asymbol an output target specific extension. Some
targets, eg. som, use such an extension when outputting symbols,
behaving badly if the input object is not som. There are no
functional changes in this patch; It just changes the signatures.
bfd/
* elf-bfd.h (_bfd_elf_copy_private_symbol_data): Replace
asymbol* params with asymbol**.
* elf.c (_bfd_elf_copy_private_symbol_data): Likewise.
* libbfd-in.h (_bfd_bool_bfd_asymbol_bfd_asymbol_true): Likewise.
* libbfd.c (_bfd_bool_bfd_asymbol_bfd_asymbol_true): Likewise.
* mach-o.c (bfd_mach_o_bfd_copy_private_symbol_data): Likewise.
* mach-o.h (bfd_mach_o_bfd_copy_private_symbol_data): Likewise.
* plugin.c (bfd_plugin_bfd_copy_private_symbol_data): Likewise.
* som.c (som_bfd_copy_private_symbol_data): Likewise.
* targets.c (bfd_target <_bfd_copy_private_symbol_data>): Likewise.
* bfd-in2.h: Regenerate.
* libbfd.h: Regenerate.
binutils/
* objcopy.c (copy_object): Adjust bfd_copy_private_symbol_data call.
gas/
* symbols.c symbol_clone): Adjust bfd_copy_private_symbol_data call.
struct bfd_link_info *);
/* Called to copy BFD private symbol data from one symbol
to another. */
- bool (*_bfd_copy_private_symbol_data) (bfd *, asymbol *,
- bfd *, asymbol *);
+ bool (*_bfd_copy_private_symbol_data) (bfd *, asymbol **,
+ bfd *, asymbol **);
/* Called to copy BFD private header data from one object file
to another. */
bool (*_bfd_copy_private_header_data) (bfd *, bfd *);
extern bool _bfd_elf_copy_private_header_data
(bfd *, bfd *) ATTRIBUTE_HIDDEN;
extern bool _bfd_elf_copy_private_symbol_data
- (bfd *, asymbol *, bfd *, asymbol *) ATTRIBUTE_HIDDEN;
+ (bfd *, asymbol **, bfd *, asymbol **) ATTRIBUTE_HIDDEN;
extern bool _bfd_elf_copy_private_section_data
(bfd *, asection *, bfd *, asection *, struct bfd_link_info *)
ATTRIBUTE_HIDDEN;
bool
_bfd_elf_copy_private_symbol_data (bfd *ibfd,
- asymbol *isymarg,
+ asymbol **isymarg,
bfd *obfd ATTRIBUTE_UNUSED,
- asymbol *osymarg)
+ asymbol **osymarg)
{
if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour)
return true;
- elf_symbol_type *isym = elf_symbol_from (isymarg);
- elf_symbol_type *osym = elf_symbol_from (osymarg);
+ elf_symbol_type *isym = elf_symbol_from (*isymarg);
+ elf_symbol_type *osym = elf_symbol_from (*osymarg);
if (isym != NULL
&& isym->internal_elf_sym.st_shndx != 0
&& osym != NULL
extern bool _bfd_bool_bfd_asection_bfd_asection_true
(bfd *, asection *, bfd *, asection *) ATTRIBUTE_HIDDEN;
extern bool _bfd_bool_bfd_asymbol_bfd_asymbol_true
- (bfd *, asymbol *, bfd *, asymbol *) ATTRIBUTE_HIDDEN;
+ (bfd *, asymbol **, bfd *, asymbol **) ATTRIBUTE_HIDDEN;
extern bool _bfd_bool_bfd_ptr_true
(bfd *, void *) ATTRIBUTE_HIDDEN;
extern void *_bfd_ptr_bfd_null_error
bool
_bfd_bool_bfd_asymbol_bfd_asymbol_true (bfd *ibfd ATTRIBUTE_UNUSED,
- asymbol *isym ATTRIBUTE_UNUSED,
+ asymbol **isym ATTRIBUTE_UNUSED,
bfd *obfd ATTRIBUTE_UNUSED,
- asymbol *osym ATTRIBUTE_UNUSED)
+ asymbol **osym ATTRIBUTE_UNUSED)
{
return true;
}
extern bool _bfd_bool_bfd_asection_bfd_asection_true
(bfd *, asection *, bfd *, asection *) ATTRIBUTE_HIDDEN;
extern bool _bfd_bool_bfd_asymbol_bfd_asymbol_true
- (bfd *, asymbol *, bfd *, asymbol *) ATTRIBUTE_HIDDEN;
+ (bfd *, asymbol **, bfd *, asymbol **) ATTRIBUTE_HIDDEN;
extern bool _bfd_bool_bfd_ptr_true
(bfd *, void *) ATTRIBUTE_HIDDEN;
extern void *_bfd_ptr_bfd_null_error
bool
bfd_mach_o_bfd_copy_private_symbol_data (bfd *ibfd,
- asymbol *isymbol,
+ asymbol **isymbol,
bfd *obfd ATTRIBUTE_UNUSED,
- asymbol *osymbol)
+ asymbol **osymbol)
{
if (ibfd->xvec->flavour != bfd_target_mach_o_flavour)
return true;
- bfd_mach_o_asymbol *os = (bfd_mach_o_asymbol *) osymbol;
- bfd_mach_o_asymbol *is = (bfd_mach_o_asymbol *) isymbol;
+ bfd_mach_o_asymbol *os = (bfd_mach_o_asymbol *) *osymbol;
+ bfd_mach_o_asymbol *is = (bfd_mach_o_asymbol *) *isymbol;
os->n_type = is->n_type;
os->n_sect = is->n_sect;
os->n_desc = is->n_desc;
bfd_mach_o_load_command **);
bool bfd_mach_o_new_section_hook (bfd *, asection *);
bool bfd_mach_o_write_contents (bfd *);
-bool bfd_mach_o_bfd_copy_private_symbol_data (bfd *, asymbol *,
- bfd *, asymbol *);
+bool bfd_mach_o_bfd_copy_private_symbol_data (bfd *, asymbol **,
+ bfd *, asymbol **);
bool bfd_mach_o_bfd_copy_private_section_data (bfd *, asection *,
bfd *, asection *,
struct bfd_link_info *);
static bool
bfd_plugin_bfd_copy_private_symbol_data (bfd *ibfd ATTRIBUTE_UNUSED,
- asymbol *isymbol ATTRIBUTE_UNUSED,
+ asymbol **isymbol ATTRIBUTE_UNUSED,
bfd *obfd ATTRIBUTE_UNUSED,
- asymbol *osymbol ATTRIBUTE_UNUSED)
+ asymbol **osymbol ATTRIBUTE_UNUSED)
{
BFD_ASSERT (0);
return true;
static bool
som_bfd_copy_private_symbol_data (bfd *ibfd,
- asymbol *isymbol,
+ asymbol **isymbol,
bfd *obfd ATTRIBUTE_UNUSED,
- asymbol *osymbol)
+ asymbol **osymbol)
{
/* One day we may try to grok other private data. */
if (ibfd->xvec->flavour != bfd_target_som_flavour)
/* The only private information we need to copy is the argument relocation
bits. */
- struct som_symbol *input_symbol = (struct som_symbol *) isymbol;
- struct som_symbol *output_symbol = (struct som_symbol *) osymbol;
+ struct som_symbol *input_symbol = (struct som_symbol *) *isymbol;
+ struct som_symbol *output_symbol = (struct som_symbol *) *osymbol;
output_symbol->tc_data.ap.hppa_arg_reloc =
input_symbol->tc_data.ap.hppa_arg_reloc;
. struct bfd_link_info *);
. {* Called to copy BFD private symbol data from one symbol
. to another. *}
-. bool (*_bfd_copy_private_symbol_data) (bfd *, asymbol *,
-. bfd *, asymbol *);
+. bool (*_bfd_copy_private_symbol_data) (bfd *, asymbol **,
+. bfd *, asymbol **);
. {* Called to copy BFD private header data from one object file
. to another. *}
. bool (*_bfd_copy_private_header_data) (bfd *, bfd *);
}
for (long s = 0; s < symcount; s++)
- if (!bfd_copy_private_symbol_data (ibfd, osympp[s], obfd, osympp[s]))
+ if (!bfd_copy_private_symbol_data (ibfd, osympp + s, obfd, osympp + s))
goto fail;
if (dhandle != NULL)
bsymnew->name = bsymorg->name;
bsymnew->flags = bsymorg->flags & ~BSF_SECTION_SYM;
bsymnew->section = bsymorg->section;
- bfd_copy_private_symbol_data (bfd_asymbol_bfd (bsymorg), bsymorg,
- bfd_asymbol_bfd (bsymnew), bsymnew);
+ bfd_copy_private_symbol_data (bfd_asymbol_bfd (bsymorg), &orgsymP->bsym,
+ bfd_asymbol_bfd (bsymnew), &newsymP->bsym);
#ifdef obj_symbol_clone_hook
obj_symbol_clone_hook (newsymP, orgsymP);