From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-lf1-x130.google.com (mail-lf1-x130.google.com [IPv6:2a00:1450:4864:20::130]) by sourceware.org (Postfix) with ESMTPS id 46C0C38582BD for ; Thu, 28 Jul 2022 13:37:42 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 46C0C38582BD Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=martin.st Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=martin.st Received: by mail-lf1-x130.google.com with SMTP id t22so2926940lfg.1 for ; Thu, 28 Jul 2022 06:37:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=martin-st.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=kKNX2KGjHJKC5XdsctzfuzCxm25XEFQhu7SgN7JKC5s=; b=26yP/7P/kQXG4T8vCn2eM5ut2crWOdBHnoCQiaiMlY8Ay7yQxZQXmDI9kfiWeRVeeS MDa0XHWP0W2dhLVm2GSXI5EC2a16gCwkU5swck3sFVmCNEFHcoFHS2lCJ3G3KBRAhsRk F7T9Hy3X7nFb7Hx8JOd820VzI6HNbv8pCvEuqdtnmkaYNuD0J089dzuVHFj0o9MLqL4W cqmMjZKs1sJEDKKEvsmGzQKFFF2YVQ6LESlLw9RPCMUOobTO2w4TocOfDjV/Wim1pKut bibo7KIa+Gzam9i52B4BhKFK/ZF+Tz1zOip03mB4mRJ9upFi97BzDp8KY2Wx4ybj6PwA woZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=kKNX2KGjHJKC5XdsctzfuzCxm25XEFQhu7SgN7JKC5s=; b=tgNErhd2EaB0sSyXqsFA1W7gDNqxbJdp2n2XJunnss9/9fifAf4myNr03HGR0RuSft H2B0f/k16YIiZMijUF0n9cyiNHnt71V2P5IVhlYghTUmSbXpOmKACdXkHhmN29YQGRRL fmEy+TIGv0jIAOeImHi2Xz1JwIaWeYJ3KaSYEwQm5KygfUq78/ZK+/NFyrcVFm8tKJj3 ycI39Gpo4gxwCTChBUP39Zim+DWVYBe/l2sD34VbtliqotHStALdyGRh8Jehvn/q1D3a u3KIRSGr4KebwQH9ze/ggS98cwddhaxnPCL0E2OSD4WrKTrxeuS2iSXRsRUcz5CO/vD8 lOvw== X-Gm-Message-State: AJIora+AZgH+mNYnS3p9LiRYs3TiLaXN8TCsSs867K2ixmX0hQ2RM5X4 b0L+i/2hJeypk/iyd+S1RusSJYZzPX7XtFzs X-Google-Smtp-Source: AGRyM1vii/sQIO+BQO0cDgP1tp1NeT/gj7NxCOm9aTz2VVFCOwzTVArn+3rDZkQ/nUKqRMFmTNsmYA== X-Received: by 2002:ac2:4c4d:0:b0:48a:7a96:470d with SMTP id o13-20020ac24c4d000000b0048a7a96470dmr9412219lfk.682.1659015460749; Thu, 28 Jul 2022 06:37:40 -0700 (PDT) Received: from localhost.localdomain (dsl-tkubng21-58c01c-243.dhcp.inet.fi. [88.192.28.243]) by smtp.gmail.com with ESMTPSA id y21-20020a05651c021500b0025d6ecbc897sm155167ljn.46.2022.07.28.06.37.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 Jul 2022 06:37:40 -0700 (PDT) From: Martin Storsjo To: binutils@sourceware.org Subject: [PATCH v3 2/2] ld: Support the -exclude-symbols option via COFF def files, with the EXCLUDE_SYMBOLS keyword Date: Thu, 28 Jul 2022 16:37:37 +0300 Message-Id: <20220728133737.4049560-2-martin@martin.st> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220728133737.4049560-1-martin@martin.st> References: <20220728133737.4049560-1-martin@martin.st> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-13.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, GIT_PATCH_0, JMQ_SPF_NEUTRAL, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 28 Jul 2022 13:37:46 -0000 This was requested in review. --- v3: Fixed the testcase to run successfully, added an x86_64 testcase, changed i*86 into i?86. --- ld/deffile.h | 2 ++ ld/deffilep.y | 3 +++ ld/testsuite/ld-pe/exclude-symbols-def-i386.d | 10 ++++++++++ ld/testsuite/ld-pe/exclude-symbols-def-i386.s | 11 +++++++++++ ld/testsuite/ld-pe/exclude-symbols-def-x86_64.d | 10 ++++++++++ ld/testsuite/ld-pe/exclude-symbols-def-x86_64.s | 11 +++++++++++ ld/testsuite/ld-pe/exclude-symbols-def.def | 4 ++++ ld/testsuite/ld-pe/pe.exp | 2 ++ 8 files changed, 53 insertions(+) create mode 100644 ld/testsuite/ld-pe/exclude-symbols-def-i386.d create mode 100644 ld/testsuite/ld-pe/exclude-symbols-def-i386.s create mode 100644 ld/testsuite/ld-pe/exclude-symbols-def-x86_64.d create mode 100644 ld/testsuite/ld-pe/exclude-symbols-def-x86_64.s create mode 100644 ld/testsuite/ld-pe/exclude-symbols-def.def diff --git a/ld/deffile.h b/ld/deffile.h index 306ae3a6f75..a247639628e 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 126f33a1352..e8d31c6dae7 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); } ; @@ -1355,6 +1357,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 00000000000..1f15c893447 --- /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 00000000000..fd533bb44c9 --- /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 00000000000..39de8813dc5 --- /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 00000000000..2889de1c160 --- /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 00000000000..c0cee7b1e70 --- /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 b640b0891f2..22819e0894f 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" -- 2.25.1