+2002-11-18 Klee Dienes <kdienes@apple.com>
+
+ * buildsym.h (pop_context): Convert to function, defined in
+ buildsym.c.
+ * buildsym.c: Include gdb_assert.h.
+ (pop_context): Implement as C function. Add check for stack
+ underflow.
+ * dbxread.c (process_one_symbol): Complain and stop processing
+ that symbol if we are already at the top of the context stack for
+ a function-end N_FUN (this would imply an umatched RBRAC). Ditto
+ when processing N_RBRAC.
+
2002-11-16 Daniel Jacobowitz <drow@mvista.com>
* config/pa/nm-hppah.h (CHILD_POST_FOLLOW_INFERIOR_BY_CLONE): Don't
#include "symfile.h"
#include "objfiles.h"
#include "gdbtypes.h"
+#include "gdb_assert.h"
#include "complaints.h"
#include "gdb_string.h"
#include "expression.h" /* For "enum exp_opcode" used by... */
return new;
}
+
+struct context_stack *
+pop_context (void)
+{
+ gdb_assert (context_stack_depth > 0);
+ return (&context_stack[--context_stack_depth]);
+}
+
\f
/* Compute a small integer hash code for the given name. */
EXTERN int context_stack_size;
-/* Macro "function" for popping contexts from the stack. Pushing is
- done by a real function, push_context. This returns a pointer to a
- struct context_stack. */
-
-#define pop_context() (&context_stack[--context_stack_depth]);
-
/* Non-zero if the context stack is empty. */
#define outermost_context_p() (context_stack_depth == 0)
extern struct context_stack *push_context (int desc, CORE_ADDR valu);
+extern struct context_stack *pop_context (void);
+
extern void record_line (struct subfile *subfile, int line, CORE_ADDR pc);
extern void start_symtab (char *name, char *dirname, CORE_ADDR start_addr);
{
/* This N_FUN marks the end of a function. This closes off the
current block. */
+
+ if (context_stack_depth <= 0)
+ {
+ complain (&lbrac_mismatch_complaint, symnum);
+ break;
+ }
+
record_line (current_subfile, 0, function_start_offset + valu);
within_function = 0;
new = pop_context ();
N_SO, the linker did not relocate them (sigh). */
valu += last_source_start_addr;
+ if (context_stack_depth <= 0)
+ {
+ complain (&lbrac_mismatch_complaint, symnum);
+ break;
+ }
+
new = pop_context ();
if (desc != new->depth)
complain (&lbrac_mismatch_complaint, symnum);