aboutsummaryrefslogtreecommitdiff
path: root/bfd/xcofflink.c
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@airs.com>1995-11-01 18:25:35 +0000
committerIan Lance Taylor <ian@airs.com>1995-11-01 18:25:35 +0000
commitb2193cc59423f8f15c25bd765c774e4791a22123 (patch)
tree2d925195a93529cf7a88db262862c1785ba4c6dd /bfd/xcofflink.c
parentbaabeb74a72eae51dcb5994497bc233584f42353 (diff)
downloadgdb-b2193cc59423f8f15c25bd765c774e4791a22123.zip
gdb-b2193cc59423f8f15c25bd765c774e4791a22123.tar.gz
gdb-b2193cc59423f8f15c25bd765c774e4791a22123.tar.bz2
* 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.
Diffstat (limited to 'bfd/xcofflink.c')
-rw-r--r--bfd/xcofflink.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/bfd/xcofflink.c b/bfd/xcofflink.c
index a3c6612..a76a537 100644
--- a/bfd/xcofflink.c
+++ b/bfd/xcofflink.c
@@ -29,6 +29,14 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#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))
@@ -2130,6 +2138,9 @@ bfd_xcoff_link_record_set (output_bfd, info, harg, size)
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. */
@@ -2166,6 +2177,9 @@ bfd_xcoff_import_symbol (output_bfd, info, harg, val, imppath, impfile,
{
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)
@@ -2249,6 +2263,9 @@ bfd_xcoff_export_symbol (output_bfd, info, harg, syscall)
{
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
@@ -2273,6 +2290,9 @@ bfd_xcoff_link_count_reloc (output_bfd, info, name)
{
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)
@@ -2303,6 +2323,9 @@ bfd_xcoff_record_link_assignment (output_bfd, info, name)
{
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)
@@ -2369,6 +2392,9 @@ bfd_xcoff_size_dynamic_sections (output_bfd, info, libpath, entry,
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;