ld: Support the -exclude-symbols option via COFF def files, with the EXCLUDE_SYMBOLS keyword

This was requested in review.
This commit is contained in:
Martin Storsjö 2022-07-23 00:57:19 +03:00
parent 37513c1efb
commit 61f6b650f9
8 changed files with 53 additions and 0 deletions

View File

@ -99,6 +99,8 @@ typedef struct def_file {
/* Only expected from .drectve sections, not .DEF files. */
def_file_aligncomm *aligncomms;
/* From EXCLUDE_SYMBOLS or embedded directives. */
def_file_exclude_symbol *exclude_symbols;
} def_file;

View File

@ -249,6 +249,7 @@ keyword_as_name: BASE { $$ = "BASE"; }
| DATAL { $$ = "data"; }
| DESCRIPTION { $$ = "DESCRIPTION"; }
| DIRECTIVE { $$ = "DIRECTIVE"; }
| EXCLUDE_SYMBOLS { $$ = "EXCLUDE_SYMBOLS"; }
| EXECUTE { $$ = "EXECUTE"; }
| EXPORTS { $$ = "EXPORTS"; }
| HEAPSIZE { $$ = "HEAPSIZE"; }
@ -337,6 +338,7 @@ anylang_id: ID { $$ = $1; }
symbol_list:
anylang_id { def_exclude_symbols ($1); }
| symbol_list anylang_id { def_exclude_symbols ($2); }
| symbol_list ',' anylang_id { def_exclude_symbols ($3); }
;
@ -1352,6 +1354,7 @@ tokens[] =
{ "data", DATAL },
{ "DESCRIPTION", DESCRIPTION },
{ "DIRECTIVE", DIRECTIVE },
{ "EXCLUDE_SYMBOLS", EXCLUDE_SYMBOLS },
{ "EXECUTE", EXECUTE },
{ "EXPORTS", EXPORTS },
{ "HEAPSIZE", HEAPSIZE },

View File

@ -0,0 +1,10 @@
#source: exclude-symbols-def-i386.s
#target: i?86-*-cygwin* i?86-*-pe i?86-*-mingw*
#ld: -shared ${srcdir}/${subdir}/exclude-symbols-def.def
#objdump: -p
#...
.*\[[ ]*0\] sym1
.*\[[ ]*1\] sym3
.*\[[ ]*2\] sym5
#pass

View File

@ -0,0 +1,11 @@
.global _sym1
.global _sym2
.global _sym3
.global _sym4
.global _sym5
_sym1:
_sym2:
_sym3:
_sym4:
_sym5:
ret

View File

@ -0,0 +1,10 @@
#source: exclude-symbols-def-x86_64.s
#target: x86_64-*-cygwin* x86_64-*-pe x86_64-*-mingw*
#ld: -shared ${srcdir}/${subdir}/exclude-symbols-def.def
#objdump: -p
#...
.*\[[ ]*0\] sym1
.*\[[ ]*1\] sym3
.*\[[ ]*2\] sym5
#pass

View File

@ -0,0 +1,11 @@
.global sym1
.global sym2
.global sym3
.global sym4
.global sym5
sym1:
sym2:
sym3:
sym4:
sym5:
ret

View File

@ -0,0 +1,4 @@
LIBRARY exclude-symbols-def.dll
EXCLUDE_SYMBOLS
sym2
sym4

View File

@ -127,3 +127,5 @@ run_ld_link_tests $foreign_sym_test
run_dump_test "exclude-symbols-embedded-i386"
run_dump_test "exclude-symbols-embedded-x86_64"
run_dump_test "exclude-symbols-def-i386"
run_dump_test "exclude-symbols-def-x86_64"