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 <howa...@bromo.med.uc.edu> > > > > * 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= > > ;;