Message ID | 20110617192406.GA27136@bromo.med.uc.edu |
---|---|
State | New |
Headers | show |
Hi Mike, Jack, On 17 Jun 2011, at 20:24, Jack Howarth wrote: > 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? > > 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... maybe I need more coffee .. and the gcc gathering was very sociable... but... ... It seems to me that switching pie off in libjava spec == switching pie off for every java program. (i.e. it doesn't seem equivalent to BOOT_CFLAGS, but maybe I'm still missing something). >> 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... The thing that is not clear is this. libjava (and boehm-gc) with pie passes on d9 and d10 (modulo a test- suite related kludge); so it doesn't seem that there's a fundamental problem. (c.f. PCH, which won't work with pie, by definition from its design). AFAIR ecj1 is not involved in the libjava tests - because they don't actually compile from .java. (I'm not debating that there is a problem with ecj1 - but maybe that needs to be solved in the explicit build instructions for that executable). ---- So is this 'fix' a work-around for a tool bug... or is there really a lurking problem in boehm-gc/libjava that is uncovered by darwin11? we seem to be switching off pie without actually pointing at the reason for doing so... Iain
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;`