On Wed, Aug 25, 2021 at 8:30 PM Iain Sandoe via Gcc-patches <gcc-patches@gcc.gnu.org> wrote: > > > > > On 25 Aug 2021, at 19:22, H.J. Lu <hjl.to...@gmail.com> wrote: > > > > On Wed, Aug 25, 2021 at 11:10 AM Iain Sandoe <idsan...@googlemail.com> > > wrote: > >> > >> > >> > >>> On 25 Aug 2021, at 18:56, H.J. Lu via Gcc-patches > >>> <gcc-patches@gcc.gnu.org> wrote: > >>> > >>> On Wed, Aug 25, 2021 at 10:51 AM H.J. Lu <hjl.to...@gmail.com> wrote: > >>>> > >>>> On Wed, Aug 25, 2021 at 10:42 AM Iain Sandoe <idsan...@googlemail.com> > >>>> wrote: > >>>>> > >>>>> Hi, > >>>>> > >>>>>> On 20 Aug 2021, at 11:29, Richard Sandiford > >>>>>> <richard.sandif...@arm.com> wrote: > >>>>>> > >>>>>>>> Maybe it would be easier to have the makefile fragments determine > >>>>>>>> something like CODE_MODEL_CFLAGS, which can be "-fPIC", > >>>>>>>> "-mdynamic-no-pic", > >>>>>>>> etc., and use: > >>>>>>>> > >>>>>>>> COMPILER += $(NO_PIE_CFLAGS) $(CODE_MODEL_CFLAGS) > >>>>>>> > >>>>>>> OK. I have misgivings about this - the problem is that: > >>>>>>> > >>>>>>> -fPIC -fno-PIE != -fno-PIE -fPIC, which is not obvious to many folks > >>>>>>> - who expect that > >>>>>>> the “last edition of a flag will be the one in force”. > >>>>>>> > >>>>>>> So the PIE-ness and the PIC-ness are decoupled in the configury but > >>>>>>> they need to be > >>>>>>> ordered specifically for targets that want PIC code by default (FWIW, > >>>>>>> I don’t think Darwin > >>>>>>> is the only default-PIC case here, from discussions on irc). > >>>>>> > >>>>>> Yeah, that's what the above was supposed to achieve. In other words, > >>>>>> if you force non-PIE, you also need to follow that by > >>>>>> $(CODE_MODEL_CFLAGS), > >>>>>> which restates whatever the base code model is. > >>>>>> > >>>>>> If it's the decoupling you're worried about, then an alternative would > >>>>>> be to have: > >>>>>> > >>>>>> NO_PIE_CFLAGS="-fno-PIE \$(CODE_MODEL_CFLAGS)” > >>>>> > >>>>> I’d like to ask a couple of questions (of HJ who introduced the no-PIE > >>>>> logic) before implementing this. > >>>>> > >>>>> A. We use no-PIE for cc1* because that is needed to handle the PCH > >>>>> implementation (which relies on the executables being loaded at the > >>>>> same addresses each time). > >>>>> > >>>>> B. It’s certainly not obvious to me why we need to build code to run on > >>>>> $build to be no-PIE - I don’t see any such dependencies in the > >>>>> generators etc. > >>>>> > >>>>> - So Question1 - HJ what was the motivation for making the > >>>>> XXX_BUILD_XXX adopt no-PIE? > >>>> > >>>> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71934 > >>>> > >>>>> —— > >>>>> > >>>>> Independently of this we seem to be building the objects for $host thus: > >>>>> > >>>>> $(CXX) (NO_PIE_CFLAGS) -c $(ALL_CXXFLAGS) etc. > >>>>> > >>>>> but we build for $build thus: > >>>>> > >>>>> $(CXX) -c $(ALL_CXXFLAGS) $(GENERATOR_CFLAGS) -DGENERATOR_FILE > >>>>> $(BUILD_NO_PIE_CFLAGS) $(BUILD_CPPFLAGS) > >>>>> > >>>>> which means that code model flags in $ALL_CXXFLAGS are overridden for > >>>>> $build, but active for $host > >>>>> ^^ this is actually what causes the Darwin build fail - since on Darwin > >>>>> we cannot build static linked code for user-space processes. > >>>>> > >>>>> in any event that’s inconsistent (unless there’s a reason that it > >>>>> should be different). > >>>>> > >>>>> ---- > >>>>> > >>>>> below are extracts from gcc/Makefile *on linux* which demonstrates the > >>>>> different ordering. > >>>>> > >>>>> AFAICT, > >>>>> NO_PIE_CFLAGS_FOR_BUILD, NO_PIE_FLAG_FOR_BUILD are dead variables? > >> > >> ^^ what was the intention for these? > >> > >>>>> Question 2 : HJ, what was your intention for how a configuration would > >>>>> request PIC code (for example) for things to run on $build? > >>> > >>> We need to fix > >>> > >>> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71934 > >> > >> The need for no-PIE for the exectuables that consume PCH is completely > >> clear (but a target can choose not to use PCH - and configure > >> —disable-libstdcxx-pch). > >> > >> The PR doesn’t explain: > >> > >> 1. why it’s being enabled for the generators (and other $build code) which > >> do not use PCH (AFAIK) > >> > >> 2. why the flags ordering is different for $build and $host. > >> > >> I am completely happy to make the fix Richard suggested - but we seem to > >> be adding complexity rather than simplifying things; as noted in the PR > >> there are targets that cannot use no-PIE and therefore have to disable PCH > >> anyway. > > > > Please follow: > > > > https://gcc.gnu.org/pipermail/gcc-patches/2015-October/432180.html > > I don’t see answers to the questions above in that thead or the PR - there is > nothing so far in this that explains why no-PIE has been forced on for the > stuff in gcc/build
I think there's no good reason for -fno-PIE for exectuables built for build (if done correctly, that is). So it would indeed be nice to simplify things here. Richard. > but OK.. I’ll look at implementing the patch suggested by Richard, > thanks > Iain > > >