From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.109.102]) by sourceware.org (Postfix) with ESMTPS id 6CB343857C71 for ; Fri, 4 Mar 2022 13:35:59 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 6CB343857C71 Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05lp2106.outbound.protection.outlook.com [104.47.18.106]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-15-AlLXU258OV6Q-XnNCcSKEA-1; Fri, 04 Mar 2022 14:35:57 +0100 X-MC-Unique: AlLXU258OV6Q-XnNCcSKEA-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=SN1T+A7FxxCXxa+aDujCZtb63wpJCsqd+WA3gD8TqGMH2/gRlFMG3mAfbQ3RZNjbvZCaH+swexaV2BLgIhXbxUYO7PyQtYzJBn+/6MC4zDvEinBRiGjEwGAlSP8765ewhTZylkDZJlx3u2PuHZ1Qcw9zp6P3FtpE5io55zdH+X97jRVAlBnJKb+PvgrBacFVgW2NccHuV1Fl74lfi+8oSatHen2J4KROslJieWf401joJz5FQIvbbfnu9DxvNtoVpUGykIxl8B55hzh0mNvGh9MOeP3BSlTC3o42z2kBYEimMIHX8h0eBuIkOxVwxIUzmxqeZG9ucEWAO//4A5RYDA== 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=azP9zOBBMmhp0WNSGLK6B4cK3ecQTnUpN3alWIlsdw4=; b=NY+WYa1HRhMWJ7mLDHmXmvx+PkwENQG/zFsbKBQjvm2T8qtqKUgRXTfOGsosWDbWe8ioxB2fdX8e1qz+66RE+3ZA4vrcO8aNkNm1PwqzrbUB0zO+AnnWL8vIerdiClk8Ebu0V44Dptiioj9mil7GxDkEFjxTOeePNY89NKALj3ldu7eo9M1LfO45Yhxz7yLz5ihNiA/Vuer/79b/EiLh6thludXmcsUqLmFbb8nBhmL7TxDLoSTCO4O4La07bEqPjm0Ol+4D3wFmaLn4GUhB1f1mUet/uekIkJF4QJzlJYuj6G17O9pzpnqk3JbfFMPKUZGdJG+w9j63Rdc0U5VaRA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) by DB9PR04MB9474.eurprd04.prod.outlook.com (2603:10a6:10:368::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5038.16; Fri, 4 Mar 2022 13:35:56 +0000 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::d479:b728:345c:bd65]) by VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::d479:b728:345c:bd65%6]) with mapi id 15.20.5038.017; Fri, 4 Mar 2022 13:35:56 +0000 Message-ID: Date: Fri, 4 Mar 2022 14:35:55 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.6.1 Subject: [PATCH v2 3/3] x86/ELF: permit correct overflow checking for 16-bit PC-relative relocs Content-Language: en-US To: Binutils References: From: Jan Beulich In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-ClientProxiedBy: AM6P194CA0020.EURP194.PROD.OUTLOOK.COM (2603:10a6:209:90::33) To VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 7102952e-fa40-41a3-9f70-08d9fde3e944 X-MS-TrafficTypeDiagnostic: DB9PR04MB9474:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: oeLTGX/5t/9UXO8VCX7rgjKebFG3F5+GIiGAO7JckupMODL5l0b8WFVp+nC0BGVZKZRc7V2I7B9qTY9YG0ejNyz4pVTYcSrGYAKXPLFT1uXGMu32XhuvBQNf5vMap9q5MtizTiLuGql58kHszGgKPzHNewoG2R5UU8HnYGoOCBPRjCPDP6OnPVF52vSdEQtMXwAez/Qpacw2hmSZfvtG6HIif5QLfJkUFg/o1WBW3t+fQa1NhbuWF5LpnXo01m303v85E5GchIkawWWxKhj3vyctuZ5QFqCTb4rsJsswWomtkgd5Mo3sfsTMqnR6uqLyw//KNcqtl8fcFQ25qUL6Rnym6CEzLR+gv2YCfOdXQhfDqvxehdkFNLQDPkqHuIACr7LdqbldhzYIlPlWxU114fwtOgIzagS2Qam6qG4BY71ateiOZOhW3ppd4XlM7XuvleE4CAcJl+X3KDxdg11Dbae+ZVk6HbBBKvQ/+wy8QcitJVpvZpchY9pveXiTvJYBR6CtAcqBLdp+AkRZN6oEg34LBxTlBCvYB+buIn6vm9Fqi9Cu4+HKYOFmFlfML1imhLd/cXwQ3vHr1YaneB2NrWmxtzQp1BwdFvYZ9LKZzK2COJyNP7HR704Bk34t+hWXDTn6f0k0kAcM+8IJbq9CBNFsWVH+GaALGye04lQxc1ajz+As+w+LsEsa7/hf7HDgIT148Znhi2vKZkhixDQqi+4obXA9Xhn0au8sLPsJFgJL02OsQkXEx11iPT36A++l X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:VI1PR04MB5600.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230001)(366004)(31696002)(38100700002)(83380400001)(8936002)(6916009)(66946007)(66556008)(8676002)(31686004)(66476007)(4326008)(36756003)(5660300002)(316002)(2906002)(86362001)(2616005)(186003)(26005)(508600001)(6486002)(6506007)(6512007)(45980500001)(43740500002); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?RDJJTXlyNTNxYVQ1em1rNFl1UjU0RHVtakhTdC9jckw4YnYrK1kxY0xPREpI?= =?utf-8?B?QkRUY3dLdkpIWU9TUnIzNTV5eVVVdmh2dldWRUFBc0hob1hQOVU2amNXeFhK?= =?utf-8?B?UXVlRzNKQVJwa1Rad3lwa3JNcW1Ob29rMmJjVUdhWW0zYU5YWEhVbk5tTWt0?= =?utf-8?B?RG5ZdXhkbmRFZzJlekk5ZlE4S25vUGJjQ2VpZWFMWUgyQXl2R0ZiZ1g2eDlv?= =?utf-8?B?N2ZyelJvdmZQSFBJalB2Y1MzL1dZdVFuYkFPNTRGV2RkZy9qMk8wWWpjdmpx?= =?utf-8?B?TWFYWHphYzNjNTc4eTRmWEhhQTFudTlscnAzN0ZQSEVSRi9NaWVpeFFUcEpu?= =?utf-8?B?bXVOUlozOFo0dktkdHBhOUZueEY5OXQrVXJTSG9UbENTOWVBOFl3Y1oxZUpM?= =?utf-8?B?RVZQY0QyZng1b285WEkzQ0ZBOXI5cWdnNklURXQxQkpOUUp6dldNZHd2M09v?= =?utf-8?B?d3hsUndBNTF0RjZ2VW9BemlUQkxNeDlVc1B6UmpZNThEM3VQRjlUVmZpR1Nr?= =?utf-8?B?cmxCcFJZaUVFeXVFRzh0WndDOFF1LzArR01sa1EraTI4TUtSMlQ5cDJZM3p1?= =?utf-8?B?Kzc0WVZCU3RzOTQwSDVLWVVmQ2xFZ3RSaUtScTluZWxPT1VTZy8wckluT0Rz?= =?utf-8?B?NG85OS9kT0tZQTZRNzkrZ2gvWkRUdEw1N0h4Mi9TTDMxaEpxRy9TYmJSQVlr?= =?utf-8?B?YXJiVkNZUzF1MUdkWGhzeHlnR3JBRXgyYWpoODlrWHltN3RkNkR3MEFNTWhp?= =?utf-8?B?RlFPdWk0NVBBbUVkQ1Uwdlk0TVlKVTEyREhFelk1TXhtdUZQZ3FSY3JiYjJO?= =?utf-8?B?MjhBZHRYelI0UlJjTGoyejVOL2tSWFlGZDRRZ3VVNC9wUG12YXJUMmIvMEtp?= =?utf-8?B?LzhsdVEvcTQyMWxQVUlVdTQ0L3o3UVltc3QxOHZiOXZMeDlyN3p0ck0xQUM1?= =?utf-8?B?eVkzSVVFSzBJaVN1S2JPcWFGdkFRMmVvQjhvd1NRZzZPL2JrN0tRMnFNUDh1?= =?utf-8?B?aUtMNXFmaGx2SmxJbk04SEJUczVpNXRHOFVwaEpjT3hWOWgwRXdyMjFuVVZQ?= =?utf-8?B?RG1Wd2ZYbSt6SmpKMFI1R0Roa0hpMVd6S2M0anlWcEJEYmJPZzNtczZXRGlJ?= =?utf-8?B?WVpDM25TYXFHMlNVbURZRkt5Y1NJSDMrbmU3YmR4QTBBRWZ6ZHl5S01iTHRV?= =?utf-8?B?NW5xTktBK3YzVFFybWZFOVZyNTdpb0ZOZmhSMzM5dlJSa3hma1lsbTNuM1Ev?= =?utf-8?B?WXp6ZW8zdW1jdlZzMmJHNmxYdWVrMjcxQmpnOXVkd282Qk9lZkIxMmRQZ3Jw?= =?utf-8?B?NEZNZ0kwSWxrYXU4T1R5WHBxKytKM2Y0K3ErcmlDOElOWVRSYTBRd1lpc1A2?= =?utf-8?B?bXU1MVplMUoyOFBzOGRFMTkyZXh0dTJOd0lpUk80eW1mbUhEYUdxczhDa0pP?= =?utf-8?B?aWMzMWpyZzVpazVqUTBFWE1qMC9nbUZpVmxPVFg5NE0yQkJmV05zQTU4SVNG?= =?utf-8?B?cXlkNnF6eThZMXBwZUhyTk5BU3VIdHhiS1pZcVd4ODBnZ0FkbVF6TXlxaWxC?= =?utf-8?B?NzhvTUtuRnJrdHBnMDEzekhBT1JSK0ZLdU4rd2VBSUZFdmxUNkNLZGozaExp?= =?utf-8?B?U25DRHhlTzFxN1hZUDgwQjNWL091RXMxMDZsVlhyQmgwZ29iNVIvNVFiUTlq?= =?utf-8?B?NUZTWFkyWnlWajJwZjFjNkNPbVhNTGt1TlZHU3BhcGlFQWNnV2VUd2o2TDU0?= =?utf-8?B?THNCTnpOdytzUkNmTmF2SE1taXlXRWdrUUhkOXlvbExCeHhER1RUbzJNQXlx?= =?utf-8?B?ckI0amtJYXI5S3hndE5Gek1iRnRJckdoUnVQWiszYytaOUgyUDdiYXpNYmt6?= =?utf-8?B?Ti9OU1d1U3M5ZTZHSjhvdzJCYzlTTGNvNktiYThVNmZldU5FZG8yaUZ2eFlW?= =?utf-8?B?Q1dkcWtvZ0lXUzYrQjVCdUpJOXUyTXhoL05xUTN6M1A0Mjl4aFg4dC9XUGRw?= =?utf-8?B?SllZbzExdXN4VWl1TkplWGorVWFGaVVBZUJoTGVzalhSVytjZWd4d1RhUERU?= =?utf-8?B?UVEvWHhPcWhrNjBPaTUxa2Jhcm5kTUd1Y0pmcU1wUVpPMjk3dGl5WUlsTFR5?= =?utf-8?B?bzFGNzI5RUgzRXEvbkJOTFRZaWprUEtSNnUzazI0VU9mUS9XcHp4elV5WmZO?= =?utf-8?Q?uxzgjHq5WKKTsAYWEKVEMSk=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7102952e-fa40-41a3-9f70-08d9fde3e944 X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Mar 2022 13:35:56.3877 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: XjYiWr7GEnfJSkv9O0J+4lenuYyCfieaTZiohcT5Lj5TUJwjGX25yFGHvY3TV9ZYe28Ede9w8M5ApnOfWgs3wQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR04MB9474 X-Spam-Status: No, score=-3032.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H5, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE 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: Fri, 04 Mar 2022 13:36:01 -0000 The only insn requiring a truly 16-bit PC-relative relocation outside of 16-bit mode is XBEGIN (with an operand size override). For it, the relocation generated should behave similar to 8- and (for 64-bit) 32-bit PC-relatives ones, i.e. be checked for a signed value to fit the field. The relocation type, however, has been (ab)used by 16-bit code, assuming wraparound at 16-bit segment boundaries. Proper overflow checks aren't possible in this case, so introduce a command line option allowing to have the linker apply strict checking. --- TBD: Like for the earlier PC32 patch, I didn't put thoughts yet into also making this work when linking ELF to PE. --- v2: Re-base and split. --- a/bfd/elf-linker-x86.h +++ b/bfd/elf-linker-x86.h @@ -28,11 +28,12 @@ enum elf_x86_prop_report prop_report_shstk = 1 << 3 /* Report missing SHSTK property. */ }; -/* Control of PC32 (on 64-bit) overflow check strictness. */ +/* Control of PC16 (and PC32 on 64-bit) overflow check strictness. */ enum elf_x86_pcrel_relocs { pcrel_relocs_default, pcrel_relocs_lax, + pcrel_relocs_strict, }; /* Used to pass x86-specific linker options from ld to bfd. */ @@ -71,7 +72,7 @@ struct elf_linker_x86_params /* Report relative relocations. */ unsigned int report_relative_reloc : 1; - /* Strictness of PC32 (on 64-bit) overflow checks. */ + /* Strictness of PC16 (and PC32 on 64-bit) overflow checks. */ enum elf_x86_pcrel_relocs pcrel_relocs; /* X86-64 ISA level needed. */ --- a/bfd/elf32-i386.c +++ b/bfd/elf32-i386.c @@ -179,6 +179,10 @@ static reloc_howto_type elf_howto_table[ }; +static reloc_howto_type elf_howto_pc16_strict = + HOWTO(R_386_PC16, 0, 1, 16, true, 0, complain_overflow_signed, + bfd_elf_generic_reloc, "R_386_PC16", true, 0xffff, 0xffff, true); + #ifdef DEBUG_GEN_RELOC #define TRACE(str) \ fprintf (stderr, "i386 bfd reloc lookup %d (%s)\n", code, str) @@ -270,8 +274,14 @@ elf_i386_reloc_type_lookup (bfd *abfd, return &elf_howto_table[R_386_16 - R_386_ext_offset]; case BFD_RELOC_16_PCREL: + { + const struct elf_linker_x86_params *params = elf_x86_tdata (abfd)->params; + TRACE ("BFD_RELOC_16_PCREL"); + if (params && params->pcrel_relocs == pcrel_relocs_strict) + return &elf_howto_pc16_strict; return &elf_howto_table[R_386_PC16 - R_386_ext_offset]; + } case BFD_RELOC_8: TRACE ("BFD_RELOC_8"); @@ -349,21 +359,32 @@ elf_i386_reloc_type_lookup (bfd *abfd, } static reloc_howto_type * -elf_i386_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, - const char *r_name) +elf_i386_reloc_override (const bfd *abfd, reloc_howto_type *howto) +{ + const struct elf_linker_x86_params *params = elf_x86_tdata (abfd)->params; + + if (howto->type != R_386_PC16 || params == NULL + || params->pcrel_relocs != pcrel_relocs_strict) + return howto; + + return &elf_howto_pc16_strict; +} + +static reloc_howto_type * +elf_i386_reloc_name_lookup (bfd *abfd, const char *r_name) { unsigned int i; for (i = 0; i < sizeof (elf_howto_table) / sizeof (elf_howto_table[0]); i++) if (elf_howto_table[i].name != NULL && strcasecmp (elf_howto_table[i].name, r_name) == 0) - return &elf_howto_table[i]; + return elf_i386_reloc_override (abfd, &elf_howto_table[i]); return NULL; } static reloc_howto_type * -elf_i386_rtype_to_howto (unsigned r_type) +elf_i386_rtype_to_howto (bfd *abfd, unsigned r_type) { unsigned int indx; @@ -378,7 +399,7 @@ elf_i386_rtype_to_howto (unsigned r_type /* PR 17512: file: 0f67f69d. */ if (elf_howto_table [indx].type != r_type) return NULL; - return &elf_howto_table[indx]; + return elf_i386_reloc_override (abfd, &elf_howto_table[indx]); } static bool @@ -388,7 +409,7 @@ elf_i386_info_to_howto_rel (bfd *abfd, { unsigned int r_type = ELF32_R_TYPE (dst->r_info); - if ((cache_ptr->howto = elf_i386_rtype_to_howto (r_type)) == NULL) + if ((cache_ptr->howto = elf_i386_rtype_to_howto (abfd, r_type)) == NULL) { /* xgettext:c-format */ _bfd_error_handler (_("%pB: unsupported relocation type %#x"), @@ -1136,8 +1157,8 @@ elf_i386_tls_transition (struct bfd_link reloc_howto_type *from, *to; const char *name; - from = elf_i386_rtype_to_howto (from_type); - to = elf_i386_rtype_to_howto (to_type); + from = elf_i386_rtype_to_howto (abfd, from_type); + to = elf_i386_rtype_to_howto (abfd, to_type); if (h) name = h->root.root.string; @@ -1476,6 +1497,9 @@ elf_i386_scan_relocs (bfd *abfd, BFD_ASSERT (is_x86_elf (abfd, htab)); + /* Make command line controlled settings accessible from the object. */ + elf_x86_tdata (abfd)->params = htab->params; + /* Get the section contents. */ if (elf_section_data (sec)->this_hdr.contents != NULL) contents = elf_section_data (sec)->this_hdr.contents; @@ -2075,7 +2099,7 @@ elf_i386_relocate_section (bfd *output_b continue; } - howto = elf_i386_rtype_to_howto (r_type); + howto = elf_i386_rtype_to_howto (input_bfd, r_type); if (howto == NULL) return _bfd_unrecognized_reloc (input_bfd, input_section, r_type); --- a/bfd/elf64-x86-64.c +++ b/bfd/elf64-x86-64.c @@ -193,6 +193,10 @@ static reloc_howto_type x86_64_howto_32_ bfd_elf_generic_reloc, "R_X86_64_32", false, 0, 0xffffffff, false); +static reloc_howto_type x86_64_howto_pc16_strict = + HOWTO(R_X86_64_PC16, 0, 1, 16, true, 0, complain_overflow_signed, + bfd_elf_generic_reloc, "R_X86_64_PC16", false, 0, 0xffff, true); + static reloc_howto_type x86_64_howto_pc32_lax = HOWTO(R_X86_64_PC32, 0, 2, 32, true, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_X86_64_PC32", false, 0, 0xffffffff, true); @@ -272,6 +276,11 @@ elf_x86_64_reloc_override (const bfd *ab break; return &x86_64_howto_32_x32; + case R_X86_64_PC16: + if (params == NULL || params->pcrel_relocs != pcrel_relocs_strict) + break; + return &x86_64_howto_pc16_strict; + case R_X86_64_PC32: if (params == NULL || params->pcrel_relocs != pcrel_relocs_lax) break; --- a/ld/emulparams/elf_i386.sh +++ b/ld/emulparams/elf_i386.sh @@ -1,6 +1,7 @@ source_sh ${srcdir}/emulparams/plt_unwind.sh source_sh ${srcdir}/emulparams/extern_protected_data.sh source_sh ${srcdir}/emulparams/dynamic_undefined_weak.sh +source_sh ${srcdir}/emulparams/pcrel-relocs.sh source_sh ${srcdir}/emulparams/call_nop.sh source_sh ${srcdir}/emulparams/cet.sh source_sh ${srcdir}/emulparams/x86-report-relative.sh --- a/ld/emulparams/pcrel-relocs.sh +++ b/ld/emulparams/pcrel-relocs.sh @@ -1,8 +1,12 @@ PARSE_AND_LIST_OPTIONS_STRICT_PCREL_RELOCS=' fprintf (file, _("\ + -z strict-pcrel-relocs Strict PC-relative relocation overflow checks\n")); + fprintf (file, _("\ -z lax-pcrel-relocs Lax PC-relative relocation overflow checks\n")); ' PARSE_AND_LIST_ARGS_CASE_Z_STRICT_PCREL_RELOCS=' + else if (strcmp (optarg, "strict-pcrel-relocs") == 0) + params.pcrel_relocs = pcrel_relocs_strict; else if (strcmp (optarg, "lax-pcrel-relocs") == 0) params.pcrel_relocs = pcrel_relocs_lax; ' --- a/ld/ld.texi +++ b/ld/ld.texi @@ -1506,6 +1506,13 @@ recommended to use @samp{-z start-stop-v programs and shared libraries so that these symbols are not exported between shared objects, which is not usually what's intended. +@item strict-pcrel-relocs +Tighten relocation overflow checks for 16-bit PC-relative relocations +which, when used by 16-bit code, may require a larger range of values +to be considered valid, preventing proper overflow recognition for +native code . +Supported for ix86 and x86-64 ELF targets. + @item text @itemx notext @itemx textoff --- a/ld/testsuite/ld-i386/pcrel16-2.d +++ b/ld/testsuite/ld-i386/pcrel16-2.d @@ -1,6 +1,5 @@ #name: PCREL16 overflow (2) #as: --32 -#ld: -melf_i386 +#ld: -melf_i386 -z strict-pcrel-relocs #error: .*relocation truncated to fit: R_386_PC16 .*t16.* #error: .*relocation truncated to fit: R_386_PC16 .*_start.* -#xfail: *-*-* --- a/ld/testsuite/ld-x86-64/pcrel16-2.d +++ b/ld/testsuite/ld-x86-64/pcrel16-2.d @@ -1,6 +1,5 @@ #name: PCREL16 overflow (2) #source: ../ld-i386/pcrel16-2.s -#ld: +#ld: -z strict-pcrel-relocs #error: .*relocation truncated to fit: R_X86_64_PC16 .*t16.* #error: .*relocation truncated to fit: R_X86_64_PC16 .*_start.* -#xfail: *-*-*