Subject: Re: Shared library support for ARM ELF
To: Todd Vierling <tv@wasabisystems.com>
From: Richard Earnshaw <rearnsha@arm.com>
List: port-arm
Date: 07/20/2001 17:42:10
> : No, the only time it's needed is when we need to examine the return
> : address in "C" code.  At run time the architecture just gets extracting
> : the return bits right.  C code unpicking the stack however, has to throw
> : away the bits that don't count.  In practise this will only occur when
> : unwinding an exception.
> 
> OK, that makes sense.  (Trampolines also come to mind, but I'm unsure as to
> whether arm uses them extensively.)


Even trampolines don't need to worry about this.  The act of moving the 
return value into the pc will throw away the unwanted bits (unless you use 
the movs instruction or ldm...^ equivalent, which is what we won't be 
doing).  So we only need to mask the value if passing it back to the 
programmer in some way.  __builtin_return_addr(0) is one way (we don't 
support other values to this function on the arm); exception unwinding is 
another.  Neither of these are common, so the hit on performance is 
minimal.

R.