diff options
-rw-r--r-- | ld/deffile.h | 2 | ||||
-rw-r--r-- | ld/deffilep.y | 3 | ||||
-rw-r--r-- | ld/testsuite/ld-pe/exclude-symbols-def-i386.d | 10 | ||||
-rw-r--r-- | ld/testsuite/ld-pe/exclude-symbols-def-i386.s | 11 | ||||
-rw-r--r-- | ld/testsuite/ld-pe/exclude-symbols-def-x86_64.d | 10 | ||||
-rw-r--r-- | ld/testsuite/ld-pe/exclude-symbols-def-x86_64.s | 11 | ||||
-rw-r--r-- | ld/testsuite/ld-pe/exclude-symbols-def.def | 4 | ||||
-rw-r--r-- | ld/testsuite/ld-pe/pe.exp | 2 |
8 files changed, 53 insertions, 0 deletions
diff --git a/ld/deffile.h b/ld/deffile.h index 306ae3a..a247639 100644 --- a/ld/deffile.h +++ b/ld/deffile.h @@ -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; diff --git a/ld/deffilep.y b/ld/deffilep.y index dc0cb4d..27db336 100644 --- a/ld/deffilep.y +++ b/ld/deffilep.y @@ -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 }, diff --git a/ld/testsuite/ld-pe/exclude-symbols-def-i386.d b/ld/testsuite/ld-pe/exclude-symbols-def-i386.d new file mode 100644 index 0000000..1f15c89 --- /dev/null +++ b/ld/testsuite/ld-pe/exclude-symbols-def-i386.d @@ -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 diff --git a/ld/testsuite/ld-pe/exclude-symbols-def-i386.s b/ld/testsuite/ld-pe/exclude-symbols-def-i386.s new file mode 100644 index 0000000..fd533bb --- /dev/null +++ b/ld/testsuite/ld-pe/exclude-symbols-def-i386.s @@ -0,0 +1,11 @@ +.global _sym1 +.global _sym2 +.global _sym3 +.global _sym4 +.global _sym5 +_sym1: +_sym2: +_sym3: +_sym4: +_sym5: + ret diff --git a/ld/testsuite/ld-pe/exclude-symbols-def-x86_64.d b/ld/testsuite/ld-pe/exclude-symbols-def-x86_64.d new file mode 100644 index 0000000..39de881 --- /dev/null +++ b/ld/testsuite/ld-pe/exclude-symbols-def-x86_64.d @@ -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 diff --git a/ld/testsuite/ld-pe/exclude-symbols-def-x86_64.s b/ld/testsuite/ld-pe/exclude-symbols-def-x86_64.s new file mode 100644 index 0000000..2889de1 --- /dev/null +++ b/ld/testsuite/ld-pe/exclude-symbols-def-x86_64.s @@ -0,0 +1,11 @@ +.global sym1 +.global sym2 +.global sym3 +.global sym4 +.global sym5 +sym1: +sym2: +sym3: +sym4: +sym5: + ret diff --git a/ld/testsuite/ld-pe/exclude-symbols-def.def b/ld/testsuite/ld-pe/exclude-symbols-def.def new file mode 100644 index 0000000..c0cee7b --- /dev/null +++ b/ld/testsuite/ld-pe/exclude-symbols-def.def @@ -0,0 +1,4 @@ +LIBRARY exclude-symbols-def.dll +EXCLUDE_SYMBOLS +sym2 +sym4 diff --git a/ld/testsuite/ld-pe/pe.exp b/ld/testsuite/ld-pe/pe.exp index b640b08..22819e0 100644 --- a/ld/testsuite/ld-pe/pe.exp +++ b/ld/testsuite/ld-pe/pe.exp @@ -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" |