[PATCH][gdb] Fix missing symtab includes
Tom de Vries
tdevries@suse.de
Mon Mar 30 17:42:12 GMT 2020
On 29-03-2020 23:44, Simon Marchi wrote:
> On 2020-03-29 11:56 a.m., Tom de Vries wrote:
>> diff --git a/gdb/psympriv.h b/gdb/psympriv.h
>> index 0effedc4ec..4317392149 100644
>> --- a/gdb/psympriv.h
>> +++ b/gdb/psympriv.h
>> @@ -124,16 +124,26 @@ struct partial_symtab
>> {
>> }
>>
>> - /* Read the full symbol table corresponding to this partial symbol
>> - table. */
>> + /* Psymtab expansion is done in two steps:
>> + - a call to read_symtab
>> + - while that call is in progress, calls to expand_psymtab can be made,
>> + both for this psymtab, and its dependencies.
>> + This makes a distinction between a toplevel psymtab (for which both
>> + read_symtab and expand_psymtab will be called) and a non-toplevel
>> + psymtab (for which only expand_psymtab will be called). The
>> + distinction can be used f.i. to do things before and after all
>> + dependencies of a top-level psymtab have been expanded.
>> +
>> + Read the full symbol table corresponding to this partial symbol
>> + table. Typically calls expand_psymtab. */
>> virtual void read_symtab (struct objfile *) = 0;
>>
>> - /* Psymtab expansion is done in two steps. The first step is a call
>> - to read_symtab; but while that is in progress, calls to
>> - expand_psymtab can be made. */
>> + /* Expand the full symbol table for this partial symbol table. Typically
>> + calls read_dependencies. */
>> virtual void expand_psymtab (struct objfile *) = 0;
>>
>> - /* Ensure that all the dependencies are read in. */
>> + /* Ensure that all the dependencies are read in. Typically calls
>> + expand_psymtab for each dependency. */
>> void read_dependencies (struct objfile *);
>
> I don't think the "Typically" here is right. This is not a virtual function that can
> be implemented/overriden by sub-classes, it's a helper that sub-classes call, that calls
> expand_psymtab on all dependencies.
Ack, comment updated accordingly.
> As you probably saw, I renamed it to
> expand_dependencies to be more accurate (since it calls expand, not read).
>
Ack, patch rebased.
> But otherwise, I am starting to think that it's the right thing to to, to call read_symtab
> on the includer (top-level psymtab) in dwarf2_include_psymtab::read_symtab. To read in
> an include psymtab, we read in the includer.
>
> Following this, I also came to the conclusion that dwarf2_include_psymtab::m_readin should
> probably be removed. An include psymtab can't be read in on its own. It can be considered
> read in when its includer is read in. So it doesn't make sense to maintain a "read in" state
> separate from its includer.
>
That makes sense to me.
> Here's the version I came up with, if you want to get inspiration.
>
I've integrated it into my patch and re-tested.
Also, added test-case.
Thanks,
- Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0002-gdb-Fix-missing-symtab-includes.patch
Type: text/x-patch
Size: 11300 bytes
Desc: not available
URL: <http://sourceware.org/pipermail/gdb-patches/attachments/20200330/e7179645/attachment.bin>
More information about the Gdb-patches
mailing list