From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from cmx-torrgo002.bell.net (mta-tor-001.bell.net [209.71.212.28]) by sourceware.org (Postfix) with ESMTP id A9A853865C21 for ; Thu, 27 Oct 2022 17:48:48 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org A9A853865C21 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=bell.net Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=bell.net X-RG-CM-BuS: 0 X-RG-CM-SC: 0 X-RG-CM: Clean X-Originating-IP: [174.95.58.43] X-RG-Env-Sender: dave.anglin@bell.net X-RG-Rigid: 6357FA34005AD72D X-CM-Envelope: MS4xfMl9ohc3Kbk087eeOa19OB7cBSjO/Ma5SumWD7n/+VYx6u1tKOzixTdzon6xkL3yfDcVz/ZGO3Y5E1Ny07gAJItes0GES1dOTVlU1Uy/UtrKqh+IH3G9 5q2Of1GfDljC+B7tKTYTs7/PuZdUZOEP4TfG5QbHQU+RhJ0RKoW0zVFokp98kezmVy36MR+xwer31WH8pvrlAY+rcG8cjQ3hCQJn+BvHON8DiuECkOqVspdg 8Cd5fm3DDnorIaQ8sXS8wU42va+wcTG+Cwi7tDyUUPyeciJOrotoUDmYQ1HDWTyR X-CM-Analysis: v=2.4 cv=J7hsrirS c=1 sm=1 tr=0 ts=635ac47e a=oiJDitmlNOPgVxj52MZyFw==:117 a=oiJDitmlNOPgVxj52MZyFw==:17 a=IkcTkHD0fZMA:10 a=FBHGMhGWAAAA:8 a=2WxZ-BctIMMN91I5-X4A:9 a=QEXdDO2ut3YA:10 a=9gvnlMMaQFpL9xblJ6ne:22 Received: from [192.168.2.49] (174.95.58.43) by cmx-torrgo002.bell.net (5.8.807) (authenticated as dave.anglin@bell.net) id 6357FA34005AD72D; Thu, 27 Oct 2022 13:48:46 -0400 Message-ID: Date: Thu, 27 Oct 2022 13:48:46 -0400 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.4.0 Subject: Re: som.c reloc sanity checking Content-Language: en-US To: Alan Modra , binutils@sourceware.org Cc: Jeff Law References: From: John David Anglin In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,GIT_PATCH_0,KAM_DMARC_STATUS,NICE_REPLY_A,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,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: There were no testsuite regressions with this change. Dave On 2022-10-26 1:10 a.m., Alan Modra wrote: > 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) > -- John David Anglin dave.anglin@bell.net