On Fri, Dec 4, 2020 at 7:01 PM Alexander Yermolovich <ayerm...@fb.com> wrote:
> > > ------------------------------ > *From:* Richard Biener <richard.guent...@gmail.com> > *Sent:* Friday, December 4, 2020 12:36 AM > *To:* David Blaikie <dblai...@gmail.com> > *Cc:* Alexander Yermolovich <ayerm...@fb.com>; Jakub Jelinek < > ja...@redhat.com>; Mark Wielaard <m...@klomp.org>; gcc@gcc.gnu.org < > gcc@gcc.gnu.org>; ikud...@accesssoftek.com <ikud...@accesssoftek.com>; > mask...@google.com <mask...@google.com> > *Subject:* Re: DWARF64 gcc/clang flag discussion > > On Thu, Dec 3, 2020 at 6:52 PM David Blaikie <dblai...@gmail.com> wrote: > > > > On Wed, Dec 2, 2020 at 5:10 PM Alexander Yermolovich <ayerm...@fb.com> > wrote: > > > > ------------------------------ > *From:* David Blaikie <dblai...@gmail.com> > *Sent:* Wednesday, December 2, 2020 1:12 PM > *To:* Alexander Yermolovich <ayerm...@fb.com> > *Cc:* Richard Biener <richard.guent...@gmail.com>; Jakub Jelinek < > ja...@redhat.com>; Mark Wielaard <m...@klomp.org>; gcc@gcc.gnu.org < > gcc@gcc.gnu.org>; ikud...@accesssoftek.com <ikud...@accesssoftek.com>; > mask...@google.com <mask...@google.com> > *Subject:* Re: DWARF64 gcc/clang flag discussion > > > > On Wed, Dec 2, 2020 at 10:44 AM Alexander Yermolovich <ayerm...@fb.com> > wrote: > > > > ------------------------------ > *From:* David Blaikie <dblai...@gmail.com> > *Sent:* Tuesday, December 1, 2020 10:33 AM > *To:* Alexander Yermolovich <ayerm...@fb.com> > *Cc:* Richard Biener <richard.guent...@gmail.com>; Jakub Jelinek < > ja...@redhat.com>; Mark Wielaard <m...@klomp.org>; gcc@gcc.gnu.org < > gcc@gcc.gnu.org>; ikud...@accesssoftek.com <ikud...@accesssoftek.com>; > mask...@google.com <mask...@google.com> > *Subject:* Re: DWARF64 gcc/clang flag discussion > > > > On Mon, Nov 30, 2020 at 5:04 PM Alexander Yermolovich <ayerm...@fb.com> > wrote: > > > > ------------------------------ > *From:* David Blaikie <dblai...@gmail.com> > *Sent:* Monday, November 30, 2020 12:09 PM > *To:* Alexander Yermolovich <ayerm...@fb.com> > *Cc:* Richard Biener <richard.guent...@gmail.com>; Jakub Jelinek < > ja...@redhat.com>; Mark Wielaard <m...@klomp.org>; gcc@gcc.gnu.org < > gcc@gcc.gnu.org>; ikud...@accesssoftek.com <ikud...@accesssoftek.com>; > mask...@google.com <mask...@google.com> > *Subject:* Re: DWARF64 gcc/clang flag discussion > > On Mon, Nov 30, 2020 at 11:36 AM Alexander Yermolovich <ayerm...@fb.com> > wrote: > > Thank you David for driving the conversation, sorry I was on vacation. > > > All good - really appreciate everyone chipping in whenever/however they > can! > > > > I guess discussion is from perspective of having both flags > gdwarf32/gdwarf64. In which case it's a valid question on whether they > should imply -g like -gdwarf-#. > But can this be viewed as only a -gdwarf64 flag, that is a qualifier to > other debug flags that enable debug information? DWARF spec says that 32bit > should be a default, and 64bit should be used rarely (paraphrasing). So > when user enabled debug information the default expectation is that it will > be 32bit. There is no real need for a flag to say "I want debug > information, and I want it 32bit". > > > I'm not quite with you here, I think. I believe it's important to be able > to opt into and out of things at any point on the command line - because of > how complex build systems build up command lines. You might have a > -gdwarf64 set as a project default, but for some reason want to opt into > -gdwarf32 in other parts (perhaps you're building the debug info for your > interface library you intend to ship to clients who might only have DWARF32 > support, but your library is big and needs DWARF64 for the rest). A general > architectural principle of most command line arguments to the compiler is > that they can be opted into/out of fairly symmetrically (hence all the > -*no-* variant flags). > > [Alex] Ah I see, good point. > > > On the other hand, 64bit DWARF format must be enabled. So from users > perspective it's "I want debug information enabled for particular DWARF > version and level, oh and I want it to be 64bit". > > > But there's also the possibility of wanting to turn on DWARF64 for any > debug info in your build, but not necessarily wanting to turn on debug info > while doing so. Eg: you have a big build system, with a variety of users > and flags all over the place - maybe users opting in to -g2 on some files > and -g1 on others, and/or under different build modes. And the project as a > whole is reaching the DWARF64 tipping point and you'd like to say "if we're > generating DWARF, make it DWARF64". We've recently encountered this sort of > situation with -gsplit-dwarf and with -gdwarf-N (in switching to DWARFv5 we > had this situation where there's a big code base/build system with many > users, many uses of different -gN-type flags and it'd be impractical to go > and add -gdwarf-5 to all the -gN uses to make them all use DWARFv5, so we > added -fdebug-default-version=N (I might be misremembering the spelling) to > Clang to support this use case of "If we're generating DWARF, make it > DWARFv5") > > [Alex] I think we are saying similar thing. The -gdwarf64 doesn't enable > debug generation, but if it is enabled it will be 64bit. A "qualifier" of > sorts. > > > OK. My concern there, though I think it's the preferable semantics for the > -gdwarf64 flag when considered in isolation, is now -gdwarf64 and -gdwarf-5 > would have some fairly subtly different semantics (the latter enables debug > info and the former does not) in contrast to how close their spelling is. > (in addition to their general similarly maybe being a source of confusion - > even if the numbers aren't close to each other) > [Alex] That is a good point, but I guess broader question is if precedence > is not good, should we follow it? If it's clearly documented, might be OK. > As my professor Brian Harvey said many, many, many moons ago during my > undergrad: "RTFM". If my understanding of exchange on this thread is > correct, there doesn't seem to be a consensus on this point. > > > Re: lacking consensus: yep. That's my understanding. > > Admittedly my sort of wedge take on this is - why not use -f flags that > don't have the ambiguity/overlap with "maybe it enables debug info too". (& > maybe we could use -fdwarf32/64 in Clang, to avoid implementing > -gdwarf32/64 with a difference in behavior in terms of > also-enables-emission - then implement whatever semantics GCC ended up > picking) - well, "why not" because of the general take that debug info > flags should be "-g", fair enough. > > So, yeah, I'm still pretty undecided about how Clang should move forward > with this in the immediate future. > [Alex] Well if there is no consensus maybe clang can trail blaze. 🙂 > > > My concern with doing so is both that GCC might not make the same > decision, leading to differences in flag semantics (and my other concerns > about the available options that lean towards the -g* style naming and the > ambiguities around composability or implied -g in general and in particular > with the likely names here and how close they are to existing names that do > imply -g, hence my personal preference towards the -f names). Might end up > going with the -f names out of a combination of my desire for clear > designation of composability, and sidestepping the issue of GCC > compatibility in the future if GCC's going to pick a -g name and semantics > (implied -g or otherwise) anyway. This does mean I/we/clang loses a chance > to perhaps somewhat more heavily (than just my words here) influence GCC's > flag choice (eg: by Clang choosing the -g* naming and making it composable, > for instance), but avoids the chance of divergent behavior between the two > compilers, or breaking backwards compatibility to maintain compatibility. > > All up I just don't have great feelings about any of the paths forward, > really. I think -fdwarf32/64 is the better option for users, that > -gdwarf32/64 implying -g would be unfortunate (composability is valuable) > and -gdwarf32/64 being composable would be pretty confusing to users given > -gdwarf-N isn't composable & they are very similar flags/spellings > (similarly for -g32/64 compared to -gN). > > > Sorry, just going around in circles a bit, I guess this may be a better > summary: > If I had to pick a -g flag/semantic for this, I guess I'd pick > -gdwarf32/64 without implied -g. I'd pick that if I knew GCC would > implement it to match - but if GCC might go either way on implied -g, I > think I'd rather avoid changing the semantics of the flag later on & use a > different name GCC isn't likely to define different semantics for (and I'd > probably pick -fdwarf32/64). > > > There's an approved patch to add -gdwarf{32,64} not implying -g > [Alex] Do you happen to have a link on hand to it? > https://gcc.gnu.org/pipermail/gcc-patches/2020-December/560734.html > Richard. > > > > - Dave > >