+2011-10-06 Alan Modra <amodra@gmail.com>
+
+ PR ld/13329
+ * plugin.c (tv_header_tags): Add LDPT_GET_SYMBOLS_V2.
+ (set_tv_header): Handle it. Adjust LDPT_GET_SYMBOLS. Return void.
+ (get_symbols): Add def_ironly_exp param. Return that value for
+ syms exported from shared libs.
+ (get_symbols_v1, get_symbols_v2): New wrapper functions.
+ * testplug.c: Update for above changes.
+
2011-09-27 Kai Tietz <ktietz@redhat.com>
* scripttempl/pe.sc (.text): Add support for
LDPT_GET_INPUT_FILE,
LDPT_RELEASE_INPUT_FILE,
LDPT_GET_SYMBOLS,
+ LDPT_GET_SYMBOLS_V2,
LDPT_ADD_INPUT_FILE,
LDPT_ADD_INPUT_LIBRARY,
LDPT_SET_EXTRA_LIBRARY_PATH
/* Get the symbol resolution info for a plugin-claimed input file. */
static enum ld_plugin_status
-get_symbols (const void *handle, int nsyms, struct ld_plugin_symbol *syms)
+get_symbols (const void *handle, int nsyms, struct ld_plugin_symbol *syms,
+ int def_ironly_exp)
{
const bfd *abfd = handle;
int n;
+
ASSERT (called_plugin);
for (n = 0; n < nsyms; n++)
{
struct bfd_link_hash_entry *blhe;
- bfd_boolean ironly;
asection *owner_sec;
+ int res;
+
if (syms[n].def != LDPK_UNDEF)
blhe = bfd_link_hash_lookup (link_info.hash, syms[n].name,
FALSE, FALSE, TRUE);
syms[n].name, FALSE, FALSE, TRUE);
if (!blhe)
{
- syms[n].resolution = LDPR_UNKNOWN;
+ res = LDPR_UNKNOWN;
goto report_symbol;
}
if (blhe->type == bfd_link_hash_undefined
|| blhe->type == bfd_link_hash_undefweak)
{
- syms[n].resolution = LDPR_UNDEF;
+ res = LDPR_UNDEF;
goto report_symbol;
}
if (blhe->type != bfd_link_hash_defined
? blhe->u.c.p->section
: blhe->u.def.section);
- /* We need to know if the sym is referenced from non-IR files. Or
- even potentially-referenced, perhaps in a future final link if
- this is a partial one, perhaps dynamically at load-time if the
- symbol is externally visible. */
- ironly = !(blhe->non_ir_ref
- || is_visible_from_outside (&syms[n], owner_sec, blhe));
/* If it was originally undefined or common, then it has been
resolved; determine how. */
|| syms[n].def == LDPK_COMMON)
{
if (owner_sec->owner == link_info.output_bfd)
- syms[n].resolution = LDPR_RESOLVED_EXEC;
+ res = LDPR_RESOLVED_EXEC;
else if (owner_sec->owner == abfd)
- syms[n].resolution = (ironly
- ? LDPR_PREVAILING_DEF_IRONLY
- : LDPR_PREVAILING_DEF);
+ res = LDPR_PREVAILING_DEF_IRONLY;
else if (is_ir_dummy_bfd (owner_sec->owner))
- syms[n].resolution = LDPR_RESOLVED_IR;
+ res = LDPR_RESOLVED_IR;
else if (owner_sec->owner != NULL
&& (owner_sec->owner->flags & DYNAMIC) != 0)
- syms[n].resolution = LDPR_RESOLVED_DYN;
+ res = LDPR_RESOLVED_DYN;
else
- syms[n].resolution = LDPR_RESOLVED_EXEC;
- goto report_symbol;
+ res = LDPR_RESOLVED_EXEC;
}
/* Was originally def, or weakdef. Does it prevail? If the
owner is the original dummy bfd that supplied it, then this
is the definition that has prevailed. */
- if (owner_sec->owner == link_info.output_bfd)
- syms[n].resolution = LDPR_PREEMPTED_REG;
+ else if (owner_sec->owner == link_info.output_bfd)
+ res = LDPR_PREEMPTED_REG;
else if (owner_sec->owner == abfd)
- {
- syms[n].resolution = (ironly
- ? LDPR_PREVAILING_DEF_IRONLY
- : LDPR_PREVAILING_DEF);
- goto report_symbol;
- }
+ res = LDPR_PREVAILING_DEF_IRONLY;
/* Was originally def, weakdef, or common, but has been pre-empted. */
- syms[n].resolution = (is_ir_dummy_bfd (owner_sec->owner)
- ? LDPR_PREEMPTED_IR
- : LDPR_PREEMPTED_REG);
+ else if (is_ir_dummy_bfd (owner_sec->owner))
+ res = LDPR_PREEMPTED_IR;
+ else
+ res = LDPR_PREEMPTED_REG;
+
+ if (res == LDPR_PREVAILING_DEF_IRONLY)
+ {
+ /* We need to know if the sym is referenced from non-IR files. Or
+ even potentially-referenced, perhaps in a future final link if
+ this is a partial one, perhaps dynamically at load-time if the
+ symbol is externally visible. */
+ if (blhe->non_ir_ref)
+ res = LDPR_PREVAILING_DEF;
+ else if (is_visible_from_outside (&syms[n], owner_sec, blhe))
+ res = def_ironly_exp;
+ }
report_symbol:
+ syms[n].resolution = res;
if (report_plugin_symbols)
einfo (_("%P: %B: symbol `%s' "
"definition: %d, visibility: %d, resolution: %d\n"),
abfd, syms[n].name,
- syms[n].def, syms[n].visibility, syms[n].resolution);
+ syms[n].def, syms[n].visibility, res);
}
return LDPS_OK;
}
+static enum ld_plugin_status
+get_symbols_v1 (const void *handle, int nsyms, struct ld_plugin_symbol *syms)
+{
+ return get_symbols (handle, nsyms, syms, LDPR_PREVAILING_DEF);
+}
+
+static enum ld_plugin_status
+get_symbols_v2 (const void *handle, int nsyms, struct ld_plugin_symbol *syms)
+{
+ return get_symbols (handle, nsyms, syms, LDPR_PREVAILING_DEF_IRONLY_EXP);
+}
+
/* Add a new (real) input file generated by a plugin. */
static enum ld_plugin_status
add_input_file (const char *pathname)
}
/* Helper to size leading part of tv array and set it up. */
-static size_t
+static void
set_tv_header (struct ld_plugin_tv *tv)
{
size_t i;
static const unsigned int major = (unsigned)(BFD_VERSION / 100000000UL);
static const unsigned int minor = (unsigned)(BFD_VERSION / 1000000UL) % 100;
- if (!tv)
- return tv_header_size;
-
for (i = 0; i < tv_header_size; i++)
{
tv[i].tv_tag = tv_header_tags[i];
TVU(release_input_file) = release_input_file;
break;
case LDPT_GET_SYMBOLS:
- TVU(get_symbols) = get_symbols;
+ TVU(get_symbols) = get_symbols_v1;
+ break;
+ case LDPT_GET_SYMBOLS_V2:
+ TVU(get_symbols) = get_symbols_v2;
break;
case LDPT_ADD_INPUT_FILE:
TVU(add_input_file) = add_input_file;
}
#undef TVU
}
- return tv_header_size;
}
/* Append the per-plugin args list and trailing LDPT_NULL to tv. */
ADDENTRY(LDPT_REGISTER_CLEANUP_HOOK),
ADDENTRY(LDPT_ADD_SYMBOLS),
ADDENTRY(LDPT_GET_SYMBOLS),
+ ADDENTRY(LDPT_GET_SYMBOLS_V2),
ADDENTRY(LDPT_ADD_INPUT_FILE),
ADDENTRY(LDPT_MESSAGE),
ADDENTRY(LDPT_GET_INPUT_FILE),
static ld_plugin_register_cleanup tv_register_cleanup = 0;
static ld_plugin_add_symbols tv_add_symbols = 0;
static ld_plugin_get_symbols tv_get_symbols = 0;
+static ld_plugin_get_symbols tv_get_symbols_v2 = 0;
static ld_plugin_add_input_file tv_add_input_file = 0;
static ld_plugin_message tv_message = 0;
static ld_plugin_get_input_file tv_get_input_file = 0;
case LDPT_REGISTER_CLEANUP_HOOK:
case LDPT_ADD_SYMBOLS:
case LDPT_GET_SYMBOLS:
+ case LDPT_GET_SYMBOLS_V2:
case LDPT_ADD_INPUT_FILE:
case LDPT_MESSAGE:
case LDPT_GET_INPUT_FILE:
case LDPT_GET_SYMBOLS:
SETVAR(tv_get_symbols);
break;
+ case LDPT_GET_SYMBOLS_V2:
+ tv_get_symbols_v2 = tv->tv_u.tv_get_symbols;
+ break;
case LDPT_ADD_INPUT_FILE:
SETVAR(tv_add_input_file);
break;
"LDPR_RESOLVED_IR",
"LDPR_RESOLVED_EXEC",
"LDPR_RESOLVED_DYN",
+ "LDPR_PREVAILING_DEF_IRONLY_EXP",
};
claim_file_t *claimfile = dumpresolutions ? claimfiles_list : NULL;
add_file_t *addfile = addfiles_list;
{
enum ld_plugin_status rv;
int n;
- if (claimfile->n_syms_used && !tv_get_symbols)
+ if (claimfile->n_syms_used && !tv_get_symbols_v2)
return LDPS_ERR;
else if (!claimfile->n_syms_used)
continue;
- rv = tv_get_symbols (claimfile->file.handle, claimfile->n_syms_used,
- claimfile->symbols);
+ rv = tv_get_symbols_v2 (claimfile->file.handle, claimfile->n_syms_used,
+ claimfile->symbols);
if (rv != LDPS_OK)
return rv;
for (n = 0; n < claimfile->n_syms_used; n++)
+2011-10-06 Alan Modra <amodra@gmail.com>
+
+ * ld-plugin/plugin-1.d, * ld-plugin/plugin-2.d, * ld-plugin/plugin-3.d,
+ * ld-plugin/plugin-4.d, * ld-plugin/plugin-5.d, * ld-plugin/plugin-6.d,
+ * ld-plugin/plugin-7.d, * ld-plugin/plugin-8.d, * ld-plugin/plugin-9.d,
+ * ld-plugin/plugin-10.d, * ld-plugin/plugin-11.d: Update.
+
2011-10-05 Nick Clifton <nickc@redhat.com>
* ld-scripts/phdrs.exp: Expect to fail for the RX.
Hello from testplugin.
-tv\[0\]: LDPT_MESSAGE func@0x.*
-tv\[1\]: LDPT_API_VERSION value 0x1 \(1\)
-tv\[2\]: LDPT_GNU_LD_VERSION value 0x.*
-tv\[3\]: LDPT_LINKER_OUTPUT value 0x1 \(1\)
-tv\[4\]: LDPT_OUTPUT_NAME 'tmpdir/main.x'
-tv\[5\]: LDPT_REGISTER_CLAIM_FILE_HOOK func@0x.*
-tv\[6\]: LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK func@0x.*
-tv\[7\]: LDPT_REGISTER_CLEANUP_HOOK func@0x.*
-tv\[8\]: LDPT_ADD_SYMBOLS func@0x.*
-tv\[9\]: LDPT_GET_INPUT_FILE func@0x.*
-tv\[10\]: LDPT_RELEASE_INPUT_FILE func@0x.*
-tv\[11\]: LDPT_GET_SYMBOLS func@0x.*
-tv\[12\]: LDPT_ADD_INPUT_FILE func@0x.*
-tv\[13\]: LDPT_ADD_INPUT_LIBRARY func@0x.*
-tv\[14\]: LDPT_SET_EXTRA_LIBRARY_PATH func@0x.*
-tv\[15\]: LDPT_NULL value 0x0 \(0\)
+.*: LDPT_MESSAGE func@0x.*
+.*: LDPT_API_VERSION value 0x1 \(1\)
+.*: LDPT_GNU_LD_VERSION value 0x.*
+.*: LDPT_LINKER_OUTPUT value 0x1 \(1\)
+.*: LDPT_OUTPUT_NAME 'tmpdir/main.x'
+.*: LDPT_REGISTER_CLAIM_FILE_HOOK func@0x.*
+.*: LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK func@0x.*
+.*: LDPT_REGISTER_CLEANUP_HOOK func@0x.*
+.*: LDPT_ADD_SYMBOLS func@0x.*
+.*: LDPT_GET_INPUT_FILE func@0x.*
+.*: LDPT_RELEASE_INPUT_FILE func@0x.*
+.*: LDPT_GET_SYMBOLS func@0x.*
+.*: LDPT_GET_SYMBOLS_V2 func@0x.*
+.*: LDPT_ADD_INPUT_FILE func@0x.*
+.*: LDPT_ADD_INPUT_LIBRARY func@0x.*
+.*: LDPT_SET_EXTRA_LIBRARY_PATH func@0x.*
+.*: LDPT_NULL value 0x0 \(0\)
#...
Hello from testplugin.
-tv\[0\]: LDPT_MESSAGE func@0x.*
-tv\[1\]: LDPT_API_VERSION value 0x1 \(1\)
-tv\[2\]: LDPT_GNU_LD_VERSION value 0x.*
-tv\[3\]: LDPT_LINKER_OUTPUT value 0x1 \(1\)
-tv\[4\]: LDPT_OUTPUT_NAME 'tmpdir/main.x'
-tv\[5\]: LDPT_REGISTER_CLAIM_FILE_HOOK func@0x.*
-tv\[6\]: LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK func@0x.*
-tv\[7\]: LDPT_REGISTER_CLEANUP_HOOK func@0x.*
-tv\[8\]: LDPT_ADD_SYMBOLS func@0x.*
-tv\[9\]: LDPT_GET_INPUT_FILE func@0x.*
-tv\[10\]: LDPT_RELEASE_INPUT_FILE func@0x.*
-tv\[11\]: LDPT_GET_SYMBOLS func@0x.*
-tv\[12\]: LDPT_ADD_INPUT_FILE func@0x.*
-tv\[13\]: LDPT_ADD_INPUT_LIBRARY func@0x.*
-tv\[14\]: LDPT_SET_EXTRA_LIBRARY_PATH func@0x.*
-tv\[15\]: LDPT_OPTION 'registerclaimfile'
-tv\[16\]: LDPT_OPTION 'registerallsymbolsread'
-tv\[17\]: LDPT_OPTION 'registercleanup'
-tv\[18\]: LDPT_OPTION 'claim:tmpdir/func.o'
-tv\[19\]: LDPT_OPTION 'sym:_?func::0:0:0'
-tv\[20\]: LDPT_OPTION 'sym:_?func2::0:0:0'
-tv\[21\]: LDPT_OPTION 'dumpresolutions'
-tv\[22\]: LDPT_OPTION 'add:tmpdir/func.o'
-tv\[23\]: LDPT_NULL value 0x0 \(0\)
+.*: LDPT_MESSAGE func@0x.*
+.*: LDPT_API_VERSION value 0x1 \(1\)
+.*: LDPT_GNU_LD_VERSION value 0x.*
+.*: LDPT_LINKER_OUTPUT value 0x1 \(1\)
+.*: LDPT_OUTPUT_NAME 'tmpdir/main.x'
+.*: LDPT_REGISTER_CLAIM_FILE_HOOK func@0x.*
+.*: LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK func@0x.*
+.*: LDPT_REGISTER_CLEANUP_HOOK func@0x.*
+.*: LDPT_ADD_SYMBOLS func@0x.*
+.*: LDPT_GET_INPUT_FILE func@0x.*
+.*: LDPT_RELEASE_INPUT_FILE func@0x.*
+.*: LDPT_GET_SYMBOLS func@0x.*
+.*: LDPT_GET_SYMBOLS_V2 func@0x.*
+.*: LDPT_ADD_INPUT_FILE func@0x.*
+.*: LDPT_ADD_INPUT_LIBRARY func@0x.*
+.*: LDPT_SET_EXTRA_LIBRARY_PATH func@0x.*
+.*: LDPT_OPTION 'registerclaimfile'
+.*: LDPT_OPTION 'registerallsymbolsread'
+.*: LDPT_OPTION 'registercleanup'
+.*: LDPT_OPTION 'claim:tmpdir/func.o'
+.*: LDPT_OPTION 'sym:_?func::0:0:0'
+.*: LDPT_OPTION 'sym:_?func2::0:0:0'
+.*: LDPT_OPTION 'dumpresolutions'
+.*: LDPT_OPTION 'add:tmpdir/func.o'
+.*: LDPT_NULL value 0x0 \(0\)
#...
hook called: claim_file tmpdir/main.o \[@0/.* not claimed
hook called: claim_file tmpdir/func.o \[@0/.* CLAIMED
Hello from testplugin.
-tv\[0\]: LDPT_MESSAGE func@0x.*
-tv\[1\]: LDPT_API_VERSION value 0x1 \(1\)
-tv\[2\]: LDPT_GNU_LD_VERSION value 0x.*
-tv\[3\]: LDPT_LINKER_OUTPUT value 0x1 \(1\)
-tv\[4\]: LDPT_OUTPUT_NAME 'tmpdir/main.x'
-tv\[5\]: LDPT_REGISTER_CLAIM_FILE_HOOK func@0x.*
-tv\[6\]: LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK func@0x.*
-tv\[7\]: LDPT_REGISTER_CLEANUP_HOOK func@0x.*
-tv\[8\]: LDPT_ADD_SYMBOLS func@0x.*
-tv\[9\]: LDPT_GET_INPUT_FILE func@0x.*
-tv\[10\]: LDPT_RELEASE_INPUT_FILE func@0x.*
-tv\[11\]: LDPT_GET_SYMBOLS func@0x.*
-tv\[12\]: LDPT_ADD_INPUT_FILE func@0x.*
-tv\[13\]: LDPT_ADD_INPUT_LIBRARY func@0x.*
-tv\[14\]: LDPT_SET_EXTRA_LIBRARY_PATH func@0x.*
-tv\[15\]: LDPT_OPTION 'registerclaimfile'
-tv\[16\]: LDPT_OPTION 'registerallsymbolsread'
-tv\[17\]: LDPT_OPTION 'registercleanup'
-tv\[18\]: LDPT_OPTION 'claim:tmpdir/func.o'
-tv\[19\]: LDPT_OPTION 'sym:_?func::0:0:0'
-tv\[20\]: LDPT_OPTION 'sym:_?func2::0:0:0'
-tv\[21\]: LDPT_OPTION 'dumpresolutions'
-tv\[22\]: LDPT_OPTION 'add:tmpdir/func.o'
-tv\[23\]: LDPT_OPTION 'claim:tmpdir/libtext.a'
-tv\[24\]: LDPT_OPTION 'sym:_?text::0:0:0'
-tv\[25\]: LDPT_OPTION 'add:tmpdir/text.o'
-tv\[26\]: LDPT_NULL value 0x0 \(0\)
+.*: LDPT_MESSAGE func@0x.*
+.*: LDPT_API_VERSION value 0x1 \(1\)
+.*: LDPT_GNU_LD_VERSION value 0x.*
+.*: LDPT_LINKER_OUTPUT value 0x1 \(1\)
+.*: LDPT_OUTPUT_NAME 'tmpdir/main.x'
+.*: LDPT_REGISTER_CLAIM_FILE_HOOK func@0x.*
+.*: LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK func@0x.*
+.*: LDPT_REGISTER_CLEANUP_HOOK func@0x.*
+.*: LDPT_ADD_SYMBOLS func@0x.*
+.*: LDPT_GET_INPUT_FILE func@0x.*
+.*: LDPT_RELEASE_INPUT_FILE func@0x.*
+.*: LDPT_GET_SYMBOLS func@0x.*
+.*: LDPT_GET_SYMBOLS_V2 func@0x.*
+.*: LDPT_ADD_INPUT_FILE func@0x.*
+.*: LDPT_ADD_INPUT_LIBRARY func@0x.*
+.*: LDPT_SET_EXTRA_LIBRARY_PATH func@0x.*
+.*: LDPT_OPTION 'registerclaimfile'
+.*: LDPT_OPTION 'registerallsymbolsread'
+.*: LDPT_OPTION 'registercleanup'
+.*: LDPT_OPTION 'claim:tmpdir/func.o'
+.*: LDPT_OPTION 'sym:_?func::0:0:0'
+.*: LDPT_OPTION 'sym:_?func2::0:0:0'
+.*: LDPT_OPTION 'dumpresolutions'
+.*: LDPT_OPTION 'add:tmpdir/func.o'
+.*: LDPT_OPTION 'claim:tmpdir/libtext.a'
+.*: LDPT_OPTION 'sym:_?text::0:0:0'
+.*: LDPT_OPTION 'add:tmpdir/text.o'
+.*: LDPT_NULL value 0x0 \(0\)
#...
hook called: claim_file tmpdir/main.o \[@0/.* not claimed
hook called: claim_file tmpdir/func.o \[@0/.* CLAIMED
Hello from testplugin.
-tv\[0\]: LDPT_MESSAGE func@0x.*
-tv\[1\]: LDPT_API_VERSION value 0x1 \(1\)
-tv\[2\]: LDPT_GNU_LD_VERSION value 0x.*
-tv\[3\]: LDPT_LINKER_OUTPUT value 0x1 \(1\)
-tv\[4\]: LDPT_OUTPUT_NAME 'tmpdir/main.x'
-tv\[5\]: LDPT_REGISTER_CLAIM_FILE_HOOK func@0x.*
-tv\[6\]: LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK func@0x.*
-tv\[7\]: LDPT_REGISTER_CLEANUP_HOOK func@0x.*
-tv\[8\]: LDPT_ADD_SYMBOLS func@0x.*
-tv\[9\]: LDPT_GET_INPUT_FILE func@0x.*
-tv\[10\]: LDPT_RELEASE_INPUT_FILE func@0x.*
-tv\[11\]: LDPT_GET_SYMBOLS func@0x.*
-tv\[12\]: LDPT_ADD_INPUT_FILE func@0x.*
-tv\[13\]: LDPT_ADD_INPUT_LIBRARY func@0x.*
-tv\[14\]: LDPT_SET_EXTRA_LIBRARY_PATH func@0x.*
-tv\[15\]: LDPT_OPTION 'failonload'
-tv\[16\]: LDPT_NULL value 0x0 \(0\)
+.*: LDPT_MESSAGE func@0x.*
+.*: LDPT_API_VERSION value 0x1 \(1\)
+.*: LDPT_GNU_LD_VERSION value 0x.*
+.*: LDPT_LINKER_OUTPUT value 0x1 \(1\)
+.*: LDPT_OUTPUT_NAME 'tmpdir/main.x'
+.*: LDPT_REGISTER_CLAIM_FILE_HOOK func@0x.*
+.*: LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK func@0x.*
+.*: LDPT_REGISTER_CLEANUP_HOOK func@0x.*
+.*: LDPT_ADD_SYMBOLS func@0x.*
+.*: LDPT_GET_INPUT_FILE func@0x.*
+.*: LDPT_RELEASE_INPUT_FILE func@0x.*
+.*: LDPT_GET_SYMBOLS func@0x.*
+.*: LDPT_GET_SYMBOLS_V2 func@0x.*
+.*: LDPT_ADD_INPUT_FILE func@0x.*
+.*: LDPT_ADD_INPUT_LIBRARY func@0x.*
+.*: LDPT_SET_EXTRA_LIBRARY_PATH func@0x.*
+.*: LDPT_OPTION 'failonload'
+.*: LDPT_NULL value 0x0 \(0\)
#...
.*ld.*:.*ldtestplug.*: error loading plugin
#...
Hello from testplugin.
-tv\[0\]: LDPT_MESSAGE func@0x.*
-tv\[1\]: LDPT_API_VERSION value 0x1 \(1\)
-tv\[2\]: LDPT_GNU_LD_VERSION value 0x.*
-tv\[3\]: LDPT_LINKER_OUTPUT value 0x1 \(1\)
-tv\[4\]: LDPT_OUTPUT_NAME 'tmpdir/main.x'
-tv\[5\]: LDPT_REGISTER_CLAIM_FILE_HOOK func@0x.*
-tv\[6\]: LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK func@0x.*
-tv\[7\]: LDPT_REGISTER_CLEANUP_HOOK func@0x.*
-tv\[8\]: LDPT_ADD_SYMBOLS func@0x.*
-tv\[9\]: LDPT_GET_INPUT_FILE func@0x.*
-tv\[10\]: LDPT_RELEASE_INPUT_FILE func@0x.*
-tv\[11\]: LDPT_GET_SYMBOLS func@0x.*
-tv\[12\]: LDPT_ADD_INPUT_FILE func@0x.*
-tv\[13\]: LDPT_ADD_INPUT_LIBRARY func@0x.*
-tv\[14\]: LDPT_SET_EXTRA_LIBRARY_PATH func@0x.*
-tv\[15\]: LDPT_OPTION 'registerallsymbolsread'
-tv\[16\]: LDPT_OPTION 'failallsymbolsread'
-tv\[17\]: LDPT_NULL value 0x0 \(0\)
+.*: LDPT_MESSAGE func@0x.*
+.*: LDPT_API_VERSION value 0x1 \(1\)
+.*: LDPT_GNU_LD_VERSION value 0x.*
+.*: LDPT_LINKER_OUTPUT value 0x1 \(1\)
+.*: LDPT_OUTPUT_NAME 'tmpdir/main.x'
+.*: LDPT_REGISTER_CLAIM_FILE_HOOK func@0x.*
+.*: LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK func@0x.*
+.*: LDPT_REGISTER_CLEANUP_HOOK func@0x.*
+.*: LDPT_ADD_SYMBOLS func@0x.*
+.*: LDPT_GET_INPUT_FILE func@0x.*
+.*: LDPT_RELEASE_INPUT_FILE func@0x.*
+.*: LDPT_GET_SYMBOLS func@0x.*
+.*: LDPT_GET_SYMBOLS_V2 func@0x.*
+.*: LDPT_ADD_INPUT_FILE func@0x.*
+.*: LDPT_ADD_INPUT_LIBRARY func@0x.*
+.*: LDPT_SET_EXTRA_LIBRARY_PATH func@0x.*
+.*: LDPT_OPTION 'registerallsymbolsread'
+.*: LDPT_OPTION 'failallsymbolsread'
+.*: LDPT_NULL value 0x0 \(0\)
#...
.*ld.*:.*ldtestplug.*: plugin reported error after all symbols read
#...
Hello from testplugin.
-tv\[0\]: LDPT_MESSAGE func@0x.*
-tv\[1\]: LDPT_API_VERSION value 0x1 \(1\)
-tv\[2\]: LDPT_GNU_LD_VERSION value 0x.*
-tv\[3\]: LDPT_LINKER_OUTPUT value 0x1 \(1\)
-tv\[4\]: LDPT_OUTPUT_NAME 'tmpdir/main.x'
-tv\[5\]: LDPT_REGISTER_CLAIM_FILE_HOOK func@0x.*
-tv\[6\]: LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK func@0x.*
-tv\[7\]: LDPT_REGISTER_CLEANUP_HOOK func@0x.*
-tv\[8\]: LDPT_ADD_SYMBOLS func@0x.*
-tv\[9\]: LDPT_GET_INPUT_FILE func@0x.*
-tv\[10\]: LDPT_RELEASE_INPUT_FILE func@0x.*
-tv\[11\]: LDPT_GET_SYMBOLS func@0x.*
-tv\[12\]: LDPT_ADD_INPUT_FILE func@0x.*
-tv\[13\]: LDPT_ADD_INPUT_LIBRARY func@0x.*
-tv\[14\]: LDPT_SET_EXTRA_LIBRARY_PATH func@0x.*
-tv\[15\]: LDPT_OPTION 'failcleanup'
-tv\[16\]: LDPT_OPTION 'registercleanup'
-tv\[17\]: LDPT_NULL value 0x0 \(0\)
+.*: LDPT_MESSAGE func@0x.*
+.*: LDPT_API_VERSION value 0x1 \(1\)
+.*: LDPT_GNU_LD_VERSION value 0x.*
+.*: LDPT_LINKER_OUTPUT value 0x1 \(1\)
+.*: LDPT_OUTPUT_NAME 'tmpdir/main.x'
+.*: LDPT_REGISTER_CLAIM_FILE_HOOK func@0x.*
+.*: LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK func@0x.*
+.*: LDPT_REGISTER_CLEANUP_HOOK func@0x.*
+.*: LDPT_ADD_SYMBOLS func@0x.*
+.*: LDPT_GET_INPUT_FILE func@0x.*
+.*: LDPT_RELEASE_INPUT_FILE func@0x.*
+.*: LDPT_GET_SYMBOLS func@0x.*
+.*: LDPT_GET_SYMBOLS_V2 func@0x.*
+.*: LDPT_ADD_INPUT_FILE func@0x.*
+.*: LDPT_ADD_INPUT_LIBRARY func@0x.*
+.*: LDPT_SET_EXTRA_LIBRARY_PATH func@0x.*
+.*: LDPT_OPTION 'failcleanup'
+.*: LDPT_OPTION 'registercleanup'
+.*: LDPT_NULL value 0x0 \(0\)
#...
hook called: cleanup.
.*ld.*:.*ldtestplug.*: error in plugin cleanup \(ignored\)
Hello from testplugin.
-tv\[0\]: LDPT_MESSAGE func@0x.*
-tv\[1\]: LDPT_API_VERSION value 0x1 \(1\)
-tv\[2\]: LDPT_GNU_LD_VERSION value 0x.*
-tv\[3\]: LDPT_LINKER_OUTPUT value 0x1 \(1\)
-tv\[4\]: LDPT_OUTPUT_NAME 'tmpdir/main.x'
-tv\[5\]: LDPT_REGISTER_CLAIM_FILE_HOOK func@0x.*
-tv\[6\]: LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK func@0x.*
-tv\[7\]: LDPT_REGISTER_CLEANUP_HOOK func@0x.*
-tv\[8\]: LDPT_ADD_SYMBOLS func@0x.*
-tv\[9\]: LDPT_GET_INPUT_FILE func@0x.*
-tv\[10\]: LDPT_RELEASE_INPUT_FILE func@0x.*
-tv\[11\]: LDPT_GET_SYMBOLS func@0x.*
-tv\[12\]: LDPT_ADD_INPUT_FILE func@0x.*
-tv\[13\]: LDPT_ADD_INPUT_LIBRARY func@0x.*
-tv\[14\]: LDPT_SET_EXTRA_LIBRARY_PATH func@0x.*
-tv\[15\]: LDPT_OPTION 'registerclaimfile'
-tv\[16\]: LDPT_OPTION 'registerallsymbolsread'
-tv\[17\]: LDPT_OPTION 'registercleanup'
-tv\[18\]: LDPT_NULL value 0x0 \(0\)
+.*: LDPT_MESSAGE func@0x.*
+.*: LDPT_API_VERSION value 0x1 \(1\)
+.*: LDPT_GNU_LD_VERSION value 0x.*
+.*: LDPT_LINKER_OUTPUT value 0x1 \(1\)
+.*: LDPT_OUTPUT_NAME 'tmpdir/main.x'
+.*: LDPT_REGISTER_CLAIM_FILE_HOOK func@0x.*
+.*: LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK func@0x.*
+.*: LDPT_REGISTER_CLEANUP_HOOK func@0x.*
+.*: LDPT_ADD_SYMBOLS func@0x.*
+.*: LDPT_GET_INPUT_FILE func@0x.*
+.*: LDPT_RELEASE_INPUT_FILE func@0x.*
+.*: LDPT_GET_SYMBOLS func@0x.*
+.*: LDPT_GET_SYMBOLS_V2 func@0x.*
+.*: LDPT_ADD_INPUT_FILE func@0x.*
+.*: LDPT_ADD_INPUT_LIBRARY func@0x.*
+.*: LDPT_SET_EXTRA_LIBRARY_PATH func@0x.*
+.*: LDPT_OPTION 'registerclaimfile'
+.*: LDPT_OPTION 'registerallsymbolsread'
+.*: LDPT_OPTION 'registercleanup'
+.*: LDPT_NULL value 0x0 \(0\)
#...
hook called: claim_file tmpdir/main.o \[@0/.*
hook called: claim_file tmpdir/func.o \[@0/.*
Hello from testplugin.
-tv\[0\]: LDPT_MESSAGE func@0x.*
-tv\[1\]: LDPT_API_VERSION value 0x1 \(1\)
-tv\[2\]: LDPT_GNU_LD_VERSION value 0x.*
-tv\[3\]: LDPT_LINKER_OUTPUT value 0x1 \(1\)
-tv\[4\]: LDPT_OUTPUT_NAME 'tmpdir/main.x'
-tv\[5\]: LDPT_REGISTER_CLAIM_FILE_HOOK func@0x.*
-tv\[6\]: LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK func@0x.*
-tv\[7\]: LDPT_REGISTER_CLEANUP_HOOK func@0x.*
-tv\[8\]: LDPT_ADD_SYMBOLS func@0x.*
-tv\[9\]: LDPT_GET_INPUT_FILE func@0x.*
-tv\[10\]: LDPT_RELEASE_INPUT_FILE func@0x.*
-tv\[11\]: LDPT_GET_SYMBOLS func@0x.*
-tv\[12\]: LDPT_ADD_INPUT_FILE func@0x.*
-tv\[13\]: LDPT_ADD_INPUT_LIBRARY func@0x.*
-tv\[14\]: LDPT_SET_EXTRA_LIBRARY_PATH func@0x.*
-tv\[15\]: LDPT_OPTION 'registerclaimfile'
-tv\[16\]: LDPT_OPTION 'registerallsymbolsread'
-tv\[17\]: LDPT_OPTION 'registercleanup'
-tv\[18\]: LDPT_OPTION 'claim:tmpdir/func.o'
-tv\[19\]: LDPT_NULL value 0x0 \(0\)
+.*: LDPT_MESSAGE func@0x.*
+.*: LDPT_API_VERSION value 0x1 \(1\)
+.*: LDPT_GNU_LD_VERSION value 0x.*
+.*: LDPT_LINKER_OUTPUT value 0x1 \(1\)
+.*: LDPT_OUTPUT_NAME 'tmpdir/main.x'
+.*: LDPT_REGISTER_CLAIM_FILE_HOOK func@0x.*
+.*: LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK func@0x.*
+.*: LDPT_REGISTER_CLEANUP_HOOK func@0x.*
+.*: LDPT_ADD_SYMBOLS func@0x.*
+.*: LDPT_GET_INPUT_FILE func@0x.*
+.*: LDPT_RELEASE_INPUT_FILE func@0x.*
+.*: LDPT_GET_SYMBOLS func@0x.*
+.*: LDPT_GET_SYMBOLS_V2 func@0x.*
+.*: LDPT_ADD_INPUT_FILE func@0x.*
+.*: LDPT_ADD_INPUT_LIBRARY func@0x.*
+.*: LDPT_SET_EXTRA_LIBRARY_PATH func@0x.*
+.*: LDPT_OPTION 'registerclaimfile'
+.*: LDPT_OPTION 'registerallsymbolsread'
+.*: LDPT_OPTION 'registercleanup'
+.*: LDPT_OPTION 'claim:tmpdir/func.o'
+.*: LDPT_NULL value 0x0 \(0\)
#...
hook called: claim_file tmpdir/main.o \[@0/.* not claimed
hook called: claim_file tmpdir/func.o \[@0/.* CLAIMED
Hello from testplugin.
-tv\[0\]: LDPT_MESSAGE func@0x.*
-tv\[1\]: LDPT_API_VERSION value 0x1 \(1\)
-tv\[2\]: LDPT_GNU_LD_VERSION value 0x.*
-tv\[3\]: LDPT_LINKER_OUTPUT value 0x1 \(1\)
-tv\[4\]: LDPT_OUTPUT_NAME 'tmpdir/main.x'
-tv\[5\]: LDPT_REGISTER_CLAIM_FILE_HOOK func@0x.*
-tv\[6\]: LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK func@0x.*
-tv\[7\]: LDPT_REGISTER_CLEANUP_HOOK func@0x.*
-tv\[8\]: LDPT_ADD_SYMBOLS func@0x.*
-tv\[9\]: LDPT_GET_INPUT_FILE func@0x.*
-tv\[10\]: LDPT_RELEASE_INPUT_FILE func@0x.*
-tv\[11\]: LDPT_GET_SYMBOLS func@0x.*
-tv\[12\]: LDPT_ADD_INPUT_FILE func@0x.*
-tv\[13\]: LDPT_ADD_INPUT_LIBRARY func@0x.*
-tv\[14\]: LDPT_SET_EXTRA_LIBRARY_PATH func@0x.*
-tv\[15\]: LDPT_OPTION 'registerclaimfile'
-tv\[16\]: LDPT_OPTION 'registerallsymbolsread'
-tv\[17\]: LDPT_OPTION 'registercleanup'
-tv\[18\]: LDPT_OPTION 'claim:tmpdir/func.o'
-tv\[19\]: LDPT_OPTION 'sym:_?func::0:0:0'
-tv\[20\]: LDPT_NULL value 0x0 \(0\)
+.*: LDPT_MESSAGE func@0x.*
+.*: LDPT_API_VERSION value 0x1 \(1\)
+.*: LDPT_GNU_LD_VERSION value 0x.*
+.*: LDPT_LINKER_OUTPUT value 0x1 \(1\)
+.*: LDPT_OUTPUT_NAME 'tmpdir/main.x'
+.*: LDPT_REGISTER_CLAIM_FILE_HOOK func@0x.*
+.*: LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK func@0x.*
+.*: LDPT_REGISTER_CLEANUP_HOOK func@0x.*
+.*: LDPT_ADD_SYMBOLS func@0x.*
+.*: LDPT_GET_INPUT_FILE func@0x.*
+.*: LDPT_RELEASE_INPUT_FILE func@0x.*
+.*: LDPT_GET_SYMBOLS func@0x.*
+.*: LDPT_GET_SYMBOLS_V2 func@0x.*
+.*: LDPT_ADD_INPUT_FILE func@0x.*
+.*: LDPT_ADD_INPUT_LIBRARY func@0x.*
+.*: LDPT_SET_EXTRA_LIBRARY_PATH func@0x.*
+.*: LDPT_OPTION 'registerclaimfile'
+.*: LDPT_OPTION 'registerallsymbolsread'
+.*: LDPT_OPTION 'registercleanup'
+.*: LDPT_OPTION 'claim:tmpdir/func.o'
+.*: LDPT_OPTION 'sym:_?func::0:0:0'
+.*: LDPT_NULL value 0x0 \(0\)
#...
hook called: claim_file tmpdir/main.o \[@0/.* not claimed
hook called: claim_file tmpdir/func.o \[@0/.* CLAIMED
Hello from testplugin.
-tv\[0\]: LDPT_MESSAGE func@0x.*
-tv\[1\]: LDPT_API_VERSION value 0x1 \(1\)
-tv\[2\]: LDPT_GNU_LD_VERSION value 0x.*
-tv\[3\]: LDPT_LINKER_OUTPUT value 0x1 \(1\)
-tv\[4\]: LDPT_OUTPUT_NAME 'tmpdir/main.x'
-tv\[5\]: LDPT_REGISTER_CLAIM_FILE_HOOK func@0x.*
-tv\[6\]: LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK func@0x.*
-tv\[7\]: LDPT_REGISTER_CLEANUP_HOOK func@0x.*
-tv\[8\]: LDPT_ADD_SYMBOLS func@0x.*
-tv\[9\]: LDPT_GET_INPUT_FILE func@0x.*
-tv\[10\]: LDPT_RELEASE_INPUT_FILE func@0x.*
-tv\[11\]: LDPT_GET_SYMBOLS func@0x.*
-tv\[12\]: LDPT_ADD_INPUT_FILE func@0x.*
-tv\[13\]: LDPT_ADD_INPUT_LIBRARY func@0x.*
-tv\[14\]: LDPT_SET_EXTRA_LIBRARY_PATH func@0x.*
-tv\[15\]: LDPT_OPTION 'registerclaimfile'
-tv\[16\]: LDPT_OPTION 'registerallsymbolsread'
-tv\[17\]: LDPT_OPTION 'registercleanup'
-tv\[18\]: LDPT_OPTION 'claim:tmpdir/func.o'
-tv\[19\]: LDPT_OPTION 'sym:_?func::0:0:0'
-tv\[20\]: LDPT_OPTION 'sym:_?func2::0:0:0'
-tv\[21\]: LDPT_OPTION 'dumpresolutions'
-tv\[22\]: LDPT_NULL value 0x0 \(0\)
+.*: LDPT_MESSAGE func@0x.*
+.*: LDPT_API_VERSION value 0x1 \(1\)
+.*: LDPT_GNU_LD_VERSION value 0x.*
+.*: LDPT_LINKER_OUTPUT value 0x1 \(1\)
+.*: LDPT_OUTPUT_NAME 'tmpdir/main.x'
+.*: LDPT_REGISTER_CLAIM_FILE_HOOK func@0x.*
+.*: LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK func@0x.*
+.*: LDPT_REGISTER_CLEANUP_HOOK func@0x.*
+.*: LDPT_ADD_SYMBOLS func@0x.*
+.*: LDPT_GET_INPUT_FILE func@0x.*
+.*: LDPT_RELEASE_INPUT_FILE func@0x.*
+.*: LDPT_GET_SYMBOLS func@0x.*
+.*: LDPT_GET_SYMBOLS_V2 func@0x.*
+.*: LDPT_ADD_INPUT_FILE func@0x.*
+.*: LDPT_ADD_INPUT_LIBRARY func@0x.*
+.*: LDPT_SET_EXTRA_LIBRARY_PATH func@0x.*
+.*: LDPT_OPTION 'registerclaimfile'
+.*: LDPT_OPTION 'registerallsymbolsread'
+.*: LDPT_OPTION 'registercleanup'
+.*: LDPT_OPTION 'claim:tmpdir/func.o'
+.*: LDPT_OPTION 'sym:_?func::0:0:0'
+.*: LDPT_OPTION 'sym:_?func2::0:0:0'
+.*: LDPT_OPTION 'dumpresolutions'
+.*: LDPT_NULL value 0x0 \(0\)
#...
hook called: claim_file tmpdir/main.o \[@0/.* not claimed
hook called: claim_file tmpdir/func.o \[@0/.* CLAIMED
Hello from testplugin.
-tv\[0\]: LDPT_MESSAGE func@0x.*
-tv\[1\]: LDPT_API_VERSION value 0x1 \(1\)
-tv\[2\]: LDPT_GNU_LD_VERSION value 0x.*
-tv\[3\]: LDPT_LINKER_OUTPUT value 0x1 \(1\)
-tv\[4\]: LDPT_OUTPUT_NAME 'tmpdir/main.x'
-tv\[5\]: LDPT_REGISTER_CLAIM_FILE_HOOK func@0x.*
-tv\[6\]: LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK func@0x.*
-tv\[7\]: LDPT_REGISTER_CLEANUP_HOOK func@0x.*
-tv\[8\]: LDPT_ADD_SYMBOLS func@0x.*
-tv\[9\]: LDPT_GET_INPUT_FILE func@0x.*
-tv\[10\]: LDPT_RELEASE_INPUT_FILE func@0x.*
-tv\[11\]: LDPT_GET_SYMBOLS func@0x.*
-tv\[12\]: LDPT_ADD_INPUT_FILE func@0x.*
-tv\[13\]: LDPT_ADD_INPUT_LIBRARY func@0x.*
-tv\[14\]: LDPT_SET_EXTRA_LIBRARY_PATH func@0x.*
-tv\[15\]: LDPT_OPTION 'registerclaimfile'
-tv\[16\]: LDPT_OPTION 'registerallsymbolsread'
-tv\[17\]: LDPT_OPTION 'registercleanup'
-tv\[18\]: LDPT_OPTION 'claim:tmpdir/func.o'
-tv\[19\]: LDPT_OPTION 'sym:_?func::0:0:0'
-tv\[20\]: LDPT_OPTION 'sym:_?func2::0:0:0'
-tv\[21\]: LDPT_OPTION 'dumpresolutions'
-tv\[22\]: LDPT_OPTION 'add:tmpdir/func.o'
-tv\[23\]: LDPT_NULL value 0x0 \(0\)
+.*: LDPT_MESSAGE func@0x.*
+.*: LDPT_API_VERSION value 0x1 \(1\)
+.*: LDPT_GNU_LD_VERSION value 0x.*
+.*: LDPT_LINKER_OUTPUT value 0x1 \(1\)
+.*: LDPT_OUTPUT_NAME 'tmpdir/main.x'
+.*: LDPT_REGISTER_CLAIM_FILE_HOOK func@0x.*
+.*: LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK func@0x.*
+.*: LDPT_REGISTER_CLEANUP_HOOK func@0x.*
+.*: LDPT_ADD_SYMBOLS func@0x.*
+.*: LDPT_GET_INPUT_FILE func@0x.*
+.*: LDPT_RELEASE_INPUT_FILE func@0x.*
+.*: LDPT_GET_SYMBOLS func@0x.*
+.*: LDPT_GET_SYMBOLS_V2 func@0x.*
+.*: LDPT_ADD_INPUT_FILE func@0x.*
+.*: LDPT_ADD_INPUT_LIBRARY func@0x.*
+.*: LDPT_SET_EXTRA_LIBRARY_PATH func@0x.*
+.*: LDPT_OPTION 'registerclaimfile'
+.*: LDPT_OPTION 'registerallsymbolsread'
+.*: LDPT_OPTION 'registercleanup'
+.*: LDPT_OPTION 'claim:tmpdir/func.o'
+.*: LDPT_OPTION 'sym:_?func::0:0:0'
+.*: LDPT_OPTION 'sym:_?func2::0:0:0'
+.*: LDPT_OPTION 'dumpresolutions'
+.*: LDPT_OPTION 'add:tmpdir/func.o'
+.*: LDPT_NULL value 0x0 \(0\)
#...
hook called: claim_file tmpdir/main.o \[@0/.* not claimed
hook called: claim_file tmpdir/func.o \[@0/.* CLAIMED