From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tracy Kuhrt To: Ian Lance Taylor Cc: binutils@sourceware.cygnus.com Subject: Re: fx_offset Population Date: Thu, 30 Aug 2001 14:11:00 -0000 Message-id: <3B8EAC0C.9BAD2E9@microchip.com> References: <3B8E9C1C.861BE80A@microchip.com> <3B8EA523.A8C81523@microchip.com> X-SW-Source: 2001-08/msg00703.html Ian, Great! Thanks for helping me figure this one out. Agree that it is better to fix the root problem than just the symptom. Tracy Ian Lance Taylor wrote: > Tracy Kuhrt writes: > > > The new target that I am porting is using a COFF format. I am trying to > > place the addend value in the 16-bits that I have for this operand. Where > > the problem comes in is after fixup_segment calls the md_apply_fix3 function > > (which divides this addend by 2) it then checks to see that the value it will > > be writing is able to fit into 2 bytes. 2147450880 (0x7FFF8000) does not fit > > and I get the error "Value of 2147450880 too large for field of 2 bytes at > > 0". But a -32768 should fit in 2 bytes. > > > > Does this mean that anywhere that my md_apply_fix3 function uses the > > fx_offset field in a calculation it must first convert it back to a signed > > value? > > Yes, md_apply_fix3 must apply any relocation changes using the correct > type of arithmetic. In this case, it presumably must use signed > division. > > Always making fx_offset signed is no more correct than always making > it unsigned. Either way, md_apply_fix3 is responsible for doing the > right thing. > > Ian