diff options
author | H.Merijn Brand <h.m.brand@xs4all.nl> | 2011-08-04 09:20:32 +0200 |
---|---|---|
committer | H.Merijn Brand <h.m.brand@xs4all.nl> | 2011-08-04 09:20:32 +0200 |
commit | 9cfd094e6d0a842551c1c58e998eb057cd8425e3 (patch) | |
tree | 35d80f75ece1586fbedb1593c4b82bdd8cf4fa74 /hints | |
parent | 4eb81ef27984510df69d5b65e3f5cfa0bd218069 (diff) | |
download | perl-9cfd094e6d0a842551c1c58e998eb057cd8425e3.tar.gz |
Support gcc-4.x on HP-UX PA-RISC/64
Correct the socketsize. Probably due to big-endian versus
little-endian, this has always worked on Intel CPUs. This
is a very very old problem, and it has been the reason I
never used gcc-4 on PA-RISC, because perl would not pass
the test suite in 64bitall.
Noticeable effects of wrong "$socksizetype" are return codes
of 0 (pass) from functions like getpeername (), but invalid
(or none) data in the returned structures or a return length
of 0 or 256. In the latter case, the length is stored in the
second part of the 64bit long and the 32bit first part is 0.
This might be true on Intel-like machines too, but the tests
will pass, as the significant part of the returned length is
in the first 32bits and a pointer to int will still see that
correct. Mind that in that case the 32bits after that might
have been overridden => can of worms.
Diffstat (limited to 'hints')
-rw-r--r-- | hints/hpux.sh | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/hints/hpux.sh b/hints/hpux.sh index cb1718478e..be6c1fddb8 100644 --- a/hints/hpux.sh +++ b/hints/hpux.sh @@ -263,6 +263,16 @@ EOM case "$ccisgcc" in $define|true|[Yy]) + # The fixed socket.h header file is wrong for gcc-4.x + # on PA-RISC2.0W, so Sock_type_t is size_t which is + # unsigned long which is 64bit which is too long + case "$gccversion" in + 4*) case "$archname" in + PA-RISC*) socksizetype=int ;; + esac + ;; + esac + # For the moment, don't care that it ain't supported (yet) # by gcc (up to and including 2.95.3), cause it'll crash # anyway. Expect auto-detection of 64-bit enabled gcc on |