From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10olkn2035.outbound.protection.outlook.com [40.92.40.35]) by sourceware.org (Postfix) with ESMTPS id 8BB243858D28 for ; Mon, 6 Dec 2021 05:02:16 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 8BB243858D28 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=maskray.me Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=maskray.me ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KZzz+2j0mQILVk6NX09XmEJ6FuHF4NzfufpqgeqSJ79Zjm/aS1I7hcTrh+5RThtzelpxfw++b7yD4Jpk1aFn90WADFbXv+PNULZpLdw5jkYXSXtB0rtqHe3zeLs0NDFcdLBNpanncOw6uA6hjqJfy3+tlaprBiJzw5sqONWonr1FjvF7hK7+5zNO/T4PiIuT6o2F82ECtTB4jjBLtMYR7MIT+Ny4Tz2C5BeTvlGksT+45dv1jrz/hohNgG54gK9OgciUpnwZ1BaT3nR7ywgWml3OP/C5fBBDFpUTREG1VHKHB9U7a2glDmuCxvcr5UUaGJq7Sz6RrCJLEPuYN3zYaw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Jh+yhthGT4s0qdlzbVUceEbFxvPWiYvxXKc+zGJWtdo=; b=CvUIm+k3UE50Hiv0B3FY8udOCulgn5aeS0YS/WJ4CpezOFQ2t0TfwlfcxFQZg6zy0mr0ZA6ivEaVVQ+s/WcqGfAwxe1Ivii0prWI8zQC369W9DLrnOy9eSn/8YdRxsZiA5R95JbPfGCM2KFk+s8ILydyv2nmbqeDox2wYg+3rUg4oFjaH8UyDlv7pzpuujsWzjBskD1wrOCDaXy22xUjiqamhHQinJvMUilWe3f5XXzS/IuEskwuBE0eg9rUixwBl0jhuZqUhWx/OQlClO7pnp7pYS6Kbgc3lwT0bDOLocDdt95YfJteqcL+HPd98kU0IhG1X3ymAWqu8kOGHgN+Rg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none Received: from MWHPR1201MB0110.namprd12.prod.outlook.com (2603:10b6:301:56::8) by MWHPR1201MB2477.namprd12.prod.outlook.com (2603:10b6:300:e6::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4755.20; Mon, 6 Dec 2021 05:02:15 +0000 Received: from MWHPR1201MB0110.namprd12.prod.outlook.com ([fe80::d90:365c:3899:996b]) by MWHPR1201MB0110.namprd12.prod.outlook.com ([fe80::d90:365c:3899:996b%8]) with mapi id 15.20.4755.021; Mon, 6 Dec 2021 05:02:15 +0000 X-Gm-Message-State: AOAM533WlNXTzjxtMLIc3SDCTy55ZSjn7Sqz+6K2UHeJYIVNjzvGj++K /88S1tl2JyFuhdyfBv5hRJ96UDSZTm5X48PFZY0= X-Google-Smtp-Source: ABdhPJzHOx7po4dBqrPWCHVYJPRss5nkc/ZiwEL8LJuPTGezC7/9Ftm4VvxW3iX0nNkvuGxcU94P9E9msDtw5VMfH94= X-Received: by 2002:ab0:39cb:: with SMTP id g11mr38185456uaw.53.1638766438082; Sun, 05 Dec 2021 20:53:58 -0800 (PST) References: <20210523061021.1671339-1-maskray@google.com> In-Reply-To: From: Fangrui Song Date: Sun, 5 Dec 2021 23:53:47 -0500 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH] ld: Add -Bsymbolic-non-weak-functions To: Fangrui Song Cc: binutils@sourceware.org, Alan Modra Content-Type: text/plain; charset="UTF-8" X-TMN: [rd+NXjMzHbQBk7ys6ASNg8rXnQoxZ/7l] X-ClientProxiedBy: BN9PR03CA0345.namprd03.prod.outlook.com (2603:10b6:408:f6::20) To MWHPR1201MB0110.namprd12.prod.outlook.com (2603:10b6:301:56::8) X-Microsoft-Original-Message-ID: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from mail-yb1-f175.google.com (209.85.219.175) by BN9PR03CA0345.namprd03.prod.outlook.com (2603:10b6:408:f6::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4755.21 via Frontend Transport; Mon, 6 Dec 2021 05:02:14 +0000 Received: by mail-yb1-f175.google.com with SMTP id j2so27843044ybg.9 for ; Sun, 05 Dec 2021 21:02:14 -0800 (PST) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 02aa8cc1-3a04-446b-030d-08d9b87591fb X-MS-TrafficTypeDiagnostic: MWHPR1201MB2477: X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 0LH+usEo40rzQL0EkJGIFNELMi/a0VpTZLDtba+dS+ZOD3FzC+sVXf0ctxZadsJu8o2ni3JODdWFqq3sLZBCNHS9n1BklfxRihZa32G2nDVuRPAABJGs5NBgd7ZlDnZsDODOTgIroLHQODQEgRQNaqyKDVfefDtPCMcueKZgO/T9etmhDlv78h5Rx4wyxB2dOPYZdHmCyyQjfTrK5NMuhBCfkMb9AwkLneKqvVdYemR0ifyrcO/3u9zzBnAAzBte5lQzsBu0FVFqVPdfPMneRjz+lF+1RXyI9Zwc7F5xzFRFih9snOrcB4erk57TPF9c0hzK3kzZiallUkK47pCuok6nATvJQQyyMkbzsKZj9Kf8BUO/JDG56YZCyW4PGaSRJ0EO6Ftxppk6nbQsaWTG9B51vWDcf4eN9rEwyYVBi0VK2G9LMPkDFkYtnf6eXnppb37wxpLvifXV5UNCoNcNVpTfFtMbbhthzA9CMNUBs+HInEp1tcIPrIvca0OmLj2V4+rJeWd3k0YEjMvmzVwN9pDvXiiqYaxHn8Aq5fQlWYvi3UK9MUuJUxCdTzK2InzVt1NSnl8CowO7l5KJ6TjLdg== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?a1o0NzNwZGZIQlJ4SVZEdUMydnBIVzhPVTlMMk11S3pzdVFLRmczRFNyMUZP?= =?utf-8?B?aVJlWW1nUmVVZi9PdU9kbmVnN05QT0JVK1lOTGJrMkJOUUVPUWQzSFpJZlhH?= =?utf-8?B?VmtQbEQvRUFvYmhUdXIwMTFTbFZnRHdTbGlaV3RjNUZSa3VtVDJDcDg0RTQ3?= =?utf-8?B?VHJmSmcvZ1NxcFF0aTNEbzBoUmFBWm8raWlXRThGM1hxa01NRGVBTDllQ2ZM?= =?utf-8?B?QzJVeXZMSEdNdzVKMkZLRWthOWpyUEZtSkIxOUdtZ2ZMT1BPSlpLdWg2L002?= =?utf-8?B?Vmk2SVE5TkxMODg5R0ljMW1LSnBXNXhOdXVpU1Z4ZkFMMGN1OSsyNzBWUWlG?= =?utf-8?B?enR5L3RMQzJMRkhCOTl3Ylp1aTgyUVNIdDVqc2YzVUJDeE9ZVmtoeEozQXV5?= =?utf-8?B?elVpVkdVMyttMjArcG4xb0NlQUdpUkVyenh4N3VmcUM2N0pSSFc1UzQ4TW9G?= =?utf-8?B?VFN4dU53VVkxTkVveEFVeGdiM1FmWEZNRjBrWmsvOGo3aEFVN1VEVTVNMEZh?= =?utf-8?B?eXFJKzdWWTBVSFI2cDNZY25XdjdTRzNtM1NaS3R1UTRPTkhCbTFsV0xNQm9H?= =?utf-8?B?UXp2d3VwYm1RaTlSeFkrVVlkbjlycHJFL0RGTk5ma0lhNmprb2lWeVVMUksz?= =?utf-8?B?S0tPSzNDVy9yc1AxdFJMSEhidUxEcWFLZkhrU3hGUThGMFlNT09ycDVRNDVm?= =?utf-8?B?QWRqbXRWdjBhd0szWitpVGhaZ2xRNm8ySDhOK2poUmxpNEVFRllDUGNzVldW?= =?utf-8?B?YjBmbWVISUpMY2h0K3lkc2Z2ZWUxczZna3pyZk5aV3djbkV5S3FxZmVDdVhq?= =?utf-8?B?dHVJOUZOS2d6VllxKy90RHlKMVZQSUEvbmcydDlZRlI0UlRtZzJyTWdLMFp1?= =?utf-8?B?U3k2QjdXT1MvRVFNYnRNMi9yVStrOHB2OFd1d2hyNjRPblJyUjBDTU9qbjhX?= =?utf-8?B?UjNiQnNQUUNrYnZYQlU1UklPM01TbTlTcU1FOHorczZGZHVSUFpqdGNoam9V?= =?utf-8?B?QnY0WUhEVHZjOU1OQVpqc25pMngzQW9aMnFvN1dxZDZtMS9XMklXd2ttQ0Jm?= =?utf-8?B?K3ZvQzVQRE43TGVqeG5nbHkvckFzVkNQUHhxeTNvOFFjRmdqcWFaV1BGWmFn?= =?utf-8?B?OXVjU3FlMlh5TE9OQ2lPV2JRa1F4bko4OGU4RU9xVVFVeHdyRkJtUG9TUkJ4?= =?utf-8?B?YVFpbUJxTGZCYzBndFp1elV4RTZHR0hDMGFLM0lJSGczODBjK2ZXYmJ6TUc3?= =?utf-8?B?MTRmNEpGenI3QXd2T0Z1ZnRaOVhjQno3dUw4dVgzdEUyeG5zQT09?= X-OriginatorOrg: sct-15-20-4755-11-msonline-outlook-71ea3.templateTenant X-MS-Exchange-CrossTenant-Network-Message-Id: 02aa8cc1-3a04-446b-030d-08d9b87591fb X-MS-Exchange-CrossTenant-AuthSource: MWHPR1201MB0110.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Dec 2021 05:02:15.2515 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR1201MB2477 X-Spam-Status: No, score=-8.0 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, KAM_INFOUSMEBIZ, MSGID_FROM_MTA_HEADER, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) 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: Mon, 06 Dec 2021 05:02:19 -0000 On Mon, Aug 23, 2021 at 3:14 AM Fangrui Song wrote: > > FWIW Android ndk plans to use -Bsymbolic-non-weak-functions. > The behavior will be quite similar to Mach-O, so pretty safe. -Bsymbolic-non-weak-functions or -Bsymbolic-non-weak is still worth considering. (The behavior will be similar to Mach-O's model (strong definitions are non-interposable by default; weak definitions are coalesced).) > On Sat, May 22, 2021 at 11:10 PM Fangrui Song via Binutils > wrote: > > > > This option is a subset of -Bsymbolic-functions: only STB_GLOBAL are > > considered. Vague linkage functions are STB_WEAK. A vague linkage > > function may have different addresses in a -Bsymbolic-functions linked > > shared object and outside the shared object. > > -Bsymbolic-non-weak-functions can keep pointer equality while providing > > most benefits: (a) fewer JUMP_SLOT (symbol lookups) (b) avoid PLT > > entries for default visibility defined functions. > > > > PR 27871 > > include/ > > * bfdlink.h (struct bfd_link_info): Add dynamic_weak_functions. > > ld/ > > * ldlex.h (enum option_values): Add OPTION_SYMBOLIC_NON_WEAK_FUNCTIONS. > > * lexsup.c (struct ld_options): Add -Bsymbolic-non-weak-functions. > > (enum symbolic_enum): Add symbolic_non_weak_functions. > > (parse_args): Handle -Bsymbolic-non-weak-functions. > > * ld.texi: Document -Bsymbolic-non-weak-functions. > > * NEWS: Mention -Bsymbolic-non-weak-functions. > > * testsuite/ld-elf/shared.exp: Add tests. > > * testsuite/ld-elf/symbolic-non-weak-func.s: New file. > > * testsuite/ld-elf/symbolic-non-weak-func-a.rd: Likewise. > > * testsuite/ld-elf/symbolic-non-weak-func-b.rd: Likewise. > > --- > > bfd/elflink.c | 12 +++++----- > > include/bfdlink.h | 3 +++ > > ld/NEWS | 2 ++ > > ld/ld.texi | 15 ++++++++++--- > > ld/ldlex.h | 1 + > > ld/lexsup.c | 17 +++++++++++--- > > ld/testsuite/ld-elf/shared.exp | 22 +++++++++++++++++++ > > .../ld-elf/symbolic-non-weak-func-a.rd | 4 ++++ > > .../ld-elf/symbolic-non-weak-func-b.rd | 4 ++++ > > ld/testsuite/ld-elf/symbolic-non-weak-func.s | 18 +++++++++++++++ > > 10 files changed, 85 insertions(+), 13 deletions(-) > > create mode 100644 ld/testsuite/ld-elf/symbolic-non-weak-func-a.rd > > create mode 100644 ld/testsuite/ld-elf/symbolic-non-weak-func-b.rd > > create mode 100644 ld/testsuite/ld-elf/symbolic-non-weak-func.s > > > > diff --git a/bfd/elflink.c b/bfd/elflink.c > > index 0e1871aaac9..cbdac95f18a 100644 > > --- a/bfd/elflink.c > > +++ b/bfd/elflink.c > > @@ -597,14 +597,12 @@ bfd_elf_link_mark_dynamic_symbol (struct bfd_link_info *info, > > if(h->dynamic || bfd_link_relocatable (info)) > > return; > > > > + int type = sym != NULL ? ELF_ST_TYPE (sym->st_info) : STT_NOTYPE; > > if ((info->dynamic_data > > - && (h->type == STT_OBJECT > > - || h->type == STT_COMMON > > - || (sym != NULL > > - && (ELF_ST_TYPE (sym->st_info) == STT_OBJECT > > - || ELF_ST_TYPE (sym->st_info) == STT_COMMON)))) > > - || (d != NULL > > - && h->non_elf > > + && (type == STT_OBJECT || type == STT_COMMON)) > > + || (info->dynamic_weak_functions && type == STT_FUNC > > + && ELF_ST_BIND (sym->st_info) == STB_WEAK) > > + || (d != NULL && h->non_elf > > && (*d->match) (&d->head, NULL, h->root.root.string))) > > { > > h->dynamic = 1; > > diff --git a/include/bfdlink.h b/include/bfdlink.h > > index 7f1b12dbf37..e1576405007 100644 > > --- a/include/bfdlink.h > > +++ b/include/bfdlink.h > > @@ -369,6 +369,9 @@ struct bfd_link_info > > /* TRUE if all data symbols should be dynamic. */ > > unsigned int dynamic_data: 1; > > > > + /* TRUE if all weak function symbols should be dynamic. */ > > + unsigned int dynamic_weak_functions: 1; > > + > > /* TRUE if section groups should be resolved. */ > > unsigned int resolve_section_groups: 1; > > > > diff --git a/ld/NEWS b/ld/NEWS > > index a5ed9058c04..86bf9a8f9ab 100644 > > --- a/ld/NEWS > > +++ b/ld/NEWS > > @@ -10,6 +10,8 @@ > > > > * Add -Bno-symbolic to cancel -Bsymbolic and -Bsymbolic-functions. > > > > +* Add -Bsymbolic-non-weak-functions as a safe subset of -Bsymbolic-functions. > > + > > Changes in 2.36: > > > > * Add libdep plugin, for linking dependencies of static libraries that > > diff --git a/ld/ld.texi b/ld/ld.texi > > index 29874688a73..3807ab98f57 100644 > > --- a/ld/ld.texi > > +++ b/ld/ld.texi > > @@ -1620,7 +1620,7 @@ libraries. > > > > @kindex -Bsymbolic > > @item -Bsymbolic > > -When creating a shared library, bind references to global symbols to the > > +When creating a shared library, bind references to non-local symbols to the > > definition within the shared library, if any. Normally, it is possible > > for a program linked against a shared library to override the definition > > within the shared library. This option is only meaningful on ELF > > @@ -1628,11 +1628,20 @@ platforms which support shared libraries. > > > > @kindex -Bsymbolic-functions > > @item -Bsymbolic-functions > > -When creating a shared library, bind references to global function > > -symbols to the definition within the shared library, if any. > > +When creating a shared library, bind references to non-local function > > +symbols to the definition within the shared library, if any. A vague linkage > > +function definition is weak. It may have different addresses in the linked > > +shared library and outside the shared library. > > This option is only meaningful on ELF platforms which support shared > > libraries. > > > > +@kindex -Bsymbolic-non-weak-functions > > +@item -Bsymbolic-non-weak-functions > > +When creating a shared library, bind references to @code{STB_GLOBAL} function > > +symbols to the definition within the shared library, if any. Noticeably this > > +option skips C++ vague linkage functions and is thus safe. > > +This option is only meaningful on ELF platforms which support shared libraries. > > + > > @kindex -Bno-symbolic > > @item -Bno-symbolic > > This option can cancel previously specified @samp{-Bsymbolic} and > > diff --git a/ld/ldlex.h b/ld/ldlex.h > > index e0f0241d9cc..188160c6b9d 100644 > > --- a/ld/ldlex.h > > +++ b/ld/ldlex.h > > @@ -64,6 +64,7 @@ enum option_values > > OPTION_SORT_SECTION, > > OPTION_STATS, > > OPTION_SYMBOLIC, > > + OPTION_SYMBOLIC_NON_WEAK_FUNCTIONS, > > OPTION_SYMBOLIC_FUNCTIONS, > > OPTION_TASK_LINK, > > OPTION_TBSS, > > diff --git a/ld/lexsup.c b/ld/lexsup.c > > index dcb2d9d9ab3..64db6a89460 100644 > > --- a/ld/lexsup.c > > +++ b/ld/lexsup.c > > @@ -305,9 +305,11 @@ static const struct ld_option ld_options[] = > > { {"Bno-symbolic", no_argument, NULL, OPTION_NO_SYMBOLIC}, > > '\0', NULL, N_("Don't bind global references locally"), ONE_DASH }, > > { {"Bsymbolic", no_argument, NULL, OPTION_SYMBOLIC}, > > - '\0', NULL, N_("Bind global references locally"), ONE_DASH }, > > + '\0', NULL, N_("Bind default visibility defined symbols locally for -shared"), ONE_DASH }, > > + { {"Bsymbolic-non-weak-functions", no_argument, NULL, OPTION_SYMBOLIC_NON_WEAK_FUNCTIONS}, > > + '\0', NULL, N_("Bind default visibility defined STB_GLOBAL function symbols locally for -shared"), ONE_DASH }, > > { {"Bsymbolic-functions", no_argument, NULL, OPTION_SYMBOLIC_FUNCTIONS}, > > - '\0', NULL, N_("Bind global function references locally"), ONE_DASH }, > > + '\0', NULL, N_("Bind default visibility defined function symbols locally for -shared"), ONE_DASH }, > > { {"check-sections", no_argument, NULL, OPTION_CHECK_SECTIONS}, > > '\0', NULL, N_("Check section addresses for overlaps (default)"), > > TWO_DASHES }, > > @@ -611,8 +613,9 @@ parse_args (unsigned argc, char **argv) > > enum symbolic_enum > > { > > symbolic_unset = 0, > > - symbolic, > > + symbolic_non_weak_functions, > > symbolic_functions, > > + symbolic, > > } opt_symbolic = symbolic_unset; > > enum dynamic_list_enum > > { > > @@ -1309,6 +1312,9 @@ parse_args (unsigned argc, char **argv) > > case OPTION_SYMBOLIC: > > opt_symbolic = symbolic; > > break; > > + case OPTION_SYMBOLIC_NON_WEAK_FUNCTIONS: > > + opt_symbolic = symbolic_non_weak_functions; > > + break; > > case OPTION_SYMBOLIC_FUNCTIONS: > > opt_symbolic = symbolic_functions; > > break; > > @@ -1888,6 +1894,11 @@ parse_args (unsigned argc, char **argv) > > link_info.dynamic = true; > > link_info.dynamic_data = true; > > break; > > + case symbolic_non_weak_functions: > > + link_info.dynamic = true; > > + link_info.dynamic_data = true; > > + link_info.dynamic_weak_functions = true; > > + break; > > } > > > > if (!bfd_link_dll (&link_info)) > > diff --git a/ld/testsuite/ld-elf/shared.exp b/ld/testsuite/ld-elf/shared.exp > > index d00358e47ef..0ddc4b1cfcd 100644 > > --- a/ld/testsuite/ld-elf/shared.exp > > +++ b/ld/testsuite/ld-elf/shared.exp > > @@ -457,6 +457,28 @@ run_ld_link_tests [list \ > > "symbolic-func.so"] \ > > ] > > > > +if {[istarget "aarch64*-*-*"] || [istarget "powerpc*-*-*"] || > > + [istarget "i?86-*-*"] || [istarget "x86_64-*-*"]} { > > + run_ld_link_tests [list \ > > + [list "-Bsymbolic-non-weak-functions -Bsymbolic" \ > > + "-shared -Bsymbolic-non-weak-functions -Bsymbolic" "" "$AFLAGS_PIC" \ > > + {symbolic-non-weak-func.s} {{readelf {-r --wide} symbolic-non-weak-func-a.rd}} \ > > + "symbolic-non-weak-func-a.so"] \ > > + ] > > + run_ld_link_tests [list \ > > + [list "-Bsymbolic-non-weak-functions" \ > > + "-shared -Bsymbolic-non-weak-functions" "" "$AFLAGS_PIC" \ > > + {symbolic-non-weak-func.s} {{readelf {-r --wide} symbolic-non-weak-func-b.rd}} \ > > + "symbolic-non-weak-func-b.so"] \ > > + ] > > + run_ld_link_tests [list \ > > + [list "-Bsymbolic-functions -Bsymbolic-non-weak-functions" \ > > + "-shared -Bsymbolic-functions -Bsymbolic-non-weak-functions" "" "$AFLAGS_PIC" \ > > + {symbolic-non-weak-func.s} {{readelf {-r --wide} symbolic-non-weak-func-b.rd}} \ > > + "symbolic-non-weak-func-b.so"] \ > > + ] > > +} > > + > > run_ld_link_tests [list \ > > [list "Build pr20995.so" \ > > "-shared" "" "$AFLAGS_PIC" \ > > diff --git a/ld/testsuite/ld-elf/symbolic-non-weak-func-a.rd b/ld/testsuite/ld-elf/symbolic-non-weak-func-a.rd > > new file mode 100644 > > index 00000000000..ef591840f5c > > --- /dev/null > > +++ b/ld/testsuite/ld-elf/symbolic-non-weak-func-a.rd > > @@ -0,0 +1,4 @@ > > +#... > > +[0-9a-f]+ +[0-9a-f]+ +R_.*_RELATIVE .* > > +[0-9a-f]+ +[0-9a-f]+ +R_.*_RELATIVE .* > > +[0-9a-f]+ +[0-9a-f]+ +R_.*_RELATIVE .* > > diff --git a/ld/testsuite/ld-elf/symbolic-non-weak-func-b.rd b/ld/testsuite/ld-elf/symbolic-non-weak-func-b.rd > > new file mode 100644 > > index 00000000000..34228b0627b > > --- /dev/null > > +++ b/ld/testsuite/ld-elf/symbolic-non-weak-func-b.rd > > @@ -0,0 +1,4 @@ > > +#... > > +[0-9a-f]+ +[0-9a-f]+ +R_.*_RELATIVE .* > > +[0-9a-f]+ +[0-9a-f]+ +R_.*_RELATIVE .* > > +[0-9a-f]+ +[0-9a-f]+ +R_.* weak_fun.* > > diff --git a/ld/testsuite/ld-elf/symbolic-non-weak-func.s b/ld/testsuite/ld-elf/symbolic-non-weak-func.s > > new file mode 100644 > > index 00000000000..e259f12bfc1 > > --- /dev/null > > +++ b/ld/testsuite/ld-elf/symbolic-non-weak-func.s > > @@ -0,0 +1,18 @@ > > + .text > > + .global global_fun > > + .type global_fun, %function > > +global_fun: > > + .space 4 > > + .weak weak_fun > > + .type weak_fun, %function > > +weak_fun: > > + .space 4 > > + > > + .section .data,"aw",%progbits > > + .p2align 3 > > + .dc.a global_data > > + .dc.a global_fun > > + .dc.a weak_fun > > + > > + .global global_data > > +global_data: > > -- > > 2.31.1.818.g46aad6cb9e-goog > >