On Tue, May 11, 2021 at 4:45 PM Indu Bhagat <indu.bha...@oracle.com> wrote:
>
> On 5/10/21 6:11 AM, Richard Biener wrote:
> > On Thu, May 6, 2021 at 2:31 AM Indu Bhagat via Gcc-patches
> > <gcc-patches@gcc.gnu.org> wrote:
> >>
> >> To support multiple debug formats, we need to move away from explicit
> >> enumeration of each individual combination of debug formats.
> >
> > debug_set_names with its static buffer seems unused?  You wire quite some
> > APIs with gcc_assert on having a single bit set - that doesn't look forward
> > looking.
> >
> > I suppose the BTF followups will "fix" this, but see comments below.
>
> Thanks for your feedback.
>
> Yes, I intended to fix them when I added the CTF/BTF as then I would
> have a way to debug/test it more meaningfully. Because of this, the
> debug_set_names and the associated static buffer were unused in V1 indeed.
>
> For V2, taking your inputs, I have now fixed the uses in c-opts.c and
> c-pch.c at least.
>
> >
> >> gcc/c-family/ChangeLog:
> >>
> >>          * c-opts.c (c_common_post_options): Adjust access to 
> >> debug_type_names.
> >>          * c-pch.c (struct c_pch_validity): Use type uint32_t.
> >>          (pch_init): Renamed member.
> >>          (c_common_valid_pch): Adjust access to debug_type_names.
> >>
> >> gcc/ChangeLog:
> >>
> >>          * common.opt: Change type to support bitmasks.
> >>          * flag-types.h (enum debug_info_type): Rename enumerator 
> >> constants.
> >>          (NO_DEBUG): New bitmask.
> >>          (DBX_DEBUG): Likewise.
> >>          (DWARF2_DEBUG): Likewise.
> >>          (XCOFF_DEBUG): Likewise.
> >>          (VMS_DEBUG): Likewise.
> >>          (VMS_AND_DWARF2_DEBUG): Likewise.
> >>          * flags.h (debug_set_to_format): New function declaration.
> >>          (debug_set_count): Likewise.
> >>          (debug_set_names): Likewise.
> >>          * opts.c (debug_type_masks): Array of bitmasks for debug formats.
> >>          (debug_set_to_format): New function definition.
> >>          (debug_set_count): Likewise.
> >>          (debug_set_names): Likewise.
> >>          (set_debug_level): Update access to debug_type_names.
> >>          * toplev.c: Likewise.
> >>
> >> gcc/objc/ChangeLog:
> >>
> >>          * objc-act.c (synth_module_prologue): Use uint32_t instead of enum
> >>          debug_info_type.
> >> ---
> >>   gcc/c-family/c-opts.c |  10 +++--
> >>   gcc/c-family/c-pch.c  |  12 +++---
> >>   gcc/common.opt        |   2 +-
> >>   gcc/flag-types.h      |  29 ++++++++++----
> >>   gcc/flags.h           |  17 +++++++-
> >>   gcc/objc/objc-act.c   |   2 +-
> >>   gcc/opts.c            | 109 
> >> +++++++++++++++++++++++++++++++++++++++++++++-----
> >>   gcc/toplev.c          |   9 +++--
> >>   8 files changed, 158 insertions(+), 32 deletions(-)
> >>
> >> diff --git a/gcc/c-family/c-opts.c b/gcc/c-family/c-opts.c
> >> index 89e05a4..e463240 100644
> >> --- a/gcc/c-family/c-opts.c
> >> +++ b/gcc/c-family/c-opts.c
> >> @@ -1112,9 +1112,13 @@ c_common_post_options (const char **pfilename)
> >>            /* Only -g0 and -gdwarf* are supported with PCH, for other
> >>               debug formats we warn here and refuse to load any PCH files. 
> >>  */
> >>            if (write_symbols != NO_DEBUG && write_symbols != DWARF2_DEBUG)
> >> -           warning (OPT_Wdeprecated,
> >> -                    "the %qs debug format cannot be used with "
> >> -                    "pre-compiled headers", 
> >> debug_type_names[write_symbols]);
> >> +           {
> >> +             gcc_assert (debug_set_count (write_symbols) <= 1);
> >
> > Why this assert?  Iff then simply include the count check in the
> > condition of the warning.
> >
> >> +             warning (OPT_Wdeprecated,
> >> +                      "the %qs debug format cannot be used with "
> >> +                      "pre-compiled headers",
> >> +                      debug_type_names[debug_set_to_format 
> >> (write_symbols)]);
> >
> > Maybe simply emit another diagnostic if debug_set_count > 1.
> >
>
> OK. I have removed the asserts. The code now uses debug_set_names
> uniformly. I have changed the diagnostic message, as there can be
> multiple debug formats for PCH at some point. So,
>
> from "the 'XXX' debug format cannot be used with pre-compiled headers"
> to   "the 'XXX YYY' debug info cannot be used with pre-compiled headers"
> if multiple debug formats were enabled.
>
> >> +           }
> >>          }
> >>         else if (write_symbols != NO_DEBUG && write_symbols != 
> >> DWARF2_DEBUG)
> >>          c_common_no_more_pch ();
> >> diff --git a/gcc/c-family/c-pch.c b/gcc/c-family/c-pch.c
> >> index fd94c37..6804388 100644
> >> --- a/gcc/c-family/c-pch.c
> >> +++ b/gcc/c-family/c-pch.c
> >> @@ -52,7 +52,7 @@ enum {
> >>
> >>   struct c_pch_validity
> >>   {
> >> -  unsigned char debug_info_type;
> >> +  uint32_t pch_write_symbols;
> >>     signed char match[MATCH_SIZE];
> >>     void (*pch_init) (void);
> >>     size_t target_data_length;
> >> @@ -108,7 +108,7 @@ pch_init (void)
> >>     pch_outfile = f;
> >>
> >>     memset (&v, '\0', sizeof (v));
> >> -  v.debug_info_type = write_symbols;
> >> +  v.pch_write_symbols = write_symbols;
> >>     {
> >>       size_t i;
> >>       for (i = 0; i < MATCH_SIZE; i++)
> >> @@ -252,13 +252,15 @@ c_common_valid_pch (cpp_reader *pfile, const char 
> >> *name, int fd)
> >>     /* The allowable debug info combinations are that either the PCH file
> >>        was built with the same as is being used now, or the PCH file was
> >>        built for some kind of debug info but now none is in use.  */
> >> -  if (v.debug_info_type != write_symbols
> >> +  if (v.pch_write_symbols != write_symbols
> >>         && write_symbols != NO_DEBUG)
> >>       {
> >> +      gcc_assert (debug_set_count (v.pch_write_symbols) <= 1);
> >> +      gcc_assert (debug_set_count (write_symbols) <= 1);
> >
> > So the read-in PCH will have at most one bit set but I don't think
> > you can assert on write_symbols here.
> >
>
> I switched both to use debug_set_names.
>
> > Otherwise looks OK.  Did you check for write_symbols uses in FEs and 
> > targets?
> >
> > Richard.
>
> Yes, I have. I must admit I have gone back and forth in my mind on this.
> My initial thinking was to adjust only those checks where I expect more
> than 1 write_symbols. Because in most contexts, e.g., (write_symbols ==
> XCOFF_DEBUG) is a stricter check than (write_symbols & XCOFF_DEBUG), in
> some sense.
>
> Anyway, after you raised this point, however, I looked again, and have
> added some dwarf_debuginfo_p usages in the second patch. Basically, I
> replaced some write_symbols == DWARF2_DEBUG with dwarf_debuginfo_p ()
> usage. Other than DWARF2_DEBUG, at this time, no other debug format is
> expected to be written out together with other debug formats.
>
> As for other usages of write_symbols
>   - I plan to get rid of the VMS_AND_DWARF2_DEBUG symbol in a subsequent
> patch (this should deal with most usages in vmsdbgout.c).
>
> I will post V2 next.
>
> A question though - I have regression tested the V2 patch set on x86_64.
> Although the sort of changes in the backend files can be OK, I am happy
> to take any further suggestions for testing this patch set.

If you touch backends in non-trivial ways it's at least good to test it
still builds in a simple cross configuration which means
configuring for one of the supported target triplets and doing
make all-gcc (that only builds host objects so you don't need
binutils or target headers for this)

Richard.

> Thanks
> Indu

Reply via email to