This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH 1/5] dwarf2read.c: Some C++fycation, use std::vector, std::unique_ptr


On 03/29/2017 04:06 PM, Simon Marchi wrote:
>> -/* Add an entry to LH's include directory table.  */
>> -
>> -static void
>> -add_include_dir (struct line_header *lh, const char *include_dir)
>> +void
>> +line_header::add_include_dir (const char *include_dir)
>>  {
>>    if (dwarf_line_debug >= 2)
>>      fprintf_unfiltered (gdb_stdlog, "Adding dir %u: %s\n",
>> -            lh->num_include_dirs + 1, include_dir);
>> +            (unsigned) include_dirs.size () + 1, include_dir);
> 
> Can you use %zu for these?

Hmm, we didn't use to because that would require a C99 runtime.

C++11 is rebased on top of C99, but that doesn't mean that in
practice you're using a C++11 compiler with a fully conforming
C library.

E.g., mingw+msvrt doesn't support it.  However, I think that
gnulib enables __USE_MINGW_ANSI_STDIO, so it should work there.
I don't know about other systems, but it's likely to be safe to
use it nowadays.  In any case, we can always throw more gnulib
at the problem.  There's a printf module that AFAICS supports '%z'.

I'll push with that change.

> 
>> @@ -17952,11 +17890,22 @@ dwarf_decode_line_header (unsigned int
>> offset, struct dwarf2_cu *cu)
>>    if (lh->version >= 5)
>>      {
>>        /* Read directory table.  */
>> -      read_formatted_entries (abfd, &line_ptr, lh, &cu->header,
>> -                  add_include_dir_stub);
>> +      read_formatted_entries (abfd, &line_ptr, lh.get (), &cu->header,
>> +                  [] (struct line_header *lh, const char *name,
>> +                  unsigned int dir_index, unsigned int mod_time,
>> +                  unsigned int length)
>> +    {
>> +      lh->add_include_dir (name);
>> +    });
>>
>>        /* Read file name table.  */
>> -      read_formatted_entries (abfd, &line_ptr, lh, &cu->header,
>> add_file_name);
>> +      read_formatted_entries (abfd, &line_ptr, lh.get (), &cu->header,
>> +                  [] (struct line_header *lh, const char *name,
>> +                  unsigned int dir_index, unsigned int mod_time,
>> +                  unsigned int length)
>> +    {
>> +      lh->add_file_name (name, dir_index, mod_time, length);
>> +    });
> 
> We can do it afterwards to avoid adding noise to this patch, but I
> noticed that if we captured lh in the lambda, we could avoid passing the
> line_header in read_formatted_entries and the callback.

Yeah, that'd require switching to use gdb::function_view though,
because otherwise you can't pass a lambda with a capture.

> I took a quick look, it looks good to me.

Thanks!


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]