On Fri, May 04, 2012 at 01:38:00PM +0200, H.Merijn Brand wrote:
> Automated smoke report for 5.15.9 patch
> 5a0c7e9d45ff6da450098635b233527990112d8a v5.15.9-270-g5a0c7e9
> a5: PA8700 (PA-RISC2.0/64/2 cpu)
> on HP-UX - B.11.00/64
> using cc version B.11.X.35098-35101.GP
> smoketime 14 hours 53 minutes (average 1 hour 51 minutes)
> v5.15.9-270-g5a0c7e9 Configuration (common) none
> ----------- ---------------------------------------------------------
> O O O m - -
> O O O O O O -Duse64bitall
> O O O m - - -Duseithreads
> O O O O O O -Duseithreads -Duse64bitall
So, to replicate the 'm', configure exactly the same way:
./Configure -de -DDEBUGGING -Dusedevel -Dcc=ccache\ cc -Dld=cc
one gets these flags
$ egrep '^(optimize|ccflags)=' config.sh
ccflags=' -Ae -D_HPUX_SOURCE -Wl,+vnocompatwarnings -DDEBUGGING
-I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 '
optimize='+O2 +Onolimit -g'
$ make run.o
`sh cflags "optimize='+O2 +Onolimit -g'" run.o` run.c
CCCMD = ccache cc -DPERL_CORE -c -Ae -D_HPUX_SOURCE
-Wl,+vnocompatwarnings -DDEBUGGING -I/usr/local/include -D_LARGEFILE_SOURCE
-D_FILE_OFFSET_BITS=64 +O2 +Onolimit -g
cc: error 1414: Can't handle preprocessed file
"/perl/usr/nick/.ccache/run.tmp.p5p-hpux.28123.i" if -g and -O specified.
*** Error exit code 1
Stop.
Simply add -Duse64bitall to that Configure command line:
./Configure -de -Duse64bitall -DDEBUGGING -Dusedevel -Dcc=ccache\ cc -Dld=cc
and one gets the same flags, just with +DD64 added:
$ egrep '^(optimize|ccflags)=' config.sh
ccflags=' -Ae -D_HPUX_SOURCE -Wl,+vnocompatwarnings +DD64 -DDEBUGGING
-I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 '
optimize='+O2 +Onolimit -g'
$ make run.o
`sh cflags "optimize='+O2 +Onolimit -g'" run.o` run.c
CCCMD = ccache cc -DPERL_CORE -c -Ae -D_HPUX_SOURCE
-Wl,+vnocompatwarnings +DD64 -DDEBUGGING -I/usr/local/include
-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 +O2 +Onolimit -g
cc: warning 404: Pre-processor not invoked, options ignored.
and it works!
So it looks like a crazy compiler, in in that doesn't permit -g +O2 for 32 bit
mode, but does permit -g +O2 for 64 bit mode. But wait. What's the bit about
"Can't handle preprocessed file"
$ echo 'int i;' >bonkers.c
$ cc -c -g +O2 bonkers.c
$ cc -E -g +O2 bonkers.c >bonkers.i
$ cc -c -g +O2 bonkers.i
cc: error 1414: Can't handle preprocessed file "bonkers.i" if -g and -O
specified.
$ cat bonkers.i
# 1 "bonkers.c"
int i;
$ cc -c -g +O2 +DD64 bonkers.c
$ cc -E -g +O2 +DD64 bonkers.c >bonkers.i
$ cc -c -g +O2 +DD64 bonkers.i
$ cat bonkers.i
# 1 "bonkers.c"
int i;
No, it's not just crazy compiler, its insane! It handles -g +O2 just fine
normally, but for 32 bit mode it refuses to accept pre-processed input.
Whereas for 64 bit mode it does.
If HP think that this isn't a bug, I'd love to know what their excuse is.
Nicholas Clark