summaryrefslogtreecommitdiff
path: root/ld/plugin.c
diff options
context:
space:
mode:
authorDave Korn <dave.korn@artimi.com>2011-03-10 10:22:24 +0000
committerDave Korn <dave.korn@artimi.com>2011-03-10 10:22:24 +0000
commit5c5638e13efa1ec2b70b4426dbc6049bb00dded8 (patch)
tree83fdffbcb7cb17aeaf99b95f52d58526ebbc59b7 /ld/plugin.c
parentfed6bc205a9b18640cd24600c135947b6e7cd330 (diff)
downloadbinutils-redhat-5c5638e13efa1ec2b70b4426dbc6049bb00dded8.tar.gz
[PATCH] Do not use dummy bfd suffix for recognition, make it human-readable instead.
ld/ChangeLog: 2011-03-10 Dave Korn <dave.korn.cygwin@gmail.com> * plugin.c (IRONLY_SUFFIX): Revise to nicely human-readable form. (IRONLY_SUFFIX_LEN): Delete. (plugin_get_ir_dummy_bfd): Don't append IRONLY_SUFFIX. (is_ir_dummy_bfd): Don't look for suffix; check claimed flag of enclosing lang input statement instead.
Diffstat (limited to 'ld/plugin.c')
-rw-r--r--ld/plugin.c24
1 files changed, 10 insertions, 14 deletions
diff --git a/ld/plugin.c b/ld/plugin.c
index a68aea3cf7..2fd82910c5 100644
--- a/ld/plugin.c
+++ b/ld/plugin.c
@@ -41,12 +41,8 @@ bfd_boolean report_plugin_symbols;
/* The suffix to append to the name of the real (claimed) object file
when generating a dummy BFD to hold the IR symbols sent from the
- plugin. */
-#define IRONLY_SUFFIX ".ironly\004"
-
-/* This is sizeof an array of chars, not sizeof a const char *. We
- also have to avoid inadvertently counting the trailing NUL. */
-#define IRONLY_SUFFIX_LEN (sizeof (IRONLY_SUFFIX) - 1)
+ plugin. For cosmetic use only; appears in maps, crefs etc. */
+#define IRONLY_SUFFIX " (symbol from plugin)"
/* Stores a single argument passed to a plugin. */
typedef struct plugin_arg
@@ -253,14 +249,14 @@ plugin_get_ir_dummy_bfd (const char *name, bfd *srctemplate)
static bfd_boolean
is_ir_dummy_bfd (const bfd *abfd)
{
- size_t namlen;
-
- if (abfd == NULL)
- return FALSE;
- namlen = strlen (abfd->filename);
- if (namlen < IRONLY_SUFFIX_LEN)
- return FALSE;
- return !strcmp (abfd->filename + namlen - IRONLY_SUFFIX_LEN, IRONLY_SUFFIX);
+ /* ABFD can sometimes legitimately be NULL, e.g. when called from one
+ of the linker callbacks for a symbol in the *ABS* or *UND* sections.
+ Likewise, the usrdata field may be NULL if ABFD was added by the
+ backend without a corresponding input statement, as happens e.g.
+ when processing DT_NEEDED dependencies. */
+ return abfd
+ && abfd->usrdata
+ && ((lang_input_statement_type *)(abfd->usrdata))->claimed;
}
/* Helpers to convert between BFD and GOLD symbol formats. */