/* Plugin control for the GNU linker.
- Copyright 2010, 2011, 2012 Free Software Foundation, Inc.
+ Copyright (C) 2010-2014 Free Software Foundation, Inc.
This file is part of the GNU Binutils.
/* Get the input file information with an open (possibly re-opened)
file descriptor. */
static enum ld_plugin_status
-get_input_file (const void *handle, struct ld_plugin_input_file *file)
+get_input_file (const void *handle ATTRIBUTE_UNUSED,
+ struct ld_plugin_input_file *file ATTRIBUTE_UNUSED)
{
ASSERT (called_plugin);
- handle = handle;
- file = file;
return LDPS_ERR;
}
/* Release the input file. */
static enum ld_plugin_status
-release_input_file (const void *handle)
+release_input_file (const void *handle ATTRIBUTE_UNUSED)
{
ASSERT (called_plugin);
- handle = handle;
return LDPS_ERR;
}
/* If this is a ref, set non_ir_ref. */
else if (bfd_is_und_section (section))
- h->non_ir_ref = TRUE;
+ {
+ /* Replace the undefined dummy bfd with the real one. */
+ if ((h->type == bfd_link_hash_undefined
+ || h->type == bfd_link_hash_undefweak)
+ && (h->u.undef.abfd == NULL
+ || (h->u.undef.abfd->flags & BFD_PLUGIN) != 0))
+ h->u.undef.abfd = abfd;
+ h->non_ir_ref = TRUE;
+ }
/* Otherwise, it must be a new def. Ensure any symbol defined
in an IR dummy BFD takes on a new value from a real BFD.