On 07/08/2015 03:05 PM, DJ Delorie wrote:
In the TPF case, the software has to explicitly mark such pointers as
SImode (such things happen only when structures that contain addresses
can't change size, for backwards compatibility reasons[1]):

int * __attribute__((mode(SImode))) ptr;

   ptr = &some_var;
So in effect, we have two pointer sizes, 64 being the default, but we can also get a 32 bit pointer via the syntax above? Wow, I'm surprised that works.

And the only time we'd be able to use larl is a dereference of a pointer declared with the syntax above. Right

OK for the trunk with a simple testcase. I think you can just scan the assembler output for the larl instruction.



so I wouldn't consider this the "default" case for those apps, just
*a* case that needs to be handled "well enough", and the user is
already telling the compiler that they assume those addresses are
32-bit (that either the whole app, or at least the part with that
object, will be linked below 4Gb).

The majority of the addresses are handled as 64-bit.


[1] /me refrains from commenting on the worth of such practices, just
     that they exist and need to be (and have been) supported.
Understood, but we also need to make sure that we don't do something that breaks things. Thus I needed to know the tidbit about explicitly declaring those pointers as SImode.



jeff

Reply via email to