* [PATCH] Don't check PST is NULL in read_symtab @ 2013-01-11 1:57 Yao Qi 2013-01-11 4:52 ` Joel Brobecker 0 siblings, 1 reply; 12+ messages in thread From: Yao Qi @ 2013-01-11 1:57 UTC (permalink / raw) To: gdb-patches Hi, The "method" read_symtab of 'struct partial_symtab" is called in this way, (*pst->read_symtab) (objfile, pst); so argument PST can't be NULL. This patch is to remove the checking that PST is NULL. I'll re-indent dwarf2_psymtab_to_symtab when check this patch in. Rebuild GDB for all targets. Is it OK? gdb: 2013-01-11 Yao Qi <yao@codesourcery.com> * dbxread.c (dbx_psymtab_to_symtab_1): Don't check PST is NULL. * dwarf2read.c (dwarf2_psymtab_to_symtab): Likewise. * mdebugread.c (mdebug_psymtab_to_symtab): Likewise. * xcoffread.c (xcoff_psymtab_to_symtab_1): Likewise. --- gdb/dbxread.c | 3 --- gdb/dwarf2read.c | 3 --- gdb/mdebugread.c | 3 --- gdb/xcoffread.c | 3 --- 4 files changed, 0 insertions(+), 12 deletions(-) diff --git a/gdb/dbxread.c b/gdb/dbxread.c index ebe4237..8305a5d 100644 --- a/gdb/dbxread.c +++ b/gdb/dbxread.c @@ -2406,9 +2406,6 @@ dbx_psymtab_to_symtab_1 (struct objfile *objfile, struct partial_symtab *pst) struct cleanup *old_chain; int i; - if (!pst) - return; - if (pst->readin) { fprintf_unfiltered (gdb_stderr, "Psymtab for %s already read in. " diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index e2088f1..f2d6a0a 100644 --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -6410,8 +6410,6 @@ locate_pdi_sibling (const struct die_reader_specs *reader, static void dwarf2_psymtab_to_symtab (struct objfile *objfile, struct partial_symtab *pst) { - if (pst != NULL) - { if (pst->readin) { warning (_("bug: psymtab for %s is already read in."), @@ -6451,7 +6449,6 @@ dwarf2_psymtab_to_symtab (struct objfile *objfile, struct partial_symtab *pst) if (info_verbose) printf_filtered (_("done.\n")); } - } process_cu_includes (); } diff --git a/gdb/mdebugread.c b/gdb/mdebugread.c index 856ca9d..0be1095 100644 --- a/gdb/mdebugread.c +++ b/gdb/mdebugread.c @@ -278,9 +278,6 @@ static char *mdebug_next_symbol_text (struct objfile *); static void mdebug_psymtab_to_symtab (struct objfile *objfile, struct partial_symtab *pst) { - if (!pst) - return; - if (info_verbose) { printf_filtered (_("Reading in symbols for %s..."), pst->filename); diff --git a/gdb/xcoffread.c b/gdb/xcoffread.c index 9fe8621..f4dcae2 100644 --- a/gdb/xcoffread.c +++ b/gdb/xcoffread.c @@ -1860,9 +1860,6 @@ xcoff_psymtab_to_symtab_1 (struct objfile *objfile, struct partial_symtab *pst) static void xcoff_psymtab_to_symtab (struct objfile *objfile, struct partial_symtab *pst) { - if (!pst) - return; - if (pst->readin) { fprintf_unfiltered -- 1.7.7.6 ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] Don't check PST is NULL in read_symtab 2013-01-11 1:57 [PATCH] Don't check PST is NULL in read_symtab Yao Qi @ 2013-01-11 4:52 ` Joel Brobecker 2013-01-11 14:34 ` Tom Tromey 2013-01-11 14:46 ` Yao Qi 0 siblings, 2 replies; 12+ messages in thread From: Joel Brobecker @ 2013-01-11 4:52 UTC (permalink / raw) To: Yao Qi; +Cc: gdb-patches > The "method" read_symtab of 'struct partial_symtab" is called in this > way, > > (*pst->read_symtab) (objfile, pst); > > so argument PST can't be NULL. I confirmed it using a quick grep. > I'll re-indent dwarf2_psymtab_to_symtab when check this patch in. FWIW, you can also do the re-indent, and then post two parallel patches: One is the actual patch, the second is a sub-part of the actual patch where whitespace differences are ignored. That's usually how I verify that my reformatting did not cause any intentional changes... > 2013-01-11 Yao Qi <yao@codesourcery.com> > > * dbxread.c (dbx_psymtab_to_symtab_1): Don't check PST is NULL. > * dwarf2read.c (dwarf2_psymtab_to_symtab): Likewise. > * mdebugread.c (mdebug_psymtab_to_symtab): Likewise. > * xcoffread.c (xcoff_psymtab_to_symtab_1): Likewise. If PST must not be NULL, I think that it should be documented in psympriv.h. I am also wondering whether an assertion would be useful or not; maybe not, just thinking out loud. Tom and Doug are more involved in this area, so they'll probably have a more definitive answer. -- Joel ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] Don't check PST is NULL in read_symtab 2013-01-11 4:52 ` Joel Brobecker @ 2013-01-11 14:34 ` Tom Tromey 2013-01-11 14:56 ` Yao Qi 2013-01-11 14:46 ` Yao Qi 1 sibling, 1 reply; 12+ messages in thread From: Tom Tromey @ 2013-01-11 14:34 UTC (permalink / raw) To: Joel Brobecker; +Cc: Yao Qi, gdb-patches >>>>> "Joel" == Joel Brobecker <brobecker@adacore.com> writes: Joel> If PST must not be NULL, I think that it should be documented in Joel> psympriv.h. I am also wondering whether an assertion would be Joel> useful or not; maybe not, just thinking out loud. Joel> Tom and Doug are more involved in this area, so they'll probably Joel> have a more definitive answer. An assert would be fine by me. Tom ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] Don't check PST is NULL in read_symtab 2013-01-11 14:34 ` Tom Tromey @ 2013-01-11 14:56 ` Yao Qi 2013-01-11 15:06 ` Tom Tromey 0 siblings, 1 reply; 12+ messages in thread From: Yao Qi @ 2013-01-11 14:56 UTC (permalink / raw) To: Tom Tromey; +Cc: Joel Brobecker, gdb-patches On 01/11/2013 10:34 PM, Tom Tromey wrote: > Joel> If PST must not be NULL, I think that it should be documented in > Joel> psympriv.h. I am also wondering whether an assertion would be > Joel> useful or not; maybe not, just thinking out loud. > > Joel> Tom and Doug are more involved in this area, so they'll probably > Joel> have a more definitive answer. > > An assert would be fine by me. An assert that PST is not NULL at the beginning of these functions dbx_psymtab_to_symtab_1, dwarf2_psymtab_to_symtab, mdebug_psymtab_to_symtab, and xcoff_psymtab_to_symtab_1? -- Yao (é½å°§) ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] Don't check PST is NULL in read_symtab 2013-01-11 14:56 ` Yao Qi @ 2013-01-11 15:06 ` Tom Tromey 2013-01-14 12:42 ` [committed]: " Yao Qi 2013-01-14 12:44 ` Yao Qi 0 siblings, 2 replies; 12+ messages in thread From: Tom Tromey @ 2013-01-11 15:06 UTC (permalink / raw) To: Yao Qi; +Cc: Joel Brobecker, gdb-patches >>>>> "Yao" == Yao Qi <yao@codesourcery.com> writes: Yao> On 01/11/2013 10:34 PM, Tom Tromey wrote: Joel> If PST must not be NULL, I think that it should be documented in Joel> psympriv.h. I am also wondering whether an assertion would be Joel> useful or not; maybe not, just thinking out loud. >> Joel> Tom and Doug are more involved in this area, so they'll probably Joel> have a more definitive answer. >> >> An assert would be fine by me. Yao> An assert that PST is not NULL at the beginning of these functions Yao> dbx_psymtab_to_symtab_1, dwarf2_psymtab_to_symtab, Yao> mdebug_psymtab_to_symtab, and xcoff_psymtab_to_symtab_1? Sure. Though I am ok with just a comment as well. Tom ^ permalink raw reply [flat|nested] 12+ messages in thread
* [committed]: [PATCH] Don't check PST is NULL in read_symtab 2013-01-11 15:06 ` Tom Tromey @ 2013-01-14 12:42 ` Yao Qi 2013-01-14 12:44 ` Yao Qi 1 sibling, 0 replies; 12+ messages in thread From: Yao Qi @ 2013-01-14 12:42 UTC (permalink / raw) To: Tom Tromey; +Cc: Joel Brobecker, gdb-patches On 01/11/2013 11:06 PM, Tom Tromey wrote: > Sure. Though I am ok with just a comment as well. Below is what I committed, with the comments added. -- Yao (é½å°§) gdb: 2013-01-14 Yao Qi <yao@codesourcery.com> * dbxread.c (dbx_psymtab_to_symtab_1): Don't check PST is NULL. (dbx_psymtab_to_symtab): Likewise. * dwarf2read.c (dwarf2_psymtab_to_symtab): Likewise. * mdebugread.c (mdebug_psymtab_to_symtab): Likewise. * xcoffread.c (xcoff_psymtab_to_symtab_1): Likewise. diff --git a/gdb/dbxread.c b/gdb/dbxread.c index ebe4237..16496d1 100644 --- a/gdb/dbxread.c +++ b/gdb/dbxread.c @@ -2406,9 +2406,6 @@ dbx_psymtab_to_symtab_1 (struct objfile *objfile, struct partial_symtab *pst) struct cleanup *old_chain; int i; - if (!pst) - return; - if (pst->readin) { fprintf_unfiltered (gdb_stderr, "Psymtab for %s already read in. " @@ -2455,7 +2452,7 @@ dbx_psymtab_to_symtab_1 (struct objfile *objfile, struct partial_symtab *pst) } /* Read in all of the symbols for a given psymtab for real. - Be verbose about it if the user wants that. */ + Be verbose about it if the user wants that. PST is not NULL. */ static void dbx_psymtab_to_symtab (struct objfile *objfile, struct partial_symtab *pst) @@ -2463,9 +2460,6 @@ dbx_psymtab_to_symtab (struct objfile *objfile, struct partial_symtab *pst) bfd *sym_bfd; struct cleanup *back_to = NULL; - if (!pst) - return; - if (pst->readin) { fprintf_unfiltered (gdb_stderr, "Psymtab for %s already read in. " diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index e2088f1..7af89c6 100644 --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -6405,52 +6405,50 @@ locate_pdi_sibling (const struct die_reader_specs *reader, return skip_children (reader, info_ptr); } -/* Expand this partial symbol table into a full symbol table. */ +/* Expand this partial symbol table into a full symbol table. PST is + not NULL. */ static void dwarf2_psymtab_to_symtab (struct objfile *objfile, struct partial_symtab *pst) { - if (pst != NULL) + if (pst->readin) { - if (pst->readin) + warning (_("bug: psymtab for %s is already read in."), + pst->filename); + } + else + { + if (info_verbose) { - warning (_("bug: psymtab for %s is already read in."), - pst->filename); + printf_filtered (_("Reading in symbols for %s..."), + pst->filename); + gdb_flush (gdb_stdout); } - else - { - if (info_verbose) - { - printf_filtered (_("Reading in symbols for %s..."), - pst->filename); - gdb_flush (gdb_stdout); - } - /* Restore our global data. */ - dwarf2_per_objfile = objfile_data (objfile, dwarf2_objfile_data_key); + /* Restore our global data. */ + dwarf2_per_objfile = objfile_data (objfile, dwarf2_objfile_data_key); - /* If this psymtab is constructed from a debug-only objfile, the - has_section_at_zero flag will not necessarily be correct. We - can get the correct value for this flag by looking at the data - associated with the (presumably stripped) associated objfile. */ - if (objfile->separate_debug_objfile_backlink) - { - struct dwarf2_per_objfile *dpo_backlink - = objfile_data (objfile->separate_debug_objfile_backlink, - dwarf2_objfile_data_key); + /* If this psymtab is constructed from a debug-only objfile, the + has_section_at_zero flag will not necessarily be correct. We + can get the correct value for this flag by looking at the data + associated with the (presumably stripped) associated objfile. */ + if (objfile->separate_debug_objfile_backlink) + { + struct dwarf2_per_objfile *dpo_backlink + = objfile_data (objfile->separate_debug_objfile_backlink, + dwarf2_objfile_data_key); - dwarf2_per_objfile->has_section_at_zero - = dpo_backlink->has_section_at_zero; - } + dwarf2_per_objfile->has_section_at_zero + = dpo_backlink->has_section_at_zero; + } - dwarf2_per_objfile->reading_partial_symbols = 0; + dwarf2_per_objfile->reading_partial_symbols = 0; - psymtab_to_symtab_1 (pst); + psymtab_to_symtab_1 (pst); - /* Finish up the debug error message. */ - if (info_verbose) - printf_filtered (_("done.\n")); - } + /* Finish up the debug error message. */ + if (info_verbose) + printf_filtered (_("done.\n")); } process_cu_includes (); diff --git a/gdb/mdebugread.c b/gdb/mdebugread.c index 856ca9d..2eb0536 100644 --- a/gdb/mdebugread.c +++ b/gdb/mdebugread.c @@ -273,14 +273,11 @@ static char *mdebug_next_symbol_text (struct objfile *); /* Exported procedure: Builds a symtab from the PST partial one. Restores the environment in effect when PST was created, delegates most of the work to an ancillary procedure, and sorts - and reorders the symtab list at the end. */ + and reorders the symtab list at the end. PST is not NULL. */ static void mdebug_psymtab_to_symtab (struct objfile *objfile, struct partial_symtab *pst) { - if (!pst) - return; - if (info_verbose) { printf_filtered (_("Reading in symbols for %s..."), pst->filename); diff --git a/gdb/xcoffread.c b/gdb/xcoffread.c index 9fe8621..41aaf02 100644 --- a/gdb/xcoffread.c +++ b/gdb/xcoffread.c @@ -1855,14 +1855,11 @@ xcoff_psymtab_to_symtab_1 (struct objfile *objfile, struct partial_symtab *pst) } /* Read in all of the symbols for a given psymtab for real. - Be verbose about it if the user wants that. */ + Be verbose about it if the user wants that. PST is not NULL. */ static void xcoff_psymtab_to_symtab (struct objfile *objfile, struct partial_symtab *pst) { - if (!pst) - return; - if (pst->readin) { fprintf_unfiltered ^ permalink raw reply [flat|nested] 12+ messages in thread
* [committed]: [PATCH] Don't check PST is NULL in read_symtab 2013-01-11 15:06 ` Tom Tromey 2013-01-14 12:42 ` [committed]: " Yao Qi @ 2013-01-14 12:44 ` Yao Qi 1 sibling, 0 replies; 12+ messages in thread From: Yao Qi @ 2013-01-14 12:44 UTC (permalink / raw) To: Tom Tromey; +Cc: Joel Brobecker, gdb-patches On 01/11/2013 11:06 PM, Tom Tromey wrote: > Sure. Though I am ok with just a comment as well. Below is what I committed, with the comments added. -- Yao (é½å°§) gdb: 2013-01-14 Yao Qi <yao@codesourcery.com> * dbxread.c (dbx_psymtab_to_symtab_1): Don't check PST is NULL. (dbx_psymtab_to_symtab): Likewise. * dwarf2read.c (dwarf2_psymtab_to_symtab): Likewise. * mdebugread.c (mdebug_psymtab_to_symtab): Likewise. * xcoffread.c (xcoff_psymtab_to_symtab_1): Likewise. diff --git a/gdb/dbxread.c b/gdb/dbxread.c index ebe4237..16496d1 100644 --- a/gdb/dbxread.c +++ b/gdb/dbxread.c @@ -2406,9 +2406,6 @@ dbx_psymtab_to_symtab_1 (struct objfile *objfile, struct partial_symtab *pst) struct cleanup *old_chain; int i; - if (!pst) - return; - if (pst->readin) { fprintf_unfiltered (gdb_stderr, "Psymtab for %s already read in. " @@ -2455,7 +2452,7 @@ dbx_psymtab_to_symtab_1 (struct objfile *objfile, struct partial_symtab *pst) } /* Read in all of the symbols for a given psymtab for real. - Be verbose about it if the user wants that. */ + Be verbose about it if the user wants that. PST is not NULL. */ static void dbx_psymtab_to_symtab (struct objfile *objfile, struct partial_symtab *pst) @@ -2463,9 +2460,6 @@ dbx_psymtab_to_symtab (struct objfile *objfile, struct partial_symtab *pst) bfd *sym_bfd; struct cleanup *back_to = NULL; - if (!pst) - return; - if (pst->readin) { fprintf_unfiltered (gdb_stderr, "Psymtab for %s already read in. " diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index e2088f1..7af89c6 100644 --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -6405,52 +6405,50 @@ locate_pdi_sibling (const struct die_reader_specs *reader, return skip_children (reader, info_ptr); } -/* Expand this partial symbol table into a full symbol table. */ +/* Expand this partial symbol table into a full symbol table. PST is + not NULL. */ static void dwarf2_psymtab_to_symtab (struct objfile *objfile, struct partial_symtab *pst) { - if (pst != NULL) + if (pst->readin) { - if (pst->readin) + warning (_("bug: psymtab for %s is already read in."), + pst->filename); + } + else + { + if (info_verbose) { - warning (_("bug: psymtab for %s is already read in."), - pst->filename); + printf_filtered (_("Reading in symbols for %s..."), + pst->filename); + gdb_flush (gdb_stdout); } - else - { - if (info_verbose) - { - printf_filtered (_("Reading in symbols for %s..."), - pst->filename); - gdb_flush (gdb_stdout); - } - /* Restore our global data. */ - dwarf2_per_objfile = objfile_data (objfile, dwarf2_objfile_data_key); + /* Restore our global data. */ + dwarf2_per_objfile = objfile_data (objfile, dwarf2_objfile_data_key); - /* If this psymtab is constructed from a debug-only objfile, the - has_section_at_zero flag will not necessarily be correct. We - can get the correct value for this flag by looking at the data - associated with the (presumably stripped) associated objfile. */ - if (objfile->separate_debug_objfile_backlink) - { - struct dwarf2_per_objfile *dpo_backlink - = objfile_data (objfile->separate_debug_objfile_backlink, - dwarf2_objfile_data_key); + /* If this psymtab is constructed from a debug-only objfile, the + has_section_at_zero flag will not necessarily be correct. We + can get the correct value for this flag by looking at the data + associated with the (presumably stripped) associated objfile. */ + if (objfile->separate_debug_objfile_backlink) + { + struct dwarf2_per_objfile *dpo_backlink + = objfile_data (objfile->separate_debug_objfile_backlink, + dwarf2_objfile_data_key); - dwarf2_per_objfile->has_section_at_zero - = dpo_backlink->has_section_at_zero; - } + dwarf2_per_objfile->has_section_at_zero + = dpo_backlink->has_section_at_zero; + } - dwarf2_per_objfile->reading_partial_symbols = 0; + dwarf2_per_objfile->reading_partial_symbols = 0; - psymtab_to_symtab_1 (pst); + psymtab_to_symtab_1 (pst); - /* Finish up the debug error message. */ - if (info_verbose) - printf_filtered (_("done.\n")); - } + /* Finish up the debug error message. */ + if (info_verbose) + printf_filtered (_("done.\n")); } process_cu_includes (); diff --git a/gdb/mdebugread.c b/gdb/mdebugread.c index 856ca9d..2eb0536 100644 --- a/gdb/mdebugread.c +++ b/gdb/mdebugread.c @@ -273,14 +273,11 @@ static char *mdebug_next_symbol_text (struct objfile *); /* Exported procedure: Builds a symtab from the PST partial one. Restores the environment in effect when PST was created, delegates most of the work to an ancillary procedure, and sorts - and reorders the symtab list at the end. */ + and reorders the symtab list at the end. PST is not NULL. */ static void mdebug_psymtab_to_symtab (struct objfile *objfile, struct partial_symtab *pst) { - if (!pst) - return; - if (info_verbose) { printf_filtered (_("Reading in symbols for %s..."), pst->filename); diff --git a/gdb/xcoffread.c b/gdb/xcoffread.c index 9fe8621..41aaf02 100644 --- a/gdb/xcoffread.c +++ b/gdb/xcoffread.c @@ -1855,14 +1855,11 @@ xcoff_psymtab_to_symtab_1 (struct objfile *objfile, struct partial_symtab *pst) } /* Read in all of the symbols for a given psymtab for real. - Be verbose about it if the user wants that. */ + Be verbose about it if the user wants that. PST is not NULL. */ static void xcoff_psymtab_to_symtab (struct objfile *objfile, struct partial_symtab *pst) { - if (!pst) - return; - if (pst->readin) { fprintf_unfiltered ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] Don't check PST is NULL in read_symtab 2013-01-11 4:52 ` Joel Brobecker 2013-01-11 14:34 ` Tom Tromey @ 2013-01-11 14:46 ` Yao Qi 2013-01-11 15:06 ` Joel Brobecker 1 sibling, 1 reply; 12+ messages in thread From: Yao Qi @ 2013-01-11 14:46 UTC (permalink / raw) To: Joel Brobecker; +Cc: gdb-patches On 01/11/2013 12:52 PM, Joel Brobecker wrote: > FWIW, you can also do the re-indent, and then post two parallel > patches: One is the actual patch, the second is a sub-part of > the actual patch where whitespace differences are ignored. > That's usually how I verify that my reformatting did not cause > any intentional changes... I see. Below is the patch to indent the code. Thanks for your suggestion, Joel. > >> >2013-01-11 Yao Qi<yao@codesourcery.com> >> > >> > * dbxread.c (dbx_psymtab_to_symtab_1): Don't check PST is NULL. >> > * dwarf2read.c (dwarf2_psymtab_to_symtab): Likewise. >> > * mdebugread.c (mdebug_psymtab_to_symtab): Likewise. >> > * xcoffread.c (xcoff_psymtab_to_symtab_1): Likewise. > If PST must not be NULL, I think that it should be documented in > psympriv.h. I am also wondering whether an assertion would be > useful or not; maybe not, just thinking out loud. > IMO, we don't need an assertion to check PST, because the function is used in this way, (*pst->read_symtab) (objfile, pst); which guarantees PST cant' be NULL. "PST" here is analogous to "this" object in C++, and we don't have to document function read_symtab that "this object must not be NULL". -- Yao (é½å°§) gdb: 2013-01-11 Yao Qi <yao@codesourcery.com> * dwarf2read.c (dwarf2_psymtab_to_symtab): Code indent. --- gdb/dwarf2read.c | 62 +++++++++++++++++++++++++++--------------------------- 1 files changed, 31 insertions(+), 31 deletions(-) diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index f2d6a0a..2cefee9 100644 --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -6410,45 +6410,45 @@ locate_pdi_sibling (const struct die_reader_specs *reader, static void dwarf2_psymtab_to_symtab (struct objfile *objfile, struct partial_symtab *pst) { - if (pst->readin) + if (pst->readin) + { + warning (_("bug: psymtab for %s is already read in."), + pst->filename); + } + else + { + if (info_verbose) { - warning (_("bug: psymtab for %s is already read in."), - pst->filename); + printf_filtered (_("Reading in symbols for %s..."), + pst->filename); + gdb_flush (gdb_stdout); } - else - { - if (info_verbose) - { - printf_filtered (_("Reading in symbols for %s..."), - pst->filename); - gdb_flush (gdb_stdout); - } - /* Restore our global data. */ - dwarf2_per_objfile = objfile_data (objfile, dwarf2_objfile_data_key); + /* Restore our global data. */ + dwarf2_per_objfile = objfile_data (objfile, dwarf2_objfile_data_key); - /* If this psymtab is constructed from a debug-only objfile, the - has_section_at_zero flag will not necessarily be correct. We - can get the correct value for this flag by looking at the data - associated with the (presumably stripped) associated objfile. */ - if (objfile->separate_debug_objfile_backlink) - { - struct dwarf2_per_objfile *dpo_backlink - = objfile_data (objfile->separate_debug_objfile_backlink, - dwarf2_objfile_data_key); + /* If this psymtab is constructed from a debug-only objfile, the + has_section_at_zero flag will not necessarily be correct. We + can get the correct value for this flag by looking at the data + associated with the (presumably stripped) associated objfile. */ + if (objfile->separate_debug_objfile_backlink) + { + struct dwarf2_per_objfile *dpo_backlink + = objfile_data (objfile->separate_debug_objfile_backlink, + dwarf2_objfile_data_key); - dwarf2_per_objfile->has_section_at_zero - = dpo_backlink->has_section_at_zero; - } + dwarf2_per_objfile->has_section_at_zero + = dpo_backlink->has_section_at_zero; + } - dwarf2_per_objfile->reading_partial_symbols = 0; + dwarf2_per_objfile->reading_partial_symbols = 0; - psymtab_to_symtab_1 (pst); + psymtab_to_symtab_1 (pst); - /* Finish up the debug error message. */ - if (info_verbose) - printf_filtered (_("done.\n")); - } + /* Finish up the debug error message. */ + if (info_verbose) + printf_filtered (_("done.\n")); + } process_cu_includes (); } -- 1.7.7.6 ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] Don't check PST is NULL in read_symtab 2013-01-11 14:46 ` Yao Qi @ 2013-01-11 15:06 ` Joel Brobecker 2013-01-11 18:02 ` Pedro Alves 0 siblings, 1 reply; 12+ messages in thread From: Joel Brobecker @ 2013-01-11 15:06 UTC (permalink / raw) To: Yao Qi; +Cc: gdb-patches [-- Attachment #1: Type: text/plain, Size: 1183 bytes --] > IMO, we don't need an assertion to check PST, because the function is > used in this way, > > (*pst->read_symtab) (objfile, pst); I am fine without the assertion as well. But if we followed your argument, we would never need an assertion. For me, assertions achieve two goals: 1. Clearly document an expectation; 2. Cause a semi-friendly abortion, rather than a mysterious behavior or crash. As of today, the way this function is called indeed guarantees that PST is never NULL. But someone adding a call at a later date might introduce a bug and cause it to be called with PST == NULL... > 2013-01-11 Yao Qi <yao@codesourcery.com> > > * dwarf2read.c (dwarf2_psymtab_to_symtab): Code indent. Let's take an example to show you what I meant in my first suggestion. Attached is a bogus change I made a function in dwarf2read. I added an "else" around a large block of code. The first patch shows the actual change, with code reindentation. That's the real patch which would be checked in eventually - but it's barely readable. So, to better show the real changes, I also attach the result of "git diff/show -b", where whitespace-only changes are ignored. -- Joel [-- Attachment #2: dwarf2read-actual.diff --] [-- Type: text/x-diff, Size: 2678 bytes --] diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index e2088f1..d590248 100644 --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -1918,39 +1918,41 @@ dwarf2_read_section (struct objfile *objfile, struct dwarf2_section_info *info) if (dwarf2_section_empty_p (info)) return; + else + { + abfd = sectp->owner; - abfd = sectp->owner; + /* If the section has relocations, we must read it ourselves. + Otherwise we attach it to the BFD. */ + if ((sectp->flags & SEC_RELOC) == 0) + { + const gdb_byte *bytes = gdb_bfd_map_section (sectp, &info->size); - /* If the section has relocations, we must read it ourselves. - Otherwise we attach it to the BFD. */ - if ((sectp->flags & SEC_RELOC) == 0) - { - const gdb_byte *bytes = gdb_bfd_map_section (sectp, &info->size); + /* We have to cast away const here for historical reasons. + Fixing dwarf2read to be const-correct would be quite nice. */ + info->buffer = (gdb_byte *) bytes; + return; + } - /* We have to cast away const here for historical reasons. - Fixing dwarf2read to be const-correct would be quite nice. */ - info->buffer = (gdb_byte *) bytes; - return; - } + buf = obstack_alloc (&objfile->objfile_obstack, info->size); + info->buffer = buf; - buf = obstack_alloc (&objfile->objfile_obstack, info->size); - info->buffer = buf; + /* When debugging .o files, we may need to apply relocations; see + http://sourceware.org/ml/gdb-patches/2002-04/msg00136.html . + We never compress sections in .o files, so we only need to + try this when the section is not compressed. */ + retbuf = symfile_relocate_debug_section (objfile, sectp, buf); + if (retbuf != NULL) + { + info->buffer = retbuf; + return; + } - /* When debugging .o files, we may need to apply relocations; see - http://sourceware.org/ml/gdb-patches/2002-04/msg00136.html . - We never compress sections in .o files, so we only need to - try this when the section is not compressed. */ - retbuf = symfile_relocate_debug_section (objfile, sectp, buf); - if (retbuf != NULL) - { - info->buffer = retbuf; - return; + if (bfd_seek (abfd, sectp->filepos, SEEK_SET) != 0 + || bfd_bread (buf, info->size, abfd) != info->size) + error (_("Dwarf Error: Can't read DWARF data from '%s'"), + bfd_get_filename (abfd)); } - - if (bfd_seek (abfd, sectp->filepos, SEEK_SET) != 0 - || bfd_bread (buf, info->size, abfd) != info->size) - error (_("Dwarf Error: Can't read DWARF data from '%s'"), - bfd_get_filename (abfd)); } /* A helper function that returns the size of a section in a safe way. [-- Attachment #3: dwarf2read-spaces_ignored.diff --] [-- Type: text/x-diff, Size: 733 bytes --] diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index e2088f1..d590248 100644 --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -1918,7 +1918,8 @@ dwarf2_read_section (struct objfile *objfile, struct dwarf2_section_info *info) if (dwarf2_section_empty_p (info)) return; - + else + { abfd = sectp->owner; /* If the section has relocations, we must read it ourselves. @@ -1951,6 +1952,7 @@ dwarf2_read_section (struct objfile *objfile, struct dwarf2_section_info *info) || bfd_bread (buf, info->size, abfd) != info->size) error (_("Dwarf Error: Can't read DWARF data from '%s'"), bfd_get_filename (abfd)); + } } /* A helper function that returns the size of a section in a safe way. ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] Don't check PST is NULL in read_symtab 2013-01-11 15:06 ` Joel Brobecker @ 2013-01-11 18:02 ` Pedro Alves 2013-01-11 18:44 ` Joel Brobecker 0 siblings, 1 reply; 12+ messages in thread From: Pedro Alves @ 2013-01-11 18:02 UTC (permalink / raw) To: Joel Brobecker; +Cc: Yao Qi, gdb-patches On 01/11/2013 03:05 PM, Joel Brobecker wrote: >> IMO, we don't need an assertion to check PST, because the function is >> used in this way, >> >> (*pst->read_symtab) (objfile, pst); > > I am fine without the assertion as well. But if we followed your > argument, we would never need an assertion. For me, assertions > achieve two goals: > 1. Clearly document an expectation; > 2. Cause a semi-friendly abortion, rather than a mysterious behavior > or crash. > As of today, the way this function is called indeed guarantees that > PST is never NULL. But someone adding a call at a later date might > introduce a bug and cause it to be called with PST == NULL... FWIW, I agree with both of you. I agree with assertion's roles. But I also agree with Yao that for functions that implement a class-like interface and take a "this" pointer, there's no need to sprinkle the codebase with "gdb_assert (self != NULL)" checks. BUT (!), when reading one of those functions, it's a bit more obvious and self-describing that the function takes a "this"-style pointer when the parameter is actually called "self", and / or at least is the first parameter in the function's signature. Like: static void dbx_psymtab_to_symtab_1 (struct objfile *objfile, struct partial_symtab *pst) { static void dbx_psymtab_to_symtab_1 (struct partial_symtab *pst, struct objfile *objfile) { static void dbx_psymtab_to_symtab_1 (struct partial_symtab *self, struct objfile *objfile) { (It'd be even better for grepability/readability if the implementations and hook name agreed, like: - result->read_symtab = dbx_psymtab_to_symtab; + result->read_symtab = dbx_read_symtab; or - result->read_symtab = dbx_psymtab_to_symtab; + result->psymtab_to_symtab = dbx_psymtab_to_symtab; ... ) -- Pedro Alves ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] Don't check PST is NULL in read_symtab 2013-01-11 18:02 ` Pedro Alves @ 2013-01-11 18:44 ` Joel Brobecker 2013-01-14 12:42 ` Yao Qi 0 siblings, 1 reply; 12+ messages in thread From: Joel Brobecker @ 2013-01-11 18:44 UTC (permalink / raw) To: Pedro Alves; +Cc: Yao Qi, gdb-patches > FWIW, I agree with both of you. I agree with assertion's > roles. But I also agree with Yao that for functions that implement > a class-like interface and take a "this" pointer, there's no need > to sprinkle the codebase with "gdb_assert (self != NULL)" checks. > BUT (!), when reading one of those functions, it's a bit more obvious > and self-describing that the function takes a "this"-style pointer > when the parameter is actually called "self", and / or at least is > the first parameter in the function's signature. Like: I agree with everything said above. Just to be extra clear, in case I appeared to be insisting - I was just thinking about the assert, not requesting it. > static void > dbx_psymtab_to_symtab_1 (struct objfile *objfile, struct partial_symtab *pst) > { > > static void > dbx_psymtab_to_symtab_1 (struct partial_symtab *pst, struct objfile *objfile) > { > > static void > dbx_psymtab_to_symtab_1 (struct partial_symtab *self, struct objfile *objfile) > { I like "self" quite a bit, except that it's a little bit less descriptive that "pst". But for a "method", I think that's acceptable. > (It'd be even better for grepability/readability if the implementations > and hook name agreed, like: > > - result->read_symtab = dbx_psymtab_to_symtab; > + result->read_symtab = dbx_read_symtab; > > or > > - result->read_symtab = dbx_psymtab_to_symtab; > + result->psymtab_to_symtab = dbx_psymtab_to_symtab; Agree as well. I don't mind making these two changes after Yao's commit goes it (unless Yao wants to take care of it, I don't mean to cut in). -- Joel ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] Don't check PST is NULL in read_symtab 2013-01-11 18:44 ` Joel Brobecker @ 2013-01-14 12:42 ` Yao Qi 0 siblings, 0 replies; 12+ messages in thread From: Yao Qi @ 2013-01-14 12:42 UTC (permalink / raw) To: Joel Brobecker; +Cc: Pedro Alves, gdb-patches On 01/12/2013 02:44 AM, Joel Brobecker wrote: >> >(It'd be even better for grepability/readability if the implementations >> >and hook name agreed, like: >> > >> >- result->read_symtab = dbx_psymtab_to_symtab; >> >+ result->read_symtab = dbx_read_symtab; >> > >> >or >> > >> >- result->read_symtab = dbx_psymtab_to_symtab; >> >+ result->psymtab_to_symtab = dbx_psymtab_to_symtab; > Agree as well. I don't mind making these two changes after Yao's > commit goes it (unless Yao wants to take care of it, I don't mean > to cut in). I'll take care of this in a separate patch. -- Yao (é½å°§) ^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2013-01-14 12:44 UTC | newest] Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2013-01-11 1:57 [PATCH] Don't check PST is NULL in read_symtab Yao Qi 2013-01-11 4:52 ` Joel Brobecker 2013-01-11 14:34 ` Tom Tromey 2013-01-11 14:56 ` Yao Qi 2013-01-11 15:06 ` Tom Tromey 2013-01-14 12:42 ` [committed]: " Yao Qi 2013-01-14 12:44 ` Yao Qi 2013-01-11 14:46 ` Yao Qi 2013-01-11 15:06 ` Joel Brobecker 2013-01-11 18:02 ` Pedro Alves 2013-01-11 18:44 ` Joel Brobecker 2013-01-14 12:42 ` Yao Qi
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox