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]

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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]