This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Hi Nick, Can you please also provide us feedback for this patch as well. ;-) You probably did not notice it as it was sent as a reply. Best regards, Cupertino > -----Original Message----- > From: binutils-owner@sourceware.org [mailto:binutils- > owner@sourceware.org] On Behalf Of Cupertino Miranda > Sent: Thursday, February 25, 2016 12:03 PM > To: binutils@sourceware.org; Andrew Burgess > Cc: Claudiu Zissulescu; Francois Bedard; Nick Clifton (nickc@redhat.com) > Subject: RE: [PATCH] bfd/arc: Allow non-instruction relocations within .text > sections > > Hi Andrew and all, > > I have tested and fixed this patch. The attached one should now work for all > of the ARC variant emulations/targets. > I have also included a fix for all 8 bit relocs which were wrong for big endian > format. > > Andrew: Do you have any comments on the patch as it is? > > Best regards, > Cupertino > > bfd/ChangeLog: > > Cupertino Miranda <Cupertino.Miranda@synopsys.com> Andrew Burgess > <andrew.burgess@embecosm.com> > > * elf32-arc.c (arc_bfd_get_32): Becomes an alias for bfd_get_32. > (arc_bfd_put_32): Becomes an alias for bfd_put_32. > (arc_elf_howto_init): Added assert to validate relocations. > (get_middle_endian_relocation): Delete. > (middle_endian_convert): New function. > (ME): Redefine, now does nothing. > (IS_ME): New define. > (arc_do_relocation): Extend the attached 'ARC_RELOC_HOWTO' > definition to call middle_endian_convert. Add a new local > variable and make use of this throughout. Added call to > arc_bfd_get_8 and arc_bfd_put_8 for 8 bit relocations. > > gas/ChangeLog: > Andrew Burgess <andrew.burgess@embecosm.com> > * testsuite/gas/arc/inline-data-1.d: New file. > * testsuite/gas/arc/inline-data-1.s: New file. > > include/ChangeLog: > Cupertino Miranda <Cupertino.Miranda@synopsys.com> Andrew Burgess > <andrew.burgess@embecosm.com> > > * elf/arc-reloc.def: Add a call to ME within the formula for each > relocation that requires middle-endian correction. > > > -----Original Message----- > > From: Cupertino Miranda [mailto:cmiranda@synopsys.com] > > Sent: Friday, January 08, 2016 11:31 AM > > To: Andrew Burgess; Cupertino Miranda > > Cc: Claudiu Zissulescu; binutils@sourceware.org > > Subject: RE: [PATCH] bfd/arc: Allow non-instruction relocations within > > .text sections > > > > Hi Andrew, > > > > > From: Andrew Burgess [mailto:andrew.burgess@embecosm.com] > > > > > > * Cupertino Miranda <Cupertino.Miranda@synopsys.com> [2016-01-07 > > > 16:45:49 +0000]: > > > > > > > The first statement from Claudiu doesn't apply, because the > > > > instruction is what suffers the ME conversion, so all short > > > > instructions must suffer through ME decoding/encoding.. The > > > > reality is that being ME or not is not a property of the > > > > relocation but of the memory region, or better, the type of usage > > > > given to the particular address, being patched. > > > > > > I agree, though I believe that the way that this memory-region / use > > > relationship is captured is with difference relocation types. So I > > > think that something along the lines of either of the two patches I > > > have now posted is the way to go. > > > > > > > Moreover, now looking back to > > > > it, I think we should not try to move this information (not from > > > > but) to the relocation, but to understand which cases we should be > > > > careful and pay special attention to perform or not to perform > > > > middle endianess conversion. > > > > > > I agree. That is what I've done in both of the patches I've posted right? > > No, I made a correction to the sentence and made it confusing. > > It should have been read like: > > " I think we should not try to move this information to the > > relocation, but to understand which cases we should be careful and pay > > special attention to perform or not the middle endianess conversion." > > This middle endianess for the tools can be a property of whatever we > > want, however for the architecture, it is clearly a property of what > > is going to use the data being patched/relocated. More precisely, who > > is reading/writing the data (the instruction decoder, or an instruction being > executed). > > - If it is the instruction decoder, then the data should always be > > recovered and rewritten with middle endian format conversion. > > - If it is an instruction (an ld for example), then independently of > > the type of section the relocation should happen, we should write it > > in non middle endian format. > > - This happens to be the case only in ARC_32 like I specified in > > the previous email. > > > > > The middle-endian conversion is moved out of the get/put methods, > > > and into relocation specific code. > > > > > > So far I think that we're in complete agreement. > > > > > > > > > > > In our current development code (my local fix), I keep the ME > > > > conversion in bfd_get_32 and bfd_put_32, but I perform a unME > > > > conversion before applying the relocation, if that is a > > > > requirement for the relocation type. > > > > > > I don't think that's a good idea. Given that this get/put is only > > > used in the one location, that feels like we're just working around > > > a get/put that's doing the wrong thing. This also feels like it > > > goes against what you said above; the conversion should be attached > > > to the > > relocation, not to generic code. > > I tried to say the opposite. :-) > > > > > > > > > Up until now we only identified a single > > > > relocation type where ME should not be applied in a SEC_CODE > > > > section, more precisely: > > > > > > OK, I admit that marking up those relocation where ME _should_ be > > > applied will result in more being marked than if we simply mark > > > those to which is does not apply. But I think that's easier to > > > understand, so that doesn't seem like much of a negative to me. > > > > I would say that we should spend some more time to define how this > > > > middle endian conversion should be done. > > > > > > Well, I've put forward two patches now, the first (which I prefer), > > > then the second, which was based on your feedback in: > > > > > > https://sourceware.org/ml/binutils/2016-01/msg00021.html > > > > > > So, I'm confused what more there is to discuss. Though I prefer the > > > first patch, I'll take the second version if it's what you prefer. > > > > > > > > > > Moreover, I won't be > > > > able to give the confidence that your patch would not create some > > > > problems, as the current upstreamed code is limited to baremetal > > > > applications, not allowing me to fully test all the relocation types > involved. > > > > > > Given how small this patch is, merging into your local world and > > > testing should be pretty straight forward I'd have though. > > > > > > > Furthermore, it would make more sense to fix this > > > > issue right after we apply the upcoming feature intensive patch, > > > > supporting Linux and making use of all the relocation types. > > > > > > Do you have a date for when the second patch will arrive? This is a > > > blocking issue for me, and I'd like to see a solution merged sooner > > > rather > > than later. > > We will send the patch with PIC and TLS support by Monday/Tuesday. > > > > > > > > As a counter proposal, given how small that patch is, why don't we > > > merge the second version of this patch, which sounds like the > > > closest to whatever you're proposing, then when your next big patch > > > arrives you can rewrite this code as fits your design. > > Although it is a small patch, it makes a fundamental changes to how > > the relocations are performed. > > To be honest, at the moment I cannot test your changes and validate if > > they are all correct up until I send my patches (Monday/Tuesday). > > Also, I would like to validate them with the PIC and TLS support as > > well, as the current version (baremetal only) does not makes use of > > many of the changed relocations in your patch. > > > > > > > > What do you think? > > After some further discussions locally, both me and Claudiu agree with > > the strategy to move ME to the relocations, however up until further > > testing we are not fully certain all of the changes are correct. > > Nevertheless, we accept the patch. :-) > > > > Kind regards, > > Cupertino > > > > > > > > Thanks, > > > Andrew > > > > > > > > > > > > > > > > > > > > > -----Original Message----- > > > > From: Claudiu Zissulescu [mailto:claziss@synopsys.com] > > > > Sent: Thursday, January 07, 2016 4:15 PM > > > > To: Andrew Burgess; Cupertino Miranda > > > > Cc: binutils@sourceware.org > > > > Subject: RE: [PATCH] bfd/arc: Allow non-instruction relocations > > > > within .text sections > > > > > > > > Hi guys, > > > > > > > > I have two remarks/questions for you: > > > > 1. It seems to me adding ME modifier for relocations that are > > > handling short immediate values is superfluous, as the final values > > > are written taken into account the entire instruction, and the > > > big-endian/little- endian flags. Hence, if it is a long instruction > > > always we write it in the form dictated by the endianess (ME for > > > little-endian), if it is short then ME switch is not needed at all. > > > However, if you say that this is ok, then it is fine for me as well. > > > > 2. The relocations which are handled by dynamic linker are > > > > marked > > > also ME (e.g., JMP_SLOT), is it required? > > > > > > > > Best, > > > > Claudiu > > > > > > > > > -----Original Message----- > > > > > From: Andrew Burgess [mailto:andrew.burgess@embecosm.com] > > > > > Sent: Thursday, January 07, 2016 3:44 PM > > > > > To: Cupertino Miranda > > > > > Cc: binutils@sourceware.org; Claudiu.Zissulescu@synopsys.com > > > > > Subject: Re: [PATCH] bfd/arc: Allow non-instruction relocations > > > > > within .text sections > > > > > > > > > > * Cupertino Miranda <Cupertino.Miranda@synopsys.com> [2016-01- > 06 > > > > > 15:56:24 +0000]: > > > > > > > > > > > Hi Andrew, > > > > > > > > > > > > We are currently finishing cleaning up a patch to integrate > > > > > > support for Linux > > > > > (PIC and TLS). > > > > > > I am glad to say that we have realized this mistake and would > > > > > > intend to > > > > > address it soon after the upcoming patch. > > > > > > Nevertheless, your implementation does it a little different > > > > > > from how we > > > > > would like to address it. > > > > > > > > > > > > More precisely we do not define a new field in the RELOC_HOWTO > > > > > > but > > > > > implement it through the FORMULA field using the ME preprocessor > > > macro. > > > > > > > > > > > > ARC_RELOC_HOWTO(ARC_PC32, 50, \ > > > > > > 2, \ > > > > > > 32, \ > > > > > > replace_word32, \ > > > > > > signed, \ > > > > > > ( ME ( ( S + A ) - P ) )) > > > > > > > > > > > > ME macro instead of deleted gets replaced by: > > > > > > #define ME(RELOC) (RELOC) > > > > > > > > > > > > And the remaining part does pretty much the same as your code, > > > > > > but > > > > > resorting to the FORMULA to check if ME is present. > > > > > > > > > > > > static bfd_vma > > > > > > middle_endian_convert (bfd_vma insn, bfd_boolean do_it) > > > > > > { > > > > > > if (do_it) > > > > > > { > > > > > > insn = > > > > > > ((insn & 0xffff0000) >> 16) | > > > > > > ((insn & 0xffff) << 16); > > > > > > } > > > > > > return insn; > > > > > > } > > > > > > > > > > > > #define IS_ME(FORMULA) (strstr(#FORMULA, "ME") != > NULL) > > > > > > > > > > > > #define ARC_RELOC_HOWTO(TYPE, VALUE, SIZE, BITSIZE, > > > > > RELOC_FUNCTION, OVERFLOW, FORMULA) \ > > > > > > case R_##TYPE: \ > > > > > > { \ > > > > > > bfd_vma bitsize ATTRIBUTE_UNUSED = BITSIZE; \ > > > > > > insn = middle_endian_convert (insn, IS_ME(FORMULA)); \ > > > > > > relocation = FORMULA ; \ > > > > > > insn = middle_endian_convert (insn, IS_ME(FORMULA)); \ > > > > > > } \ > > > > > > break; > > > > > > > > > > > > Our view is to keep relocation definitions to be limited to > > > > > > this FORMULA concept, instead of adding new fields to the > > > > > > relocation > > table. > > > > > > > > > > The patch below is a rewrite inline with the description above. > > > > > The only change is that I have extended the IS_ME macro to > > > > > consider whether the bfd is big or little endian, and I believe > > > > > that this makes a difference as to whether the byte shuffling is > > required. > > > > > > > > > > Is this good with you? > > > > > > > > > > Does my list of formula modifications match the list of changes > > > > > you have? I built my list based on how relocations were handled > > > > > before the big rewrite, but that doesn't mean it's correct, just > > > > > that I've not seen any test regressions either in binutils or GCC. > > > > > > > > > > Thanks, > > > > > Andrew > > > > > > > > > > --- > > > > > > > > > > On a little endian arc, a 4-byte instruction ABCD, where A is > > > > > the most significant byte, and D is the least significant byte > > > > > would be stored in memory (low to high) as BADC. That is, each > > > > > 2-byte chunk is stored in little endian order in memory. > > > > > > > > > > Currently, when a relocation is applied to such a 4-byte > > > > > instruction, we make use of arc_bfd_get_32 and arc_bfd_put_32, > > > > > which perform byte manipulation to correct for this in memory > > > > > byte > > ordering. > > > > > > > > > > This byte ordering correction is applied to all relocations > > > > > within executable sections (for little endian arc) when really > > > > > the correction should only be applied to instruction > > > > > relocations; it is the instruction fetch mechanism that loads > > > > > 4-byte instructions 2-bytes at > > > a time. > > > > > > > > > > It is possible to place data into an executable section, for > > > > > example it might be more efficient to place small jump tables > > > > > inline within the code rather than placing them into a data section. > > > > > > > > > > The problem then, is that these two aspects, the byte order > > > > > correction, and inline data, conflict. Placing a 4-byte label > > > > > relocation inline in the code results in the byte-order > > > > > correction being applied to it, which, when the label is loaded > > > > > using a standard arc > > > load instruction, returns a corrupted address. > > > > > > > > > > Before the recent arc rewrite, placing data inline into the > > > > > executable sections did work. This was thanks to using a > > > > > different code path to patch instruction related relocations, to > > > > > the code that patched data related relocations. The instruction > > > > > related relocations therefore received the byte order > > > > > correction, while the data > > > related relocations didn't. > > > > > > > > > > After the recent rewrite this feature was lost, though I believe > > > > > this was by accident, rather than design. This commit brings > > > > > this feature back, though the implementation is different, in > > > > > order to fit with > > > the new arc design. > > > > > > > > > > The formula field, in those relocations that should have the > > > > > byte ordering fix applied, is extended to include a call to a > > > > > new macro ME, this macro is then used within the bfd library to > > > > > trigger the application of the byte ordering fix when > > > > > appropriate. This design is > > > discussed here: > > > > > https://sourceware.org/ml/binutils/2016-01/msg00021.html > > > > > > > > > > bfd/ChangeLog: > > > > > > > > > > * elf32-arc.c (arc_bfd_get_32): Becomes an alias for bfd_get_32. > > > > > (arc_bfd_put_32): Becomes an alias for bfd_put_32. > > > > > (get_middle_endian_relocation): Delete. > > > > > (middle_endian_convert): New function. > > > > > (ME): Redefine, now does nothing. > > > > > (IS_ME): New define. > > > > > (arc_do_relocation): Extend the attached 'ARC_RELOC_HOWTO' > > > > > definition to call middle_endian_convert. Add a new local > > > > > variable and make use of this throughout. > > > > > > > > > > include/ChangeLog: > > > > > > > > > > * elf/arc-reloc.def: Add a call to ME within the formula for each > > > > > relocation that requires middle-endian correction. > > > > > > > > > > gas/ChangeLog: > > > > > > > > > > * testsuite/gas/arc/inline-data-1.d: New file. > > > > > * testsuite/gas/arc/inline-data-1.s: New file. > > > > > --- > > > > > bfd/ChangeLog | 13 ++++++++ > > > > > bfd/elf32-arc.c | 59 ++++++++++++++--------------------- > > > > > gas/ChangeLog | 5 +++ > > > > > gas/testsuite/gas/arc/inline-data-1.d | 7 +++++ > > > > > gas/testsuite/gas/arc/inline-data-1.s | 4 +++ > > > > > include/ChangeLog | 6 ++++ > > > > > include/elf/arc-reloc.def | 54 ++++++++++++++++--------------- > - > > > > > 7 files changed, 85 insertions(+), 63 deletions(-) create mode > > > > > 100644 gas/testsuite/gas/arc/inline-data-1.d > > > > > create mode 100644 gas/testsuite/gas/arc/inline-data-1.s > > > > > > > > > > diff --git a/bfd/ChangeLog b/bfd/ChangeLog index > > > > > 063cd14..1f92602 > > > > > 100644 > > > > > --- a/bfd/ChangeLog > > > > > +++ b/bfd/ChangeLog > > > > > @@ -1,3 +1,16 @@ > > > > > +2016-01-05 Cupertino Miranda > <Cupertino.Miranda@synopsys.com> > > > > > + Andrew Burgess <andrew.burgess@embecosm.com> > > > > > + > > > > > + * elf32-arc.c (arc_bfd_get_32): Becomes an alias for > bfd_get_32. > > > > > + (arc_bfd_put_32): Becomes an alias for bfd_put_32. > > > > > + (get_middle_endian_relocation): Delete. > > > > > + (middle_endian_convert): New function. > > > > > + (ME): Redefine, now does nothing. > > > > > + (IS_ME): New define. > > > > > + (arc_do_relocation): Extend the attached > 'ARC_RELOC_HOWTO' > > > > > + definition to call middle_endian_convert. Add a new local > > > > > + variable and make use of this throughout. > > > > > + > > > > > 2016-01-01 Alan Modra <amodra@gmail.com> > > > > > > > > > > Update year range in copyright notice of all files. > > > > > diff --git a/bfd/elf32-arc.c b/bfd/elf32-arc.c index > > > > > e9e299c..bf505fc > > > > > 100644 > > > > > --- a/bfd/elf32-arc.c > > > > > +++ b/bfd/elf32-arc.c > > > > > @@ -140,32 +140,10 @@ is_reloc_for_PLT (reloc_howto_type * > > howto) > > > > > > > > > > #define arc_bfd_get_8(A,B,C) bfd_get_8(A,B) #define > > > > > arc_bfd_get_16(A,B,C) bfd_get_16(A,B) > > > > > +#define arc_bfd_get_32(A,B,C) bfd_get_32(A,B) > > > > > #define arc_bfd_put_8(A,B,C,D) bfd_put_8(A,B,C) #define > > > > > arc_bfd_put_16(A,B,C,D) bfd_put_16(A,B,C) > > > > > - > > > > > -static long > > > > > -arc_bfd_get_32 (bfd * abfd, void *loc, asection * > > > > > input_section) -{ > > > > > - long insn = bfd_get_32 (abfd, loc); > > > > > - > > > > > - if (!bfd_big_endian (abfd) > > > > > - && input_section > > > > > - && (input_section->flags & SEC_CODE)) > > > > > - insn = ((0x0000fffff & insn) << 16) | ((0xffff0000 & insn) >> 16); > > > > > - > > > > > - return insn; > > > > > -} > > > > > - > > > > > -static void > > > > > -arc_bfd_put_32 (bfd * abfd, long insn, void *loc, asection * > > > > > input_section) -{ > > > > > - if (!bfd_big_endian (abfd) > > > > > - && input_section > > > > > - && (input_section->flags & SEC_CODE)) > > > > > - insn = ((0x0000fffff & insn) << 16) | ((0xffff0000 & insn) >> 16); > > > > > - > > > > > - bfd_put_32 (abfd, insn, loc); -} > > > > > +#define arc_bfd_put_32(A,B,C,D) bfd_put_32(A,B,C) > > > > > > > > > > static bfd_reloc_status_type > > > > > arc_elf_reloc (bfd *abfd ATTRIBUTE_UNUSED, @@ -473,16 +451,22 > > @@ > > > > > debug_arc_reloc (struct arc_relocation_data reloc_data) > > > > > fprintf (stderr, " input section is NULL\n"); > > > > > } > > > > > > > > > > -static ATTRIBUTE_UNUSED bfd_vma -get_middle_endian_relocation > > > > > (bfd_vma reloc) > > > > > +static bfd_vma > > > > > +middle_endian_convert (bfd_vma insn, bfd_boolean do_it) > > > > > { > > > > > - bfd_vma ret = > > > > > - ((reloc & 0xffff0000) >> 16) | > > > > > - ((reloc & 0xffff) << 16); > > > > > - return ret; > > > > > + if (do_it) > > > > > + { > > > > > + insn = > > > > > + ((insn & 0xffff0000) >> 16) | > > > > > + ((insn & 0xffff) << 16); > > > > > + } > > > > > + return insn; > > > > > } > > > > > > > > > > -#define ME(RELOC) (get_middle_endian_reloction(RELOC)) > > > > > +#define ME(reloc) (reloc) > > > > > + > > > > > +#define IS_ME(FORMULA,BFD) ((strstr(#FORMULA, "ME") != NULL) > > && > > > \ > > > > > + !bfd_big_endian (BFD)) > > > > > > > > > > #define S (reloc_data.sym_value \ > > > > > + reloc_data.sym_section->output_offset \ @@ -518,7 > +502,9 > > > > > @@ get_middle_endian_relocation (bfd_vma reloc) > > > > > { \ > > > > > bfd_vma bitsize ATTRIBUTE_UNUSED = BITSIZE; \ > > > > > relocation = FORMULA ; \ > > > > > + insn = middle_endian_convert (insn, IS_ME (FORMULA, > > > > > + abfd)); \ > > > > > insn = RELOC_FUNCTION (insn, relocation); \ > > > > > + insn = middle_endian_convert (insn, IS_ME (FORMULA, > > > > > + abfd)); \ > > > > > } \ > > > > > break; > > > > > > > > > > @@ -528,6 +514,7 @@ arc_do_relocation (bfd_byte * contents, > > > > > struct arc_relocation_data reloc_data) > > > > > bfd_vma relocation = 0; > > > > > bfd_vma insn; > > > > > bfd_vma orig_insn ATTRIBUTE_UNUSED; > > > > > + bfd * abfd = reloc_data.input_section->owner; > > > > > > > > > > if (reloc_data.should_relocate == FALSE) > > > > > return bfd_reloc_notsupported; @@ -535,13 +522,13 @@ > > > > > arc_do_relocation (bfd_byte * contents, struct > > > > > arc_relocation_data > > > > > reloc_data) > > > > > switch (reloc_data.howto->size) > > > > > { > > > > > case 2: > > > > > - insn = arc_bfd_get_32 (reloc_data.input_section->owner, > > > > > + insn = arc_bfd_get_32 (abfd, > > > > > contents + reloc_data.reloc_offset, > > > > > reloc_data.input_section); > > > > > break; > > > > > case 1: > > > > > case 0: > > > > > - insn = arc_bfd_get_16 (reloc_data.input_section->owner, > > > > > + insn = arc_bfd_get_16 (abfd, > > > > > contents + reloc_data.reloc_offset, > > > > > reloc_data.input_section); > > > > > break; > > > > > @@ -569,7 +556,7 @@ arc_do_relocation (bfd_byte * contents, > > > > > struct arc_relocation_data reloc_data) > > > > > flag = bfd_check_overflow (reloc_data.howto- > > > >complain_on_overflow, > > > > > reloc_data.howto->bitsize, > > > > > reloc_data.howto->rightshift, > > > > > - bfd_arch_bits_per_address > > > > > (reloc_data.input_section->owner), > > > > > + bfd_arch_bits_per_address (abfd), > > > > > relocation); > > > > > > > > > > #undef DEBUG_ARC_RELOC > > > > > @@ -594,13 +581,13 @@ arc_do_relocation (bfd_byte * contents, > > > > > struct arc_relocation_data reloc_data) > > > > > switch (reloc_data.howto->size) > > > > > { > > > > > case 2: > > > > > - arc_bfd_put_32 (reloc_data.input_section->owner, insn, > > > > > + arc_bfd_put_32 (abfd, insn, > > > > > contents + reloc_data.reloc_offset, > > > > > reloc_data.input_section); > > > > > break; > > > > > case 1: > > > > > case 0: > > > > > - arc_bfd_put_16 (reloc_data.input_section->owner, insn, > > > > > + arc_bfd_put_16 (abfd, insn, > > > > > contents + reloc_data.reloc_offset, > > > > > reloc_data.input_section); > > > > > break; > > > > > diff --git a/gas/ChangeLog b/gas/ChangeLog index > > > > > 64eeded..400f67a > > > > > 100644 > > > > > --- a/gas/ChangeLog > > > > > +++ b/gas/ChangeLog > > > > > @@ -1,3 +1,8 @@ > > > > > +2016-01-06 Andrew Burgess <andrew.burgess@embecosm.com> > > > > > + > > > > > + * testsuite/gas/arc/inline-data-1.d: New file. > > > > > + * testsuite/gas/arc/inline-data-1.s: New file. > > > > > + > > > > > 2016-01-01 Alan Modra <amodra@gmail.com> > > > > > > > > > > Update year range in copyright notice of all files. > > > > > diff --git a/gas/testsuite/gas/arc/inline-data-1.d > > > > > b/gas/testsuite/gas/arc/inline-data-1.d > > > > > new file mode 100644 > > > > > index 0000000..ce5c272 > > > > > --- /dev/null > > > > > +++ b/gas/testsuite/gas/arc/inline-data-1.d > > > > > @@ -0,0 +1,7 @@ > > > > > +#as: -mcpu=arc700 > > > > > +#objdump: -sj .text > > > > > + > > > > > +.*: +file format .*arc.* > > > > > + > > > > > +Contents of section .text: > > > > > + [0-9a-f]+ ddccbbaa ffee .* > > > > > diff --git a/gas/testsuite/gas/arc/inline-data-1.s > > > > > b/gas/testsuite/gas/arc/inline-data-1.s > > > > > new file mode 100644 > > > > > index 0000000..e63bf06 > > > > > --- /dev/null > > > > > +++ b/gas/testsuite/gas/arc/inline-data-1.s > > > > > @@ -0,0 +1,4 @@ > > > > > + .text > > > > > + > > > > > + .word 0xaabbccdd > > > > > + .short 0xeeff > > > > > diff --git a/include/ChangeLog b/include/ChangeLog index > > > > > 70e19b7..9f2a5d6 > > > > > 100644 > > > > > --- a/include/ChangeLog > > > > > +++ b/include/ChangeLog > > > > > @@ -1,3 +1,9 @@ > > > > > +2016-01-06 Andrew Burgess <andrew.burgess@embecosm.com> > > > > > + Cupertino Miranda <Cupertino.Miranda@synopsys.com> > > > > > + > > > > > + * elf/arc-reloc.def: Add a call to ME within the formula for > each > > > > > + relocation that requires middle-endian correction. > > > > > + > > > > > 2016-01-01 Alan Modra <amodra@gmail.com> > > > > > > > > > > Update year range in copyright notice of all files. > > > > > diff --git a/include/elf/arc-reloc.def > > > > > b/include/elf/arc-reloc.def index > > > > > 893291f..cb43a21 100644 > > > > > --- a/include/elf/arc-reloc.def > > > > > +++ b/include/elf/arc-reloc.def > > > > > @@ -80,56 +80,56 @@ ARC_RELOC_HOWTO(ARC_S21H_PCREL, 14, \ > > > > > 20, \ > > > > > replace_disp21h, \ > > > > > signed, \ > > > > > - ( ( ( S + A ) - P ) >> 1 )) > > > > > + ( ME ( ( ( S + A ) - P ) >> 1 ))) > > > > > > > > > > ARC_RELOC_HOWTO(ARC_S21W_PCREL, 15, \ > > > > > 2, \ > > > > > 19, \ > > > > > replace_disp21w, \ > > > > > signed, \ > > > > > - ( ( ( S + A ) - P ) >> 2 )) > > > > > + ( ME ( ( ( S + A ) - P ) >> 2 ))) > > > > > > > > > > ARC_RELOC_HOWTO(ARC_S25H_PCREL, 16, \ > > > > > 2, \ > > > > > 24, \ > > > > > replace_disp25h, \ > > > > > signed, \ > > > > > - ( ( ( S + A ) - P ) >> 1 )) > > > > > + ( ME ( ( ( S + A ) - P ) >> 1 ))) > > > > > > > > > > ARC_RELOC_HOWTO(ARC_S25W_PCREL, 17, \ > > > > > 2, \ > > > > > 23, \ > > > > > replace_disp25w, \ > > > > > signed, \ > > > > > - ( ( ( S + A ) - P ) >> 2 )) > > > > > + ( ME ( ( ( S + A ) - P ) >> 2 ))) > > > > > > > > > > ARC_RELOC_HOWTO(ARC_SDA32, 18, \ > > > > > 2, \ > > > > > 32, \ > > > > > replace_word32, \ > > > > > signed, \ > > > > > - ( ( S + A ) - _SDA_BASE_ )) > > > > > + ( ME ( ( S + A ) - _SDA_BASE_ ))) > > > > > > > > > > ARC_RELOC_HOWTO(ARC_SDA_LDST, 19, \ > > > > > 2, \ > > > > > 9, \ > > > > > replace_disp9ls, \ > > > > > signed, \ > > > > > - ( ( S + A ) - _SDA_BASE_ )) > > > > > + ( ME ( ( S + A ) - _SDA_BASE_ ))) > > > > > > > > > > ARC_RELOC_HOWTO(ARC_SDA_LDST1, 20, \ > > > > > 2, \ > > > > > 9, \ > > > > > replace_disp9ls, \ > > > > > signed, \ > > > > > - ( ( ( S + A ) - _SDA_BASE_ ) >> 1 )) > > > > > + ( ME ( ( ( S + A ) - _SDA_BASE_ ) >> 1 ))) > > > > > > > > > > ARC_RELOC_HOWTO(ARC_SDA_LDST2, 21, \ > > > > > 2, \ > > > > > 9, \ > > > > > replace_disp9ls, \ > > > > > signed, \ > > > > > - ( ( ( S + A ) - _SDA_BASE_ ) >> 2 )) > > > > > + ( ME ( ( ( S + A ) - _SDA_BASE_ ) >> 2 ))) > > > > > > > > > > ARC_RELOC_HOWTO(ARC_SDA16_LD, 22, \ > > > > > 1, \ > > > > > @@ -171,42 +171,42 @@ ARC_RELOC_HOWTO(ARC_32_ME, 27, \ > > > > > 32, \ > > > > > replace_limm, \ > > > > > signed, \ > > > > > - ( S + A )) > > > > > + ( ME ( S + A ))) > > > > > > > > > > ARC_RELOC_HOWTO(ARC_32_ME_S, 105, \ > > > > > 2, \ > > > > > 32, \ > > > > > replace_limms, \ > > > > > signed, \ > > > > > - ( S + A )) > > > > > + ( ME ( S + A ))) > > > > > > > > > > ARC_RELOC_HOWTO(ARC_N32_ME, 28, \ > > > > > 2, \ > > > > > 32, \ > > > > > replace_word32, \ > > > > > bitfield, \ > > > > > - ( S - A )) > > > > > + ( ME ( S - A ))) > > > > > > > > > > ARC_RELOC_HOWTO(ARC_SECTOFF_ME, 29, \ > > > > > 2, \ > > > > > 32, \ > > > > > replace_word32, \ > > > > > bitfield, \ > > > > > - ( ( S - SECTSTART ) + A )) > > > > > + ( ME ( ( S - SECTSTART ) + A ))) > > > > > > > > > > ARC_RELOC_HOWTO(ARC_SDA32_ME, 30, \ > > > > > 2, \ > > > > > 32, \ > > > > > replace_limm, \ > > > > > signed, \ > > > > > - ( ( S + A ) - _SDA_BASE_ )) > > > > > + ( ME ( ( S + A ) - _SDA_BASE_ ))) > > > > > > > > > > ARC_RELOC_HOWTO(ARC_W_ME, 31, \ > > > > > 2, \ > > > > > 32, \ > > > > > replace_word32, \ > > > > > bitfield, \ > > > > > - ( S + A )) > > > > > + ( ME ( S + A ))) > > > > > > > > > > ARC_RELOC_HOWTO(AC_SECTOFF_U8, 35, \ > > > > > 2, \ > > > > > @@ -255,14 +255,14 @@ ARC_RELOC_HOWTO(ARC_SECTOFF_ME_1, > > 41, > > > \ > > > > > 32, \ > > > > > replace_word32, \ > > > > > bitfield, \ > > > > > - ( ( ( S - SECTSTART ) + A ) >> 1 )) > > > > > + ( ME ( ( ( S - SECTSTART ) + A ) >> 1 ))) > > > > > > > > > > ARC_RELOC_HOWTO(ARC_SECTOFF_ME_2, 42, \ > > > > > 2, \ > > > > > 32, \ > > > > > replace_word32, \ > > > > > bitfield, \ > > > > > - ( ( ( S - SECTSTART ) + A ) >> 2 )) > > > > > + ( ME ( ( ( S - SECTSTART ) + A ) >> 2 ))) > > > > > > > > > > ARC_RELOC_HOWTO(ARC_SECTOFF_1, 43, \ > > > > > 2, \ > > > > > @@ -297,7 +297,7 @@ ARC_RELOC_HOWTO(ARC_PC32, 50, \ > > > > > 32, \ > > > > > replace_word32, \ > > > > > signed, \ > > > > > - ( ( S + A ) - P )) > > > > > + ( ME ( ( S + A ) - P ))) > > > > > > > > > > ARC_RELOC_HOWTO(ARC_GOT32, 59, \ > > > > > 2, \ > > > > > @@ -311,14 +311,14 @@ ARC_RELOC_HOWTO(ARC_GOTPC32, 51, \ > > > > > 32, \ > > > > > replace_word32, \ > > > > > signed, \ > > > > > - ( ( ( GOT + G ) + A ) - P )) > > > > > + ( ME ( ( ( GOT + G ) + A ) - P ))) > > > > > > > > > > ARC_RELOC_HOWTO(ARC_PLT32, 52, \ > > > > > 2, \ > > > > > 32, \ > > > > > replace_word32, \ > > > > > signed, \ > > > > > - ( ( L + A ) - P )) > > > > > + ( ME ( ( L + A ) - P ))) > > > > > > > > > > ARC_RELOC_HOWTO(ARC_COPY, 53, \ > > > > > 2, \ > > > > > @@ -339,42 +339,42 @@ ARC_RELOC_HOWTO(ARC_JMP_SLOT, 55, \ > > > > > 32, \ > > > > > replace_word32, \ > > > > > signed, \ > > > > > - S) > > > > > + ( ME ( S ))) > > > > > > > > > > ARC_RELOC_HOWTO(ARC_RELATIVE, 56, \ > > > > > 2, \ > > > > > 32, \ > > > > > replace_word32, \ > > > > > signed, \ > > > > > - ( B + A )) > > > > > + ( ME ( B + A ))) > > > > > > > > > > ARC_RELOC_HOWTO(ARC_GOTOFF, 57, \ > > > > > 2, \ > > > > > 32, \ > > > > > replace_word32, \ > > > > > signed, \ > > > > > - ( ( S + A ) - GOT )) > > > > > + ( ME ( ( S + A ) - GOT ))) > > > > > > > > > > ARC_RELOC_HOWTO(ARC_GOTPC, 58, \ > > > > > 2, \ > > > > > 32, \ > > > > > replace_word32, \ > > > > > signed, \ > > > > > - ( ( GOT + A ) - P )) > > > > > + ( ME ( ( GOT + A ) - P ))) > > > > > > > > > > ARC_RELOC_HOWTO(ARC_S21W_PCREL_PLT, 60, \ > > > > > 2, \ > > > > > 19, \ > > > > > replace_disp21w, \ > > > > > signed, \ > > > > > - ( ( ( L + A ) - P ) >> 2 )) > > > > > + ( ME ( ( ( L + A ) - P ) >> 2 ))) > > > > > > > > > > ARC_RELOC_HOWTO(ARC_S25H_PCREL_PLT, 61, \ > > > > > 2, \ > > > > > 24, \ > > > > > replace_disp25h, \ > > > > > signed, \ > > > > > - ( ( ( L + A ) - P ) >> 1 )) > > > > > + ( ME ( ( ( L + A ) - P ) >> 1 ))) > > > > > > > > > > ARC_RELOC_HOWTO(ARC_TLS_DTPMOD, 66, \ > > > > > 2, \ > > > > > @@ -451,12 +451,12 @@ > ARC_RELOC_HOWTO(ARC_S25W_PCREL_PLT, > > > 76, \ > > > > > 23, \ > > > > > replace_disp25w, \ > > > > > signed, \ > > > > > - ( ( ( L + A ) - P ) >> 2 )) > > > > > + ( ME ( ( ( L + A ) - P ) >> 2 ))) > > > > > > > > > > ARC_RELOC_HOWTO(ARC_S21H_PCREL_PLT, 77, \ > > > > > 2, \ > > > > > 20, \ > > > > > replace_disp21h, \ > > > > > signed, \ > > > > > - ( ( ( L + A ) - P ) >> 1 )) > > > > > + ( ME ( ( ( L + A ) - P ) >> 1 ))) > > > > > > > > > > -- > > > > > 2.6.4 > > > >
Attachment:
relocs.patch
Description: relocs.patch
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |