Allow for the possibility that the local labels won't be in the objdump output.
[deliverable/binutils-gdb.git] / gdb / breakpoint.c
index 6633eb98d975a352940c91a7b0a44eba2ffd657f..5eb1fa4d93b8165424df5a833fbfab55b5f751e0 100644 (file)
@@ -1,6 +1,6 @@
 /* Everything about breakpoints, for GDB.
-   Copyright 1986, 87, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 1999
-   Free Software Foundation, Inc.
+   Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
+   1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -39,6 +39,7 @@
 #include "annotate.h"
 #include "symfile.h"
 #include "objfiles.h"
+#include "linespec.h"
 #ifdef UI_OUT
 #include "ui-out.h"
 #endif
@@ -196,12 +197,12 @@ static char *ep_parse_optional_filename (char **arg);
 static void catch_exec_command_1 (char *arg, int tempflag, int from_tty);
 #endif
 
-static void create_exception_catchpoint
-  (int tempflag, char *cond_string,
-   enum exception_event_kind ex_event, struct symtab_and_line *sal);
+static void create_exception_catchpoint (int tempflag, char *cond_string,
+                                        enum exception_event_kind ex_event,
+                                        struct symtab_and_line *sal);
 
-static void catch_exception_command_1
-  (enum exception_event_kind ex_event, char *arg, int tempflag, int from_tty);
+static void catch_exception_command_1 (enum exception_event_kind ex_event, 
+                                      char *arg, int tempflag, int from_tty);
 
 static void tcatch_command (char *arg, int from_tty);
 
@@ -537,11 +538,11 @@ condition_command (char *arg, int from_tty)
     {
       if (b->cond)
        {
-         free ((PTR) b->cond);
+         xfree (b->cond);
          b->cond = 0;
        }
       if (b->cond_string != NULL)
-       free ((PTR) b->cond_string);
+       xfree (b->cond_string);
 
       if (*p == 0)
        {
@@ -695,10 +696,9 @@ read_memory_nobpt (CORE_ADDR memaddr, char *myaddr, unsigned len)
       if (bp_addr + bp_size < memaddr + len)
        {
          /* Copy the section of memory after the breakpoint.  */
-         status = read_memory_nobpt
-           (bp_addr + bp_size,
-            myaddr + bp_addr + bp_size - memaddr,
-            memaddr + len - (bp_addr + bp_size));
+         status = read_memory_nobpt (bp_addr + bp_size,
+                                     myaddr + bp_addr + bp_size - memaddr,
+                                     memaddr + len - (bp_addr + bp_size));
          if (status != 0)
            return status;
        }
@@ -1266,7 +1266,7 @@ remove_breakpoint (struct breakpoint *b, insertion_state_t is)
          /* Check to see if breakpoint is in an overlay section;
             if so, we should remove the breakpoint at the LMA address.
             If that is not equal to the raw address, then we should 
-            presumable remove the breakpoint there as well.  */
+            presumably remove the breakpoint there as well.  */
          if (overlay_debugging && b->section &&
              section_is_overlay (b->section))
            {
@@ -1612,11 +1612,9 @@ ep_is_catchpoint (struct breakpoint *ep)
     || (ep->type == bp_catch_vfork)
     || (ep->type == bp_catch_exec)
     || (ep->type == bp_catch_catch)
-    || (ep->type == bp_catch_throw)
-
+    || (ep->type == bp_catch_throw);
 
   /* ??rehrauer: Add more kinds here, as are implemented... */
-    ;
 }
 
 int
@@ -1624,8 +1622,7 @@ ep_is_shlib_catchpoint (struct breakpoint *ep)
 {
   return
     (ep->type == bp_catch_load)
-    || (ep->type == bp_catch_unload)
-    ;
+    || (ep->type == bp_catch_unload);
 }
 
 int
