Wed Nov 1 11:45:07 1995 Ian Lance Taylor <ian@cygnus.com>
+ * elf.c (bfd_elf_set_dt_needed_name): Don't do anything if the
+ BFD is not of the right type.
+ (bfd_elf_get_needed_list): Likewise.
+ * i386linux.c (bfd_linux_size_dynamic_sections): Likewise.
+ * sunos.c (bfd_sunos_get_needed_list): Likewise.
+ * xcofflink.c (XCOFF_XVECP): Define.
+ (bfd_xcoff_link_record_set): Don't do anything if the BFD is not
+ of the right type.
+ (bfd_xcoff_import_symbol): Likewise.
+ (bfd_xcoff_export_symbol): Likewise.
+ (bfd_xcoff_link_count_reloc): Likewise.
+ (bfd_xcoff_record_link_assignment): Likewise.
+ (bfd_xcoff_size_dynamic_sections): Likewise.
+
* sunos.c (sunos_scan_ext_relocs): Only check the reloc symbol
table index against the number of symbols for a base relative
reloc.
bfd *abfd;
const char *name;
{
- elf_dt_needed_name (abfd) = name;
+ if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
+ elf_dt_needed_name (abfd) = name;
}
/* Get the list of DT_NEEDED entries for a link. */
bfd *abfd;
struct bfd_link_info *info;
{
+ if (info->hash->creator->flavour != bfd_target_elf_flavour)
+ return NULL;
return elf_hash_table (info)->needed;
}
\f
#define STRING_SIZE_SIZE (4)
+/* In order to support linking different object file formats into an
+ XCOFF format, we need to be able to determine whether a particular
+ bfd_target is an XCOFF vector. FIXME: We need to rethink this
+ whole approach. */
+#define XCOFF_XVECP(xv) \
+ (strcmp ((xv)->name, "aixcoff-rs6000") == 0 \
+ || strcmp ((xv)->name, "xcoff-powermac") == 0)
+
/* Get the XCOFF hash table entries for a BFD. */
#define obj_xcoff_sym_hashes(bfd) \
((struct xcoff_link_hash_entry **) obj_coff_sym_hashes (bfd))
struct xcoff_link_hash_entry *h = (struct xcoff_link_hash_entry *) harg;
struct xcoff_link_size_list *n;
+ if (! XCOFF_XVECP (output_bfd->xvec))
+ return true;
+
/* This will hardly ever be called. I don't want to burn four bytes
per global symbol, so instead the size is kept on a linked list
attached to the hash table. */
{
struct xcoff_link_hash_entry *h = (struct xcoff_link_hash_entry *) harg;
+ if (! XCOFF_XVECP (output_bfd->xvec))
+ return true;
+
h->flags |= XCOFF_IMPORT;
if (val != (bfd_vma) -1)
{
struct xcoff_link_hash_entry *h = (struct xcoff_link_hash_entry *) harg;
+ if (! XCOFF_XVECP (output_bfd->xvec))
+ return true;
+
h->flags |= XCOFF_EXPORT;
/* FIXME: I'm not at all sure what syscall is supposed to mean, so
{
struct xcoff_link_hash_entry *h;
+ if (! XCOFF_XVECP (output_bfd->xvec))
+ return true;
+
h = xcoff_link_hash_lookup (xcoff_hash_table (info), name, false, false,
false);
if (h == NULL)
{
struct xcoff_link_hash_entry *h;
+ if (! XCOFF_XVECP (output_bfd->xvec))
+ return true;
+
h = xcoff_link_hash_lookup (xcoff_hash_table (info), name, true, true,
false);
if (h == NULL)
struct bfd_strtab_hash *debug_strtab;
bfd_byte *debug_contents = NULL;
+ if (! XCOFF_XVECP (output_bfd->xvec))
+ return true;
+
ldinfo.failed = false;
ldinfo.output_bfd = output_bfd;
ldinfo.info = info;