From patchwork Wed Oct 26 05:10:59 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alan Modra X-Patchwork-Id: 11064 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:6687:0:0:0:0:0 with SMTP id l7csp62972wru; Tue, 25 Oct 2022 22:11:16 -0700 (PDT) X-Google-Smtp-Source: AMsMyM75Lex/bSwXLUN0Yo8+dMtWB+hwpXC9Gz9BBHwtdEhVX4Ng90GQ5nxG7HDi2bMNOfVTSas1 X-Received: by 2002:a50:fe99:0:b0:45c:329a:40f6 with SMTP id d25-20020a50fe99000000b0045c329a40f6mr38957683edt.425.1666761076674; Tue, 25 Oct 2022 22:11:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1666761076; cv=none; d=google.com; s=arc-20160816; b=l9yu5q84wgIFrsBZTT5S+Gft+LIGnoxymlfmMjZ/JWjHN0n7sPFXCKbwVbuLlXM7kc ivzSGochyU9QPVGAqNbsLG538hkHPKDsCvddaW2xpgrdncNfUvGlMFfpOLpWqZPsXI8R Gih9GGGn1IxIDSlDBpqjfNrLNLoKAk2UJiURSWLgBukTzynn3P829cVzfhiTlNKVrXcz f9MgN08izStHcMzR8/TxqS7WvUApNDbu+X0MvK+wL/Veji8C90ew5UWMeNvCrvzlXyDr q6qL8Irvn1lCAfEqIUxQVbljI6b7RcBQnE10uaEuw95CVMqeg9t+wb/nwLXiM+NFkecX QY2g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:reply-to:from:list-subscribe:list-help :list-post:list-archive:list-unsubscribe:list-id:precedence :content-disposition:mime-version:message-id:subject:to:date :dmarc-filter:delivered-to:dkim-signature:dkim-filter; bh=F1EWXyhQx5CrAckW9QzyvBdNQlK5WrYw62NsNRI3hYQ=; b=cdSzKJaJAu0BbrJ7/xv9xSq67eoGDwyHZeRoOQuczjl/Bv9M+Sq7ktuOp6JPACzzof KCxyK3xzlOZyVgS7SyxQNwyeG51A7BI3O0adj9grM9uvuCBNdrxGUQNUv2sYpNJNLHWf aMYNnHRt7G+TZVvAwPMyqIWKNtV7lQpB/eaTXYMTb8LN08FUKTHYANhEAG5yweG/b3Nm VnWRT3/OwvyusGh8I6bteSsOjhSTJkTRxk623aiqqWqDE/K3PXH4XxhJYs9d47Ika7Yx 3N4qK6Akeewc7pHiYNNa9QKE63jTUckmG1EP+7D8eLCExAPzEPfgdxML10UVYakkgLCM 7UHQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@sourceware.org header.s=default header.b="mLyM/e8c"; spf=pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="binutils-bounces+ouuuleilei=gmail.com@sourceware.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=sourceware.org Received: from sourceware.org (ip-8-43-85-97.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id sa23-20020a1709076d1700b0078c8dadd4bbsi4954634ejc.742.2022.10.25.22.11.16 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Oct 2022 22:11:16 -0700 (PDT) Received-SPF: pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 8.43.85.97 as permitted sender) client-ip=8.43.85.97; Authentication-Results: mx.google.com; dkim=pass header.i=@sourceware.org header.s=default header.b="mLyM/e8c"; spf=pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="binutils-bounces+ouuuleilei=gmail.com@sourceware.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 8DAE13865C26 for ; Wed, 26 Oct 2022 05:11:15 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 8DAE13865C26 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1666761075; bh=F1EWXyhQx5CrAckW9QzyvBdNQlK5WrYw62NsNRI3hYQ=; h=Date:To:Subject:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:Cc:From; b=mLyM/e8cf37wRxDGuOSgXh20V+d07+HvAasiTsfzIpD2FtHrrHOG/BRWGemJJuRqr AM0+BLegcSIiY4B3Taxcp5V9XPV326g44M0Svx804qdiyTsaknbFYPT3wDesxEqlP9 sKm/BqZHAPMO6DYOjsvW2r3aKFkjcDtML9WTk3kQ= X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail-pj1-x1035.google.com (mail-pj1-x1035.google.com [IPv6:2607:f8b0:4864:20::1035]) by sourceware.org (Postfix) with ESMTPS id 76F0A3857B9D for ; Wed, 26 Oct 2022 05:11:05 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 76F0A3857B9D Received: by mail-pj1-x1035.google.com with SMTP id m2so9010878pjr.3 for ; Tue, 25 Oct 2022 22:11:05 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-disposition:mime-version:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=F1EWXyhQx5CrAckW9QzyvBdNQlK5WrYw62NsNRI3hYQ=; b=RzFKAp1F0Lts9Jg6GUuDMosCNw7yIZjRaGbcEuKzVEF1ArP7Ya14LAenYWN/FXlTmz IiUvlfrCZkBvs8NxPgfkGuQXgLe/OUths23yOoRU3ZWA1xej+q+4GIvJKhf2TltvnYDF v9qUa+3ID47DqAnpMK9GOy6yUtKNsG/qPXzMueRzr/y3+zIJsORTLU8bObQC19zmVHx9 /ZsUQ+s1+/L48lYW4gbhHI/TYcaEqqZpgPWFrfBs2lLPtbilcoa8Du0lx+6aprKwcxPg GSiVR7vDaVno2p70u3Dn5gUGW51cUaGZKn3orkCBu4oGBDDl5gqyVn+Gsd0upENjF8rc U/Sw== X-Gm-Message-State: ACrzQf3pRnhvmrZJEyu1WLS4R0vDoZ3F/Gq6f/YyZvChIz4UVIeYsZ3A c1k77YTjywNZkRUYDkBvCclgWk2FSFw= X-Received: by 2002:a17:90b:4b47:b0:20a:cfcb:8561 with SMTP id mi7-20020a17090b4b4700b0020acfcb8561mr2138593pjb.55.1666761064523; Tue, 25 Oct 2022 22:11:04 -0700 (PDT) Received: from squeak.grove.modra.org ([2406:3400:51d:8cc0:a3ea:1d22:1394:10bb]) by smtp.gmail.com with ESMTPSA id m11-20020a63ed4b000000b0044046aec036sm2053580pgk.81.2022.10.25.22.11.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Oct 2022 22:11:02 -0700 (PDT) Received: by squeak.grove.modra.org (Postfix, from userid 1000) id 48C321142D9C; Wed, 26 Oct 2022 15:40:59 +1030 (ACDT) Date: Wed, 26 Oct 2022 15:40:59 +1030 To: binutils@sourceware.org Subject: som.c reloc sanity checking Message-ID: MIME-Version: 1.0 Content-Disposition: inline X-Spam-Status: No, score=-3036.1 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, UPPERCASE_75_100 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-Patchwork-Original-From: Alan Modra via Binutils From: Alan Modra Reply-To: Alan Modra Cc: Dave Anglin , Jeff Law Errors-To: binutils-bounces+ouuuleilei=gmail.com@sourceware.org Sender: "Binutils" X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1747725662424364502?= X-GMAIL-MSGID: =?utf-8?q?1747725662424364502?= This patch checks that relocations emitted in som_write_fixups have offsets that are monotonic and within a section. To do that properly using bfd_reloc_offset_in_range it is necessary to set the reloc howto size field, which isn't used otherwise by the som backend. Note that the sizes used are not exactly those in the old sizing switch statement deleted from som_write_fixups, but all relocs handled by the main switch statement there get the same size. Most unhandled relocs get a zero size (exceptions being R_RELOCATION, R_SPACE_REF, R_MILLI_REL, R_BREAKPOINT which all involve writing one word according to my SOM reference). I figure it doesn't matter since any unhandled reloc is converted to 0xff R_RESERVED, and a default of zero is better for a "don't know" reloc. Besides tidying the code, stringizing name from type in SOM_HOWTO fixes R_REPEATED_INIT name. * som.c (SOM_HOWTO): Add SIZE arg, delete NAME. Stringize type to name. (som_hppa_howto_table): Update with sizes. (som_write_fixups): Delete sizing switch statement. Sanity check bfd_reloc address against subsection size. diff --git a/bfd/som.c b/bfd/som.c index b9114e630fe..b3a72e36ede 100644 --- a/bfd/som.c +++ b/bfd/som.c @@ -635,267 +635,268 @@ static const int comp3_opcodes[] = #define R_SHORT_PCREL_MODE 0x3e #endif -#define SOM_HOWTO(TYPE, NAME) \ - HOWTO(TYPE, 0, 0, 32, false, 0, 0, hppa_som_reloc, NAME, false, 0, 0, false) +#define SOM_HOWTO(SIZE, TYPE) \ + HOWTO(TYPE, 0, SIZE, 32, false, 0, 0, hppa_som_reloc, \ + #TYPE, false, 0, 0, false) static reloc_howto_type som_hppa_howto_table[] = { - SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"), - SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"), - SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"), - SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"), - SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"), - SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"), - SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"), - SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"), - SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"), - SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"), - SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"), - SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"), - SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"), - SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"), - SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"), - SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"), - SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"), - SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"), - SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"), - SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"), - SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"), - SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"), - SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"), - SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"), - SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"), - SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"), - SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"), - SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"), - SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"), - SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"), - SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"), - SOM_HOWTO (R_NO_RELOCATION, "R_NO_RELOCATION"), - SOM_HOWTO (R_ZEROES, "R_ZEROES"), - SOM_HOWTO (R_ZEROES, "R_ZEROES"), - SOM_HOWTO (R_UNINIT, "R_UNINIT"), - SOM_HOWTO (R_UNINIT, "R_UNINIT"), - SOM_HOWTO (R_RELOCATION, "R_RELOCATION"), - SOM_HOWTO (R_DATA_ONE_SYMBOL, "R_DATA_ONE_SYMBOL"), - SOM_HOWTO (R_DATA_ONE_SYMBOL, "R_DATA_ONE_SYMBOL"), - SOM_HOWTO (R_DATA_PLABEL, "R_DATA_PLABEL"), - SOM_HOWTO (R_DATA_PLABEL, "R_DATA_PLABEL"), - SOM_HOWTO (R_SPACE_REF, "R_SPACE_REF"), - SOM_HOWTO (R_REPEATED_INIT, "REPEATED_INIT"), - SOM_HOWTO (R_REPEATED_INIT, "REPEATED_INIT"), - SOM_HOWTO (R_REPEATED_INIT, "REPEATED_INIT"), - SOM_HOWTO (R_REPEATED_INIT, "REPEATED_INIT"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_PCREL_CALL, "R_PCREL_CALL"), - SOM_HOWTO (R_PCREL_CALL, "R_PCREL_CALL"), - SOM_HOWTO (R_PCREL_CALL, "R_PCREL_CALL"), - SOM_HOWTO (R_PCREL_CALL, "R_PCREL_CALL"), - SOM_HOWTO (R_PCREL_CALL, "R_PCREL_CALL"), - SOM_HOWTO (R_PCREL_CALL, "R_PCREL_CALL"), - SOM_HOWTO (R_PCREL_CALL, "R_PCREL_CALL"), - SOM_HOWTO (R_PCREL_CALL, "R_PCREL_CALL"), - SOM_HOWTO (R_PCREL_CALL, "R_PCREL_CALL"), - SOM_HOWTO (R_PCREL_CALL, "R_PCREL_CALL"), - SOM_HOWTO (R_PCREL_CALL, "R_PCREL_CALL"), - SOM_HOWTO (R_PCREL_CALL, "R_PCREL_CALL"), - SOM_HOWTO (R_PCREL_CALL, "R_PCREL_CALL"), - SOM_HOWTO (R_PCREL_CALL, "R_PCREL_CALL"), - SOM_HOWTO (R_SHORT_PCREL_MODE, "R_SHORT_PCREL_MODE"), - SOM_HOWTO (R_LONG_PCREL_MODE, "R_LONG_PCREL_MODE"), - SOM_HOWTO (R_ABS_CALL, "R_ABS_CALL"), - SOM_HOWTO (R_ABS_CALL, "R_ABS_CALL"), - SOM_HOWTO (R_ABS_CALL, "R_ABS_CALL"), - SOM_HOWTO (R_ABS_CALL, "R_ABS_CALL"), - SOM_HOWTO (R_ABS_CALL, "R_ABS_CALL"), - SOM_HOWTO (R_ABS_CALL, "R_ABS_CALL"), - SOM_HOWTO (R_ABS_CALL, "R_ABS_CALL"), - SOM_HOWTO (R_ABS_CALL, "R_ABS_CALL"), - SOM_HOWTO (R_ABS_CALL, "R_ABS_CALL"), - SOM_HOWTO (R_ABS_CALL, "R_ABS_CALL"), - SOM_HOWTO (R_ABS_CALL, "R_ABS_CALL"), - SOM_HOWTO (R_ABS_CALL, "R_ABS_CALL"), - SOM_HOWTO (R_ABS_CALL, "R_ABS_CALL"), - SOM_HOWTO (R_ABS_CALL, "R_ABS_CALL"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"), - SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"), - SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"), - SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"), - SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"), - SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"), - SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"), - SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"), - SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"), - SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"), - SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"), - SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"), - SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"), - SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"), - SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"), - SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"), - SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"), - SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"), - SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"), - SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"), - SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"), - SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"), - SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"), - SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"), - SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"), - SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"), - SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"), - SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"), - SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"), - SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"), - SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"), - SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"), - SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"), - SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"), - SOM_HOWTO (R_DATA_GPREL, "R_DATA_GPREL"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_DLT_REL, "R_DLT_REL"), - SOM_HOWTO (R_DLT_REL, "R_DLT_REL"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"), - SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"), - SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"), - SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"), - SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"), - SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"), - SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"), - SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"), - SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"), - SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"), - SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"), - SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"), - SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"), - SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"), - SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"), - SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"), - SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"), - SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"), - SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"), - SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"), - SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"), - SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"), - SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"), - SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"), - SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"), - SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"), - SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"), - SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"), - SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"), - SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"), - SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"), - SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"), - SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"), - SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"), - SOM_HOWTO (R_CODE_ONE_SYMBOL, "R_CODE_ONE_SYMBOL"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_MILLI_REL, "R_MILLI_REL"), - SOM_HOWTO (R_MILLI_REL, "R_MILLI_REL"), - SOM_HOWTO (R_CODE_PLABEL, "R_CODE_PLABEL"), - SOM_HOWTO (R_CODE_PLABEL, "R_CODE_PLABEL"), - SOM_HOWTO (R_BREAKPOINT, "R_BREAKPOINT"), - SOM_HOWTO (R_ENTRY, "R_ENTRY"), - SOM_HOWTO (R_ENTRY, "R_ENTRY"), - SOM_HOWTO (R_ALT_ENTRY, "R_ALT_ENTRY"), - SOM_HOWTO (R_EXIT, "R_EXIT"), - SOM_HOWTO (R_BEGIN_TRY, "R_BEGIN_TRY"), - SOM_HOWTO (R_END_TRY, "R_END_TRY"), - SOM_HOWTO (R_END_TRY, "R_END_TRY"), - SOM_HOWTO (R_END_TRY, "R_END_TRY"), - SOM_HOWTO (R_BEGIN_BRTAB, "R_BEGIN_BRTAB"), - SOM_HOWTO (R_END_BRTAB, "R_END_BRTAB"), - SOM_HOWTO (R_STATEMENT, "R_STATEMENT"), - SOM_HOWTO (R_STATEMENT, "R_STATEMENT"), - SOM_HOWTO (R_STATEMENT, "R_STATEMENT"), - SOM_HOWTO (R_DATA_EXPR, "R_DATA_EXPR"), - SOM_HOWTO (R_CODE_EXPR, "R_CODE_EXPR"), - SOM_HOWTO (R_FSEL, "R_FSEL"), - SOM_HOWTO (R_LSEL, "R_LSEL"), - SOM_HOWTO (R_RSEL, "R_RSEL"), - SOM_HOWTO (R_N_MODE, "R_N_MODE"), - SOM_HOWTO (R_S_MODE, "R_S_MODE"), - SOM_HOWTO (R_D_MODE, "R_D_MODE"), - SOM_HOWTO (R_R_MODE, "R_R_MODE"), - SOM_HOWTO (R_DATA_OVERRIDE, "R_DATA_OVERRIDE"), - SOM_HOWTO (R_DATA_OVERRIDE, "R_DATA_OVERRIDE"), - SOM_HOWTO (R_DATA_OVERRIDE, "R_DATA_OVERRIDE"), - SOM_HOWTO (R_DATA_OVERRIDE, "R_DATA_OVERRIDE"), - SOM_HOWTO (R_DATA_OVERRIDE, "R_DATA_OVERRIDE"), - SOM_HOWTO (R_TRANSLATED, "R_TRANSLATED"), - SOM_HOWTO (R_AUX_UNWIND, "R_AUX_UNWIND"), - SOM_HOWTO (R_COMP1, "R_COMP1"), - SOM_HOWTO (R_COMP2, "R_COMP2"), - SOM_HOWTO (R_COMP3, "R_COMP3"), - SOM_HOWTO (R_PREV_FIXUP, "R_PREV_FIXUP"), - SOM_HOWTO (R_PREV_FIXUP, "R_PREV_FIXUP"), - SOM_HOWTO (R_PREV_FIXUP, "R_PREV_FIXUP"), - SOM_HOWTO (R_PREV_FIXUP, "R_PREV_FIXUP"), - SOM_HOWTO (R_SEC_STMT, "R_SEC_STMT"), - SOM_HOWTO (R_N0SEL, "R_N0SEL"), - SOM_HOWTO (R_N1SEL, "R_N1SEL"), - SOM_HOWTO (R_LINETAB, "R_LINETAB"), - SOM_HOWTO (R_LINETAB_ESC, "R_LINETAB_ESC"), - SOM_HOWTO (R_LTP_OVERRIDE, "R_LTP_OVERRIDE"), - SOM_HOWTO (R_COMMENT, "R_COMMENT"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_RESERVED, "R_RESERVED"), - SOM_HOWTO (R_RESERVED, "R_RESERVED") + SOM_HOWTO (0, R_NO_RELOCATION), + SOM_HOWTO (0, R_NO_RELOCATION), + SOM_HOWTO (0, R_NO_RELOCATION), + SOM_HOWTO (0, R_NO_RELOCATION), + SOM_HOWTO (0, R_NO_RELOCATION), + SOM_HOWTO (0, R_NO_RELOCATION), + SOM_HOWTO (0, R_NO_RELOCATION), + SOM_HOWTO (0, R_NO_RELOCATION), + SOM_HOWTO (0, R_NO_RELOCATION), + SOM_HOWTO (0, R_NO_RELOCATION), + SOM_HOWTO (0, R_NO_RELOCATION), + SOM_HOWTO (0, R_NO_RELOCATION), + SOM_HOWTO (0, R_NO_RELOCATION), + SOM_HOWTO (0, R_NO_RELOCATION), + SOM_HOWTO (0, R_NO_RELOCATION), + SOM_HOWTO (0, R_NO_RELOCATION), + SOM_HOWTO (0, R_NO_RELOCATION), + SOM_HOWTO (0, R_NO_RELOCATION), + SOM_HOWTO (0, R_NO_RELOCATION), + SOM_HOWTO (0, R_NO_RELOCATION), + SOM_HOWTO (0, R_NO_RELOCATION), + SOM_HOWTO (0, R_NO_RELOCATION), + SOM_HOWTO (0, R_NO_RELOCATION), + SOM_HOWTO (0, R_NO_RELOCATION), + SOM_HOWTO (0, R_NO_RELOCATION), + SOM_HOWTO (0, R_NO_RELOCATION), + SOM_HOWTO (0, R_NO_RELOCATION), + SOM_HOWTO (0, R_NO_RELOCATION), + SOM_HOWTO (0, R_NO_RELOCATION), + SOM_HOWTO (0, R_NO_RELOCATION), + SOM_HOWTO (0, R_NO_RELOCATION), + SOM_HOWTO (0, R_NO_RELOCATION), + SOM_HOWTO (0, R_ZEROES), + SOM_HOWTO (0, R_ZEROES), + SOM_HOWTO (0, R_UNINIT), + SOM_HOWTO (0, R_UNINIT), + SOM_HOWTO (4, R_RELOCATION), + SOM_HOWTO (4, R_DATA_ONE_SYMBOL), + SOM_HOWTO (4, R_DATA_ONE_SYMBOL), + SOM_HOWTO (4, R_DATA_PLABEL), + SOM_HOWTO (4, R_DATA_PLABEL), + SOM_HOWTO (4, R_SPACE_REF), + SOM_HOWTO (0, R_REPEATED_INIT), + SOM_HOWTO (0, R_REPEATED_INIT), + SOM_HOWTO (0, R_REPEATED_INIT), + SOM_HOWTO (0, R_REPEATED_INIT), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (4, R_PCREL_CALL), + SOM_HOWTO (4, R_PCREL_CALL), + SOM_HOWTO (4, R_PCREL_CALL), + SOM_HOWTO (4, R_PCREL_CALL), + SOM_HOWTO (4, R_PCREL_CALL), + SOM_HOWTO (4, R_PCREL_CALL), + SOM_HOWTO (4, R_PCREL_CALL), + SOM_HOWTO (4, R_PCREL_CALL), + SOM_HOWTO (4, R_PCREL_CALL), + SOM_HOWTO (4, R_PCREL_CALL), + SOM_HOWTO (4, R_PCREL_CALL), + SOM_HOWTO (4, R_PCREL_CALL), + SOM_HOWTO (4, R_PCREL_CALL), + SOM_HOWTO (4, R_PCREL_CALL), + SOM_HOWTO (0, R_SHORT_PCREL_MODE), + SOM_HOWTO (0, R_LONG_PCREL_MODE), + SOM_HOWTO (4, R_ABS_CALL), + SOM_HOWTO (4, R_ABS_CALL), + SOM_HOWTO (4, R_ABS_CALL), + SOM_HOWTO (4, R_ABS_CALL), + SOM_HOWTO (4, R_ABS_CALL), + SOM_HOWTO (4, R_ABS_CALL), + SOM_HOWTO (4, R_ABS_CALL), + SOM_HOWTO (4, R_ABS_CALL), + SOM_HOWTO (4, R_ABS_CALL), + SOM_HOWTO (4, R_ABS_CALL), + SOM_HOWTO (4, R_ABS_CALL), + SOM_HOWTO (4, R_ABS_CALL), + SOM_HOWTO (4, R_ABS_CALL), + SOM_HOWTO (4, R_ABS_CALL), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (4, R_DP_RELATIVE), + SOM_HOWTO (4, R_DP_RELATIVE), + SOM_HOWTO (4, R_DP_RELATIVE), + SOM_HOWTO (4, R_DP_RELATIVE), + SOM_HOWTO (4, R_DP_RELATIVE), + SOM_HOWTO (4, R_DP_RELATIVE), + SOM_HOWTO (4, R_DP_RELATIVE), + SOM_HOWTO (4, R_DP_RELATIVE), + SOM_HOWTO (4, R_DP_RELATIVE), + SOM_HOWTO (4, R_DP_RELATIVE), + SOM_HOWTO (4, R_DP_RELATIVE), + SOM_HOWTO (4, R_DP_RELATIVE), + SOM_HOWTO (4, R_DP_RELATIVE), + SOM_HOWTO (4, R_DP_RELATIVE), + SOM_HOWTO (4, R_DP_RELATIVE), + SOM_HOWTO (4, R_DP_RELATIVE), + SOM_HOWTO (4, R_DP_RELATIVE), + SOM_HOWTO (4, R_DP_RELATIVE), + SOM_HOWTO (4, R_DP_RELATIVE), + SOM_HOWTO (4, R_DP_RELATIVE), + SOM_HOWTO (4, R_DP_RELATIVE), + SOM_HOWTO (4, R_DP_RELATIVE), + SOM_HOWTO (4, R_DP_RELATIVE), + SOM_HOWTO (4, R_DP_RELATIVE), + SOM_HOWTO (4, R_DP_RELATIVE), + SOM_HOWTO (4, R_DP_RELATIVE), + SOM_HOWTO (4, R_DP_RELATIVE), + SOM_HOWTO (4, R_DP_RELATIVE), + SOM_HOWTO (4, R_DP_RELATIVE), + SOM_HOWTO (4, R_DP_RELATIVE), + SOM_HOWTO (4, R_DP_RELATIVE), + SOM_HOWTO (4, R_DP_RELATIVE), + SOM_HOWTO (4, R_DP_RELATIVE), + SOM_HOWTO (4, R_DP_RELATIVE), + SOM_HOWTO (4, R_DATA_GPREL), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (4, R_DLT_REL), + SOM_HOWTO (4, R_DLT_REL), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (4, R_CODE_ONE_SYMBOL), + SOM_HOWTO (4, R_CODE_ONE_SYMBOL), + SOM_HOWTO (4, R_CODE_ONE_SYMBOL), + SOM_HOWTO (4, R_CODE_ONE_SYMBOL), + SOM_HOWTO (4, R_CODE_ONE_SYMBOL), + SOM_HOWTO (4, R_CODE_ONE_SYMBOL), + SOM_HOWTO (4, R_CODE_ONE_SYMBOL), + SOM_HOWTO (4, R_CODE_ONE_SYMBOL), + SOM_HOWTO (4, R_CODE_ONE_SYMBOL), + SOM_HOWTO (4, R_CODE_ONE_SYMBOL), + SOM_HOWTO (4, R_CODE_ONE_SYMBOL), + SOM_HOWTO (4, R_CODE_ONE_SYMBOL), + SOM_HOWTO (4, R_CODE_ONE_SYMBOL), + SOM_HOWTO (4, R_CODE_ONE_SYMBOL), + SOM_HOWTO (4, R_CODE_ONE_SYMBOL), + SOM_HOWTO (4, R_CODE_ONE_SYMBOL), + SOM_HOWTO (4, R_CODE_ONE_SYMBOL), + SOM_HOWTO (4, R_CODE_ONE_SYMBOL), + SOM_HOWTO (4, R_CODE_ONE_SYMBOL), + SOM_HOWTO (4, R_CODE_ONE_SYMBOL), + SOM_HOWTO (4, R_CODE_ONE_SYMBOL), + SOM_HOWTO (4, R_CODE_ONE_SYMBOL), + SOM_HOWTO (4, R_CODE_ONE_SYMBOL), + SOM_HOWTO (4, R_CODE_ONE_SYMBOL), + SOM_HOWTO (4, R_CODE_ONE_SYMBOL), + SOM_HOWTO (4, R_CODE_ONE_SYMBOL), + SOM_HOWTO (4, R_CODE_ONE_SYMBOL), + SOM_HOWTO (4, R_CODE_ONE_SYMBOL), + SOM_HOWTO (4, R_CODE_ONE_SYMBOL), + SOM_HOWTO (4, R_CODE_ONE_SYMBOL), + SOM_HOWTO (4, R_CODE_ONE_SYMBOL), + SOM_HOWTO (4, R_CODE_ONE_SYMBOL), + SOM_HOWTO (4, R_CODE_ONE_SYMBOL), + SOM_HOWTO (4, R_CODE_ONE_SYMBOL), + SOM_HOWTO (4, R_CODE_ONE_SYMBOL), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (4, R_MILLI_REL), + SOM_HOWTO (4, R_MILLI_REL), + SOM_HOWTO (4, R_CODE_PLABEL), + SOM_HOWTO (4, R_CODE_PLABEL), + SOM_HOWTO (4, R_BREAKPOINT), + SOM_HOWTO (0, R_ENTRY), + SOM_HOWTO (0, R_ENTRY), + SOM_HOWTO (0, R_ALT_ENTRY), + SOM_HOWTO (0, R_EXIT), + SOM_HOWTO (0, R_BEGIN_TRY), + SOM_HOWTO (0, R_END_TRY), + SOM_HOWTO (0, R_END_TRY), + SOM_HOWTO (0, R_END_TRY), + SOM_HOWTO (0, R_BEGIN_BRTAB), + SOM_HOWTO (0, R_END_BRTAB), + SOM_HOWTO (0, R_STATEMENT), + SOM_HOWTO (0, R_STATEMENT), + SOM_HOWTO (0, R_STATEMENT), + SOM_HOWTO (4, R_DATA_EXPR), + SOM_HOWTO (4, R_CODE_EXPR), + SOM_HOWTO (0, R_FSEL), + SOM_HOWTO (0, R_LSEL), + SOM_HOWTO (0, R_RSEL), + SOM_HOWTO (0, R_N_MODE), + SOM_HOWTO (0, R_S_MODE), + SOM_HOWTO (0, R_D_MODE), + SOM_HOWTO (0, R_R_MODE), + SOM_HOWTO (0, R_DATA_OVERRIDE), + SOM_HOWTO (0, R_DATA_OVERRIDE), + SOM_HOWTO (0, R_DATA_OVERRIDE), + SOM_HOWTO (0, R_DATA_OVERRIDE), + SOM_HOWTO (0, R_DATA_OVERRIDE), + SOM_HOWTO (0, R_TRANSLATED), + SOM_HOWTO (0, R_AUX_UNWIND), + SOM_HOWTO (0, R_COMP1), + SOM_HOWTO (0, R_COMP2), + SOM_HOWTO (0, R_COMP3), + SOM_HOWTO (0, R_PREV_FIXUP), + SOM_HOWTO (0, R_PREV_FIXUP), + SOM_HOWTO (0, R_PREV_FIXUP), + SOM_HOWTO (0, R_PREV_FIXUP), + SOM_HOWTO (0, R_SEC_STMT), + SOM_HOWTO (0, R_N0SEL), + SOM_HOWTO (0, R_N1SEL), + SOM_HOWTO (0, R_LINETAB), + SOM_HOWTO (0, R_LINETAB_ESC), + SOM_HOWTO (0, R_LTP_OVERRIDE), + SOM_HOWTO (0, R_COMMENT), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (0, R_RESERVED), + SOM_HOWTO (0, R_RESERVED) }; /* Initialize the SOM relocation queue. By definition the queue holds @@ -2943,7 +2944,7 @@ som_write_fixups (bfd *abfd, subsection != NULL; subsection = subsection->next) { - int reloc_offset; + unsigned int reloc_offset; unsigned int current_rounding_mode; #ifndef NO_PCREL_MODES unsigned int current_call_mode; @@ -2994,6 +2995,31 @@ som_write_fixups (bfd *abfd, unsigned int skip; int sym_num; + if (bfd_reloc->address < reloc_offset) + { + _bfd_error_handler + /* xgettext:c-format */ + (_("%pB(%pA+%#" PRIx64 "): " + "%s relocation offset out of order"), + abfd, subsection, (uint64_t) bfd_reloc->address, + bfd_reloc->howto->name); + bfd_set_error (bfd_error_bad_value); + return false; + } + if (!bfd_reloc_offset_in_range (bfd_reloc->howto, + abfd, subsection, + bfd_reloc->address)) + { + _bfd_error_handler + /* xgettext:c-format */ + (_("%pB(%pA+%#" PRIx64 "): " + "%s relocation offset out of range"), + abfd, subsection, (uint64_t) bfd_reloc->address, + bfd_reloc->howto->name); + bfd_set_error (bfd_error_bad_value); + return false; + } + /* Get the symbol number. Remember it's stored in a special place for section symbols. */ if ((*bfd_reloc->sym_ptr_ptr)->flags & BSF_SECTION_SYM) @@ -3026,42 +3052,8 @@ som_write_fixups (bfd *abfd, p = som_reloc_skip (abfd, skip, p, &subspace_reloc_size, reloc_queue); - /* Update reloc_offset for the next iteration. - - Many relocations do not consume input bytes. They - are markers, or set state necessary to perform some - later relocation. */ - switch (bfd_reloc->howto->type) - { - case R_ENTRY: - case R_ALT_ENTRY: - case R_EXIT: - case R_N_MODE: - case R_S_MODE: - case R_D_MODE: - case R_R_MODE: - case R_FSEL: - case R_LSEL: - case R_RSEL: - case R_COMP1: - case R_COMP2: - case R_BEGIN_BRTAB: - case R_END_BRTAB: - case R_BEGIN_TRY: - case R_END_TRY: - case R_N0SEL: - case R_N1SEL: -#ifndef NO_PCREL_MODES - case R_SHORT_PCREL_MODE: - case R_LONG_PCREL_MODE: -#endif - reloc_offset = bfd_reloc->address; - break; - - default: - reloc_offset = bfd_reloc->address + 4; - break; - } + /* Update reloc_offset for the next iteration. */ + reloc_offset = bfd_reloc->address + bfd_reloc->howto->size; /* Now the actual relocation we care about. */ switch (bfd_reloc->howto->type)