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=
> >     ;;

Reply via email to