This is the mail archive of the crossgcc@cygnus.com mailing list for the crossgcc project.


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

Re: Linker problem with short relocations


On Sat, Jan 30, 1999 at 01:29:12PM +0100, Richard Apeltauer wrote:
> > 	GLOBL	short_test, entry
> > 	
> > 	text
> > entry:	move.l	short_test.w,d0
> > 	bra	entry
> 
> You are explicitly using the adressing mode "Absolute Short" by
> adding the ".w" to your operand. In this mode the address range 
> goes from 0...$7FFF and $FFFF8000... $FFFFFFFF.
> or in other words from -32768 ... 32767.
> 
> That's no bug - it's a (Motorola) addressing feature!

I know, and the code I have to maintain heavily depends on that. However, as
soon as a variable which I address using .w is placed above $7fff, the
produced code is not correct - it is *not* possible to access eg. $8100
using a short access, so I would like to get a warning / error so that I can
change this, instead of having to track down why my code does not work
anymore in some obscure way (there are hardware registers at
$FFFF8xxx-$FFFFFFFF, but no RAM).

> As said - no linker Problem - use absolute addressing without the 
> .w suffix for an access above $7FFF.

I can't always avoid that - inserting extra buffers somewhere else may move
those variables that are addressed short to a too high address, so that
short addressing is not possible - in that case,I consider this a bug, since
the linker produces code that is not correct anymore - the code accesses
$FFFF8100 instead of my variable, which is at $00008100.

cu
Michael
-- 
Michael Schwingen, Ahornstrasse 36, 52074 Aachen
_______________________________________________
New CrossGCC FAQ: http://www.objsw.com/CrossGCC
_______________________________________________
To remove yourself from the crossgcc list, send
mail to crossgcc-request@cygnus.com with the
text 'unsubscribe' (without the quotes) in the
body of the message.