From: Jim Blandy Date: Fri, 1 Jun 2001 20:37:11 +0000 (+0000) Subject: * partial-stab.h: New complaint: function_outside_compilation_unit. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=531017dfa40f63d3ff26cb80e0962a68eedbbccf;p=binutils-gdb.git * partial-stab.h: New complaint: function_outside_compilation_unit. (case N_FUN: case 'f':, case N_FUN: case 'F':): If pst is zero, complain, and don't try to set pst's start address. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 0667b8b21dc..f5a7ac4c9e8 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2001-06-01 Jim Blandy + + * partial-stab.h: New complaint: function_outside_compilation_unit. + (case N_FUN: case 'f':, case N_FUN: case 'F':): If pst is zero, + complain, and don't try to set pst's start address. + 2001-05-31 Kevin Buettner * ia64-linux-tdep.c (IA64_LINUX_SIGCONTEXT_OFFSET): Revise to diff --git a/gdb/partial-stab.h b/gdb/partial-stab.h index fcfb2ef7c18..d6c6fd51ebc 100644 --- a/gdb/partial-stab.h +++ b/gdb/partial-stab.h @@ -40,6 +40,9 @@ switch (CUR_SYMBOL_TYPE) { + static struct complaint function_outside_compilation_unit = { + "function `%s' appears to be defined outside of all compilation units", 0, 0 + }; char *p; /* * Standard, external, non-debugger, symbols @@ -576,6 +579,14 @@ switch (CUR_SYMBOL_TYPE) continue; case 'f': + if (! pst) + { + int name_len = p - namestring; + char *name = xmalloc (name_len + 1); + memcpy (name, namestring, name_len); + name[name_len] = '\0'; + complain (&function_outside_compilation_unit, name); + } CUR_SYMBOL_VALUE += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile)); #ifdef DBXREAD_ONLY /* Kludges for ELF/STABS with Sun ACC */ @@ -600,10 +611,12 @@ switch (CUR_SYMBOL_TYPE) 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)))) + if (pst + && (textlow_not_set + || (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; @@ -620,6 +633,14 @@ switch (CUR_SYMBOL_TYPE) are put into the global psymtab like one would expect. They're also in the minimal symbol table. */ case 'F': + if (! pst) + { + int name_len = p - namestring; + char *name = xmalloc (name_len + 1); + memcpy (name, namestring, name_len); + name[name_len] = '\0'; + complain (&function_outside_compilation_unit, name); + } CUR_SYMBOL_VALUE += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile)); #ifdef DBXREAD_ONLY /* Kludges for ELF/STABS with Sun ACC */ @@ -647,10 +668,12 @@ switch (CUR_SYMBOL_TYPE) 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)))) + if (pst + && (textlow_not_set + || (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;