From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: 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 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-pj1-x1035.google.com with SMTP id m2so9010878pjr.3 for ; Tue, 25 Oct 2022 22:11:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-disposition:mime-version:message-id:subject:cc:to:from:date :from:to:cc:subject:date:message-id:reply-to; bh=F1EWXyhQx5CrAckW9QzyvBdNQlK5WrYw62NsNRI3hYQ=; b=iyg7nV4FZc6U2c0evBgTghXSvvBTuYrSME0ve4oxUWBztD4SUQXPYQUWn+Mp6Jh4Gp BvXvhDAaFjWa7IKGECOUAl2mg9aimkfHX7hhTm5xzqYMpIzYQVFAn3lgoniF8GsfB2ZX S0Zxw+s+/Uh4sYXGpEykuOmc9GbqMZeSVvuzQgHHo96eNHYNRSNaqjwAi9tMYd6jzk3+ PbKHdn+m71LaNO4hY+ClN9Ed4EQuxTDb7UbNGDJglqXSJxm35uiFxolgM8WLwx/A+doH YewtwwU+OV5zdIF0/1I5CKNwIFyR669B3NivZJB+cFaUvz05eJPhcWMkX2ne1ehtFEsQ 62JQ== 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-Google-Smtp-Source: AMsMyM5G45PyAEvN+rjJQsGRL/5N3utNhqpyGX68ynhYyisHauq5/zP1/t/Cw8wdV9B8qF7giwvKvw== 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 From: Alan Modra To: binutils@sourceware.org Cc: Dave Anglin , Jeff Law Subject: som.c reloc sanity checking Message-ID: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii 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 List-Id: 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) -- Alan Modra Australia Development Lab, IBM