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.
>
> 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". 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".
>
> This also helps to avoid the scenario if user explicitly specifies debug 
> level. The gcc documentation says
> "If you use multiple -g options, with or without level numbers, the last such 
> option is the one that is effective."
> With complex, like buck, build systems with various config files, and hard 
> coded overrides that's just asking to end up with debug level that might not 
> be what user expects.
>
> Thank You
> Alex

Personally I also prefer that -gdwarf64 does not implies debug info
emission, and wish we can continue using -g for future debug options
(not having to abandon -g just because a few -g have the undesired
side effect).

The usage of -gdwarf64 is niche. If the side effect of -gdwarf-N,
-ggdb, -gstabs, -gxcoff, etc is clearly documented on
https://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html
I hope -gdwarf64 not implying debug info emission is fine.

Clang from 10.0 onwards supports -fdebug-default-version
(https://reviews.llvm.org/D69822) for a -gdwarf-N variant which does
not imply debug info emission.

>
> ________________________________
> From: David Blaikie <dblai...@gmail.com>
> Sent: Wednesday, November 25, 2020 1:46 PM
> To: Richard Biener <richard.guent...@gmail.com>
> Cc: Jakub Jelinek <ja...@redhat.com>; Mark Wielaard <m...@klomp.org>; 
> gcc@gcc.gnu.org <gcc@gcc.gnu.org>; ikud...@accesssoftek.com 
> <ikud...@accesssoftek.com>; Alexander Yermolovich <ayerm...@fb.com>; 
> mask...@google.com <mask...@google.com>
> Subject: Re: DWARF64 gcc/clang flag discussion
>
> On Wed, Nov 25, 2020 at 1:22 AM Richard Biener
> <richard.guent...@gmail.com> wrote:
> >
> > On Tue, Nov 24, 2020 at 7:38 PM David Blaikie <dblai...@gmail.com> wrote:
> > >
> > > On Tue, Nov 24, 2020 at 3:11 AM Jakub Jelinek <ja...@redhat.com> wrote:
> > > >
> > > > On Tue, Nov 24, 2020 at 12:04:45PM +0100, Mark Wielaard wrote:
> > > > > Hi,
> > > > >
> > > > > On Tue, 2020-11-24 at 08:50 +0100, Richard Biener wrote:
> > > > > > On Tue, Nov 24, 2020 at 8:45 AM Jakub Jelinek <ja...@redhat.com> 
> > > > > > wrote:
> > > > > > > I agree with Richard and I'd lean towards -gdwarf32/-gdwarf64, 
> > > > > > > even
> > > > > > > when DWARF 32 is released in 81 years from now or how many, it 
> > > > > > > would
> > > > > > > use -gdwarf-32.
> > > > > >
> > > > > > Works for me.  Let's go with -gdwarf32/64.
> > > > >
> > > > > I don't have a strong opinion, so if that is the consensus, lets go
> > > > > with that. The only open question (which I wanted to avoid by picking
> > > > > -f...) is whether it enables generating debuginfo as is normal when
> > > > > using any -goption, or whether you need another -goption to explicitly
> > > > > turn on debuginfo generation when using -gdwarf32/64? My preference
> > > > > would be that any option starting with -g enables debuginfo generation
> > > > > and no additional -g is needed to keep things consistent.
> > > >
> > > > I think we lost that consistency already, I think -gsplit-dwarf has been
> > > > changed quite recently not to imply -g.
> > >
> > > My understanding was that that change hasn't gone in at this point, in
> > > part because of the issue of changing the semantics of an existing
> > > flag and discussions around whether -g implies debug info. Could you
> > > confirm if this change has been made in GCC? as it may be important to
> > > make a similar change in Clang for consistency.
> > >
> > > Not that Split DWARF would be the first example of -g flags that don't
> > > imply -g. (-ggnu-pubnames, I think, comes to mind)
> > >
> > > > That said, for -gdwarf32/64, I think it is more sensible to enable debug
> > > > info than not to.
> > >
> > > Given my (& I think others on both GCC and Clang from what I gathered
> > > from the previous threads) fairly strong desire to allow selecting
> > > features without enabling debug info - perhaps it'd make sense for
> > > Clang to implement -fdwarf32/64 and then can implement -gdwarf32/64
> > > for compatibility whenever GCC does (without implementing -gdwarf32/64
> > > with potentially differing semantics than GCC re: enabling debug info)
> > >
> > > Seems these conversations end up with a bunch of different
> > > perspectives which is compounding the inconsistencies/variety in
> > > flags.
> > >
> > > If there's general agreement that -g* flags should imply -g, maybe we
> > > could carveout the possibility then that -f flags can affect debug
> > > info generation but don't enable it? For users who want to be able to
> > > change build-wide settings while having potentially
> > > per-library/per-file customization. (eg: I want to turn down the debug
> > > info emission on this file (to, say, -gmlt) but I don't want to force
> > > debug info on for this file regardless of build settings)
> >
> > I don't think that all -g switches have to enable debuginfo generation.
>
> Any thoughts on this case - whether -gdwarf32/-gdwarf64 should imply -g?
>
> > Historically the -g flags selecting a debuginfo format did and I guess
> > we need to continue to do that for backward compatibility (-gdwarf,
> > -gstabs, etc.).
>
> -gdwarf-N sort of falls under this category, at least for backwards
> compatibility - though whether it "selects a debuginfo format" might
> be a bit open to interpretation. Where does -gdwarf32/-gdwarf64 fall
> on that spectrum for you? I guess the important part is compatibility,
> not whether it selects a debug info format or does something else.
> There's no need for mechanical compatibility (though possibly for
> human compatibility - having -gdwarf-4 enable -g but -gdwarf32 not
> enable -g seems fairly subtle to me) here, but some folks on this
> thread suggest -gdwarf32 should enable -g (Jakub and Jeff).
>
> > All other -g flags should not enable debug and some
> > clearly don't, like -gcolumn-info which is even enabled by default.
> > Also -gno-pubnames does not disable debug.
> >
> > From looking at the source the following options enable debug:
> >
> > -g
> > -gN
> > -gdwarf
> > -gdwarf-N
> > -ggdb
> > -gstabs
> > -gstabs+
> > -gvms
> > -gxcoff
> > -gxcoff+
> >
> > all others do not.  And yes, the -gsplit-dwarf change went in.
>
> Oh. Seems a pity from a backwards (& sidewards with clang - though
> we'll probably update ours to match to reduce that problem)
> compatibility standpoint, but good to know!
>
> - Dave



-- 
宋方睿

Reply via email to