This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: gcc pragma pack on hpux
- From: Eric Frias <efrias at syncad dot com>
- To: John David Anglin <dave at hiauly1 dot hia dot nrc dot ca>
- Cc: dave dot anglin at nrc-cnrc dot gc dot ca, gcc at gcc dot gnu dot org
- Date: Mon, 20 Dec 2004 15:24:22 -0500
- Subject: Re: gcc pragma pack on hpux
- References: <200412162200.iBGM0lxb011849@hiauly1.hia.nrc.ca>
John David Anglin wrote:
[regarding enabling #pragma pack on HP-UX, which for some reason is
disabled in gcc]
The maximum alignment available for bss/common variables is 8 bytes
with the 32-bit SOM linker. That's the only restriction that I'm
aware of, Thus, it may be ok to define HANDLE_PRAGMA_PACK_PUSH_POP
in the file hpux.h.
I've just tried running the GCC test suite (make check-gcc), and it
looks good. I did three tests: first with the gcc-3.4.2 distribution,
next with HANDLE_PRAGMA_PACK_PUSH_POP in pa/pa-hpux.h, and finally
defining HANDLE_PRAGMA_PACK defined instead. The results of all three
tests were identical:
=== gcc Summary ===
# of expected passes 24024
# of expected failures 69
# of unresolved testcases 22
# of untested testcases 7
# of unsupported tests 373
/devel/syncad/build-gcc-3.4.2/gcc/xgcc version 3.4.2
I don't know how you choose which version of #pragma pack should be
enabled for this platform. If the choice is based on what the native
compilers do, it looks like the non-push-pop version is closer to the
desired behavior. The native HP compiler's pragma pack is documented here:
http://docs.hp.com/en/8/pragmas.htm#pragma-pack
I'd like to make one of these #pragma pack options enabled by default on
HP-UX, unless there's a good reason why it should remain disabled.
Enabling it would make my life a lot easier and my source code a lot
cleaner (I'm not the only one, google turns up a two or three other
discussions where people had to work around the lack of #pragma pack on
hp). If this is possible, what can I do to help make it happen?
Thanks,
Eric
John David Anglin wrote:
I have a question about the HP-UX port of gcc, and from looking at the
gcc Contributors list it looks like you're the person to ask. I'm
working on porting some software (winelib) that makes heavy use of
#pragma pack, and gcc doesn't support this pragma on HP-UX. I was
hoping you could tell me why it is disabled.
I tried adding the HANDLE_PRAGMA_PACK define to gcc's config files and
it looks like #pragma pack started working correctly (I haven't run the
regression tests yet to confirm it).
I don't know. It hasn't come up in the period that I have been
involved in GCC.
If necessary, I think I can use __attribute__((packed,aligned(x))) to
work around this, but it needs to be applied on a structure-by-structure
basis. The software I'm porting has about 10k lines surrounded by
pragma pack directives, so converting it to use attributes would be very
tedious.
Do you know if turning on these options will break anything? Is there
any chance future releases of gcc will have this enabled by default?