@@ -1633,8 +1630,7 @@ ep_is_exception_catchpoint (struct breakpoint *ep)
 {
   return
     (ep->type == bp_catch_catch)
-    || (ep->type == bp_catch_throw)
-    ;
+    || (ep->type == bp_catch_throw);
 }
 
 /* Clear a bpstat so that it says we are not at any breakpoint.
@@ -1654,7 +1650,7 @@ bpstat_clear (bpstat *bsp)
       q = p->next;
       if (p->old_val != NULL)
        value_free (p->old_val);
-      free ((PTR) p);
+      xfree (p);
       p = q;
     }
   *bsp = NULL;
@@ -2092,8 +2088,8 @@ print_it_typical (bpstat bs)
        {
          mention (bs->breakpoint_at);
          if (interpreter_p && strcmp (interpreter_p, "mi") == 0)
-           ui_out_list_begin (uiout, "value");
-         ui_out_field_string (uiout, "reason", "access-watchpoint-trigger");
+           ui_out_field_string (uiout, "reason", "access-watchpoint-trigger");
+         ui_out_list_begin (uiout, "value");
          ui_out_text (uiout, "\nValue = ");
        }
       value_print (bs->breakpoint_at->val, stb->stream, 0,Val_pretty_default);
@@ -2181,7 +2177,8 @@ print_bp_stop_message (bpstat bs)
       return print_it_typical (bs);
       break;
     default:
-      internal_error ("print_bp_stop_message: unrecognized enum value");
+      internal_error (__FILE__, __LINE__,
+                     "print_bp_stop_message: unrecognized enum value");
       break;
     }
 }
@@ -2246,9 +2243,7 @@ breakpoint_cond_eval (PTR exp)
 /* Allocate a new bpstat and chain it to the current one.  */
 
 static bpstat
