This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC 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: ilp32 far pointers


On 15/09/2013 16:46, Jonathan Wakely wrote:
On 15 September 2013 14:58, David McQuillan wrote:
The basic aim of ilp32 is to emulate an old 32 bit environment on a new
processor that supports 64 registers and pointers. However that has never
been the real aim, if one was just trying to support old programs there
would be little need for a special compiler option as you'd have the old
compiler.

The main impetus has been to use less space and get faster running programs.
There is no point having compatible syscalls with the 32 bit emulation
environment even if one is already supporting one for old programs if one can run the new program in the 64 bit environment. That is just a route to
extra support costs when new features are brought in. The only real
requirements I can see for running in a 64 bit environment is that malloc and suchlike should restrict the addresses and the 64 bit debugger should understand 4 byte restricted addresses and ELF not reuse the same ids with different lengths. The extra facility one would want in the 32 byte program
is that pointers get turned into 64 bit pointer automatically on system
calls and that even if system structures have 8 byte pointers in them only 4 bytes are loaded and this could be done by having some pointers, or maybe instead whole structures and procedure declarations, marked as 64 bit type
(or longest supported type say).

A more complete implementation than just ignoring the high part of the
addresses would be to actually distinguish between the two with warnings
when converting to 32 bit and to actually use the top part of a 64 bit
address even in an ilp32 environment, e.g. for access to a large memory
mapped file where one hadn't restricted it to the 32 bit address space.

[Please don't top-post on these lists.]

It's still not clear exactly what you want, but if you read about the
x32 architecture you might be able to say whether that is or isn't
what you want.

x32 doesn't just "ignore the high part of addresses" because it's
ILP32 so there is no high part to be ignored, pointers are 32-bit.

Yep I should read more, I'd been looking more at the MIPS business but x32 is more like what I should have looked at

https://lwn.net/Articles/456731/

actually describes most of what I had been thinking of in some of its comments and the relevant reply seems to be:

(2) Use a compiler extension that does this transparently, i.e. that supports a special pointer type where the high order bits are always zero.
...
(2) seems ideal, but requires cooperation for every supporting compiler. I don't know exactly why, but the x32 ABI devs are trying to avoid that if at all possible.

so basically it seems to me like there was probably a trade off between the compiler and the kernel and the work in the kernel was easier. I suppose that's fair enough and it isn't a killer.

Thanks

David

[and this time I forgot to set my message to text only and got it rejected first time, oh dear]


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