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 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] |