-bpstat_alloc (b, cbs)
-     register struct breakpoint *b;
-     bpstat cbs;               /* Current "bs" value */
+bpstat_alloc (struct breakpoint *b, bpstat cbs /* Current "bs" value */ )
 {
   bpstat bs;
 
@@ -2400,7 +2395,7 @@ bpstat_stop_status (CORE_ADDR *pc, int not_a_breakpoint)
   char message[sizeof (message1) + 30 /* slop */ ];
 
   /* Get the address where the breakpoint would have been.  */
-  bp_addr = *pc - (not_a_breakpoint && !SOFTWARE_SINGLE_STEP_P ? 
+  bp_addr = *pc - (not_a_breakpoint && !SOFTWARE_SINGLE_STEP_P () 
                    0 : DECR_PC_AFTER_BREAK);
 
   ALL_BREAKPOINTS_SAFE (b, temp)
@@ -2782,7 +2777,7 @@ bpstat_what (bpstat bs)
      back and decide something of a lower priority is better.  The
      ordering is:
 
-     kc   < clr sgl shl slr sn sr ss ts
+     kc   < clr sgl shl shlr slr sn sr ss ts
      sgl  < clrs shl shlr slr sn sr ss ts
      slr  < err shl shlr sn sr ss ts
      clr  < clrs err shl shlr sn sr ss ts
@@ -3045,7 +3040,7 @@ bpstat_get_triggered_catchpoints (bpstat ep_list, bpstat *cp_list)
          catchpoint triggers.  Clients who may wish to know the name
          later must get it from the catchpoint itself.) */
       if (ep->triggered_dll_pathname != NULL)
-       free (ep->triggered_dll_pathname);
+       xfree (ep->triggered_dll_pathname);
       if (ep->type == bp_catch_load)
        dll_pathname = SOLIB_LOADED_LIBRARY_PATHNAME (inferior_pid);
       else
@@ -3132,7 +3127,8 @@ print_one_breakpoint (struct breakpoint *b,
   annotate_field (1);
   if (((int) b->type > (sizeof (bptypes) / sizeof (bptypes[0])))
       || ((int) b->type != bptypes[(int) b->type].type))
-    internal_error ("bptypes table does not describe type #%d.",
+    internal_error (__FILE__, __LINE__,
+                   "bptypes table does not describe type #%d.",
                    (int) b->type);
 #ifdef UI_OUT
   ui_out_field_string (uiout, "type", bptypes[(int) b->type].description);
@@ -3164,7 +3160,8 @@ print_one_breakpoint (struct breakpoint *b,
   switch (b->type)
     {
     case bp_none:
-      internal_error ("print_one_breakpoint: bp_none encountered\n");
+      internal_error (__FILE__, __LINE__,
+                     "print_one_breakpoint: bp_none encountered\n");
       break;
 
     case bp_watchpoint:
@@ -3336,10 +3333,9 @@ print_one_breakpoint (struct breakpoint *b,
          annotate_field (4);
          /* FIXME-32x64: need a print_address_numeric with
             field width */
-         printf_filtered
-           ("%s ",
-            local_hex_string_custom
-            ((unsigned long) b->address, "08l"));
+         printf_filtered ("%s ",
+                          local_hex_string_custom
+                          ((unsigned long) b->address, "08l"));
        }
       annotate_field (5);
       *last_addr = b->address;
@@ -3640,7 +3636,7 @@ breakpoints_info (char *bnum_exp, int from_tty)
   int bnum = -1;
 
   if (bnum_exp)
-    bnum = parse_and_eval_address (bnum_exp);
+    bnum = parse_and_eval_long (bnum_exp);
 
   breakpoint_1 (bnum, 0);
 }
@@ -3652,7 +3648,7 @@ maintenance_info_breakpoints (char *bnum_exp, int from_tty)
   int bnum = -1;
 
   if (bnum_exp)
-    bnum = parse_and_eval_address (bnum_exp);
+    bnum = parse_and_eval_long (bnum_exp);
 
   breakpoint_1 (bnum, 1);
 }
@@ -3679,15 +3675,15 @@ describe_other_breakpoints (CORE_ADDR pc, asection *section)
            b->section == section)
          {
            others--;
-           printf_filtered
-             ("%d%s%s ",
-              b->number,
-              ((b->enable == disabled || 
-                b->enable == shlib_disabled || 
-                b->enable == call_disabled) ? " (disabled)" 
-               : b->enable == permanent ? " (permanent)"
-               : ""),
-              (others > 1) ? "," : ((others == 1) ? " and" : ""));
+           printf_filtered ("%d%s%s ",
+                            b->number,
+                            ((b->enable == disabled || 
+                              b->enable == shlib_disabled || 
+                              b->enable == call_disabled) ? " (disabled)" 
+                             : b->enable == permanent ? " (permanent)"
+                             : ""),
+                            (others > 1) ? "," 
+                            : ((others == 1) ? " and" : ""));
          }
       printf_filtered ("also set at pc ");
       print_address_numeric (pc, 1, gdb_stdout);
@@ -3751,14 +3747,16 @@ check_duplicates (CORE_ADDR address, asection *section)
 
       /* Permanent breakpoint should always be inserted.  */
       if (! perm_bp->inserted)
-       internal_error ("allegedly permanent breakpoint is not "
+       internal_error (__FILE__, __LINE__,
+                       "allegedly permanent breakpoint is not "
                        "actually inserted");
 
       ALL_BREAKPOINTS (b)
        if (b != perm_bp)
          {
            if (b->inserted)
-             internal_error ("another breakpoint was inserted on top of "
+             internal_error (__FILE__, __LINE__,
+                             "another breakpoint was inserted on top of "
                              "a permanent breakpoint");
 
            if (b->enable != disabled
@@ -3872,7 +3870,7 @@ create_longjmp_breakpoint (char *func_name)
   b->enable = disabled;
   b->silent = 1;
   if (func_name)
-    b->addr_string = strsave (func_name);
+    b->addr_string = xstrdup (func_name);
   b->number = internal_breakpoint_number--;
 }
 
@@ -3929,7 +3927,7 @@ create_thread_event_breakpoint (CORE_ADDR address)
   b->enable = enabled;
   /* addr_string has to be used or breakpoint_re_set will delete me.  */
   sprintf (addr_string, "*0x%s", paddr (b->address));
-  b->addr_string = strsave (addr_string);
+  b->addr_string = xstrdup (addr_string);
 
   return b;
 }
@@ -4060,13 +4058,13 @@ solib_load_unload_1 (char *hookname, int tempflag, char *dll_pathname,
 
   /* Make sure that all storage allocated in decode_line_1 gets freed
      in case the following errors out.  */
-  old_chain = make_cleanup (free, sals.sals);
+  old_chain = make_cleanup (xfree, sals.sals);
   if (canonical != (char **) NULL)
     {
-      make_cleanup (free, canonical);
+      make_cleanup (xfree, canonical);
       canonical_strings_chain = make_cleanup (null_cleanup, 0);
       if (canonical[0] != NULL)
-       make_cleanup (free, canonical[0]);
+       make_cleanup (xfree, canonical[0]);
     }
 
   resolve_sal_pc (&sals.sals[0]);
@@ -4679,18 +4677,18 @@ break_command_1 (char *arg, int flag, int from_tty)
   old_chain = make_cleanup (null_cleanup, 0);
 
   /* Make sure that all storage allocated to SALS gets freed.  */
-  make_cleanup (free, sals.sals);
+  make_cleanup (xfree, sals.sals);
 
   /* Cleanup the addr_string array but not its contents. */
-  make_cleanup (free, addr_string);
+  make_cleanup (xfree, addr_string);
 
   /* Allocate space for all the cond expressions. */
   cond = xcalloc (sals.nelts, sizeof (struct expression *));
-  make_cleanup (free, cond);
+  make_cleanup (xfree, cond);
 
   /* Allocate space for all the cond strings. */
   cond_string = xcalloc (sals.nelts, sizeof (char **));
-  make_cleanup (free, cond_string);
+  make_cleanup (xfree, cond_string);
 
   /* ----------------------------- SNIP -----------------------------
      Anything added to the cleanup chain beyond this point is assumed
@@ -4704,7 +4702,7 @@ break_command_1 (char *arg, int flag, int from_tty)
   for (i = 0; i < sals.nelts; i++)
     {
       if (addr_string[i] != NULL)
-       make_cleanup (free, addr_string[i]);
+       make_cleanup (xfree, addr_string[i]);
     }
 
   /* Resolve all line numbers to PC's and verify that the addresses
@@ -4738,10 +4736,10 @@ break_command_1 (char *arg, int flag, int from_tty)
            {
              tok = cond_start = end_tok + 1;
              cond[i] = parse_exp_1 (&tok, block_for_pc (sals.sals[i].pc), 0);
-             make_cleanup (free, cond[i]);
+             make_cleanup (xfree, cond[i]);
              cond_end = tok;
              cond_string[i] = savestring (cond_start, cond_end - cond_start);
-             make_cleanup (free, cond_string[i]);
+             make_cleanup (xfree, cond_string[i]);
            }
          else if (toklen >= 1 && strncmp (tok, "thread", toklen) == 0)
            {
@@ -4820,18 +4818,18 @@ do_captured_breakpoint (void *data)
   old_chain = make_cleanup (null_cleanup, 0);
 
   /* Always have a addr_string array, even if it is empty. */
-  make_cleanup (free, addr_string);
+  make_cleanup (xfree, addr_string);
 
   /* Make sure that all storage allocated to SALS gets freed.  */
-  make_cleanup (free, sals.sals);
+  make_cleanup (xfree, sals.sals);
 
   /* Allocate space for all the cond expressions. */
   cond = xcalloc (sals.nelts, sizeof (struct expression *));
-  make_cleanup (free, cond);
+  make_cleanup (xfree, cond);
 
   /* Allocate space for all the cond strings. */
   cond_string = xcalloc (sals.nelts, sizeof (char **));
-  make_cleanup (free, cond_string);
+  make_cleanup (xfree, cond_string);
 
   /* ----------------------------- SNIP -----------------------------
      Anything added to the cleanup chain beyond this point is assumed
@@ -4845,7 +4843,7 @@ do_captured_breakpoint (void *data)
   for (i = 0; i < sals.nelts; i++)
     {
       if (addr_string[i] != NULL)
-       make_cleanup (free, addr_string[i]);
+       make_cleanup (xfree, addr_string[i]);
     }
 
   /* Wait until now before checking for garbage at the end of the
@@ -4867,7 +4865,7 @@ do_captured_breakpoint (void *data)
          cond[i] = parse_exp_1 (&tok, block_for_pc (sals.sals[i].pc), 0);
          if (*tok != '\0')
            error ("Garbage %s follows condition", tok);
-         make_cleanup (free, cond[i]);
+         make_cleanup (xfree, cond[i]);
          cond_string[i] = xstrdup (args->condition);
        }
     }
@@ -4907,7 +4905,9 @@ break_at_finish_at_depth_command_1 (char *arg, int flag, int from_tty)
 {
   struct frame_info *frame;
   CORE_ADDR low, high, selected_pc = 0;
-  char *extra_args, *level_arg, *addr_string;
+  char *extra_args = NULL;
+  char *level_arg;
+  char *addr_string;
   int extra_args_len = 0, if_arg = 0;
 
   if (!arg ||
@@ -4967,7 +4967,7 @@ break_at_finish_at_depth_command_1 (char *arg, int flag, int from_tty)
          else
            sprintf (addr_string, "*0x%s", paddr_nz (high));
          break_command_1 (addr_string, flag, from_tty);
-         free (addr_string);
+         xfree (addr_string);
        }
       else
        error ("No function contains the specified address");
@@ -4985,7 +4985,7 @@ break_at_finish_command_1 (char *arg, int flag, int from_tty)
   struct symtabs_and_lines sals;
   struct symtab_and_line sal;
   struct cleanup *old_chain;
-  char *extra_args;
+  char *extra_args = NULL;
   int extra_args_len = 0;
   int i, if_arg = 0;
 
@@ -5036,8 +5036,8 @@ break_at_finish_command_1 (char *arg, int flag, int from_tty)
   sals = decode_line_1 (&addr_string, 1, (struct symtab *) NULL, 0,
                        (char ***) NULL);
 
-  free (beg_addr_string);
-  old_chain = make_cleanup (free, sals.sals);
+  xfree (beg_addr_string);
+  old_chain = make_cleanup (xfree, sals.sals);
   for (i = 0; (i < sals.nelts); i++)
     {
       sal = sals.sals[i];
@@ -5049,7 +5049,7 @@ break_at_finish_command_1 (char *arg, int flag, int from_tty)
          else
            sprintf (break_string, "*0x%s", paddr_nz (high));
          break_command_1 (break_string, flag, from_tty);
-         free (break_string);
+         xfree (break_string);
        }
       else
        error ("No function contains the specified address");
@@ -5408,7 +5408,7 @@ watch_command_1 (char *arg, int accessflag, int from_tty)
 
 #if !defined(TARGET_REGION_OK_FOR_HW_WATCHPOINT)
 #define TARGET_REGION_OK_FOR_HW_WATCHPOINT(ADDR,LEN) \
-     TARGET_REGION_SIZE_OK_FOR_HW_WATCHPOINT(LEN)
+     (TARGET_REGION_SIZE_OK_FOR_HW_WATCHPOINT(LEN))
 #endif
 
 static int
@@ -5567,7 +5567,7 @@ until_break_command (char *arg, int from_tty)
     error ("Couldn't get information on specified line.");
 
   sal = sals.sals[0];
-  free ((PTR) sals.sals);      /* malloc'd, so freed */
+  xfree (sals.sals);   /* malloc'd, so freed */
 
   if (*arg)
     error ("Junk at end of arguments.");
@@ -5661,9 +5661,7 @@ struct sal_chain
 /* For each catch clause identified in ARGS, run FUNCTION
    with that clause as an argument.  */
 static struct symtabs_and_lines
-map_catch_names (args, function)
-     char *args;
-     int (*function) ();
+map_catch_names (char *args, int (*function) ())
 {
   register char *p = args;
   register char *p1;
@@ -6310,7 +6308,7 @@ handle_gnu_4_16_catch_command (char *arg, int tempflag, int from_tty)
       warning ("Multiple breakpoints were set.");
       warning ("Use the \"delete\" command to delete unwanted breakpoints.");
     }
-  free ((PTR) sals.sals);
+  xfree (sals.sals);
 }
 
 #if 0
@@ -6645,7 +6643,7 @@ clear_command (char *arg, int from_tty)
       if (from_tty)
        putchar_unfiltered ('\n');
     }
-  free ((PTR) sals.sals);
+  xfree (sals.sals);
 }
 \f
 /* Delete breakpoint in BS if they are `delete' breakpoints and
@@ -6783,7 +6781,8 @@ delete_breakpoint (struct breakpoint *bpt)
             If there is a permanent breakpoint somewhere, it should
             always be the only one inserted.  */
          if (b->enable == permanent)
-           internal_error ("another breakpoint was inserted on top of "
+           internal_error (__FILE__, __LINE__,
+                           "another breakpoint was inserted on top of "
                            "a permanent breakpoint");
 
          if (b->type == bp_hardware_breakpoint)
@@ -6804,25 +6803,25 @@ delete_breakpoint (struct breakpoint *bpt)
 
   free_command_lines (&bpt->commands);
   if (bpt->cond)
-    free (bpt->cond);
+    xfree (bpt->cond);
   if (bpt->cond_string != NULL)
-    free (bpt->cond_string);
+    xfree (bpt->cond_string);
   if (bpt->addr_string != NULL)
-    free (bpt->addr_string);
+    xfree (bpt->addr_string);
   if (bpt->exp != NULL)
-    free (bpt->exp);
+    xfree (bpt->exp);
   if (bpt->exp_string != NULL)
-    free (bpt->exp_string);
+    xfree (bpt->exp_string);
   if (bpt->val != NULL)
     value_free (bpt->val);
   if (bpt->source_file != NULL)
-    free (bpt->source_file);
+    xfree (bpt->source_file);
   if (bpt->dll_pathname != NULL)
-    free (bpt->dll_pathname);
+    xfree (bpt->dll_pathname);
   if (bpt->triggered_dll_pathname != NULL)
-    free (bpt->triggered_dll_pathname);
+    xfree (bpt->triggered_dll_pathname);
   if (bpt->exec_pathname != NULL)
-    free (bpt->exec_pathname);
+    xfree (bpt->exec_pathname);
 
   /* Be sure no bpstat's are pointing at it after it's been freed.  */
   /* FIXME, how can we find all bpstat's?
@@ -6844,7 +6843,7 @@ delete_breakpoint (struct breakpoint *bpt)
      bp, we mark it as deleted before freeing its storage. */
   bpt->type = bp_none;
 
-  free ((PTR) bpt);
+  xfree (bpt);
 }
 
 static void
@@ -6954,7 +6953,7 @@ breakpoint_re_set_one (PTR bint)
            {
              s = b->cond_string;
              if (b->cond)
-               free ((PTR) b->cond);
+               xfree (b->cond);
              b->cond = parse_exp_1 (&s, block_for_pc (sals.sals[i].pc), 0);
            }
 
@@ -6973,7 +6972,7 @@ breakpoint_re_set_one (PTR bint)
            )
            {
              if (b->source_file != NULL)
-               free (b->source_file);
+               xfree (b->source_file);
              if (sals.sals[i].symtab == NULL)
                b->source_file = NULL;
              else
@@ -7002,7 +7001,7 @@ breakpoint_re_set_one (PTR bint)
          check_duplicates (b->address, b->section);
 
        }
-      free ((PTR) sals.sals);
+      xfree (sals.sals);
       break;
 
     case bp_watchpoint:
@@ -7020,7 +7019,7 @@ breakpoint_re_set_one (PTR bint)
 
       /* So for now, just use a global context.  */
       if (b->exp)
-       free ((PTR) b->exp);
+       xfree (b->exp);
       b->exp = parse_expression (b->exp_string);
       b->exp_valid_block = innermost_block;
       mark = value_mark ();
@@ -7035,7 +7034,7 @@ breakpoint_re_set_one (PTR bint)
        {
          s = b->cond_string;
          if (b->cond)
-           free ((PTR) b->cond);
+           xfree (b->cond);
          b->cond = parse_exp_1 (&s, (struct block *) 0, 0);
        }
       if (b->enable == enabled)
@@ -7209,9 +7208,7 @@ ignore_command (char *args, int from_tty)
    whose numbers are given in ARGS.  */
 
 static void
-map_breakpoint_numbers (args, function)
-     char *args;
-     void (*function) (struct breakpoint *);
+map_breakpoint_numbers (char *args, void (*function) (struct breakpoint *))
 {
   register char *p = args;
   char *p1;
This page took 0.033528 seconds and 4 git commands to generate.