From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10olkn2081.outbound.protection.outlook.com [40.92.42.81]) by sourceware.org (Postfix) with ESMTPS id 645C33858D38 for ; Sat, 18 Feb 2023 07:30:53 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 645C33858D38 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=Da6+IRVTlDwyc1VDRRg2pKj/O46pMB4ulh29wMijkN5vizMeYdRiF5EMm396d+w4H0uns+2l38RlY50rAmBEuUSpYQqCknJdgWN5SLQsxabuNPYwMYdPBLTwp8qYzTLsmOccXwtBLwzc3ig56sDPQAGOMp7dT2YrH//9r0veRl7Qbk28zxUpK3pECxr9v+JZBRErfKbOtspvjItLtPvw2oc2azac27x3yc41mWzGYtVn0LIDMOyQ35KHseTEDN8Z/C+BOy571d3THRW+GtYOO+hsH2EKBFBWZ5nHd3aehne8wtCt4RCNyEBOhv4221q31vj2VgQC3l0EgAoH5ORetw== 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=WivtNnO8Y6DCftjw2J3AGfBHmy32rlQOOh2gnBM/dv8=; b=Uo8QS7NDb/daIXGOAPBsNED+U6w1VGYMDXB2334wEuZKKo/PQ+mvtn/bT5u7JKTJHAahHySZnh2yu9mChGjkwinYTyxuWMIV4eaIZsPna42h6+6BtQ1Gg7eBvSVf9agC+FNs8UrBl4R5qVOlUrwK/qht0DQHx2c/ZvF3auPJlo+Eif1Irk3jWcydgNwCpnR+tNVhC1ZK3ykHQnYDucsiPHGtyQG6b6AdKOdtnIhTSr8DbdPtXy1R6+OZlUhJcOh4c19TH4/ySPWg+1HpUmF/kSej+RWXyZ4RbKEGYaHkwkUtOY6FuqQi+3uMzHUM2CNKT1fCG9ZXREprZ0zOcthSDg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none Received: from DS7PR12MB5765.namprd12.prod.outlook.com (2603:10b6:8:74::19) by IA1PR12MB8222.namprd12.prod.outlook.com (2603:10b6:208:3f2::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6111.17; Sat, 18 Feb 2023 07:30:51 +0000 Received: from DS7PR12MB5765.namprd12.prod.outlook.com ([fe80::703c:6d1b:cf20:c631]) by DS7PR12MB5765.namprd12.prod.outlook.com ([fe80::703c:6d1b:cf20:c631%9]) with mapi id 15.20.6111.018; Sat, 18 Feb 2023 07:30:51 +0000 X-Gm-Message-State: AO0yUKWvjSLMa3BpfsdT0P7rB84/QbiIXaahFTKpI+H7DB4eB9qWkDR6 LBpAYPeB5kZTPqkcwivnnC2lruV4HeEgy23LJh0= X-Google-Smtp-Source: AK7set+Lt+5SDw8laiJMOGlmXYdo8Yj+CUqP8nGZ1ql5BRuZwbAlnbTVzw2awGdItiwwFkrGoVl/coee+wWdkALOq9o= X-Received: by 2002:a17:90b:5109:b0:233:b52a:c5c2 with SMTP id sc9-20020a17090b510900b00233b52ac5c2mr13248pjb.122.1676705448292; Fri, 17 Feb 2023 23:30:48 -0800 (PST) References: <20220713082608.1695497-1-maskray@google.com> In-Reply-To: <20220713082608.1695497-1-maskray@google.com> From: Fangrui Song Date: Fri, 17 Feb 2023 23:30:37 -0800 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH] RISC-V: Add --[no-]relax-gp to ld To: Fangrui Song Cc: binutils@sourceware.org Content-Type: text/plain; charset="UTF-8" X-TMN: [qeSKPRPeyIH5IQo5HT9pyFdamNT+nSmE] X-ClientProxiedBy: MW4PR04CA0051.namprd04.prod.outlook.com (2603:10b6:303:6a::26) To DS7PR12MB5765.namprd12.prod.outlook.com (2603:10b6:8:74::19) X-Microsoft-Original-Message-ID: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS7PR12MB5765:EE_|IA1PR12MB8222:EE_ X-MS-Office365-Filtering-Correlation-Id: f520a29f-ecf7-412c-d387-08db11820f22 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 0ZpW76rOe2AmoX9by35v+L27vg5poLZ76egsWcMWn3xftjhj/uLyjK+ifdpeiz/9fQzhtwiUywjEPW4uCuWA8zvPd3XUBslx61CA/xljgdT3ieK6rSj+u2chIMMDZbV/qEd2BWuOUxl2/5mvwyQIN+seKyGnd0SeIkX6Mj4cfNJw0qEVPrk+KPwCMEUhg/Q36D0NSKpF1dKEdK0roN63duWxQK/cqwn8pHCAn+BKVHviQjEZZKPdM1ZKo7EESPpwbS92b8FPnvwA2wSm1Sn6go5A1y+aA8kCqULNwVMMoz3U/PXR0FwDLZMpigNYsovr79SPA5kkopF/2DHgbItTZuAGMeJFbQSsz7OKUfFrK15Twdcds76Lvxu5JdVr/vEiAyu20yP+VRhzhSWvSfj2CGf7Ygf0UBSBrOcb7xb7lvWypeXPJ4J3rKfAmW6tBpayUjBIfpPKJh0qRUajxa1E4Bmx/smz4wxiIDBsHa6UklSs9BjEZBlCyPbwhKQMhshNhmB2BwApJPPPBz/WBz3jBqqLbHpYqHFpHuO7ZPcKrEwFI+CjMFnsMVy5q+ERLWAXr+9u/75W963FsW63UqRbbpvpq2CzzGHurX92fSZDXhI6m3j38QSV/m3ZeQGh5qbY8nDhHIY7RK5XRu8Ew37+IQ== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?Vm12OWxmM0poNVFObVphUTR6cmlVV2hYL1J0QlFBakw1Y2ZzOHM1dnJqRWQ5?= =?utf-8?B?anRpOUc5dmVVL1lYTTBuamtXRlVlcGtET1RMWjlTcnVzV0dyWXdoa1k0U1NS?= =?utf-8?B?RkJ0cHh0UEFEMnJQSndZOG1RUEU4NGJVcFZxUFhMeCtlMExFTWJFVFhGOFJp?= =?utf-8?B?cm5UWS9PNGRrVVAzcFZwY3hUTUppTklUMlZWREhJWUVrNjNhb2V2ZWg0dk5a?= =?utf-8?B?RlJXeWNVb0pnbkp6U3VtSU9OUGViUmZzeUdJYkxScjZhcVZLL3pJRjJCS1Bq?= =?utf-8?B?NjZOTU5yRDJpMDd0bGdxSGZwdFlGdmZJMkJJS2gyeHIzMEg0aXVSZkxSRUxI?= =?utf-8?B?bXNaSDluSzd4Qzg0N29nSmNadENaV01SUVU0NE1EOVdhZVJsVjJxaUF4S0F2?= =?utf-8?B?c2w2a1hTZldYT0tjMmp0Q3FiQWxnUDE2VVNlb1MySUFVYlhnVUg0bzRYbkJR?= =?utf-8?B?S3dHQTVQVVV5KzhZdUFOU3QxeVowWWFZZ2U2MGlDQzVUbzdiUUVsQWc2eWo0?= =?utf-8?B?eVZoZlVra29JNEJFdEtCUGpvcmVjaDY3UlJIVnR5Um02MXc4cUt2WmRzcitI?= =?utf-8?B?d3dYTnluOVVic1U3cW9xRWFOUUhGLzFwaG82bE0yVWFnTDVrVERGVzg2Q1NZ?= =?utf-8?B?QUJhcjBEckxDL2syMk1wVlBIcjNieXd6bkh4MXRjQUxxZXUzNStuYXdpc3Rk?= =?utf-8?B?UENCVmh5WjYrMUZJVmNCTlB3OHhVT05kQ0hVQTJvcTdxWlVsUG05VTk0S2Vi?= =?utf-8?B?N2tVK3dJZ1hJeFR5S3Vka3hHZ0IyZkJtUmQ3RUJHSkFxalRaOW5qWm5ncUJK?= =?utf-8?B?SmUwRko2eTlFcThWcE13N05UZEw2SytRVTQ0NkRYQ0JIY2prUyt6NmNEMTBL?= =?utf-8?B?TWFVbFpNUEtlUkRIaGdPNk1TMDQ3ZjFLTHk1NGFyL0xVQzNDUE02b3ZUaFd2?= =?utf-8?B?YmNyV09aR1NweGgxWlZoZlZnZTdBNjRLazFCMy9qL0QrNWVaU3FvMVIvS0ww?= =?utf-8?B?SDViR2FBUmI1ZFRacVlUTnprUTZJS0V4TGlmUnFMQlJIeHVCMm5kVzlybzdC?= =?utf-8?B?OEF0YVRQTzlFa1FtcVQvYVBTRzg3UDY3OU81Y0krTngvMzh4V2YzY3dXVjVS?= =?utf-8?B?cHZGZllJdzRwbS9Sblh3dDNpTmxBZm1xSDE2dXZTNUlUZzZmYkJzLzUxanMz?= =?utf-8?B?MGdHKy9KNmYyREpCa25rdldNQ1VMZEdUWS9RN3BWY29qS3RRN1Q2YjRaN0Q0?= =?utf-8?B?WUE2WC9GalJYb3lwMzhKMTVDN3N4dFRYQmdaL0NIcENXNUp6dVMrUEJrQTdn?= =?utf-8?B?YmZORk1yK09XeGFvMGJBMVVXUXB0Z1NWMzQ3SExFczZIRU1XdWFESVg2dlJJ?= =?utf-8?B?bG5Za3ZERyt6ZjlEeWlNYWJCZ0RQSS9saE5HQkhIUW1tVVo0VDdHUFJEYlZO?= =?utf-8?B?QXowQ1dSMjlENWpqY0hNc3ovMkZUNW9adGVZTUgrbGVrLytwYmRnNUQyd0ZZ?= =?utf-8?B?R1FvL2lhZjlNL3BwTlFPd2hudnVudUJLWEFESUtnQmFUZ1Y0czZRQTVoTnhj?= =?utf-8?B?Zm9NSHc3M1Z5QXZIQWZVdi9xbHMwR1RFNGhjdzNFVGw0aGZlTVhoYW93VzJm?= =?utf-8?B?c042eitwQUh1ai9KUFY3RW54RElzajBhdzNkN1Y2QzNIMGlCQVBNUTUyZFdZ?= =?utf-8?Q?0prPLdmym+X43bkYDiUR?= X-OriginatorOrg: sct-15-20-4755-11-msonline-outlook-71ea3.templateTenant X-MS-Exchange-CrossTenant-Network-Message-Id: f520a29f-ecf7-412c-d387-08db11820f22 X-MS-Exchange-CrossTenant-AuthSource: DS7PR12MB5765.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Feb 2023 07:30:51.2282 (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: IA1PR12MB8222 X-Spam-Status: No, score=-9.2 required=5.0 tests=BAYES_00,GIT_PATCH_0,KAM_DMARC_STATUS,KAM_INFOUSMEBIZ,RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,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 List-Id: On Wed, Jul 13, 2022 at 1:26 AM Fangrui Song wrote: > > From: Fangrui Song > > --relax enables all relaxations. --no-relax-gp disables GP relaxation to > allow measuring its effect. > > Link: https://github.com/riscv-non-isa/riscv-elf-psabi-doc/issues/298 > > bfd/ > * elfnn-riscv.c (struct riscv_elf_link_hash_table): Add params. > (riscv_elfNN_set_options): New. > (riscv_info_to_howto_rela): Check relax_gp. > (_bfd_riscv_relax_section): Likewise. > * elfxx-riscv.h (struct riscv_elf_params): New. > (riscv_elf32_set_options): New. > (riscv_elf64_set_options): New. > ld/ > * emultempl/riscvelf.em: Add option parsing. > * testsuite/ld-riscv-elf/code-model-relax-medlow-01-norelaxgp.d: New. > * testsuite/ld-riscv-elf/pcgp-relax-01-norelaxgp.d: New. > * testsuite/ld-riscv-elf/pcgp-relax-02.d: Test --relax --relax-gp can be > used together. > --- > bfd/elfnn-riscv.c | 22 ++++++++++--- > bfd/elfxx-riscv.h | 11 +++++++ > ld/emultempl/riscvelf.em | 31 +++++++++++++++++++ > .../code-model-relax-medlow-01-norelaxgp.d | 4 +++ > ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp | 2 ++ > .../ld-riscv-elf/pcgp-relax-01-norelaxgp.d | 18 +++++++++++ > ld/testsuite/ld-riscv-elf/pcgp-relax-02.d | 2 +- > 7 files changed, 84 insertions(+), 6 deletions(-) > create mode 100644 ld/testsuite/ld-riscv-elf/code-model-relax-medlow-01-norelaxgp.d > create mode 100644 ld/testsuite/ld-riscv-elf/pcgp-relax-01-norelaxgp.d > > diff --git a/bfd/elfnn-riscv.c b/bfd/elfnn-riscv.c > index 8f9f0d8a86a..527c3e74e97 100644 > --- a/bfd/elfnn-riscv.c > +++ b/bfd/elfnn-riscv.c > @@ -118,6 +118,9 @@ struct riscv_elf_link_hash_table > { > struct elf_link_hash_table elf; > > + /* Various options and other info passed from the linker. */ > + struct riscv_elf_params *params; > + > /* Short-cuts to get to dynamic linker sections. */ > asection *sdyntdata; > > @@ -157,6 +160,13 @@ struct riscv_elf_link_hash_table > && elf_hash_table_id (elf_hash_table (p)) == RISCV_ELF_DATA) \ > ? (struct riscv_elf_link_hash_table *) (p)->hash : NULL) > > +void > +riscv_elfNN_set_options (struct bfd_link_info *link_info, > + struct riscv_elf_params *params) > +{ > + riscv_elf_hash_table (link_info)->params = params; > +} > + > static bool > riscv_info_to_howto_rela (bfd *abfd, > arelent *cache_ptr, > @@ -4289,7 +4299,9 @@ _bfd_riscv_relax_lui (bfd *abfd, > bool undefined_weak) > { > bfd_byte *contents = elf_section_data (sec)->this_hdr.contents; > - bfd_vma gp = riscv_global_pointer_value (link_info); > + bfd_vma gp = riscv_elf_hash_table (link_info)->params->relax_gp > + ? riscv_global_pointer_value (link_info) > + : 0; > int use_rvc = elf_elfheader (abfd)->e_flags & EF_RISCV_RVC; > > BFD_ASSERT (rel->r_offset + 4 <= sec->size); > @@ -4754,10 +4766,10 @@ _bfd_riscv_relax_section (bfd *abfd, asection *sec, > || type == R_RISCV_TPREL_LO12_I > || type == R_RISCV_TPREL_LO12_S) > relax_func = _bfd_riscv_relax_tls_le; > - else if (!bfd_link_pic (info) > - && (type == R_RISCV_PCREL_HI20 > - || type == R_RISCV_PCREL_LO12_I > - || type == R_RISCV_PCREL_LO12_S)) > + else if ((type == R_RISCV_PCREL_HI20 || type == R_RISCV_PCREL_LO12_I > + || type == R_RISCV_PCREL_LO12_S) > + && !bfd_link_pic (info) > + && riscv_elf_hash_table (info)->params->relax_gp) > relax_func = _bfd_riscv_relax_pc; > else > continue; > diff --git a/bfd/elfxx-riscv.h b/bfd/elfxx-riscv.h > index ea7126bdb4d..f9bd0ad882c 100644 > --- a/bfd/elfxx-riscv.h > +++ b/bfd/elfxx-riscv.h > @@ -27,6 +27,17 @@ > > #define RISCV_UNKNOWN_VERSION -1 > > +struct riscv_elf_params > +{ > + /* Whether to relax code sequences to GP-relative addressing. */ > + bool relax_gp; > +}; > + > +extern void riscv_elf32_set_options (struct bfd_link_info *, > + struct riscv_elf_params *); > +extern void riscv_elf64_set_options (struct bfd_link_info *, > + struct riscv_elf_params *); > + > extern reloc_howto_type * > riscv_reloc_name_lookup (bfd *, const char *); > > diff --git a/ld/emultempl/riscvelf.em b/ld/emultempl/riscvelf.em > index 645a807f239..37a0fd08e96 100644 > --- a/ld/emultempl/riscvelf.em > +++ b/ld/emultempl/riscvelf.em > @@ -25,6 +25,35 @@ fragment < #include "elf/riscv.h" > #include "elfxx-riscv.h" > > +static struct riscv_elf_params params = { .relax_gp = 1 }; > +EOF > + > +# Define some shell vars to insert bits of code into the standard elf > +# parse_args and list_options functions. */ > +PARSE_AND_LIST_PROLOGUE=${PARSE_AND_LIST_PROLOGUE}' > +enum risccv_opt > +{ > + OPTION_RELAX_GP = 321, > + OPTION_NO_RELAX_GP, > +}; > +' > + > +PARSE_AND_LIST_LONGOPTS=${PARSE_AND_LIST_LONGOPTS}' > + { "relax-gp", no_argument, NULL, OPTION_RELAX_GP }, > + { "no-relax-gp", no_argument, NULL, OPTION_NO_RELAX_GP }, > +' > + > +PARSE_AND_LIST_ARGS_CASES=${PARSE_AND_LIST_ARGS_CASES}' > + case OPTION_RELAX_GP: > + params.relax_gp = 1; > + break; > + > + case OPTION_NO_RELAX_GP: > + params.relax_gp = 0; > + break; > +' > + > +fragment < static void > riscv_elf_before_allocation (void) > { > @@ -96,6 +125,8 @@ riscv_create_output_section_statements (void) > " whilst linking %s binaries\n"), "RISC-V"); > return; > } > + > + riscv_elf${ELFSIZE}_set_options (&link_info, ¶ms); > } > > EOF > diff --git a/ld/testsuite/ld-riscv-elf/code-model-relax-medlow-01-norelaxgp.d b/ld/testsuite/ld-riscv-elf/code-model-relax-medlow-01-norelaxgp.d > new file mode 100644 > index 00000000000..8e40cc5f32d > --- /dev/null > +++ b/ld/testsuite/ld-riscv-elf/code-model-relax-medlow-01-norelaxgp.d > @@ -0,0 +1,4 @@ > +#source: code-model.s > +#as: -march=rv64i -mabi=lp64 --defsym __medlow__=1 > +#ld: -Tcode-model-01.ld -melf64lriscv --no-relax-gp --relax > +#error: .*relocation truncated to fit: R_RISCV_HI20 against `symbolL' > diff --git a/ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp b/ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp > index 272424b33e3..1711d12ba23 100644 > --- a/ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp > +++ b/ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp > @@ -122,6 +122,7 @@ if [istarget "riscv*-*-*"] { > run_dump_test "align-small-region" > run_dump_test "call-relax" > run_dump_test "pcgp-relax-01" > + run_dump_test "pcgp-relax-01-norelaxgp" > run_dump_test "pcgp-relax-02" > run_dump_test "c-lui" > run_dump_test "c-lui-2" > @@ -141,6 +142,7 @@ if [istarget "riscv*-*-*"] { > run_dump_test "code-model-medany-weakref-01" > run_dump_test "code-model-medany-weakref-02" > run_dump_test "code-model-relax-medlow-01" > + run_dump_test "code-model-relax-medlow-01-norelaxgp" > run_dump_test "code-model-relax-medlow-02" > run_dump_test "code-model-relax-medlow-weakref-01" > run_dump_test "code-model-relax-medlow-weakref-02" > diff --git a/ld/testsuite/ld-riscv-elf/pcgp-relax-01-norelaxgp.d b/ld/testsuite/ld-riscv-elf/pcgp-relax-01-norelaxgp.d > new file mode 100644 > index 00000000000..d1344576ff3 > --- /dev/null > +++ b/ld/testsuite/ld-riscv-elf/pcgp-relax-01-norelaxgp.d > @@ -0,0 +1,18 @@ > +#source: pcgp-relax-01.s > +#ld: --no-relax-gp --relax > +#objdump: -d -Mno-aliases > + > +.*:[ ]+file format .* > + > + > +Disassembly of section \.text: > + > +0+[0-9a-f]+ <_start>: > +.*:[ ]+[0-9a-f]+[ ]+addi[ ]+a0,a0,[0-9]+ > +.*:[ ]+[0-9a-f]+[ ]+jal[ ]+ra,[0-9a-f]+ <_start> > +.*:[ ]+[0-9a-f]+[ ]+auipc[ ]+a1,0x[0-9a-f]+ > +.*:[ ]+[0-9a-f]+[ ]+addi[ ]+a1,a1,[0-9]+ # [0-9a-f]+ > +.*:[ ]+[0-9a-f]+[ ]+lui[ ]+a2,0x[0-9a-f]+ > +.*:[ ]+[0-9a-f]+[ ]+addi[ ]+a2,a2,[0-9]+ # [0-9a-f]+ > +.*:[ ]+[0-9a-f]+[ ]+addi[ ]+a3,tp,0 # 0 > +.*:[ ]+[0-9a-f]+[ ]+auipc[ ]+a0,0x[0-9a-f]+ > diff --git a/ld/testsuite/ld-riscv-elf/pcgp-relax-02.d b/ld/testsuite/ld-riscv-elf/pcgp-relax-02.d > index c6c73c54265..984d457aed9 100644 > --- a/ld/testsuite/ld-riscv-elf/pcgp-relax-02.d > +++ b/ld/testsuite/ld-riscv-elf/pcgp-relax-02.d > @@ -1,6 +1,6 @@ > #source: pcgp-relax-02.s > #as: > -#ld: --relax > +#ld: --relax --relax-gp > #objdump: -d > > .*:[ ]+file format .* > -- > 2.37.0.144.g8ac04bfd2-goog > Ping. I maintain lld/ELF and we are considering a new opt-in option --relax-gp to perform GP relaxation. It will be opt-in since many users don't find the relaxation useful and some feel GP relaxation will conflict with using GP for other purposes (some ABI variants). I wish that the two linkers agree on the same options.