summaryrefslogtreecommitdiff
path: root/hints
diff options
context:
space:
mode:
authorH.Merijn Brand <h.m.brand@xs4all.nl>2011-08-04 09:20:32 +0200
committerH.Merijn Brand <h.m.brand@xs4all.nl>2011-08-04 09:20:32 +0200
commit9cfd094e6d0a842551c1c58e998eb057cd8425e3 (patch)
tree35d80f75ece1586fbedb1593c4b82bdd8cf4fa74 /hints
parent4eb81ef27984510df69d5b65e3f5cfa0bd218069 (diff)
downloadperl-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.sh10
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