This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [PATCH 1/5] dwarf2read.c: Some C++fycation, use std::vector, std::unique_ptr
- From: Pedro Alves <palves at redhat dot com>
- To: Simon Marchi <simon dot marchi at polymtl dot ca>
- Cc: gdb-patches at sourceware dot org
- Date: Tue, 4 Apr 2017 19:56:59 +0100
- Subject: Re: [PATCH 1/5] dwarf2read.c: Some C++fycation, use std::vector, std::unique_ptr
- Authentication-results: sourceware.org; auth=none
- References: <1490754298-9455-1-git-send-email-palves@redhat.com> <1490754298-9455-2-git-send-email-palves@redhat.com> <ef286ec115c7c1986e41dd08ecf14fcf@polymtl.ca>
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!