mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-27 03:54:41 +08:00
bfd/ChangeLog
* elflink.c (find_version_for_sym): Remove from here, ... * linker.c (bfd_find_version_for_sym): ... rename, replace here, make public and update all callers. * bfd-in2.h: Regenerate. ld/ChangeLog * NEWS: Mention new feature. * ld.texinfo (--version-script): Document extent of PE support. (WIN32): Mention --version-script. Extend auto-export description. * pe-dll.c (process_def_file): Use version script info to filter symbols from auto-export. * testsuite/ld-pe/vers-script-1.d: New file. * testsuite/ld-pe/vers-script-2.d: New file. * testsuite/ld-pe/vers-script-3.d: New file. * testsuite/ld-pe/vers-script-4.d: New file. * testsuite/ld-pe/vers-script-1.ver: New file. * testsuite/ld-pe/vers-script-2.ver: New file. * testsuite/ld-pe/vers-script-3.ver: New file. * testsuite/ld-pe/vers-script-4.ver: New file. * testsuite/ld-pe/vers-script-dll.c: New file. * testsuite/ld-pe/vers-script.exp: New test script.
This commit is contained in:
parent
67ce33d768
commit
09e2aba432
@ -1,3 +1,10 @@
|
||||
2009-05-04 Dave Korn <dave.korn.cygwin@gmail.com>
|
||||
|
||||
* elflink.c (find_version_for_sym): Remove from here, ...
|
||||
* linker.c (bfd_find_version_for_sym): ... rename, replace
|
||||
here, make public and update all callers.
|
||||
* bfd-in2.h: Regenerate.
|
||||
|
||||
2009-04-30 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* elf-bfd.h (struct bfd_elf_section_data): Add indirect_relocs
|
||||
|
@ -5590,6 +5590,10 @@ bfd_boolean bfd_generic_define_common_symbol
|
||||
#define bfd_define_common_symbol(output_bfd, info, h) \
|
||||
BFD_SEND (output_bfd, _bfd_define_common_symbol, (output_bfd, info, h))
|
||||
|
||||
struct bfd_elf_version_tree * bfd_find_version_for_sym
|
||||
(struct bfd_elf_version_tree *verdefs,
|
||||
const char *sym_name, bfd_boolean *hide);
|
||||
|
||||
/* Extracted from simple.c. */
|
||||
bfd_byte *bfd_simple_get_relocated_section_contents
|
||||
(bfd *abfd, asection *sec, bfd_byte *outbuf, asymbol **symbol_table);
|
||||
|
@ -1798,80 +1798,6 @@ nondefault:
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static struct bfd_elf_version_tree *
|
||||
find_version_for_sym (struct bfd_elf_version_tree *verdefs,
|
||||
const char *sym_name,
|
||||
bfd_boolean *hide)
|
||||
{
|
||||
struct bfd_elf_version_tree *t;
|
||||
struct bfd_elf_version_tree *local_ver, *global_ver, *exist_ver;
|
||||
|
||||
local_ver = NULL;
|
||||
global_ver = NULL;
|
||||
exist_ver = NULL;
|
||||
for (t = verdefs; t != NULL; t = t->next)
|
||||
{
|
||||
if (t->globals.list != NULL)
|
||||
{
|
||||
struct bfd_elf_version_expr *d = NULL;
|
||||
|
||||
while ((d = (*t->match) (&t->globals, d, sym_name)) != NULL)
|
||||
{
|
||||
global_ver = t;
|
||||
if (d->symver)
|
||||
exist_ver = t;
|
||||
d->script = 1;
|
||||
/* If the match is a wildcard pattern, keep looking for
|
||||
a more explicit, perhaps even local, match. */
|
||||
if (d->literal)
|
||||
break;
|
||||
}
|
||||
|
||||
if (d != NULL)
|
||||
break;
|
||||
}
|
||||
|
||||
if (t->locals.list != NULL)
|
||||
{
|
||||
struct bfd_elf_version_expr *d = NULL;
|
||||
|
||||
while ((d = (*t->match) (&t->locals, d, sym_name)) != NULL)
|
||||
{
|
||||
local_ver = t;
|
||||
/* If the match is a wildcard pattern, keep looking for
|
||||
a more explicit, perhaps even global, match. */
|
||||
if (d->literal)
|
||||
{
|
||||
/* An exact match overrides a global wildcard. */
|
||||
global_ver = NULL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (d != NULL)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (global_ver != NULL)
|
||||
{
|
||||
/* If we already have a versioned symbol that matches the
|
||||
node for this symbol, then we don't want to create a
|
||||
duplicate from the unversioned symbol. Instead hide the
|
||||
unversioned symbol. */
|
||||
*hide = exist_ver == global_ver;
|
||||
return global_ver;
|
||||
}
|
||||
|
||||
if (local_ver != NULL)
|
||||
{
|
||||
*hide = TRUE;
|
||||
return local_ver;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* This routine is used to export all defined symbols into the dynamic
|
||||
symbol table. It is called via elf_link_hash_traverse. */
|
||||
|
||||
@ -1898,7 +1824,7 @@ _bfd_elf_export_symbol (struct elf_link_hash_entry *h, void *data)
|
||||
bfd_boolean hide;
|
||||
|
||||
if (eif->verdefs == NULL
|
||||
|| (find_version_for_sym (eif->verdefs, h->root.root.string, &hide)
|
||||
|| (bfd_find_version_for_sym (eif->verdefs, h->root.root.string, &hide)
|
||||
&& !hide))
|
||||
{
|
||||
if (! bfd_elf_link_record_dynamic_symbol (eif->info, h))
|
||||
@ -2160,7 +2086,7 @@ _bfd_elf_link_assign_sym_version (struct elf_link_hash_entry *h, void *data)
|
||||
{
|
||||
bfd_boolean hide;
|
||||
|
||||
h->verinfo.vertree = find_version_for_sym (sinfo->verdefs,
|
||||
h->verinfo.vertree = bfd_find_version_for_sym (sinfo->verdefs,
|
||||
h->root.root.string, &hide);
|
||||
if (h->verinfo.vertree != NULL && hide)
|
||||
(*bed->elf_backend_hide_symbol) (info, h, TRUE);
|
||||
|
92
bfd/linker.c
92
bfd/linker.c
@ -3245,3 +3245,95 @@ bfd_generic_define_common_symbol (bfd *output_bfd,
|
||||
section->flags &= ~SEC_IS_COMMON;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/*
|
||||
FUNCTION
|
||||
bfd_find_version_for_sym
|
||||
|
||||
SYNOPSIS
|
||||
struct bfd_elf_version_tree * bfd_find_version_for_sym
|
||||
(struct bfd_elf_version_tree *verdefs,
|
||||
const char *sym_name, bfd_boolean *hide);
|
||||
|
||||
DESCRIPTION
|
||||
Search an elf version script tree for symbol versioning
|
||||
info and export / don't-export status for a given symbol.
|
||||
Return non-NULL on success and NULL on failure; also sets
|
||||
the output @samp{hide} boolean parameter.
|
||||
|
||||
*/
|
||||
|
||||
struct bfd_elf_version_tree *
|
||||
bfd_find_version_for_sym (struct bfd_elf_version_tree *verdefs,
|
||||
const char *sym_name,
|
||||
bfd_boolean *hide)
|
||||
{
|
||||
struct bfd_elf_version_tree *t;
|
||||
struct bfd_elf_version_tree *local_ver, *global_ver, *exist_ver;
|
||||
|
||||
local_ver = NULL;
|
||||
global_ver = NULL;
|
||||
exist_ver = NULL;
|
||||
for (t = verdefs; t != NULL; t = t->next)
|
||||
{
|
||||
if (t->globals.list != NULL)
|
||||
{
|
||||
struct bfd_elf_version_expr *d = NULL;
|
||||
|
||||
while ((d = (*t->match) (&t->globals, d, sym_name)) != NULL)
|
||||
{
|
||||
global_ver = t;
|
||||
if (d->symver)
|
||||
exist_ver = t;
|
||||
d->script = 1;
|
||||
/* If the match is a wildcard pattern, keep looking for
|
||||
a more explicit, perhaps even local, match. */
|
||||
if (d->literal)
|
||||
break;
|
||||
}
|
||||
|
||||
if (d != NULL)
|
||||
break;
|
||||
}
|
||||
|
||||
if (t->locals.list != NULL)
|
||||
{
|
||||
struct bfd_elf_version_expr *d = NULL;
|
||||
|
||||
while ((d = (*t->match) (&t->locals, d, sym_name)) != NULL)
|
||||
{
|
||||
local_ver = t;
|
||||
/* If the match is a wildcard pattern, keep looking for
|
||||
a more explicit, perhaps even global, match. */
|
||||
if (d->literal)
|
||||
{
|
||||
/* An exact match overrides a global wildcard. */
|
||||
global_ver = NULL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (d != NULL)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (global_ver != NULL)
|
||||
{
|
||||
/* If we already have a versioned symbol that matches the
|
||||
node for this symbol, then we don't want to create a
|
||||
duplicate from the unversioned symbol. Instead hide the
|
||||
unversioned symbol. */
|
||||
*hide = exist_ver == global_ver;
|
||||
return global_ver;
|
||||
}
|
||||
|
||||
if (local_ver != NULL)
|
||||
{
|
||||
*hide = TRUE;
|
||||
return local_ver;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
18
ld/ChangeLog
18
ld/ChangeLog
@ -1,3 +1,21 @@
|
||||
2009-05-04 Dave Korn <dave.korn.cygwin@gmail.com>
|
||||
|
||||
* NEWS: Mention new feature.
|
||||
* ld.texinfo (--version-script): Document extent of PE support.
|
||||
(WIN32): Mention --version-script. Extend auto-export description.
|
||||
* pe-dll.c (process_def_file): Use version script info to filter
|
||||
symbols from auto-export.
|
||||
* testsuite/ld-pe/vers-script-1.d: New file.
|
||||
* testsuite/ld-pe/vers-script-2.d: New file.
|
||||
* testsuite/ld-pe/vers-script-3.d: New file.
|
||||
* testsuite/ld-pe/vers-script-4.d: New file.
|
||||
* testsuite/ld-pe/vers-script-1.ver: New file.
|
||||
* testsuite/ld-pe/vers-script-2.ver: New file.
|
||||
* testsuite/ld-pe/vers-script-3.ver: New file.
|
||||
* testsuite/ld-pe/vers-script-4.ver: New file.
|
||||
* testsuite/ld-pe/vers-script-dll.c: New file.
|
||||
* testsuite/ld-pe/vers-script.exp: New test script.
|
||||
|
||||
2009-05-01 Nathan Sidwell <nathan@codesourcery.com>
|
||||
|
||||
* emulparams/vxworks.sh (TEXT_START_ADDR): Override.
|
||||
|
4
ld/NEWS
4
ld/NEWS
@ -1,5 +1,9 @@
|
||||
-*- text -*-
|
||||
|
||||
* PE targets now add primitive support for ELF version scripts; symbols
|
||||
are not versioned, but the local and global symbol visibility directives
|
||||
are respected when filtering symbols in auto-export mode.
|
||||
|
||||
* New option --no-export-dynamic to undo the effect of the -E and
|
||||
--export-dynamic options.
|
||||
|
||||
|
@ -1816,8 +1816,11 @@ the linker script being used by the linker.
|
||||
Specify the name of a version script to the linker. This is typically
|
||||
used when creating shared libraries to specify additional information
|
||||
about the version hierarchy for the library being created. This option
|
||||
is only meaningful on ELF platforms which support shared libraries.
|
||||
@xref{VERSION}.
|
||||
is only fully supported on ELF platforms which support shared libraries;
|
||||
see @ref{VERSION}. It is partially supported on PE platforms, which can
|
||||
use version scripts to filter symbol visibility in auto-export mode: any
|
||||
symbols marked @samp{local} in the version script will not be exported.
|
||||
@xref{WIN32}.
|
||||
|
||||
@kindex --warn-common
|
||||
@cindex warnings, on combining symbols
|
||||
@ -6582,9 +6585,19 @@ which is controlled by the following command line options:
|
||||
@item --exclude-symbols
|
||||
@item --exclude-libs
|
||||
@item --exclude-modules-for-implib
|
||||
@item --version-script
|
||||
@end itemize
|
||||
|
||||
If, however, @samp{--export-all-symbols} is not given explicitly on the
|
||||
When auto-export is in operation, @command{ld} will export all the non-local
|
||||
(global and common) symbols it finds in a DLL, with the exception of a few
|
||||
symbols known to belong to the system's runtime and libraries. As it will
|
||||
often not be desirable to export all of a DLL's symbols, which may include
|
||||
private functions that are not part of any public interface, the command-line
|
||||
options listed above may be used to filter symbols out from the list for
|
||||
exporting. The @samp{--output-def} option can be used in order to see the
|
||||
final list of exported symbols with all exclusions taken into effect.
|
||||
|
||||
If @samp{--export-all-symbols} is not given explicitly on the
|
||||
command line, then the default auto-export behavior will be @emph{disabled}
|
||||
if either of the following are true:
|
||||
|
||||
|
13
ld/pe-dll.c
13
ld/pe-dll.c
@ -670,9 +670,18 @@ process_def_file (bfd *abfd ATTRIBUTE_UNUSED, struct bfd_link_info *info)
|
||||
/* We should export symbols which are either global or not
|
||||
anything at all. (.bss data is the latter)
|
||||
We should not export undefined symbols. */
|
||||
if (symbols[j]->section != &bfd_und_section
|
||||
bfd_boolean would_export = symbols[j]->section != &bfd_und_section
|
||||
&& ((symbols[j]->flags & BSF_GLOBAL)
|
||||
|| (symbols[j]->flags == 0)))
|
||||
|| (symbols[j]->flags == 0));
|
||||
if (lang_elf_version_info && would_export)
|
||||
{
|
||||
bfd_boolean hide = 0;
|
||||
char ofs = pe_details->underscored && symbols[j]->name[0] == '_';
|
||||
(void) bfd_find_version_for_sym (lang_elf_version_info,
|
||||
symbols[j]->name + ofs, &hide);
|
||||
would_export = !hide;
|
||||
}
|
||||
if (would_export)
|
||||
{
|
||||
const char *sn = symbols[j]->name;
|
||||
|
||||
|
153
ld/testsuite/ld-pe/vers-script-1.d
Normal file
153
ld/testsuite/ld-pe/vers-script-1.d
Normal file
@ -0,0 +1,153 @@
|
||||
EXPORTS
|
||||
A @1
|
||||
B @2
|
||||
C @3
|
||||
D @4
|
||||
E @5
|
||||
GC_abort @6
|
||||
GC_add_ext_descriptor @7
|
||||
GC_add_leaked @8
|
||||
GC_add_map_entry @9
|
||||
GC_used_heap_size_after_full @10
|
||||
GC_version @11
|
||||
GC_with_callee_saves_pushed @12
|
||||
GC_words_allocd_at_reset @13
|
||||
GC_world_stopped @14
|
||||
GC_write @15
|
||||
JIS0208_to_Unicode @16
|
||||
JIS0212_to_Unicode @17
|
||||
JvConvertArgv @18
|
||||
JvRunMain @19
|
||||
JvRunMainName @20
|
||||
Unicode_to_JIS @21
|
||||
_Jv_AllocBytes @22
|
||||
_Jv_AllocObject @23
|
||||
_Jv_AllocObjectNoFinalizer @24
|
||||
_Jv_JNIFunctions @25
|
||||
_Jv_JNI_InvokeFunctions @26
|
||||
_Jv_JNI_PopSystemFrame @27
|
||||
_Jv_JVMPI_Notify_OBJECT_ALLOC @28
|
||||
_Jv_JVMPI_Notify_THREAD_END @29
|
||||
_Jv_JVMPI_Notify_THREAD_START @30
|
||||
_Jv_JVMTI_Interface @31
|
||||
_Jv_LookupInterfaceMethod @32
|
||||
_Jv_LookupInterfaceMethodIdx @33
|
||||
_Jv_LookupJNIMethod @34
|
||||
_Jv_Malloc @35
|
||||
_Jv_Throw @36
|
||||
_Jv_ThrowAbstractMethodError @37
|
||||
_Jv_UnwrapJNIweakReference @38
|
||||
_Jv__mcmp @39
|
||||
_Jv__mdiff @40
|
||||
_Jv__mprec_bigtens @41
|
||||
_Jv__mprec_tinytens @42
|
||||
_Jv_argc @43
|
||||
_Jv_argv @44
|
||||
_Jv_b2d @45
|
||||
_Jv_booleanClass @46
|
||||
_Jv_byteClass @47
|
||||
_Jv_charClass @48
|
||||
_Jv_d2b @49
|
||||
_Jv_ulp @50
|
||||
_Jv_voidClass @51
|
||||
_Z10_Jv_InitGCv @52
|
||||
_Z10_Jv_equalnP13_Jv_Utf8ConstPN4java4lang6StringEi @53
|
||||
_Z11_Jv_SetArgsiPPKc @54
|
||||
_Z11_Jv_ZMallocPvjj @55
|
||||
_Z11trie_lookupPtt @56
|
||||
_Z12_Jv_CondWaitP23_Jv_ConditionVariable_tP11_Jv_Mutex_txi @57
|
||||
_Z12_Jv_init_cifP13_Jv_Utf8ConstibP7ffi_cifPP9_ffi_typeS5_ @58
|
||||
_Z12_Jv_is_proxyPv @59
|
||||
_Z12shsTransformP8SHS_INFO @60
|
||||
_Z13_Jv_DisableGCv @61
|
||||
_Z15_Jv_create_coreP14_Jv_core_chainPN4java4lang6StringE @62
|
||||
_Z16_Jv_BlockSigchldv @63
|
||||
_Z16_Jv_BuildGCDescrPN4java4lang5ClassE @64
|
||||
_Z16_Jv_GCFreeMemoryv @65
|
||||
_Z16_Jv_SetStackSizePKc @66
|
||||
_Z16_Jv_VerifyMethodP16_Jv_InterpMethod @67
|
||||
_Z17JvNewStringLatin1PKc @68
|
||||
_Z24_Jv_isPrimitiveOrDerivedPK13_Jv_Utf8Const @69
|
||||
_Z26_Jv_FindSymbolInExecutablePKc @70
|
||||
_Z26_Jv_GCInitializeFinalizersPFvvE @71
|
||||
_Z37_Jv_FindClassFromSignatureNoExceptionPcPN4java4lang11ClassLoaderEPS_ @72
|
||||
_Z39_Jv_ThrowNoClassDefFoundErrorTrampolineP7ffi_cifPvPS1_S1_ @73
|
||||
_Z7in_hashPN4java4lang6ObjectE @74
|
||||
_Z7shsInitP8SHS_INFO @75
|
||||
_Z8shsFinalP8SHS_INFO @76
|
||||
_Z9_Jv_AbortPKcS0_iS0_ @77
|
||||
_Z9_Jv_RunGCv @78
|
||||
_Z9_Jv_ZFreePvS_ @79
|
||||
_Z9_Jv_equalP13_Jv_Utf8ConstPN4java4lang6StringEi @80
|
||||
_Z9shsUpdateP8SHS_INFOPhi @81
|
||||
_ZGr30_java\$Sutil\$Sweeks\$_properties @82
|
||||
_ZGr32_java\$Sutil\$Siso4217\$_properties @83
|
||||
_ZGr48_gnu\$Sjavax\$Sprint\$SPrinterDialog_de\$_properties @84
|
||||
_ZGr49_gnu\$Sjava\$Slocale\$SLocaleInformation\$_properties @85
|
||||
_ZGr51_gnu\$Sjava\$Sutil\$Sregex\$SMessagesBundle\$_properties @86
|
||||
_ZTVN5javax8security4auth4x50021X500PrivateCredentialE @87
|
||||
_ZTVN5javax8security4auth5login12LoginContextE @88
|
||||
_ZTVN5javax8security4auth5login13ConfigurationE @89
|
||||
_ZTVN5javax8security4auth5login14LoginExceptionE @90
|
||||
_ZTVN5javax8security4sasl19RealmChoiceCallbackE @91
|
||||
_ZTVN5javax8security4sasl23AuthenticationExceptionE @92
|
||||
_ZTVN5javax8security4sasl4SaslE @93
|
||||
__gcj_personality_v0 @94
|
||||
__ieee754_acos @95
|
||||
__ieee754_asin @96
|
||||
__ieee754_atan2 @97
|
||||
__kernel_cos @98
|
||||
__kernel_rem_pio2 @99
|
||||
__kernel_sin @100
|
||||
__kernel_tan @101
|
||||
_dist_code @102
|
||||
_length_code @103
|
||||
_mprec_log10 @104
|
||||
_tr_align @105
|
||||
_tr_flush_block @106
|
||||
_tr_init @107
|
||||
_tr_stored_block @108
|
||||
_tr_tally @109
|
||||
adler32 @110
|
||||
adler32_combine @111
|
||||
crc32 @112
|
||||
crc32_combine @113
|
||||
deflate @114
|
||||
deflateBound @115
|
||||
deflateCopy @116
|
||||
ffi_call_STDCALL @117
|
||||
ffi_call_SYSV @118
|
||||
ffi_closure_SYSV @119
|
||||
ffi_closure_SYSV_inner @120
|
||||
ffi_closure_alloc @121
|
||||
ffi_closure_free @122
|
||||
free_list_index_of @123
|
||||
get_crc_table @124
|
||||
gzclearerr @125
|
||||
gzclose @126
|
||||
gzungetc @127
|
||||
gzwrite @128
|
||||
h0 @129
|
||||
h1 @130
|
||||
h2 @131
|
||||
h3 @132
|
||||
h4 @133
|
||||
inflate @134
|
||||
inflateBack @135
|
||||
inflateBackEnd @136
|
||||
inflate_fast @137
|
||||
inflate_table @138
|
||||
lt_dladderror @139
|
||||
lt_dladdsearchdir @140
|
||||
lt_dlsetsearchpath @141
|
||||
lt_dlsym @142
|
||||
lt_preloaded_symbols @143
|
||||
print @144
|
||||
thread_table @145
|
||||
uncompress @146
|
||||
zError @147
|
||||
z_errmsg @148
|
||||
zcalloc @149
|
||||
zcfree @150
|
||||
zlibCompileFlags @151
|
||||
zlibVersion @152
|
5
ld/testsuite/ld-pe/vers-script-1.ver
Executable file
5
ld/testsuite/ld-pe/vers-script-1.ver
Executable file
@ -0,0 +1,5 @@
|
||||
# Anonymous GNU ld version script to export everything.
|
||||
|
||||
{
|
||||
global: *;
|
||||
};
|
0
ld/testsuite/ld-pe/vers-script-2.d
Normal file
0
ld/testsuite/ld-pe/vers-script-2.d
Normal file
5
ld/testsuite/ld-pe/vers-script-2.ver
Executable file
5
ld/testsuite/ld-pe/vers-script-2.ver
Executable file
@ -0,0 +1,5 @@
|
||||
# Anonymous GNU ld version script to export nothing.
|
||||
|
||||
{
|
||||
local: *;
|
||||
};
|
77
ld/testsuite/ld-pe/vers-script-3.d
Normal file
77
ld/testsuite/ld-pe/vers-script-3.d
Normal file
@ -0,0 +1,77 @@
|
||||
EXPORTS
|
||||
JvConvertArgv @1
|
||||
JvRunMain @2
|
||||
JvRunMainName @3
|
||||
_Jv_AllocBytes @4
|
||||
_Jv_AllocObject @5
|
||||
_Jv_AllocObjectNoFinalizer @6
|
||||
_Jv_JNIFunctions @7
|
||||
_Jv_JNI_InvokeFunctions @8
|
||||
_Jv_JNI_PopSystemFrame @9
|
||||
_Jv_JVMPI_Notify_OBJECT_ALLOC @10
|
||||
_Jv_JVMPI_Notify_THREAD_END @11
|
||||
_Jv_JVMPI_Notify_THREAD_START @12
|
||||
_Jv_JVMTI_Interface @13
|
||||
_Jv_LookupInterfaceMethod @14
|
||||
_Jv_LookupInterfaceMethodIdx @15
|
||||
_Jv_LookupJNIMethod @16
|
||||
_Jv_Malloc @17
|
||||
_Jv_Throw @18
|
||||
_Jv_ThrowAbstractMethodError @19
|
||||
_Jv_UnwrapJNIweakReference @20
|
||||
_Jv__mcmp @21
|
||||
_Jv__mdiff @22
|
||||
_Jv__mprec_bigtens @23
|
||||
_Jv__mprec_tinytens @24
|
||||
_Jv_argc @25
|
||||
_Jv_argv @26
|
||||
_Jv_b2d @27
|
||||
_Jv_booleanClass @28
|
||||
_Jv_byteClass @29
|
||||
_Jv_charClass @30
|
||||
_Jv_d2b @31
|
||||
_Jv_ulp @32
|
||||
_Jv_voidClass @33
|
||||
_Z10_Jv_InitGCv @34
|
||||
_Z10_Jv_equalnP13_Jv_Utf8ConstPN4java4lang6StringEi @35
|
||||
_Z11_Jv_SetArgsiPPKc @36
|
||||
_Z11_Jv_ZMallocPvjj @37
|
||||
_Z11trie_lookupPtt @38
|
||||
_Z12_Jv_CondWaitP23_Jv_ConditionVariable_tP11_Jv_Mutex_txi @39
|
||||
_Z12_Jv_init_cifP13_Jv_Utf8ConstibP7ffi_cifPP9_ffi_typeS5_ @40
|
||||
_Z12_Jv_is_proxyPv @41
|
||||
_Z12shsTransformP8SHS_INFO @42
|
||||
_Z13_Jv_DisableGCv @43
|
||||
_Z15_Jv_create_coreP14_Jv_core_chainPN4java4lang6StringE @44
|
||||
_Z16_Jv_BlockSigchldv @45
|
||||
_Z16_Jv_BuildGCDescrPN4java4lang5ClassE @46
|
||||
_Z16_Jv_GCFreeMemoryv @47
|
||||
_Z16_Jv_SetStackSizePKc @48
|
||||
_Z16_Jv_VerifyMethodP16_Jv_InterpMethod @49
|
||||
_Z17JvNewStringLatin1PKc @50
|
||||
_Z24_Jv_isPrimitiveOrDerivedPK13_Jv_Utf8Const @51
|
||||
_Z26_Jv_FindSymbolInExecutablePKc @52
|
||||
_Z26_Jv_GCInitializeFinalizersPFvvE @53
|
||||
_Z37_Jv_FindClassFromSignatureNoExceptionPcPN4java4lang11ClassLoaderEPS_ @54
|
||||
_Z39_Jv_ThrowNoClassDefFoundErrorTrampolineP7ffi_cifPvPS1_S1_ @55
|
||||
_Z7in_hashPN4java4lang6ObjectE @56
|
||||
_Z7shsInitP8SHS_INFO @57
|
||||
_Z8shsFinalP8SHS_INFO @58
|
||||
_Z9_Jv_AbortPKcS0_iS0_ @59
|
||||
_Z9_Jv_RunGCv @60
|
||||
_Z9_Jv_ZFreePvS_ @61
|
||||
_Z9_Jv_equalP13_Jv_Utf8ConstPN4java4lang6StringEi @62
|
||||
_Z9shsUpdateP8SHS_INFOPhi @63
|
||||
_ZGr30_java\$Sutil\$Sweeks\$_properties @64
|
||||
_ZGr32_java\$Sutil\$Siso4217\$_properties @65
|
||||
_ZGr48_gnu\$Sjavax\$Sprint\$SPrinterDialog_de\$_properties @66
|
||||
_ZGr49_gnu\$Sjava\$Slocale\$SLocaleInformation\$_properties @67
|
||||
_ZGr51_gnu\$Sjava\$Sutil\$Sregex\$SMessagesBundle\$_properties @68
|
||||
_ZTVN5javax8security4auth4x50021X500PrivateCredentialE @69
|
||||
_ZTVN5javax8security4auth5login12LoginContextE @70
|
||||
_ZTVN5javax8security4auth5login13ConfigurationE @71
|
||||
_ZTVN5javax8security4auth5login14LoginExceptionE @72
|
||||
_ZTVN5javax8security4sasl19RealmChoiceCallbackE @73
|
||||
_ZTVN5javax8security4sasl23AuthenticationExceptionE @74
|
||||
_ZTVN5javax8security4sasl4SaslE @75
|
||||
__gcj_personality_v0 @76
|
7
ld/testsuite/ld-pe/vers-script-3.ver
Executable file
7
ld/testsuite/ld-pe/vers-script-3.ver
Executable file
@ -0,0 +1,7 @@
|
||||
# Anonymous GNU ld version script to hide boehm-gc, libffi and fdlibm
|
||||
# symbols in libgcj.so.
|
||||
|
||||
{
|
||||
global: Jv*; _Jv_*; __gcj_personality_v0; __gcj_personality_sj0; _Z*;
|
||||
local: *;
|
||||
};
|
77
ld/testsuite/ld-pe/vers-script-4.d
Normal file
77
ld/testsuite/ld-pe/vers-script-4.d
Normal file
@ -0,0 +1,77 @@
|
||||
EXPORTS
|
||||
JvConvertArgv @1
|
||||
JvRunMain @2
|
||||
JvRunMainName @3
|
||||
_Jv_AllocBytes @4
|
||||
_Jv_AllocObject @5
|
||||
_Jv_AllocObjectNoFinalizer @6
|
||||
_Jv_JNIFunctions @7
|
||||
_Jv_JNI_InvokeFunctions @8
|
||||
_Jv_JNI_PopSystemFrame @9
|
||||
_Jv_JVMPI_Notify_OBJECT_ALLOC @10
|
||||
_Jv_JVMPI_Notify_THREAD_END @11
|
||||
_Jv_JVMPI_Notify_THREAD_START @12
|
||||
_Jv_JVMTI_Interface @13
|
||||
_Jv_LookupInterfaceMethod @14
|
||||
_Jv_LookupInterfaceMethodIdx @15
|
||||
_Jv_LookupJNIMethod @16
|
||||
_Jv_Malloc @17
|
||||
_Jv_Throw @18
|
||||
_Jv_ThrowAbstractMethodError @19
|
||||
_Jv_UnwrapJNIweakReference @20
|
||||
_Jv__mcmp @21
|
||||
_Jv__mdiff @22
|
||||
_Jv__mprec_bigtens @23
|
||||
_Jv__mprec_tinytens @24
|
||||
_Jv_argc @25
|
||||
_Jv_argv @26
|
||||
_Jv_b2d @27
|
||||
_Jv_booleanClass @28
|
||||
_Jv_byteClass @29
|
||||
_Jv_charClass @30
|
||||
_Jv_d2b @31
|
||||
_Jv_ulp @32
|
||||
_Jv_voidClass @33
|
||||
_Z10_Jv_InitGCv @34
|
||||
_Z10_Jv_equalnP13_Jv_Utf8ConstPN4java4lang6StringEi @35
|
||||
_Z11_Jv_SetArgsiPPKc @36
|
||||
_Z11_Jv_ZMallocPvjj @37
|
||||
_Z11trie_lookupPtt @38
|
||||
_Z12_Jv_CondWaitP23_Jv_ConditionVariable_tP11_Jv_Mutex_txi @39
|
||||
_Z12_Jv_init_cifP13_Jv_Utf8ConstibP7ffi_cifPP9_ffi_typeS5_ @40
|
||||
_Z12_Jv_is_proxyPv @41
|
||||
_Z12shsTransformP8SHS_INFO @42
|
||||
_Z13_Jv_DisableGCv @43
|
||||
_Z15_Jv_create_coreP14_Jv_core_chainPN4java4lang6StringE @44
|
||||
_Z16_Jv_BlockSigchldv @45
|
||||
_Z16_Jv_BuildGCDescrPN4java4lang5ClassE @46
|
||||
_Z16_Jv_GCFreeMemoryv @47
|
||||
_Z16_Jv_SetStackSizePKc @48
|
||||
_Z16_Jv_VerifyMethodP16_Jv_InterpMethod @49
|
||||
_Z17JvNewStringLatin1PKc @50
|
||||
_Z24_Jv_isPrimitiveOrDerivedPK13_Jv_Utf8Const @51
|
||||
_Z26_Jv_FindSymbolInExecutablePKc @52
|
||||
_Z26_Jv_GCInitializeFinalizersPFvvE @53
|
||||
_Z37_Jv_FindClassFromSignatureNoExceptionPcPN4java4lang11ClassLoaderEPS_ @54
|
||||
_Z39_Jv_ThrowNoClassDefFoundErrorTrampolineP7ffi_cifPvPS1_S1_ @55
|
||||
_Z7in_hashPN4java4lang6ObjectE @56
|
||||
_Z7shsInitP8SHS_INFO @57
|
||||
_Z8shsFinalP8SHS_INFO @58
|
||||
_Z9_Jv_AbortPKcS0_iS0_ @59
|
||||
_Z9_Jv_RunGCv @60
|
||||
_Z9_Jv_ZFreePvS_ @61
|
||||
_Z9_Jv_equalP13_Jv_Utf8ConstPN4java4lang6StringEi @62
|
||||
_Z9shsUpdateP8SHS_INFOPhi @63
|
||||
_ZGr30_java\$Sutil\$Sweeks\$_properties @64
|
||||
_ZGr32_java\$Sutil\$Siso4217\$_properties @65
|
||||
_ZGr48_gnu\$Sjavax\$Sprint\$SPrinterDialog_de\$_properties @66
|
||||
_ZGr49_gnu\$Sjava\$Slocale\$SLocaleInformation\$_properties @67
|
||||
_ZGr51_gnu\$Sjava\$Sutil\$Sregex\$SMessagesBundle\$_properties @68
|
||||
_ZTVN5javax8security4auth4x50021X500PrivateCredentialE @69
|
||||
_ZTVN5javax8security4auth5login12LoginContextE @70
|
||||
_ZTVN5javax8security4auth5login13ConfigurationE @71
|
||||
_ZTVN5javax8security4auth5login14LoginExceptionE @72
|
||||
_ZTVN5javax8security4sasl19RealmChoiceCallbackE @73
|
||||
_ZTVN5javax8security4sasl23AuthenticationExceptionE @74
|
||||
_ZTVN5javax8security4sasl4SaslE @75
|
||||
__gcj_personality_v0 @76
|
10
ld/testsuite/ld-pe/vers-script-4.ver
Executable file
10
ld/testsuite/ld-pe/vers-script-4.ver
Executable file
@ -0,0 +1,10 @@
|
||||
# GNU ld version script to hide boehm-gc, libffi and fdlibm
|
||||
# symbols in libgcj.so.
|
||||
|
||||
TEST_1_0 {
|
||||
local: *;
|
||||
};
|
||||
|
||||
TEST_1_1 {
|
||||
global: Jv*; _Jv_*; __gcj_personality_v0; __gcj_personality_sj0; _Z*;
|
||||
};
|
156
ld/testsuite/ld-pe/vers-script-dll.c
Executable file
156
ld/testsuite/ld-pe/vers-script-dll.c
Executable file
@ -0,0 +1,156 @@
|
||||
|
||||
#define FUNC(X_) extern void X_ (void); void X_ (void) { };
|
||||
|
||||
FUNC(A)
|
||||
FUNC(B)
|
||||
FUNC(C)
|
||||
FUNC(D)
|
||||
FUNC(E)
|
||||
FUNC(GC_abort)
|
||||
FUNC(GC_add_ext_descriptor)
|
||||
FUNC(GC_add_leaked)
|
||||
FUNC(GC_add_map_entry)
|
||||
FUNC(GC_used_heap_size_after_full)
|
||||
FUNC(GC_version)
|
||||
FUNC(GC_with_callee_saves_pushed)
|
||||
FUNC(GC_words_allocd_at_reset)
|
||||
FUNC(GC_world_stopped)
|
||||
FUNC(GC_write)
|
||||
FUNC(JIS0208_to_Unicode)
|
||||
FUNC(JIS0212_to_Unicode)
|
||||
FUNC(JvConvertArgv)
|
||||
FUNC(JvRunMain)
|
||||
FUNC(JvRunMainName)
|
||||
FUNC(Unicode_to_JIS)
|
||||
FUNC(_Jv_AllocBytes)
|
||||
FUNC(_Jv_AllocObject)
|
||||
FUNC(_Jv_AllocObjectNoFinalizer)
|
||||
FUNC(_ZTVN5javax8security4sasl23AuthenticationExceptionE)
|
||||
FUNC(_ZTVN5javax8security4sasl4SaslE)
|
||||
FUNC(__gcj_personality_v0)
|
||||
FUNC(__ieee754_acos)
|
||||
FUNC(__ieee754_asin)
|
||||
FUNC(__ieee754_atan2)
|
||||
FUNC(__kernel_cos)
|
||||
FUNC(__kernel_rem_pio2)
|
||||
FUNC(__kernel_sin)
|
||||
FUNC(__kernel_tan)
|
||||
FUNC(_dist_code)
|
||||
FUNC(_length_code)
|
||||
FUNC(_mprec_log10)
|
||||
FUNC(_tr_align)
|
||||
FUNC(_tr_flush_block)
|
||||
FUNC(_tr_init)
|
||||
FUNC(_tr_stored_block)
|
||||
FUNC(_tr_tally)
|
||||
FUNC(adler32)
|
||||
FUNC(adler32_combine)
|
||||
FUNC(crc32)
|
||||
FUNC(crc32_combine)
|
||||
FUNC(deflate)
|
||||
FUNC(deflateBound)
|
||||
FUNC(deflateCopy)
|
||||
FUNC(ffi_call_STDCALL)
|
||||
FUNC(ffi_call_SYSV)
|
||||
FUNC(ffi_closure_SYSV)
|
||||
FUNC(ffi_closure_SYSV_inner)
|
||||
FUNC(ffi_closure_alloc)
|
||||
FUNC(ffi_closure_free)
|
||||
FUNC(free_list_index_of)
|
||||
FUNC(get_crc_table)
|
||||
FUNC(gzclearerr)
|
||||
FUNC(gzclose)
|
||||
FUNC(gzungetc)
|
||||
FUNC(gzwrite)
|
||||
FUNC(h0)
|
||||
FUNC(h1)
|
||||
FUNC(h2)
|
||||
FUNC(h3)
|
||||
FUNC(h4)
|
||||
FUNC(inflate)
|
||||
FUNC(inflateBack)
|
||||
FUNC(inflateBackEnd)
|
||||
FUNC(inflate_fast)
|
||||
FUNC(inflate_table)
|
||||
FUNC(lt_dladderror)
|
||||
FUNC(lt_dladdsearchdir)
|
||||
FUNC(lt_dlsetsearchpath)
|
||||
FUNC(lt_dlsym)
|
||||
FUNC(lt_preloaded_symbols)
|
||||
FUNC(print)
|
||||
FUNC(thread_table)
|
||||
FUNC(uncompress)
|
||||
FUNC(zError)
|
||||
FUNC(z_errmsg)
|
||||
FUNC(zcalloc)
|
||||
FUNC(zcfree)
|
||||
FUNC(zlibCompileFlags)
|
||||
FUNC(zlibVersion)
|
||||
FUNC(_Jv_JNIFunctions)
|
||||
FUNC(_Jv_JNI_InvokeFunctions)
|
||||
FUNC(_Jv_JNI_PopSystemFrame)
|
||||
FUNC(_Jv_JVMPI_Notify_OBJECT_ALLOC)
|
||||
FUNC(_Jv_JVMPI_Notify_THREAD_END)
|
||||
FUNC(_Jv_JVMPI_Notify_THREAD_START)
|
||||
FUNC(_Jv_JVMTI_Interface)
|
||||
FUNC(_Jv_LookupInterfaceMethod)
|
||||
FUNC(_Jv_LookupInterfaceMethodIdx)
|
||||
FUNC(_Jv_LookupJNIMethod)
|
||||
FUNC(_Jv_Malloc)
|
||||
FUNC(_Jv_Throw)
|
||||
FUNC(_Jv_ThrowAbstractMethodError)
|
||||
FUNC(_Jv_UnwrapJNIweakReference)
|
||||
FUNC(_Jv__mcmp)
|
||||
FUNC(_Jv__mdiff)
|
||||
FUNC(_Jv__mprec_bigtens)
|
||||
FUNC(_Jv__mprec_tinytens)
|
||||
FUNC(_Jv_argc)
|
||||
FUNC(_Jv_argv)
|
||||
FUNC(_Jv_b2d)
|
||||
FUNC(_Jv_booleanClass)
|
||||
FUNC(_Jv_byteClass)
|
||||
FUNC(_Jv_charClass)
|
||||
FUNC(_Jv_d2b)
|
||||
FUNC(_Jv_ulp)
|
||||
FUNC(_Jv_voidClass)
|
||||
FUNC(_Z10_Jv_InitGCv)
|
||||
FUNC(_Z10_Jv_equalnP13_Jv_Utf8ConstPN4java4lang6StringEi)
|
||||
FUNC(_Z11_Jv_SetArgsiPPKc)
|
||||
FUNC(_Z11_Jv_ZMallocPvjj)
|
||||
FUNC(_Z11trie_lookupPtt)
|
||||
FUNC(_Z12_Jv_CondWaitP23_Jv_ConditionVariable_tP11_Jv_Mutex_txi)
|
||||
FUNC(_Z12_Jv_init_cifP13_Jv_Utf8ConstibP7ffi_cifPP9_ffi_typeS5_)
|
||||
FUNC(_Z12_Jv_is_proxyPv)
|
||||
FUNC(_Z12shsTransformP8SHS_INFO)
|
||||
FUNC(_Z13_Jv_DisableGCv)
|
||||
FUNC(_Z15_Jv_create_coreP14_Jv_core_chainPN4java4lang6StringE)
|
||||
FUNC(_Z16_Jv_BlockSigchldv)
|
||||
FUNC(_Z16_Jv_BuildGCDescrPN4java4lang5ClassE)
|
||||
FUNC(_Z16_Jv_GCFreeMemoryv)
|
||||
FUNC(_Z16_Jv_SetStackSizePKc)
|
||||
FUNC(_Z16_Jv_VerifyMethodP16_Jv_InterpMethod)
|
||||
FUNC(_Z17JvNewStringLatin1PKc)
|
||||
FUNC(_ZTVN5javax8security4auth4x50021X500PrivateCredentialE)
|
||||
FUNC(_ZTVN5javax8security4auth5login12LoginContextE)
|
||||
FUNC(_ZTVN5javax8security4auth5login13ConfigurationE)
|
||||
FUNC(_ZTVN5javax8security4auth5login14LoginExceptionE)
|
||||
FUNC(_ZTVN5javax8security4sasl19RealmChoiceCallbackE)
|
||||
FUNC(_Z24_Jv_isPrimitiveOrDerivedPK13_Jv_Utf8Const)
|
||||
FUNC(_Z26_Jv_FindSymbolInExecutablePKc)
|
||||
FUNC(_Z26_Jv_GCInitializeFinalizersPFvvE)
|
||||
FUNC(_Z37_Jv_FindClassFromSignatureNoExceptionPcPN4java4lang11ClassLoaderEPS_)
|
||||
FUNC(_Z39_Jv_ThrowNoClassDefFoundErrorTrampolineP7ffi_cifPvPS1_S1_)
|
||||
FUNC(_Z7in_hashPN4java4lang6ObjectE)
|
||||
FUNC(_Z7shsInitP8SHS_INFO)
|
||||
FUNC(_Z8shsFinalP8SHS_INFO)
|
||||
FUNC(_Z9_Jv_AbortPKcS0_iS0_)
|
||||
FUNC(_Z9_Jv_RunGCv)
|
||||
FUNC(_Z9_Jv_ZFreePvS_)
|
||||
FUNC(_Z9_Jv_equalP13_Jv_Utf8ConstPN4java4lang6StringEi)
|
||||
FUNC(_Z9shsUpdateP8SHS_INFOPhi)
|
||||
FUNC(_ZGr30_java$Sutil$Sweeks$_properties)
|
||||
FUNC(_ZGr32_java$Sutil$Siso4217$_properties)
|
||||
FUNC(_ZGr48_gnu$Sjavax$Sprint$SPrinterDialog_de$_properties)
|
||||
FUNC(_ZGr49_gnu$Sjava$Slocale$SLocaleInformation$_properties)
|
||||
FUNC(_ZGr51_gnu$Sjava$Sutil$Sregex$SMessagesBundle$_properties)
|
||||
|
76
ld/testsuite/ld-pe/vers-script.exp
Executable file
76
ld/testsuite/ld-pe/vers-script.exp
Executable file
@ -0,0 +1,76 @@
|
||||
# Expect script for version-script driven export from dll tests
|
||||
# Copyright 2009
|
||||
# Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is part of the GNU Binutils.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
# MA 02110-1301, USA.
|
||||
#
|
||||
|
||||
# This test can only be run on PE/COFF platforms.
|
||||
if {![is_pecoff_format]} {
|
||||
return
|
||||
}
|
||||
|
||||
# No compiler, no test.
|
||||
if { [which $CC] == 0 } {
|
||||
untested "PE version scripts"
|
||||
return
|
||||
}
|
||||
|
||||
proc build_vers_script_dll_o {} {
|
||||
global CC
|
||||
global CFLAGS
|
||||
global srcdir
|
||||
global subdir
|
||||
|
||||
# Compile the object file.
|
||||
if ![ld_compile "$CC $CFLAGS -shared" $srcdir/$subdir/vers-script-dll.c tmpdir/vers-script-dll.o] {
|
||||
fail "compiling shared lib object"
|
||||
}
|
||||
}
|
||||
|
||||
proc run_ver_script_test { testname } {
|
||||
global CC
|
||||
global srcdir
|
||||
global subdir
|
||||
global verbose
|
||||
|
||||
if ![ld_simple_link "$CC -shared \
|
||||
-Wl,--version-script,$srcdir/$subdir/$testname.ver \
|
||||
-Wl,--output-def,tmpdir/$testname.def" tmpdir/$testname.dll \
|
||||
"tmpdir/vers-script-dll.o"] {
|
||||
fail "linking DLL"
|
||||
}
|
||||
|
||||
if { $verbose > 2 } then { verbose "output is [file_contents tmpdir/$testname.def]" 3 }
|
||||
if { [regexp_diff tmpdir/$testname.def $srcdir/$subdir/$testname.d] } then {
|
||||
fail $testname
|
||||
if { $verbose == 2 } then { verbose "output is [file_contents tmpdir/$testname.def]" 2 }
|
||||
return
|
||||
}
|
||||
|
||||
pass "$testname"
|
||||
}
|
||||
|
||||
|
||||
build_vers_script_dll_o
|
||||
|
||||
run_ver_script_test "vers-script-1"
|
||||
run_ver_script_test "vers-script-2"
|
||||
run_ver_script_test "vers-script-3"
|
||||
run_ver_script_test "vers-script-4"
|
||||
|
Loading…
Reference in New Issue
Block a user