diff options
author | Ian Lance Taylor <ian@airs.com> | 1995-02-09 17:19:53 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@airs.com> | 1995-02-09 17:19:53 +0000 |
commit | c93e959c81b432b128fe06f8aa6c397546416148 (patch) | |
tree | f581961924dcff9e3821271deb7b7fd46b267410 /bfd/i386linux.c | |
parent | 62e5acdce987cc02510001f0ba4c0001675b97bf (diff) | |
download | gdb-c93e959c81b432b128fe06f8aa6c397546416148.zip gdb-c93e959c81b432b128fe06f8aa6c397546416148.tar.gz gdb-c93e959c81b432b128fe06f8aa6c397546416148.tar.bz2 |
* i386linux.c (NEEDS_SHRLIB): Define.
(linux_tally_symbols): Crash if a NEEDS_SHRLIB symbol is
undefined. From hjl@nynexst.com (H.J. Lu).
Diffstat (limited to 'bfd/i386linux.c')
-rw-r--r-- | bfd/i386linux.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/bfd/i386linux.c b/bfd/i386linux.c index 91d4143..e5162c4 100644 --- a/bfd/i386linux.c +++ b/bfd/i386linux.c @@ -94,6 +94,12 @@ i386linux_write_object_contents (abfd) #define IS_PLT_SYM(name) \ (strncmp (name, PLT_REF_PREFIX, sizeof PLT_REF_PREFIX - 1) == 0) +/* This string is used to generate specialized error messages. */ + +#ifndef NEEDS_SHRLIB +#define NEEDS_SHRLIB "__NEEDS_SHRLIB_" +#endif + /* This special symbol is a set vector that contains a list of pointers to fixup tables. It will be present in any dynamicly linked file. The linker generated fixup table should also be added @@ -422,6 +428,36 @@ linux_tally_symbols (h, data) struct linux_link_hash_entry *h1, *h2; boolean exists; + if (h->root.root.type == bfd_link_hash_undefined + && strncmp (h->root.root.root.string, NEEDS_SHRLIB, + sizeof NEEDS_SHRLIB - 1) == 0) + { + const char *name; + char *p; + char *alloc = NULL; + + name = h->root.root.root.string + sizeof NEEDS_SHRLIB - 1; + p = strrchr (name, '_'); + if (p != NULL) + alloc = (char *) malloc (strlen (name) + 1); + + /* FIXME! BFD should not call printf! */ + if (p == NULL || alloc == NULL) + fprintf (stderr, "Output file requires shared library `%s'\n", name); + else + { + strcpy (alloc, name); + p = strrchr (alloc, '_'); + *p++ = '\0'; + fprintf (stderr, + "Output file requires shared library `%s.so.%s'\n", + alloc, p); + free (alloc); + } + + abort (); + } + /* If this symbol is not a PLT/GOT, we do not even need to look at it */ is_plt = IS_PLT_SYM (h->root.root.root.string); |