On Fri, Jun 17, 2011 at 10:43:07AM -0700, Mike Stump wrote:
> On Jun 16, 2011, at 7:21 PM, Jack Howarth wrote:
> > The gcj compiler needs to pass -no_pie for linkage on darwin11 due to the
> > new -pie
> > default of the linker. The attached patch accomplishes this by passing
> > -no_pie on SYSTEMSPEC
> > for *-*-darwin[12]*. Since Darwin10 supports -no_pie in its linker, I
> > included it in the
> > triplet match to simplify the syntax. Bootstrap and tested on
> > x86_64-apple-darwin11.
> > Okay for gcc trunk?
>
> The darwin aspects of this seem right to me. I'm less familiar with the
> SYSTEMSPEC bit in libjava, someone want to give a quick comment on if this is
> the right knob to twist?
Mike,
Since SYSTEMSPEC in configure.ac is setting system specific options for
libgcj.spec.in, it seemed
the most rational place to append -no_pie to (and we already had a darwin entry
in the case statement).
FYI, I also tried a different approach of not appending -no_pie SYSTEMSPEC on
darwin but instead using...
Index: config/mh-darwin
===================================================================
--- config/mh-darwin (revision 175150)
+++ config/mh-darwin (working copy)
@@ -5,3 +5,4 @@ BOOT_CFLAGS += -mdynamic-no-pic
# Ensure we don't try and use -pie, as it is incompatible with pch.
BOOT_LDFLAGS += `case ${host} in *-*-darwin[1][1-9]*) echo -Wl,-no_pie ;;
esac;`
+LDFLAGS_FOR_TARGET += `case ${host} in *-*-darwin[1][1-9]*) echo -Wl,-no_pie
;; esac;`
while this produced an apparently functional gcj (ecj1), the libjava testsuite
showed two additional
regressions compared to my original SYSTEMSPEC approach to the problem...
cat <<'EOF' |
Native configuration is x86_64-apple-darwin11.0.0
=== libjava tests ===
Running target unix/-m32
FAIL: TestClosureGC run <================= new failure
FAIL: PR16923.c compilation
FAIL: TestLeak output - source compiled test <================= new failure
=== libjava Summary for unix/-m32 ===
# of expected passes 2570
# of unexpected failures 3
# of untested testcases 1
Running target unix/-m64
FAIL: TestClosureGC run <==================== new failure
FAIL: PR16923 run
FAIL: Throw_2 execution - source compiled test
FAIL: Throw_2 -findirect-dispatch execution - source compiled test
FAIL: Throw_2 -O3 execution - source compiled test
FAIL: Throw_2 -O3 -findirect-dispatch execution - source compiled test
FAIL: TestLeak output - source compiled test <======================= new
failure
=== libjava Summary for unix/-m64 ===
# of expected passes 2563
# of unexpected failures 7
# of untested testcases 6
=== libjava Summary ===
# of expected passes 5133
# of unexpected failures 10
# of untested testcases 7
Compiler version: gcc libjava
Platform: x86_64-apple-darwin11.0.0
configure flags: --prefix=/sw --prefix=/sw/lib/gcc4.7 --mandir=/sw/share/man
--infodir=/sw/lib/gcc4.7/info
--enable-languages=c,c++,fortran,objc,obj-c++,java --with-gmp=/sw
--with-libiconv-prefix=/sw --with-ppl=/sw --with-cloog=/sw --with-mpc=/sw
--with-system-zlib --x-includes=/usr/X11R6/include --x-libraries=/usr/X11R6/lib
--program-suffix=-fsf-4.7 --enable-checking=yes --enable-cloog-backend=isl
compared to the results for only passing -no_pie on libgcj.spec...
http://gcc.gnu.org/ml/gcc-testresults/2011-06/msg01853.html
>
> Roughly, there are unresolved issues with position independent code with the
> garbage collector (or was it a problem with some unknown bit in the
> compiler), and this just turns off a new OS default for java to work around
> the issue. I hope that's an at least half way accurate description. We're
> aiming to have the default for C be -fpie, but for java, no pie. For the C
> compiler, we must build the compiler without -pie in order for PCH to work.
> It is reasonable to turn off pie in the java compiler as well.
>
> Jack, do we have a PR number for this? If so, please include in the
> changelog in the usual spot.
I plan on opening a PR shortly, but I was hoping to be able to reproduce the
same failures under linux
using a bootstrap with the compiler defaulted to -fPIC code generation and the
inverse change applied
to linux of...
BOOT_LDFLAGS += -pie
to see how its boehm-gc and libjava testsuite results were impacted.
Jack
>
> > 2011-06-16 Jack Howarth <[email protected]>
> >
> > * libjava/configure.ac (SYSTEMSPEC): Pass -no_pie for darwin11.
> > * libjava/configure: Regenerate.
> >
> >
> > Index: libjava/configure.ac
> > ===================================================================
> > --- libjava/configure.ac (revision 175131)
> > +++ libjava/configure.ac (working copy)
> > @@ -898,9 +898,12 @@ case "${host}" in
> > SYSTEMSPEC="-lunicows $SYSTEMSPEC"
> > fi
> > ;;
> > - *-*-darwin[[912]]*)
> > + *-*-darwin9*)
> > SYSTEMSPEC="%{!Zdynamiclib:%{!Zbundle:-allow_stack_execute}}"
> > ;;
> > + *-*-darwin[[12]]*)
> > + SYSTEMSPEC="-no_pie %{!Zdynamiclib:%{!Zbundle:-allow_stack_execute}}"
> > + ;;
> > *)
> > SYSTEMSPEC=
> > ;;