This is the mail archive of the gdb-patches@sources.redhat.com 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]

Re: Simple but crucial bug fix to gdb


Christopher Faylor wrote:
> 
> Assuming that I have properly tracked where this is in the current sources,
> I think that this change looks reasonable.  There is a similar check for
> pst being non-null a few lines up from this point and pst does not get
> set in the intervening space.  So, if the previous check is correct, then
> this one is obviously needed.
> 
> I've included a diff below with some extended context.  If there are no
> objections, I'll be happy to check this in.
> 

I cannot approve the patch because I am not the maintainer of the stabs reader, but (for the reasons you've explained above) this seems to fall clearly into the obvious fix rule.

Fernando



> 
> Index: partial-stab.h
> ===================================================================
> RCS file: /cvs/uberbaum/gdb/partial-stab.h,v
> retrieving revision 1.7
> diff -c -2 -0 -p -r1.7 partial-stab.h
> *** partial-stab.h      2001/03/06 08:21:11     1.7
> --- partial-stab.h      2001/05/30 21:34:59
> *************** switch (CUR_SYMBOL_TYPE)
> *** 583,626 ****
>   #ifdef SOFUN_ADDRESS_MAYBE_MISSING
>         /* Do not fix textlow==0 for .o or NLM files, as 0 is a legit
>            value for the bottom of the text seg in those cases. */
>         if (pst && textlow_not_set)
>           {
>             pst->textlow =
>               find_stab_function_addr (namestring, pst->filename, objfile);
>             textlow_not_set = 0;
>           }
>   #endif
>         /* End kludge.  */
> 
>         /* Keep track of the start of the last function so we
>            can handle end of function symbols.  */
>         last_function_start = CUR_SYMBOL_VALUE;
> 
>         /* In reordered executables this function may lie outside
>            the bounds created by N_SO symbols.  If that's the case
>            use the address of this function as the low bound for
>            the partial symbol table.  */
> !       if (textlow_not_set
> !           || (pst && CUR_SYMBOL_VALUE < pst->textlow
> !               && CUR_SYMBOL_VALUE
> !               != ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile))))
>           {
>             pst->textlow = CUR_SYMBOL_VALUE;
>             textlow_not_set = 0;
>           }
>   #endif /* DBXREAD_ONLY */
>         add_psymbol_to_list (namestring, p - namestring,
>                              VAR_NAMESPACE, LOC_BLOCK,
>                              &objfile->static_psymbols,
>                              0, CUR_SYMBOL_VALUE,
>                              psymtab_language, objfile);
>         continue;
> 
>         /* Global functions were ignored here, but now they
>            are put into the global psymtab like one would expect.
>            They're also in the minimal symbol table.  */
>         case 'F':
>         CUR_SYMBOL_VALUE += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
>   #ifdef DBXREAD_ONLY
>         /* Kludges for ELF/STABS with Sun ACC */
>         last_function_name = namestring;
> --- 583,627 ----
>   #ifdef SOFUN_ADDRESS_MAYBE_MISSING
>         /* Do not fix textlow==0 for .o or NLM files, as 0 is a legit
>            value for the bottom of the text seg in those cases. */
>         if (pst && textlow_not_set)
>           {
>             pst->textlow =
>               find_stab_function_addr (namestring, pst->filename, objfile);
>             textlow_not_set = 0;
>           }
>   #endif
>         /* End kludge.  */
> 
>         /* Keep track of the start of the last function so we
>            can handle end of function symbols.  */
>         last_function_start = CUR_SYMBOL_VALUE;
> 
>         /* In reordered executables this function may lie outside
>            the bounds created by N_SO symbols.  If that's the case
>            use the address of this function as the low bound for
>            the partial symbol table.  */
> !       if (pst
> !           && (textlow_not_set
> !               || (pst && CUR_SYMBOL_VALUE < pst->textlow
> !                 && CUR_SYMBOL_VALUE
> !                 != ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile)))))
>           {
>             pst->textlow = CUR_SYMBOL_VALUE;
>             textlow_not_set = 0;
>           }
>   #endif /* DBXREAD_ONLY */
>         add_psymbol_to_list (namestring, p - namestring,
>                              VAR_NAMESPACE, LOC_BLOCK,
>                              &objfile->static_psymbols,
>                              0, CUR_SYMBOL_VALUE,
>                              psymtab_language, objfile);
>         continue;
> 
>         /* Global functions were ignored here, but now they
>            are put into the global psymtab like one would expect.
>            They're also in the minimal symbol table.  */
>         case 'F':
>         CUR_SYMBOL_VALUE += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
>   #ifdef DBXREAD_ONLY
>         /* Kludges for ELF/STABS with Sun ACC */
>         last_function_name = namestring;

-- 
Fernando Nasser
Red Hat - Toronto                       E-Mail:  fnasser@redhat.com
2323 Yonge Street, Suite #300
Toronto, Ontario   M4P 2C9


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