| 1 | 24 | jeremybenn | /* Cache and manage frames for GDB, the GNU debugger.
 | 
      
         | 2 |  |  |  
 | 
      
         | 3 |  |  |    Copyright (C) 1986, 1987, 1989, 1991, 1994, 1995, 1996, 1998, 2000, 2001,
 | 
      
         | 4 |  |  |    2002, 2003, 2004, 2007, 2008 Free Software Foundation, Inc.
 | 
      
         | 5 |  |  |  
 | 
      
         | 6 |  |  |    This file is part of GDB.
 | 
      
         | 7 |  |  |  
 | 
      
         | 8 |  |  |    This program is free software; you can redistribute it and/or modify
 | 
      
         | 9 |  |  |    it under the terms of the GNU General Public License as published by
 | 
      
         | 10 |  |  |    the Free Software Foundation; either version 3 of the License, or
 | 
      
         | 11 |  |  |    (at your option) any later version.
 | 
      
         | 12 |  |  |  
 | 
      
         | 13 |  |  |    This program is distributed in the hope that it will be useful,
 | 
      
         | 14 |  |  |    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
      
         | 15 |  |  |    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
      
         | 16 |  |  |    GNU General Public License for more details.
 | 
      
         | 17 |  |  |  
 | 
      
         | 18 |  |  |    You should have received a copy of the GNU General Public License
 | 
      
         | 19 |  |  |    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 | 
      
         | 20 |  |  |  
 | 
      
         | 21 |  |  | #include "defs.h"
 | 
      
         | 22 |  |  | #include "frame.h"
 | 
      
         | 23 |  |  | #include "target.h"
 | 
      
         | 24 |  |  | #include "value.h"
 | 
      
         | 25 |  |  | #include "inferior.h"   /* for inferior_ptid */
 | 
      
         | 26 |  |  | #include "regcache.h"
 | 
      
         | 27 |  |  | #include "gdb_assert.h"
 | 
      
         | 28 |  |  | #include "gdb_string.h"
 | 
      
         | 29 |  |  | #include "user-regs.h"
 | 
      
         | 30 |  |  | #include "gdb_obstack.h"
 | 
      
         | 31 |  |  | #include "dummy-frame.h"
 | 
      
         | 32 |  |  | #include "sentinel-frame.h"
 | 
      
         | 33 |  |  | #include "gdbcore.h"
 | 
      
         | 34 |  |  | #include "annotate.h"
 | 
      
         | 35 |  |  | #include "language.h"
 | 
      
         | 36 |  |  | #include "frame-unwind.h"
 | 
      
         | 37 |  |  | #include "frame-base.h"
 | 
      
         | 38 |  |  | #include "command.h"
 | 
      
         | 39 |  |  | #include "gdbcmd.h"
 | 
      
         | 40 |  |  | #include "observer.h"
 | 
      
         | 41 |  |  | #include "objfiles.h"
 | 
      
         | 42 |  |  | #include "exceptions.h"
 | 
      
         | 43 |  |  |  
 | 
      
         | 44 |  |  | static struct frame_info *get_prev_frame_1 (struct frame_info *this_frame);
 | 
      
         | 45 |  |  |  
 | 
      
         | 46 |  |  | /* We keep a cache of stack frames, each of which is a "struct
 | 
      
         | 47 |  |  |    frame_info".  The innermost one gets allocated (in
 | 
      
         | 48 |  |  |    wait_for_inferior) each time the inferior stops; current_frame
 | 
      
         | 49 |  |  |    points to it.  Additional frames get allocated (in get_prev_frame)
 | 
      
         | 50 |  |  |    as needed, and are chained through the next and prev fields.  Any
 | 
      
         | 51 |  |  |    time that the frame cache becomes invalid (most notably when we
 | 
      
         | 52 |  |  |    execute something, but also if we change how we interpret the
 | 
      
         | 53 |  |  |    frames (e.g. "set heuristic-fence-post" in mips-tdep.c, or anything
 | 
      
         | 54 |  |  |    which reads new symbols)), we should call reinit_frame_cache.  */
 | 
      
         | 55 |  |  |  
 | 
      
         | 56 |  |  | struct frame_info
 | 
      
         | 57 |  |  | {
 | 
      
         | 58 |  |  |   /* Level of this frame.  The inner-most (youngest) frame is at level
 | 
      
         | 59 |  |  |      0.  As you move towards the outer-most (oldest) frame, the level
 | 
      
         | 60 |  |  |      increases.  This is a cached value.  It could just as easily be
 | 
      
         | 61 |  |  |      computed by counting back from the selected frame to the inner
 | 
      
         | 62 |  |  |      most frame.  */
 | 
      
         | 63 |  |  |   /* NOTE: cagney/2002-04-05: Perhaps a level of ``-1'' should be
 | 
      
         | 64 |  |  |      reserved to indicate a bogus frame - one that has been created
 | 
      
         | 65 |  |  |      just to keep GDB happy (GDB always needs a frame).  For the
 | 
      
         | 66 |  |  |      moment leave this as speculation.  */
 | 
      
         | 67 |  |  |   int level;
 | 
      
         | 68 |  |  |  
 | 
      
         | 69 |  |  |   /* The frame's low-level unwinder and corresponding cache.  The
 | 
      
         | 70 |  |  |      low-level unwinder is responsible for unwinding register values
 | 
      
         | 71 |  |  |      for the previous frame.  The low-level unwind methods are
 | 
      
         | 72 |  |  |      selected based on the presence, or otherwise, of register unwind
 | 
      
         | 73 |  |  |      information such as CFI.  */
 | 
      
         | 74 |  |  |   void *prologue_cache;
 | 
      
         | 75 |  |  |   const struct frame_unwind *unwind;
 | 
      
         | 76 |  |  |  
 | 
      
         | 77 |  |  |   /* Cached copy of the previous frame's resume address.  */
 | 
      
         | 78 |  |  |   struct {
 | 
      
         | 79 |  |  |     int p;
 | 
      
         | 80 |  |  |     CORE_ADDR value;
 | 
      
         | 81 |  |  |   } prev_pc;
 | 
      
         | 82 |  |  |  
 | 
      
         | 83 |  |  |   /* Cached copy of the previous frame's function address.  */
 | 
      
         | 84 |  |  |   struct
 | 
      
         | 85 |  |  |   {
 | 
      
         | 86 |  |  |     CORE_ADDR addr;
 | 
      
         | 87 |  |  |     int p;
 | 
      
         | 88 |  |  |   } prev_func;
 | 
      
         | 89 |  |  |  
 | 
      
         | 90 |  |  |   /* This frame's ID.  */
 | 
      
         | 91 |  |  |   struct
 | 
      
         | 92 |  |  |   {
 | 
      
         | 93 |  |  |     int p;
 | 
      
         | 94 |  |  |     struct frame_id value;
 | 
      
         | 95 |  |  |   } this_id;
 | 
      
         | 96 |  |  |  
 | 
      
         | 97 |  |  |   /* The frame's high-level base methods, and corresponding cache.
 | 
      
         | 98 |  |  |      The high level base methods are selected based on the frame's
 | 
      
         | 99 |  |  |      debug info.  */
 | 
      
         | 100 |  |  |   const struct frame_base *base;
 | 
      
         | 101 |  |  |   void *base_cache;
 | 
      
         | 102 |  |  |  
 | 
      
         | 103 |  |  |   /* Pointers to the next (down, inner, younger) and previous (up,
 | 
      
         | 104 |  |  |      outer, older) frame_info's in the frame cache.  */
 | 
      
         | 105 |  |  |   struct frame_info *next; /* down, inner, younger */
 | 
      
         | 106 |  |  |   int prev_p;
 | 
      
         | 107 |  |  |   struct frame_info *prev; /* up, outer, older */
 | 
      
         | 108 |  |  |  
 | 
      
         | 109 |  |  |   /* The reason why we could not set PREV, or UNWIND_NO_REASON if we
 | 
      
         | 110 |  |  |      could.  Only valid when PREV_P is set.  */
 | 
      
         | 111 |  |  |   enum unwind_stop_reason stop_reason;
 | 
      
         | 112 |  |  | };
 | 
      
         | 113 |  |  |  
 | 
      
         | 114 |  |  | /* Flag to control debugging.  */
 | 
      
         | 115 |  |  |  
 | 
      
         | 116 |  |  | static int frame_debug;
 | 
      
         | 117 |  |  | static void
 | 
      
         | 118 |  |  | show_frame_debug (struct ui_file *file, int from_tty,
 | 
      
         | 119 |  |  |                   struct cmd_list_element *c, const char *value)
 | 
      
         | 120 |  |  | {
 | 
      
         | 121 |  |  |   fprintf_filtered (file, _("Frame debugging is %s.\n"), value);
 | 
      
         | 122 |  |  | }
 | 
      
         | 123 |  |  |  
 | 
      
         | 124 |  |  | /* Flag to indicate whether backtraces should stop at main et.al.  */
 | 
      
         | 125 |  |  |  
 | 
      
         | 126 |  |  | static int backtrace_past_main;
 | 
      
         | 127 |  |  | static void
 | 
      
         | 128 |  |  | show_backtrace_past_main (struct ui_file *file, int from_tty,
 | 
      
         | 129 |  |  |                           struct cmd_list_element *c, const char *value)
 | 
      
         | 130 |  |  | {
 | 
      
         | 131 |  |  |   fprintf_filtered (file, _("\
 | 
      
         | 132 |  |  | Whether backtraces should continue past \"main\" is %s.\n"),
 | 
      
         | 133 |  |  |                     value);
 | 
      
         | 134 |  |  | }
 | 
      
         | 135 |  |  |  
 | 
      
         | 136 |  |  | static int backtrace_past_entry;
 | 
      
         | 137 |  |  | static void
 | 
      
         | 138 |  |  | show_backtrace_past_entry (struct ui_file *file, int from_tty,
 | 
      
         | 139 |  |  |                            struct cmd_list_element *c, const char *value)
 | 
      
         | 140 |  |  | {
 | 
      
         | 141 |  |  |   fprintf_filtered (file, _("\
 | 
      
         | 142 |  |  | Whether backtraces should continue past the entry point of a program is %s.\n"),
 | 
      
         | 143 |  |  |                     value);
 | 
      
         | 144 |  |  | }
 | 
      
         | 145 |  |  |  
 | 
      
         | 146 |  |  | static int backtrace_limit = INT_MAX;
 | 
      
         | 147 |  |  | static void
 | 
      
         | 148 |  |  | show_backtrace_limit (struct ui_file *file, int from_tty,
 | 
      
         | 149 |  |  |                       struct cmd_list_element *c, const char *value)
 | 
      
         | 150 |  |  | {
 | 
      
         | 151 |  |  |   fprintf_filtered (file, _("\
 | 
      
         | 152 |  |  | An upper bound on the number of backtrace levels is %s.\n"),
 | 
      
         | 153 |  |  |                     value);
 | 
      
         | 154 |  |  | }
 | 
      
         | 155 |  |  |  
 | 
      
         | 156 |  |  |  
 | 
      
         | 157 |  |  | static void
 | 
      
         | 158 |  |  | fprint_field (struct ui_file *file, const char *name, int p, CORE_ADDR addr)
 | 
      
         | 159 |  |  | {
 | 
      
         | 160 |  |  |   if (p)
 | 
      
         | 161 |  |  |     fprintf_unfiltered (file, "%s=0x%s", name, paddr_nz (addr));
 | 
      
         | 162 |  |  |   else
 | 
      
         | 163 |  |  |     fprintf_unfiltered (file, "!%s", name);
 | 
      
         | 164 |  |  | }
 | 
      
         | 165 |  |  |  
 | 
      
         | 166 |  |  | void
 | 
      
         | 167 |  |  | fprint_frame_id (struct ui_file *file, struct frame_id id)
 | 
      
         | 168 |  |  | {
 | 
      
         | 169 |  |  |   fprintf_unfiltered (file, "{");
 | 
      
         | 170 |  |  |   fprint_field (file, "stack", id.stack_addr_p, id.stack_addr);
 | 
      
         | 171 |  |  |   fprintf_unfiltered (file, ",");
 | 
      
         | 172 |  |  |   fprint_field (file, "code", id.code_addr_p, id.code_addr);
 | 
      
         | 173 |  |  |   fprintf_unfiltered (file, ",");
 | 
      
         | 174 |  |  |   fprint_field (file, "special", id.special_addr_p, id.special_addr);
 | 
      
         | 175 |  |  |   fprintf_unfiltered (file, "}");
 | 
      
         | 176 |  |  | }
 | 
      
         | 177 |  |  |  
 | 
      
         | 178 |  |  | static void
 | 
      
         | 179 |  |  | fprint_frame_type (struct ui_file *file, enum frame_type type)
 | 
      
         | 180 |  |  | {
 | 
      
         | 181 |  |  |   switch (type)
 | 
      
         | 182 |  |  |     {
 | 
      
         | 183 |  |  |     case NORMAL_FRAME:
 | 
      
         | 184 |  |  |       fprintf_unfiltered (file, "NORMAL_FRAME");
 | 
      
         | 185 |  |  |       return;
 | 
      
         | 186 |  |  |     case DUMMY_FRAME:
 | 
      
         | 187 |  |  |       fprintf_unfiltered (file, "DUMMY_FRAME");
 | 
      
         | 188 |  |  |       return;
 | 
      
         | 189 |  |  |     case SIGTRAMP_FRAME:
 | 
      
         | 190 |  |  |       fprintf_unfiltered (file, "SIGTRAMP_FRAME");
 | 
      
         | 191 |  |  |       return;
 | 
      
         | 192 |  |  |     default:
 | 
      
         | 193 |  |  |       fprintf_unfiltered (file, "<unknown type>");
 | 
      
         | 194 |  |  |       return;
 | 
      
         | 195 |  |  |     };
 | 
      
         | 196 |  |  | }
 | 
      
         | 197 |  |  |  
 | 
      
         | 198 |  |  | static void
 | 
      
         | 199 |  |  | fprint_frame (struct ui_file *file, struct frame_info *fi)
 | 
      
         | 200 |  |  | {
 | 
      
         | 201 |  |  |   if (fi == NULL)
 | 
      
         | 202 |  |  |     {
 | 
      
         | 203 |  |  |       fprintf_unfiltered (file, "<NULL frame>");
 | 
      
         | 204 |  |  |       return;
 | 
      
         | 205 |  |  |     }
 | 
      
         | 206 |  |  |   fprintf_unfiltered (file, "{");
 | 
      
         | 207 |  |  |   fprintf_unfiltered (file, "level=%d", fi->level);
 | 
      
         | 208 |  |  |   fprintf_unfiltered (file, ",");
 | 
      
         | 209 |  |  |   fprintf_unfiltered (file, "type=");
 | 
      
         | 210 |  |  |   if (fi->unwind != NULL)
 | 
      
         | 211 |  |  |     fprint_frame_type (file, fi->unwind->type);
 | 
      
         | 212 |  |  |   else
 | 
      
         | 213 |  |  |     fprintf_unfiltered (file, "<unknown>");
 | 
      
         | 214 |  |  |   fprintf_unfiltered (file, ",");
 | 
      
         | 215 |  |  |   fprintf_unfiltered (file, "unwind=");
 | 
      
         | 216 |  |  |   if (fi->unwind != NULL)
 | 
      
         | 217 |  |  |     gdb_print_host_address (fi->unwind, file);
 | 
      
         | 218 |  |  |   else
 | 
      
         | 219 |  |  |     fprintf_unfiltered (file, "<unknown>");
 | 
      
         | 220 |  |  |   fprintf_unfiltered (file, ",");
 | 
      
         | 221 |  |  |   fprintf_unfiltered (file, "pc=");
 | 
      
         | 222 |  |  |   if (fi->next != NULL && fi->next->prev_pc.p)
 | 
      
         | 223 |  |  |     fprintf_unfiltered (file, "0x%s", paddr_nz (fi->next->prev_pc.value));
 | 
      
         | 224 |  |  |   else
 | 
      
         | 225 |  |  |     fprintf_unfiltered (file, "<unknown>");
 | 
      
         | 226 |  |  |   fprintf_unfiltered (file, ",");
 | 
      
         | 227 |  |  |   fprintf_unfiltered (file, "id=");
 | 
      
         | 228 |  |  |   if (fi->this_id.p)
 | 
      
         | 229 |  |  |     fprint_frame_id (file, fi->this_id.value);
 | 
      
         | 230 |  |  |   else
 | 
      
         | 231 |  |  |     fprintf_unfiltered (file, "<unknown>");
 | 
      
         | 232 |  |  |   fprintf_unfiltered (file, ",");
 | 
      
         | 233 |  |  |   fprintf_unfiltered (file, "func=");
 | 
      
         | 234 |  |  |   if (fi->next != NULL && fi->next->prev_func.p)
 | 
      
         | 235 |  |  |     fprintf_unfiltered (file, "0x%s", paddr_nz (fi->next->prev_func.addr));
 | 
      
         | 236 |  |  |   else
 | 
      
         | 237 |  |  |     fprintf_unfiltered (file, "<unknown>");
 | 
      
         | 238 |  |  |   fprintf_unfiltered (file, "}");
 | 
      
         | 239 |  |  | }
 | 
      
         | 240 |  |  |  
 | 
      
         | 241 |  |  | /* Return a frame uniq ID that can be used to, later, re-find the
 | 
      
         | 242 |  |  |    frame.  */
 | 
      
         | 243 |  |  |  
 | 
      
         | 244 |  |  | struct frame_id
 | 
      
         | 245 |  |  | get_frame_id (struct frame_info *fi)
 | 
      
         | 246 |  |  | {
 | 
      
         | 247 |  |  |   if (fi == NULL)
 | 
      
         | 248 |  |  |     {
 | 
      
         | 249 |  |  |       return null_frame_id;
 | 
      
         | 250 |  |  |     }
 | 
      
         | 251 |  |  |   if (!fi->this_id.p)
 | 
      
         | 252 |  |  |     {
 | 
      
         | 253 |  |  |       if (frame_debug)
 | 
      
         | 254 |  |  |         fprintf_unfiltered (gdb_stdlog, "{ get_frame_id (fi=%d) ",
 | 
      
         | 255 |  |  |                             fi->level);
 | 
      
         | 256 |  |  |       /* Find the unwinder.  */
 | 
      
         | 257 |  |  |       if (fi->unwind == NULL)
 | 
      
         | 258 |  |  |         fi->unwind = frame_unwind_find_by_frame (fi->next,
 | 
      
         | 259 |  |  |                                                  &fi->prologue_cache);
 | 
      
         | 260 |  |  |       /* Find THIS frame's ID.  */
 | 
      
         | 261 |  |  |       fi->unwind->this_id (fi->next, &fi->prologue_cache, &fi->this_id.value);
 | 
      
         | 262 |  |  |       fi->this_id.p = 1;
 | 
      
         | 263 |  |  |       if (frame_debug)
 | 
      
         | 264 |  |  |         {
 | 
      
         | 265 |  |  |           fprintf_unfiltered (gdb_stdlog, "-> ");
 | 
      
         | 266 |  |  |           fprint_frame_id (gdb_stdlog, fi->this_id.value);
 | 
      
         | 267 |  |  |           fprintf_unfiltered (gdb_stdlog, " }\n");
 | 
      
         | 268 |  |  |         }
 | 
      
         | 269 |  |  |     }
 | 
      
         | 270 |  |  |   return fi->this_id.value;
 | 
      
         | 271 |  |  | }
 | 
      
         | 272 |  |  |  
 | 
      
         | 273 |  |  | struct frame_id
 | 
      
         | 274 |  |  | frame_unwind_id (struct frame_info *next_frame)
 | 
      
         | 275 |  |  | {
 | 
      
         | 276 |  |  |   /* Use prev_frame, and not get_prev_frame.  The latter will truncate
 | 
      
         | 277 |  |  |      the frame chain, leading to this function unintentionally
 | 
      
         | 278 |  |  |      returning a null_frame_id (e.g., when a caller requests the frame
 | 
      
         | 279 |  |  |      ID of "main()"s caller.  */
 | 
      
         | 280 |  |  |   return get_frame_id (get_prev_frame_1 (next_frame));
 | 
      
         | 281 |  |  | }
 | 
      
         | 282 |  |  |  
 | 
      
         | 283 |  |  | const struct frame_id null_frame_id; /* All zeros.  */
 | 
      
         | 284 |  |  |  
 | 
      
         | 285 |  |  | struct frame_id
 | 
      
         | 286 |  |  | frame_id_build_special (CORE_ADDR stack_addr, CORE_ADDR code_addr,
 | 
      
         | 287 |  |  |                         CORE_ADDR special_addr)
 | 
      
         | 288 |  |  | {
 | 
      
         | 289 |  |  |   struct frame_id id = null_frame_id;
 | 
      
         | 290 |  |  |   id.stack_addr = stack_addr;
 | 
      
         | 291 |  |  |   id.stack_addr_p = 1;
 | 
      
         | 292 |  |  |   id.code_addr = code_addr;
 | 
      
         | 293 |  |  |   id.code_addr_p = 1;
 | 
      
         | 294 |  |  |   id.special_addr = special_addr;
 | 
      
         | 295 |  |  |   id.special_addr_p = 1;
 | 
      
         | 296 |  |  |   return id;
 | 
      
         | 297 |  |  | }
 | 
      
         | 298 |  |  |  
 | 
      
         | 299 |  |  | struct frame_id
 | 
      
         | 300 |  |  | frame_id_build (CORE_ADDR stack_addr, CORE_ADDR code_addr)
 | 
      
         | 301 |  |  | {
 | 
      
         | 302 |  |  |   struct frame_id id = null_frame_id;
 | 
      
         | 303 |  |  |   id.stack_addr = stack_addr;
 | 
      
         | 304 |  |  |   id.stack_addr_p = 1;
 | 
      
         | 305 |  |  |   id.code_addr = code_addr;
 | 
      
         | 306 |  |  |   id.code_addr_p = 1;
 | 
      
         | 307 |  |  |   return id;
 | 
      
         | 308 |  |  | }
 | 
      
         | 309 |  |  |  
 | 
      
         | 310 |  |  | struct frame_id
 | 
      
         | 311 |  |  | frame_id_build_wild (CORE_ADDR stack_addr)
 | 
      
         | 312 |  |  | {
 | 
      
         | 313 |  |  |   struct frame_id id = null_frame_id;
 | 
      
         | 314 |  |  |   id.stack_addr = stack_addr;
 | 
      
         | 315 |  |  |   id.stack_addr_p = 1;
 | 
      
         | 316 |  |  |   return id;
 | 
      
         | 317 |  |  | }
 | 
      
         | 318 |  |  |  
 | 
      
         | 319 |  |  | int
 | 
      
         | 320 |  |  | frame_id_p (struct frame_id l)
 | 
      
         | 321 |  |  | {
 | 
      
         | 322 |  |  |   int p;
 | 
      
         | 323 |  |  |   /* The frame is valid iff it has a valid stack address.  */
 | 
      
         | 324 |  |  |   p = l.stack_addr_p;
 | 
      
         | 325 |  |  |   if (frame_debug)
 | 
      
         | 326 |  |  |     {
 | 
      
         | 327 |  |  |       fprintf_unfiltered (gdb_stdlog, "{ frame_id_p (l=");
 | 
      
         | 328 |  |  |       fprint_frame_id (gdb_stdlog, l);
 | 
      
         | 329 |  |  |       fprintf_unfiltered (gdb_stdlog, ") -> %d }\n", p);
 | 
      
         | 330 |  |  |     }
 | 
      
         | 331 |  |  |   return p;
 | 
      
         | 332 |  |  | }
 | 
      
         | 333 |  |  |  
 | 
      
         | 334 |  |  | int
 | 
      
         | 335 |  |  | frame_id_eq (struct frame_id l, struct frame_id r)
 | 
      
         | 336 |  |  | {
 | 
      
         | 337 |  |  |   int eq;
 | 
      
         | 338 |  |  |   if (!l.stack_addr_p || !r.stack_addr_p)
 | 
      
         | 339 |  |  |     /* Like a NaN, if either ID is invalid, the result is false.
 | 
      
         | 340 |  |  |        Note that a frame ID is invalid iff it is the null frame ID.  */
 | 
      
         | 341 |  |  |     eq = 0;
 | 
      
         | 342 |  |  |   else if (l.stack_addr != r.stack_addr)
 | 
      
         | 343 |  |  |     /* If .stack addresses are different, the frames are different.  */
 | 
      
         | 344 |  |  |     eq = 0;
 | 
      
         | 345 |  |  |   else if (!l.code_addr_p || !r.code_addr_p)
 | 
      
         | 346 |  |  |     /* An invalid code addr is a wild card, always succeed.  */
 | 
      
         | 347 |  |  |     eq = 1;
 | 
      
         | 348 |  |  |   else if (l.code_addr != r.code_addr)
 | 
      
         | 349 |  |  |     /* If .code addresses are different, the frames are different.  */
 | 
      
         | 350 |  |  |     eq = 0;
 | 
      
         | 351 |  |  |   else if (!l.special_addr_p || !r.special_addr_p)
 | 
      
         | 352 |  |  |     /* An invalid special addr is a wild card (or unused), always succeed.  */
 | 
      
         | 353 |  |  |     eq = 1;
 | 
      
         | 354 |  |  |   else if (l.special_addr == r.special_addr)
 | 
      
         | 355 |  |  |     /* Frames are equal.  */
 | 
      
         | 356 |  |  |     eq = 1;
 | 
      
         | 357 |  |  |   else
 | 
      
         | 358 |  |  |     /* No luck.  */
 | 
      
         | 359 |  |  |     eq = 0;
 | 
      
         | 360 |  |  |   if (frame_debug)
 | 
      
         | 361 |  |  |     {
 | 
      
         | 362 |  |  |       fprintf_unfiltered (gdb_stdlog, "{ frame_id_eq (l=");
 | 
      
         | 363 |  |  |       fprint_frame_id (gdb_stdlog, l);
 | 
      
         | 364 |  |  |       fprintf_unfiltered (gdb_stdlog, ",r=");
 | 
      
         | 365 |  |  |       fprint_frame_id (gdb_stdlog, r);
 | 
      
         | 366 |  |  |       fprintf_unfiltered (gdb_stdlog, ") -> %d }\n", eq);
 | 
      
         | 367 |  |  |     }
 | 
      
         | 368 |  |  |   return eq;
 | 
      
         | 369 |  |  | }
 | 
      
         | 370 |  |  |  
 | 
      
         | 371 |  |  | int
 | 
      
         | 372 |  |  | frame_id_inner (struct gdbarch *gdbarch, struct frame_id l, struct frame_id r)
 | 
      
         | 373 |  |  | {
 | 
      
         | 374 |  |  |   int inner;
 | 
      
         | 375 |  |  |   if (!l.stack_addr_p || !r.stack_addr_p)
 | 
      
         | 376 |  |  |     /* Like NaN, any operation involving an invalid ID always fails.  */
 | 
      
         | 377 |  |  |     inner = 0;
 | 
      
         | 378 |  |  |   else
 | 
      
         | 379 |  |  |     /* Only return non-zero when strictly inner than.  Note that, per
 | 
      
         | 380 |  |  |        comment in "frame.h", there is some fuzz here.  Frameless
 | 
      
         | 381 |  |  |        functions are not strictly inner than (same .stack but
 | 
      
         | 382 |  |  |        different .code and/or .special address).  */
 | 
      
         | 383 |  |  |     inner = gdbarch_inner_than (gdbarch, l.stack_addr, r.stack_addr);
 | 
      
         | 384 |  |  |   if (frame_debug)
 | 
      
         | 385 |  |  |     {
 | 
      
         | 386 |  |  |       fprintf_unfiltered (gdb_stdlog, "{ frame_id_inner (l=");
 | 
      
         | 387 |  |  |       fprint_frame_id (gdb_stdlog, l);
 | 
      
         | 388 |  |  |       fprintf_unfiltered (gdb_stdlog, ",r=");
 | 
      
         | 389 |  |  |       fprint_frame_id (gdb_stdlog, r);
 | 
      
         | 390 |  |  |       fprintf_unfiltered (gdb_stdlog, ") -> %d }\n", inner);
 | 
      
         | 391 |  |  |     }
 | 
      
         | 392 |  |  |   return inner;
 | 
      
         | 393 |  |  | }
 | 
      
         | 394 |  |  |  
 | 
      
         | 395 |  |  | struct frame_info *
 | 
      
         | 396 |  |  | frame_find_by_id (struct frame_id id)
 | 
      
         | 397 |  |  | {
 | 
      
         | 398 |  |  |   struct frame_info *frame;
 | 
      
         | 399 |  |  |  
 | 
      
         | 400 |  |  |   /* ZERO denotes the null frame, let the caller decide what to do
 | 
      
         | 401 |  |  |      about it.  Should it instead return get_current_frame()?  */
 | 
      
         | 402 |  |  |   if (!frame_id_p (id))
 | 
      
         | 403 |  |  |     return NULL;
 | 
      
         | 404 |  |  |  
 | 
      
         | 405 |  |  |   for (frame = get_current_frame ();
 | 
      
         | 406 |  |  |        frame != NULL;
 | 
      
         | 407 |  |  |        frame = get_prev_frame (frame))
 | 
      
         | 408 |  |  |     {
 | 
      
         | 409 |  |  |       struct frame_id this = get_frame_id (frame);
 | 
      
         | 410 |  |  |       if (frame_id_eq (id, this))
 | 
      
         | 411 |  |  |         /* An exact match.  */
 | 
      
         | 412 |  |  |         return frame;
 | 
      
         | 413 |  |  |       if (frame_id_inner (get_frame_arch (frame), id, this))
 | 
      
         | 414 |  |  |         /* Gone to far.  */
 | 
      
         | 415 |  |  |         return NULL;
 | 
      
         | 416 |  |  |       /* Either we're not yet gone far enough out along the frame
 | 
      
         | 417 |  |  |          chain (inner(this,id)), or we're comparing frameless functions
 | 
      
         | 418 |  |  |          (same .base, different .func, no test available).  Struggle
 | 
      
         | 419 |  |  |          on until we've definitly gone to far.  */
 | 
      
         | 420 |  |  |     }
 | 
      
         | 421 |  |  |   return NULL;
 | 
      
         | 422 |  |  | }
 | 
      
         | 423 |  |  |  
 | 
      
         | 424 |  |  | CORE_ADDR
 | 
      
         | 425 |  |  | frame_pc_unwind (struct frame_info *this_frame)
 | 
      
         | 426 |  |  | {
 | 
      
         | 427 |  |  |   if (!this_frame->prev_pc.p)
 | 
      
         | 428 |  |  |     {
 | 
      
         | 429 |  |  |       CORE_ADDR pc;
 | 
      
         | 430 |  |  |       if (this_frame->unwind == NULL)
 | 
      
         | 431 |  |  |         this_frame->unwind
 | 
      
         | 432 |  |  |           = frame_unwind_find_by_frame (this_frame->next,
 | 
      
         | 433 |  |  |                                         &this_frame->prologue_cache);
 | 
      
         | 434 |  |  |       if (this_frame->unwind->prev_pc != NULL)
 | 
      
         | 435 |  |  |         /* A per-frame unwinder, prefer it.  */
 | 
      
         | 436 |  |  |         pc = this_frame->unwind->prev_pc (this_frame->next,
 | 
      
         | 437 |  |  |                                           &this_frame->prologue_cache);
 | 
      
         | 438 |  |  |       else if (gdbarch_unwind_pc_p (get_frame_arch (this_frame)))
 | 
      
         | 439 |  |  |         {
 | 
      
         | 440 |  |  |           /* The right way.  The `pure' way.  The one true way.  This
 | 
      
         | 441 |  |  |              method depends solely on the register-unwind code to
 | 
      
         | 442 |  |  |              determine the value of registers in THIS frame, and hence
 | 
      
         | 443 |  |  |              the value of this frame's PC (resume address).  A typical
 | 
      
         | 444 |  |  |              implementation is no more than:
 | 
      
         | 445 |  |  |  
 | 
      
         | 446 |  |  |              frame_unwind_register (this_frame, ISA_PC_REGNUM, buf);
 | 
      
         | 447 |  |  |              return extract_unsigned_integer (buf, size of ISA_PC_REGNUM);
 | 
      
         | 448 |  |  |  
 | 
      
         | 449 |  |  |              Note: this method is very heavily dependent on a correct
 | 
      
         | 450 |  |  |              register-unwind implementation, it pays to fix that
 | 
      
         | 451 |  |  |              method first; this method is frame type agnostic, since
 | 
      
         | 452 |  |  |              it only deals with register values, it works with any
 | 
      
         | 453 |  |  |              frame.  This is all in stark contrast to the old
 | 
      
         | 454 |  |  |              FRAME_SAVED_PC which would try to directly handle all the
 | 
      
         | 455 |  |  |              different ways that a PC could be unwound.  */
 | 
      
         | 456 |  |  |           pc = gdbarch_unwind_pc (get_frame_arch (this_frame), this_frame);
 | 
      
         | 457 |  |  |         }
 | 
      
         | 458 |  |  |       else
 | 
      
         | 459 |  |  |         internal_error (__FILE__, __LINE__, _("No unwind_pc method"));
 | 
      
         | 460 |  |  |       this_frame->prev_pc.value = pc;
 | 
      
         | 461 |  |  |       this_frame->prev_pc.p = 1;
 | 
      
         | 462 |  |  |       if (frame_debug)
 | 
      
         | 463 |  |  |         fprintf_unfiltered (gdb_stdlog,
 | 
      
         | 464 |  |  |                             "{ frame_pc_unwind (this_frame=%d) -> 0x%s }\n",
 | 
      
         | 465 |  |  |                             this_frame->level,
 | 
      
         | 466 |  |  |                             paddr_nz (this_frame->prev_pc.value));
 | 
      
         | 467 |  |  |     }
 | 
      
         | 468 |  |  |   return this_frame->prev_pc.value;
 | 
      
         | 469 |  |  | }
 | 
      
         | 470 |  |  |  
 | 
      
         | 471 |  |  | CORE_ADDR
 | 
      
         | 472 |  |  | frame_func_unwind (struct frame_info *fi, enum frame_type this_type)
 | 
      
         | 473 |  |  | {
 | 
      
         | 474 |  |  |   if (!fi->prev_func.p)
 | 
      
         | 475 |  |  |     {
 | 
      
         | 476 |  |  |       /* Make certain that this, and not the adjacent, function is
 | 
      
         | 477 |  |  |          found.  */
 | 
      
         | 478 |  |  |       CORE_ADDR addr_in_block = frame_unwind_address_in_block (fi, this_type);
 | 
      
         | 479 |  |  |       fi->prev_func.p = 1;
 | 
      
         | 480 |  |  |       fi->prev_func.addr = get_pc_function_start (addr_in_block);
 | 
      
         | 481 |  |  |       if (frame_debug)
 | 
      
         | 482 |  |  |         fprintf_unfiltered (gdb_stdlog,
 | 
      
         | 483 |  |  |                             "{ frame_func_unwind (fi=%d) -> 0x%s }\n",
 | 
      
         | 484 |  |  |                             fi->level, paddr_nz (fi->prev_func.addr));
 | 
      
         | 485 |  |  |     }
 | 
      
         | 486 |  |  |   return fi->prev_func.addr;
 | 
      
         | 487 |  |  | }
 | 
      
         | 488 |  |  |  
 | 
      
         | 489 |  |  | CORE_ADDR
 | 
      
         | 490 |  |  | get_frame_func (struct frame_info *fi)
 | 
      
         | 491 |  |  | {
 | 
      
         | 492 |  |  |   return frame_func_unwind (fi->next, get_frame_type (fi));
 | 
      
         | 493 |  |  | }
 | 
      
         | 494 |  |  |  
 | 
      
         | 495 |  |  | static int
 | 
      
         | 496 |  |  | do_frame_register_read (void *src, int regnum, gdb_byte *buf)
 | 
      
         | 497 |  |  | {
 | 
      
         | 498 |  |  |   frame_register_read (src, regnum, buf);
 | 
      
         | 499 |  |  |   return 1;
 | 
      
         | 500 |  |  | }
 | 
      
         | 501 |  |  |  
 | 
      
         | 502 |  |  | struct regcache *
 | 
      
         | 503 |  |  | frame_save_as_regcache (struct frame_info *this_frame)
 | 
      
         | 504 |  |  | {
 | 
      
         | 505 |  |  |   struct regcache *regcache = regcache_xmalloc (get_frame_arch (this_frame));
 | 
      
         | 506 |  |  |   struct cleanup *cleanups = make_cleanup_regcache_xfree (regcache);
 | 
      
         | 507 |  |  |   regcache_save (regcache, do_frame_register_read, this_frame);
 | 
      
         | 508 |  |  |   discard_cleanups (cleanups);
 | 
      
         | 509 |  |  |   return regcache;
 | 
      
         | 510 |  |  | }
 | 
      
         | 511 |  |  |  
 | 
      
         | 512 |  |  | void
 | 
      
         | 513 |  |  | frame_pop (struct frame_info *this_frame)
 | 
      
         | 514 |  |  | {
 | 
      
         | 515 |  |  |   struct frame_info *prev_frame;
 | 
      
         | 516 |  |  |   struct regcache *scratch;
 | 
      
         | 517 |  |  |   struct cleanup *cleanups;
 | 
      
         | 518 |  |  |  
 | 
      
         | 519 |  |  |   /* Ensure that we have a frame to pop to.  */
 | 
      
         | 520 |  |  |   prev_frame = get_prev_frame_1 (this_frame);
 | 
      
         | 521 |  |  |  
 | 
      
         | 522 |  |  |   if (!prev_frame)
 | 
      
         | 523 |  |  |     error (_("Cannot pop the initial frame."));
 | 
      
         | 524 |  |  |  
 | 
      
         | 525 |  |  |   /* Make a copy of all the register values unwound from this frame.
 | 
      
         | 526 |  |  |      Save them in a scratch buffer so that there isn't a race between
 | 
      
         | 527 |  |  |      trying to extract the old values from the current regcache while
 | 
      
         | 528 |  |  |      at the same time writing new values into that same cache.  */
 | 
      
         | 529 |  |  |   scratch = frame_save_as_regcache (prev_frame);
 | 
      
         | 530 |  |  |   cleanups = make_cleanup_regcache_xfree (scratch);
 | 
      
         | 531 |  |  |  
 | 
      
         | 532 |  |  |   /* FIXME: cagney/2003-03-16: It should be possible to tell the
 | 
      
         | 533 |  |  |      target's register cache that it is about to be hit with a burst
 | 
      
         | 534 |  |  |      register transfer and that the sequence of register writes should
 | 
      
         | 535 |  |  |      be batched.  The pair target_prepare_to_store() and
 | 
      
         | 536 |  |  |      target_store_registers() kind of suggest this functionality.
 | 
      
         | 537 |  |  |      Unfortunately, they don't implement it.  Their lack of a formal
 | 
      
         | 538 |  |  |      definition can lead to targets writing back bogus values
 | 
      
         | 539 |  |  |      (arguably a bug in the target code mind).  */
 | 
      
         | 540 |  |  |   /* Now copy those saved registers into the current regcache.
 | 
      
         | 541 |  |  |      Here, regcache_cpy() calls regcache_restore().  */
 | 
      
         | 542 |  |  |   regcache_cpy (get_current_regcache (), scratch);
 | 
      
         | 543 |  |  |   do_cleanups (cleanups);
 | 
      
         | 544 |  |  |  
 | 
      
         | 545 |  |  |   /* We've made right mess of GDB's local state, just discard
 | 
      
         | 546 |  |  |      everything.  */
 | 
      
         | 547 |  |  |   reinit_frame_cache ();
 | 
      
         | 548 |  |  | }
 | 
      
         | 549 |  |  |  
 | 
      
         | 550 |  |  | void
 | 
      
         | 551 |  |  | frame_register_unwind (struct frame_info *frame, int regnum,
 | 
      
         | 552 |  |  |                        int *optimizedp, enum lval_type *lvalp,
 | 
      
         | 553 |  |  |                        CORE_ADDR *addrp, int *realnump, gdb_byte *bufferp)
 | 
      
         | 554 |  |  | {
 | 
      
         | 555 |  |  |   struct frame_unwind_cache *cache;
 | 
      
         | 556 |  |  |  
 | 
      
         | 557 |  |  |   if (frame_debug)
 | 
      
         | 558 |  |  |     {
 | 
      
         | 559 |  |  |       fprintf_unfiltered (gdb_stdlog, "\
 | 
      
         | 560 |  |  | { frame_register_unwind (frame=%d,regnum=%d(%s),...) ",
 | 
      
         | 561 |  |  |                           frame->level, regnum,
 | 
      
         | 562 |  |  |                           frame_map_regnum_to_name (frame, regnum));
 | 
      
         | 563 |  |  |     }
 | 
      
         | 564 |  |  |  
 | 
      
         | 565 |  |  |   /* Require all but BUFFERP to be valid.  A NULL BUFFERP indicates
 | 
      
         | 566 |  |  |      that the value proper does not need to be fetched.  */
 | 
      
         | 567 |  |  |   gdb_assert (optimizedp != NULL);
 | 
      
         | 568 |  |  |   gdb_assert (lvalp != NULL);
 | 
      
         | 569 |  |  |   gdb_assert (addrp != NULL);
 | 
      
         | 570 |  |  |   gdb_assert (realnump != NULL);
 | 
      
         | 571 |  |  |   /* gdb_assert (bufferp != NULL); */
 | 
      
         | 572 |  |  |  
 | 
      
         | 573 |  |  |   /* NOTE: cagney/2002-11-27: A program trying to unwind a NULL frame
 | 
      
         | 574 |  |  |      is broken.  There is always a frame.  If there, for some reason,
 | 
      
         | 575 |  |  |      isn't a frame, there is some pretty busted code as it should have
 | 
      
         | 576 |  |  |      detected the problem before calling here.  */
 | 
      
         | 577 |  |  |   gdb_assert (frame != NULL);
 | 
      
         | 578 |  |  |  
 | 
      
         | 579 |  |  |   /* Find the unwinder.  */
 | 
      
         | 580 |  |  |   if (frame->unwind == NULL)
 | 
      
         | 581 |  |  |     frame->unwind = frame_unwind_find_by_frame (frame->next,
 | 
      
         | 582 |  |  |                                                 &frame->prologue_cache);
 | 
      
         | 583 |  |  |  
 | 
      
         | 584 |  |  |   /* Ask this frame to unwind its register.  See comment in
 | 
      
         | 585 |  |  |      "frame-unwind.h" for why NEXT frame and this unwind cache are
 | 
      
         | 586 |  |  |      passed in.  */
 | 
      
         | 587 |  |  |   frame->unwind->prev_register (frame->next, &frame->prologue_cache, regnum,
 | 
      
         | 588 |  |  |                                 optimizedp, lvalp, addrp, realnump, bufferp);
 | 
      
         | 589 |  |  |  
 | 
      
         | 590 |  |  |   if (frame_debug)
 | 
      
         | 591 |  |  |     {
 | 
      
         | 592 |  |  |       fprintf_unfiltered (gdb_stdlog, "->");
 | 
      
         | 593 |  |  |       fprintf_unfiltered (gdb_stdlog, " *optimizedp=%d", (*optimizedp));
 | 
      
         | 594 |  |  |       fprintf_unfiltered (gdb_stdlog, " *lvalp=%d", (int) (*lvalp));
 | 
      
         | 595 |  |  |       fprintf_unfiltered (gdb_stdlog, " *addrp=0x%s", paddr_nz ((*addrp)));
 | 
      
         | 596 |  |  |       fprintf_unfiltered (gdb_stdlog, " *bufferp=");
 | 
      
         | 597 |  |  |       if (bufferp == NULL)
 | 
      
         | 598 |  |  |         fprintf_unfiltered (gdb_stdlog, "<NULL>");
 | 
      
         | 599 |  |  |       else
 | 
      
         | 600 |  |  |         {
 | 
      
         | 601 |  |  |           int i;
 | 
      
         | 602 |  |  |           const unsigned char *buf = bufferp;
 | 
      
         | 603 |  |  |           fprintf_unfiltered (gdb_stdlog, "[");
 | 
      
         | 604 |  |  |           for (i = 0; i < register_size (get_frame_arch (frame), regnum); i++)
 | 
      
         | 605 |  |  |             fprintf_unfiltered (gdb_stdlog, "%02x", buf[i]);
 | 
      
         | 606 |  |  |           fprintf_unfiltered (gdb_stdlog, "]");
 | 
      
         | 607 |  |  |         }
 | 
      
         | 608 |  |  |       fprintf_unfiltered (gdb_stdlog, " }\n");
 | 
      
         | 609 |  |  |     }
 | 
      
         | 610 |  |  | }
 | 
      
         | 611 |  |  |  
 | 
      
         | 612 |  |  | void
 | 
      
         | 613 |  |  | frame_register (struct frame_info *frame, int regnum,
 | 
      
         | 614 |  |  |                 int *optimizedp, enum lval_type *lvalp,
 | 
      
         | 615 |  |  |                 CORE_ADDR *addrp, int *realnump, gdb_byte *bufferp)
 | 
      
         | 616 |  |  | {
 | 
      
         | 617 |  |  |   /* Require all but BUFFERP to be valid.  A NULL BUFFERP indicates
 | 
      
         | 618 |  |  |      that the value proper does not need to be fetched.  */
 | 
      
         | 619 |  |  |   gdb_assert (optimizedp != NULL);
 | 
      
         | 620 |  |  |   gdb_assert (lvalp != NULL);
 | 
      
         | 621 |  |  |   gdb_assert (addrp != NULL);
 | 
      
         | 622 |  |  |   gdb_assert (realnump != NULL);
 | 
      
         | 623 |  |  |   /* gdb_assert (bufferp != NULL); */
 | 
      
         | 624 |  |  |  
 | 
      
         | 625 |  |  |   /* Obtain the register value by unwinding the register from the next
 | 
      
         | 626 |  |  |      (more inner frame).  */
 | 
      
         | 627 |  |  |   gdb_assert (frame != NULL && frame->next != NULL);
 | 
      
         | 628 |  |  |   frame_register_unwind (frame->next, regnum, optimizedp, lvalp, addrp,
 | 
      
         | 629 |  |  |                          realnump, bufferp);
 | 
      
         | 630 |  |  | }
 | 
      
         | 631 |  |  |  
 | 
      
         | 632 |  |  | void
 | 
      
         | 633 |  |  | frame_unwind_register (struct frame_info *frame, int regnum, gdb_byte *buf)
 | 
      
         | 634 |  |  | {
 | 
      
         | 635 |  |  |   int optimized;
 | 
      
         | 636 |  |  |   CORE_ADDR addr;
 | 
      
         | 637 |  |  |   int realnum;
 | 
      
         | 638 |  |  |   enum lval_type lval;
 | 
      
         | 639 |  |  |   frame_register_unwind (frame, regnum, &optimized, &lval, &addr,
 | 
      
         | 640 |  |  |                          &realnum, buf);
 | 
      
         | 641 |  |  | }
 | 
      
         | 642 |  |  |  
 | 
      
         | 643 |  |  | void
 | 
      
         | 644 |  |  | get_frame_register (struct frame_info *frame,
 | 
      
         | 645 |  |  |                     int regnum, gdb_byte *buf)
 | 
      
         | 646 |  |  | {
 | 
      
         | 647 |  |  |   frame_unwind_register (frame->next, regnum, buf);
 | 
      
         | 648 |  |  | }
 | 
      
         | 649 |  |  |  
 | 
      
         | 650 |  |  | LONGEST
 | 
      
         | 651 |  |  | frame_unwind_register_signed (struct frame_info *frame, int regnum)
 | 
      
         | 652 |  |  | {
 | 
      
         | 653 |  |  |   gdb_byte buf[MAX_REGISTER_SIZE];
 | 
      
         | 654 |  |  |   frame_unwind_register (frame, regnum, buf);
 | 
      
         | 655 |  |  |   return extract_signed_integer (buf, register_size (get_frame_arch (frame),
 | 
      
         | 656 |  |  |                                                      regnum));
 | 
      
         | 657 |  |  | }
 | 
      
         | 658 |  |  |  
 | 
      
         | 659 |  |  | LONGEST
 | 
      
         | 660 |  |  | get_frame_register_signed (struct frame_info *frame, int regnum)
 | 
      
         | 661 |  |  | {
 | 
      
         | 662 |  |  |   return frame_unwind_register_signed (frame->next, regnum);
 | 
      
         | 663 |  |  | }
 | 
      
         | 664 |  |  |  
 | 
      
         | 665 |  |  | ULONGEST
 | 
      
         | 666 |  |  | frame_unwind_register_unsigned (struct frame_info *frame, int regnum)
 | 
      
         | 667 |  |  | {
 | 
      
         | 668 |  |  |   gdb_byte buf[MAX_REGISTER_SIZE];
 | 
      
         | 669 |  |  |   frame_unwind_register (frame, regnum, buf);
 | 
      
         | 670 |  |  |   return extract_unsigned_integer (buf, register_size (get_frame_arch (frame),
 | 
      
         | 671 |  |  |                                                        regnum));
 | 
      
         | 672 |  |  | }
 | 
      
         | 673 |  |  |  
 | 
      
         | 674 |  |  | ULONGEST
 | 
      
         | 675 |  |  | get_frame_register_unsigned (struct frame_info *frame, int regnum)
 | 
      
         | 676 |  |  | {
 | 
      
         | 677 |  |  |   return frame_unwind_register_unsigned (frame->next, regnum);
 | 
      
         | 678 |  |  | }
 | 
      
         | 679 |  |  |  
 | 
      
         | 680 |  |  | void
 | 
      
         | 681 |  |  | put_frame_register (struct frame_info *frame, int regnum,
 | 
      
         | 682 |  |  |                     const gdb_byte *buf)
 | 
      
         | 683 |  |  | {
 | 
      
         | 684 |  |  |   struct gdbarch *gdbarch = get_frame_arch (frame);
 | 
      
         | 685 |  |  |   int realnum;
 | 
      
         | 686 |  |  |   int optim;
 | 
      
         | 687 |  |  |   enum lval_type lval;
 | 
      
         | 688 |  |  |   CORE_ADDR addr;
 | 
      
         | 689 |  |  |   frame_register (frame, regnum, &optim, &lval, &addr, &realnum, NULL);
 | 
      
         | 690 |  |  |   if (optim)
 | 
      
         | 691 |  |  |     error (_("Attempt to assign to a value that was optimized out."));
 | 
      
         | 692 |  |  |   switch (lval)
 | 
      
         | 693 |  |  |     {
 | 
      
         | 694 |  |  |     case lval_memory:
 | 
      
         | 695 |  |  |       {
 | 
      
         | 696 |  |  |         /* FIXME: write_memory doesn't yet take constant buffers.
 | 
      
         | 697 |  |  |            Arrrg!  */
 | 
      
         | 698 |  |  |         gdb_byte tmp[MAX_REGISTER_SIZE];
 | 
      
         | 699 |  |  |         memcpy (tmp, buf, register_size (gdbarch, regnum));
 | 
      
         | 700 |  |  |         write_memory (addr, tmp, register_size (gdbarch, regnum));
 | 
      
         | 701 |  |  |         break;
 | 
      
         | 702 |  |  |       }
 | 
      
         | 703 |  |  |     case lval_register:
 | 
      
         | 704 |  |  |       regcache_cooked_write (get_current_regcache (), realnum, buf);
 | 
      
         | 705 |  |  |       break;
 | 
      
         | 706 |  |  |     default:
 | 
      
         | 707 |  |  |       error (_("Attempt to assign to an unmodifiable value."));
 | 
      
         | 708 |  |  |     }
 | 
      
         | 709 |  |  | }
 | 
      
         | 710 |  |  |  
 | 
      
         | 711 |  |  | /* frame_register_read ()
 | 
      
         | 712 |  |  |  
 | 
      
         | 713 |  |  |    Find and return the value of REGNUM for the specified stack frame.
 | 
      
         | 714 |  |  |    The number of bytes copied is REGISTER_SIZE (REGNUM).
 | 
      
         | 715 |  |  |  
 | 
      
         | 716 |  |  |    Returns 0 if the register value could not be found.  */
 | 
      
         | 717 |  |  |  
 | 
      
         | 718 |  |  | int
 | 
      
         | 719 |  |  | frame_register_read (struct frame_info *frame, int regnum,
 | 
      
         | 720 |  |  |                      gdb_byte *myaddr)
 | 
      
         | 721 |  |  | {
 | 
      
         | 722 |  |  |   int optimized;
 | 
      
         | 723 |  |  |   enum lval_type lval;
 | 
      
         | 724 |  |  |   CORE_ADDR addr;
 | 
      
         | 725 |  |  |   int realnum;
 | 
      
         | 726 |  |  |   frame_register (frame, regnum, &optimized, &lval, &addr, &realnum, myaddr);
 | 
      
         | 727 |  |  |  
 | 
      
         | 728 |  |  |   return !optimized;
 | 
      
         | 729 |  |  | }
 | 
      
         | 730 |  |  |  
 | 
      
         | 731 |  |  | int
 | 
      
         | 732 |  |  | get_frame_register_bytes (struct frame_info *frame, int regnum,
 | 
      
         | 733 |  |  |                           CORE_ADDR offset, int len, gdb_byte *myaddr)
 | 
      
         | 734 |  |  | {
 | 
      
         | 735 |  |  |   struct gdbarch *gdbarch = get_frame_arch (frame);
 | 
      
         | 736 |  |  |  
 | 
      
         | 737 |  |  |   /* Skip registers wholly inside of OFFSET.  */
 | 
      
         | 738 |  |  |   while (offset >= register_size (gdbarch, regnum))
 | 
      
         | 739 |  |  |     {
 | 
      
         | 740 |  |  |       offset -= register_size (gdbarch, regnum);
 | 
      
         | 741 |  |  |       regnum++;
 | 
      
         | 742 |  |  |     }
 | 
      
         | 743 |  |  |  
 | 
      
         | 744 |  |  |   /* Copy the data.  */
 | 
      
         | 745 |  |  |   while (len > 0)
 | 
      
         | 746 |  |  |     {
 | 
      
         | 747 |  |  |       int curr_len = register_size (gdbarch, regnum) - offset;
 | 
      
         | 748 |  |  |       if (curr_len > len)
 | 
      
         | 749 |  |  |         curr_len = len;
 | 
      
         | 750 |  |  |  
 | 
      
         | 751 |  |  |       if (curr_len == register_size (gdbarch, regnum))
 | 
      
         | 752 |  |  |         {
 | 
      
         | 753 |  |  |           if (!frame_register_read (frame, regnum, myaddr))
 | 
      
         | 754 |  |  |             return 0;
 | 
      
         | 755 |  |  |         }
 | 
      
         | 756 |  |  |       else
 | 
      
         | 757 |  |  |         {
 | 
      
         | 758 |  |  |           gdb_byte buf[MAX_REGISTER_SIZE];
 | 
      
         | 759 |  |  |           if (!frame_register_read (frame, regnum, buf))
 | 
      
         | 760 |  |  |             return 0;
 | 
      
         | 761 |  |  |           memcpy (myaddr, buf + offset, curr_len);
 | 
      
         | 762 |  |  |         }
 | 
      
         | 763 |  |  |  
 | 
      
         | 764 |  |  |       myaddr += curr_len;
 | 
      
         | 765 |  |  |       len -= curr_len;
 | 
      
         | 766 |  |  |       offset = 0;
 | 
      
         | 767 |  |  |       regnum++;
 | 
      
         | 768 |  |  |     }
 | 
      
         | 769 |  |  |  
 | 
      
         | 770 |  |  |   return 1;
 | 
      
         | 771 |  |  | }
 | 
      
         | 772 |  |  |  
 | 
      
         | 773 |  |  | void
 | 
      
         | 774 |  |  | put_frame_register_bytes (struct frame_info *frame, int regnum,
 | 
      
         | 775 |  |  |                           CORE_ADDR offset, int len, const gdb_byte *myaddr)
 | 
      
         | 776 |  |  | {
 | 
      
         | 777 |  |  |   struct gdbarch *gdbarch = get_frame_arch (frame);
 | 
      
         | 778 |  |  |  
 | 
      
         | 779 |  |  |   /* Skip registers wholly inside of OFFSET.  */
 | 
      
         | 780 |  |  |   while (offset >= register_size (gdbarch, regnum))
 | 
      
         | 781 |  |  |     {
 | 
      
         | 782 |  |  |       offset -= register_size (gdbarch, regnum);
 | 
      
         | 783 |  |  |       regnum++;
 | 
      
         | 784 |  |  |     }
 | 
      
         | 785 |  |  |  
 | 
      
         | 786 |  |  |   /* Copy the data.  */
 | 
      
         | 787 |  |  |   while (len > 0)
 | 
      
         | 788 |  |  |     {
 | 
      
         | 789 |  |  |       int curr_len = register_size (gdbarch, regnum) - offset;
 | 
      
         | 790 |  |  |       if (curr_len > len)
 | 
      
         | 791 |  |  |         curr_len = len;
 | 
      
         | 792 |  |  |  
 | 
      
         | 793 |  |  |       if (curr_len == register_size (gdbarch, regnum))
 | 
      
         | 794 |  |  |         {
 | 
      
         | 795 |  |  |           put_frame_register (frame, regnum, myaddr);
 | 
      
         | 796 |  |  |         }
 | 
      
         | 797 |  |  |       else
 | 
      
         | 798 |  |  |         {
 | 
      
         | 799 |  |  |           gdb_byte buf[MAX_REGISTER_SIZE];
 | 
      
         | 800 |  |  |           frame_register_read (frame, regnum, buf);
 | 
      
         | 801 |  |  |           memcpy (buf + offset, myaddr, curr_len);
 | 
      
         | 802 |  |  |           put_frame_register (frame, regnum, buf);
 | 
      
         | 803 |  |  |         }
 | 
      
         | 804 |  |  |  
 | 
      
         | 805 |  |  |       myaddr += curr_len;
 | 
      
         | 806 |  |  |       len -= curr_len;
 | 
      
         | 807 |  |  |       offset = 0;
 | 
      
         | 808 |  |  |       regnum++;
 | 
      
         | 809 |  |  |     }
 | 
      
         | 810 |  |  | }
 | 
      
         | 811 |  |  |  
 | 
      
         | 812 |  |  | /* Map between a frame register number and its name.  A frame register
 | 
      
         | 813 |  |  |    space is a superset of the cooked register space --- it also
 | 
      
         | 814 |  |  |    includes builtin registers.  */
 | 
      
         | 815 |  |  |  
 | 
      
         | 816 |  |  | int
 | 
      
         | 817 |  |  | frame_map_name_to_regnum (struct frame_info *frame, const char *name, int len)
 | 
      
         | 818 |  |  | {
 | 
      
         | 819 |  |  |   return user_reg_map_name_to_regnum (get_frame_arch (frame), name, len);
 | 
      
         | 820 |  |  | }
 | 
      
         | 821 |  |  |  
 | 
      
         | 822 |  |  | const char *
 | 
      
         | 823 |  |  | frame_map_regnum_to_name (struct frame_info *frame, int regnum)
 | 
      
         | 824 |  |  | {
 | 
      
         | 825 |  |  |   return user_reg_map_regnum_to_name (get_frame_arch (frame), regnum);
 | 
      
         | 826 |  |  | }
 | 
      
         | 827 |  |  |  
 | 
      
         | 828 |  |  | /* Create a sentinel frame.  */
 | 
      
         | 829 |  |  |  
 | 
      
         | 830 |  |  | static struct frame_info *
 | 
      
         | 831 |  |  | create_sentinel_frame (struct regcache *regcache)
 | 
      
         | 832 |  |  | {
 | 
      
         | 833 |  |  |   struct frame_info *frame = FRAME_OBSTACK_ZALLOC (struct frame_info);
 | 
      
         | 834 |  |  |   frame->level = -1;
 | 
      
         | 835 |  |  |   /* Explicitly initialize the sentinel frame's cache.  Provide it
 | 
      
         | 836 |  |  |      with the underlying regcache.  In the future additional
 | 
      
         | 837 |  |  |      information, such as the frame's thread will be added.  */
 | 
      
         | 838 |  |  |   frame->prologue_cache = sentinel_frame_cache (regcache);
 | 
      
         | 839 |  |  |   /* For the moment there is only one sentinel frame implementation.  */
 | 
      
         | 840 |  |  |   frame->unwind = sentinel_frame_unwind;
 | 
      
         | 841 |  |  |   /* Link this frame back to itself.  The frame is self referential
 | 
      
         | 842 |  |  |      (the unwound PC is the same as the pc), so make it so.  */
 | 
      
         | 843 |  |  |   frame->next = frame;
 | 
      
         | 844 |  |  |   /* Make the sentinel frame's ID valid, but invalid.  That way all
 | 
      
         | 845 |  |  |      comparisons with it should fail.  */
 | 
      
         | 846 |  |  |   frame->this_id.p = 1;
 | 
      
         | 847 |  |  |   frame->this_id.value = null_frame_id;
 | 
      
         | 848 |  |  |   if (frame_debug)
 | 
      
         | 849 |  |  |     {
 | 
      
         | 850 |  |  |       fprintf_unfiltered (gdb_stdlog, "{ create_sentinel_frame (...) -> ");
 | 
      
         | 851 |  |  |       fprint_frame (gdb_stdlog, frame);
 | 
      
         | 852 |  |  |       fprintf_unfiltered (gdb_stdlog, " }\n");
 | 
      
         | 853 |  |  |     }
 | 
      
         | 854 |  |  |   return frame;
 | 
      
         | 855 |  |  | }
 | 
      
         | 856 |  |  |  
 | 
      
         | 857 |  |  | /* Info about the innermost stack frame (contents of FP register) */
 | 
      
         | 858 |  |  |  
 | 
      
         | 859 |  |  | static struct frame_info *current_frame;
 | 
      
         | 860 |  |  |  
 | 
      
         | 861 |  |  | /* Cache for frame addresses already read by gdb.  Valid only while
 | 
      
         | 862 |  |  |    inferior is stopped.  Control variables for the frame cache should
 | 
      
         | 863 |  |  |    be local to this module.  */
 | 
      
         | 864 |  |  |  
 | 
      
         | 865 |  |  | static struct obstack frame_cache_obstack;
 | 
      
         | 866 |  |  |  
 | 
      
         | 867 |  |  | void *
 | 
      
         | 868 |  |  | frame_obstack_zalloc (unsigned long size)
 | 
      
         | 869 |  |  | {
 | 
      
         | 870 |  |  |   void *data = obstack_alloc (&frame_cache_obstack, size);
 | 
      
         | 871 |  |  |   memset (data, 0, size);
 | 
      
         | 872 |  |  |   return data;
 | 
      
         | 873 |  |  | }
 | 
      
         | 874 |  |  |  
 | 
      
         | 875 |  |  | /* Return the innermost (currently executing) stack frame.  This is
 | 
      
         | 876 |  |  |    split into two functions.  The function unwind_to_current_frame()
 | 
      
         | 877 |  |  |    is wrapped in catch exceptions so that, even when the unwind of the
 | 
      
         | 878 |  |  |    sentinel frame fails, the function still returns a stack frame.  */
 | 
      
         | 879 |  |  |  
 | 
      
         | 880 |  |  | static int
 | 
      
         | 881 |  |  | unwind_to_current_frame (struct ui_out *ui_out, void *args)
 | 
      
         | 882 |  |  | {
 | 
      
         | 883 |  |  |   struct frame_info *frame = get_prev_frame (args);
 | 
      
         | 884 |  |  |   /* A sentinel frame can fail to unwind, e.g., because its PC value
 | 
      
         | 885 |  |  |      lands in somewhere like start.  */
 | 
      
         | 886 |  |  |   if (frame == NULL)
 | 
      
         | 887 |  |  |     return 1;
 | 
      
         | 888 |  |  |   current_frame = frame;
 | 
      
         | 889 |  |  |   return 0;
 | 
      
         | 890 |  |  | }
 | 
      
         | 891 |  |  |  
 | 
      
         | 892 |  |  | struct frame_info *
 | 
      
         | 893 |  |  | get_current_frame (void)
 | 
      
         | 894 |  |  | {
 | 
      
         | 895 |  |  |   /* First check, and report, the lack of registers.  Having GDB
 | 
      
         | 896 |  |  |      report "No stack!" or "No memory" when the target doesn't even
 | 
      
         | 897 |  |  |      have registers is very confusing.  Besides, "printcmd.exp"
 | 
      
         | 898 |  |  |      explicitly checks that ``print $pc'' with no registers prints "No
 | 
      
         | 899 |  |  |      registers".  */
 | 
      
         | 900 |  |  |   if (!target_has_registers)
 | 
      
         | 901 |  |  |     error (_("No registers."));
 | 
      
         | 902 |  |  |   if (!target_has_stack)
 | 
      
         | 903 |  |  |     error (_("No stack."));
 | 
      
         | 904 |  |  |   if (!target_has_memory)
 | 
      
         | 905 |  |  |     error (_("No memory."));
 | 
      
         | 906 |  |  |   if (current_frame == NULL)
 | 
      
         | 907 |  |  |     {
 | 
      
         | 908 |  |  |       struct frame_info *sentinel_frame =
 | 
      
         | 909 |  |  |         create_sentinel_frame (get_current_regcache ());
 | 
      
         | 910 |  |  |       if (catch_exceptions (uiout, unwind_to_current_frame, sentinel_frame,
 | 
      
         | 911 |  |  |                             RETURN_MASK_ERROR) != 0)
 | 
      
         | 912 |  |  |         {
 | 
      
         | 913 |  |  |           /* Oops! Fake a current frame?  Is this useful?  It has a PC
 | 
      
         | 914 |  |  |              of zero, for instance.  */
 | 
      
         | 915 |  |  |           current_frame = sentinel_frame;
 | 
      
         | 916 |  |  |         }
 | 
      
         | 917 |  |  |     }
 | 
      
         | 918 |  |  |   return current_frame;
 | 
      
         | 919 |  |  | }
 | 
      
         | 920 |  |  |  
 | 
      
         | 921 |  |  | /* The "selected" stack frame is used by default for local and arg
 | 
      
         | 922 |  |  |    access.  May be zero, for no selected frame.  */
 | 
      
         | 923 |  |  |  
 | 
      
         | 924 |  |  | static struct frame_info *selected_frame;
 | 
      
         | 925 |  |  |  
 | 
      
         | 926 |  |  | /* Return the selected frame.  Always non-NULL (unless there isn't an
 | 
      
         | 927 |  |  |    inferior sufficient for creating a frame) in which case an error is
 | 
      
         | 928 |  |  |    thrown.  */
 | 
      
         | 929 |  |  |  
 | 
      
         | 930 |  |  | struct frame_info *
 | 
      
         | 931 |  |  | get_selected_frame (const char *message)
 | 
      
         | 932 |  |  | {
 | 
      
         | 933 |  |  |   if (selected_frame == NULL)
 | 
      
         | 934 |  |  |     {
 | 
      
         | 935 |  |  |       if (message != NULL && (!target_has_registers
 | 
      
         | 936 |  |  |                               || !target_has_stack
 | 
      
         | 937 |  |  |                               || !target_has_memory))
 | 
      
         | 938 |  |  |         error (("%s"), message);
 | 
      
         | 939 |  |  |       /* Hey!  Don't trust this.  It should really be re-finding the
 | 
      
         | 940 |  |  |          last selected frame of the currently selected thread.  This,
 | 
      
         | 941 |  |  |          though, is better than nothing.  */
 | 
      
         | 942 |  |  |       select_frame (get_current_frame ());
 | 
      
         | 943 |  |  |     }
 | 
      
         | 944 |  |  |   /* There is always a frame.  */
 | 
      
         | 945 |  |  |   gdb_assert (selected_frame != NULL);
 | 
      
         | 946 |  |  |   return selected_frame;
 | 
      
         | 947 |  |  | }
 | 
      
         | 948 |  |  |  
 | 
      
         | 949 |  |  | /* This is a variant of get_selected_frame() which can be called when
 | 
      
         | 950 |  |  |    the inferior does not have a frame; in that case it will return
 | 
      
         | 951 |  |  |    NULL instead of calling error().  */
 | 
      
         | 952 |  |  |  
 | 
      
         | 953 |  |  | struct frame_info *
 | 
      
         | 954 |  |  | deprecated_safe_get_selected_frame (void)
 | 
      
         | 955 |  |  | {
 | 
      
         | 956 |  |  |   if (!target_has_registers || !target_has_stack || !target_has_memory)
 | 
      
         | 957 |  |  |     return NULL;
 | 
      
         | 958 |  |  |   return get_selected_frame (NULL);
 | 
      
         | 959 |  |  | }
 | 
      
         | 960 |  |  |  
 | 
      
         | 961 |  |  | /* Select frame FI (or NULL - to invalidate the current frame).  */
 | 
      
         | 962 |  |  |  
 | 
      
         | 963 |  |  | void
 | 
      
         | 964 |  |  | select_frame (struct frame_info *fi)
 | 
      
         | 965 |  |  | {
 | 
      
         | 966 |  |  |   struct symtab *s;
 | 
      
         | 967 |  |  |  
 | 
      
         | 968 |  |  |   selected_frame = fi;
 | 
      
         | 969 |  |  |   /* NOTE: cagney/2002-05-04: FI can be NULL.  This occurs when the
 | 
      
         | 970 |  |  |      frame is being invalidated.  */
 | 
      
         | 971 |  |  |   if (deprecated_selected_frame_level_changed_hook)
 | 
      
         | 972 |  |  |     deprecated_selected_frame_level_changed_hook (frame_relative_level (fi));
 | 
      
         | 973 |  |  |  
 | 
      
         | 974 |  |  |   /* FIXME: kseitz/2002-08-28: It would be nice to call
 | 
      
         | 975 |  |  |      selected_frame_level_changed_event() right here, but due to limitations
 | 
      
         | 976 |  |  |      in the current interfaces, we would end up flooding UIs with events
 | 
      
         | 977 |  |  |      because select_frame() is used extensively internally.
 | 
      
         | 978 |  |  |  
 | 
      
         | 979 |  |  |      Once we have frame-parameterized frame (and frame-related) commands,
 | 
      
         | 980 |  |  |      the event notification can be moved here, since this function will only
 | 
      
         | 981 |  |  |      be called when the user's selected frame is being changed. */
 | 
      
         | 982 |  |  |  
 | 
      
         | 983 |  |  |   /* Ensure that symbols for this frame are read in.  Also, determine the
 | 
      
         | 984 |  |  |      source language of this frame, and switch to it if desired.  */
 | 
      
         | 985 |  |  |   if (fi)
 | 
      
         | 986 |  |  |     {
 | 
      
         | 987 |  |  |       /* We retrieve the frame's symtab by using the frame PC.  However
 | 
      
         | 988 |  |  |          we cannot use the frame PC as-is, because it usually points to
 | 
      
         | 989 |  |  |          the instruction following the "call", which is sometimes the
 | 
      
         | 990 |  |  |          first instruction of another function.  So we rely on
 | 
      
         | 991 |  |  |          get_frame_address_in_block() which provides us with a PC which
 | 
      
         | 992 |  |  |          is guaranteed to be inside the frame's code block.  */
 | 
      
         | 993 |  |  |       s = find_pc_symtab (get_frame_address_in_block (fi));
 | 
      
         | 994 |  |  |       if (s
 | 
      
         | 995 |  |  |           && s->language != current_language->la_language
 | 
      
         | 996 |  |  |           && s->language != language_unknown
 | 
      
         | 997 |  |  |           && language_mode == language_mode_auto)
 | 
      
         | 998 |  |  |         {
 | 
      
         | 999 |  |  |           set_language (s->language);
 | 
      
         | 1000 |  |  |         }
 | 
      
         | 1001 |  |  |     }
 | 
      
         | 1002 |  |  | }
 | 
      
         | 1003 |  |  |  
 | 
      
         | 1004 |  |  | /* Create an arbitrary (i.e. address specified by user) or innermost frame.
 | 
      
         | 1005 |  |  |    Always returns a non-NULL value.  */
 | 
      
         | 1006 |  |  |  
 | 
      
         | 1007 |  |  | struct frame_info *
 | 
      
         | 1008 |  |  | create_new_frame (CORE_ADDR addr, CORE_ADDR pc)
 | 
      
         | 1009 |  |  | {
 | 
      
         | 1010 |  |  |   struct frame_info *fi;
 | 
      
         | 1011 |  |  |  
 | 
      
         | 1012 |  |  |   if (frame_debug)
 | 
      
         | 1013 |  |  |     {
 | 
      
         | 1014 |  |  |       fprintf_unfiltered (gdb_stdlog,
 | 
      
         | 1015 |  |  |                           "{ create_new_frame (addr=0x%s, pc=0x%s) ",
 | 
      
         | 1016 |  |  |                           paddr_nz (addr), paddr_nz (pc));
 | 
      
         | 1017 |  |  |     }
 | 
      
         | 1018 |  |  |  
 | 
      
         | 1019 |  |  |   fi = FRAME_OBSTACK_ZALLOC (struct frame_info);
 | 
      
         | 1020 |  |  |  
 | 
      
         | 1021 |  |  |   fi->next = create_sentinel_frame (get_current_regcache ());
 | 
      
         | 1022 |  |  |  
 | 
      
         | 1023 |  |  |   /* Select/initialize both the unwind function and the frame's type
 | 
      
         | 1024 |  |  |      based on the PC.  */
 | 
      
         | 1025 |  |  |   fi->unwind = frame_unwind_find_by_frame (fi->next, &fi->prologue_cache);
 | 
      
         | 1026 |  |  |  
 | 
      
         | 1027 |  |  |   fi->this_id.p = 1;
 | 
      
         | 1028 |  |  |   deprecated_update_frame_base_hack (fi, addr);
 | 
      
         | 1029 |  |  |   deprecated_update_frame_pc_hack (fi, pc);
 | 
      
         | 1030 |  |  |  
 | 
      
         | 1031 |  |  |   if (frame_debug)
 | 
      
         | 1032 |  |  |     {
 | 
      
         | 1033 |  |  |       fprintf_unfiltered (gdb_stdlog, "-> ");
 | 
      
         | 1034 |  |  |       fprint_frame (gdb_stdlog, fi);
 | 
      
         | 1035 |  |  |       fprintf_unfiltered (gdb_stdlog, " }\n");
 | 
      
         | 1036 |  |  |     }
 | 
      
         | 1037 |  |  |  
 | 
      
         | 1038 |  |  |   return fi;
 | 
      
         | 1039 |  |  | }
 | 
      
         | 1040 |  |  |  
 | 
      
         | 1041 |  |  | /* Return the frame that THIS_FRAME calls (NULL if THIS_FRAME is the
 | 
      
         | 1042 |  |  |    innermost frame).  Be careful to not fall off the bottom of the
 | 
      
         | 1043 |  |  |    frame chain and onto the sentinel frame.  */
 | 
      
         | 1044 |  |  |  
 | 
      
         | 1045 |  |  | struct frame_info *
 | 
      
         | 1046 |  |  | get_next_frame (struct frame_info *this_frame)
 | 
      
         | 1047 |  |  | {
 | 
      
         | 1048 |  |  |   if (this_frame->level > 0)
 | 
      
         | 1049 |  |  |     return this_frame->next;
 | 
      
         | 1050 |  |  |   else
 | 
      
         | 1051 |  |  |     return NULL;
 | 
      
         | 1052 |  |  | }
 | 
      
         | 1053 |  |  |  
 | 
      
         | 1054 |  |  | /* Observer for the target_changed event.  */
 | 
      
         | 1055 |  |  |  
 | 
      
         | 1056 |  |  | void
 | 
      
         | 1057 |  |  | frame_observer_target_changed (struct target_ops *target)
 | 
      
         | 1058 |  |  | {
 | 
      
         | 1059 |  |  |   reinit_frame_cache ();
 | 
      
         | 1060 |  |  | }
 | 
      
         | 1061 |  |  |  
 | 
      
         | 1062 |  |  | /* Flush the entire frame cache.  */
 | 
      
         | 1063 |  |  |  
 | 
      
         | 1064 |  |  | void
 | 
      
         | 1065 |  |  | reinit_frame_cache (void)
 | 
      
         | 1066 |  |  | {
 | 
      
         | 1067 |  |  |   struct frame_info *fi;
 | 
      
         | 1068 |  |  |  
 | 
      
         | 1069 |  |  |   /* Tear down all frame caches.  */
 | 
      
         | 1070 |  |  |   for (fi = current_frame; fi != NULL; fi = fi->prev)
 | 
      
         | 1071 |  |  |     {
 | 
      
         | 1072 |  |  |       if (fi->prologue_cache && fi->unwind->dealloc_cache)
 | 
      
         | 1073 |  |  |         fi->unwind->dealloc_cache (fi, fi->prologue_cache);
 | 
      
         | 1074 |  |  |       if (fi->base_cache && fi->base->unwind->dealloc_cache)
 | 
      
         | 1075 |  |  |         fi->base->unwind->dealloc_cache (fi, fi->base_cache);
 | 
      
         | 1076 |  |  |     }
 | 
      
         | 1077 |  |  |  
 | 
      
         | 1078 |  |  |   /* Since we can't really be sure what the first object allocated was */
 | 
      
         | 1079 |  |  |   obstack_free (&frame_cache_obstack, 0);
 | 
      
         | 1080 |  |  |   obstack_init (&frame_cache_obstack);
 | 
      
         | 1081 |  |  |  
 | 
      
         | 1082 |  |  |   if (current_frame != NULL)
 | 
      
         | 1083 |  |  |     annotate_frames_invalid ();
 | 
      
         | 1084 |  |  |  
 | 
      
         | 1085 |  |  |   current_frame = NULL;         /* Invalidate cache */
 | 
      
         | 1086 |  |  |   select_frame (NULL);
 | 
      
         | 1087 |  |  |   if (frame_debug)
 | 
      
         | 1088 |  |  |     fprintf_unfiltered (gdb_stdlog, "{ reinit_frame_cache () }\n");
 | 
      
         | 1089 |  |  | }
 | 
      
         | 1090 |  |  |  
 | 
      
         | 1091 |  |  | /* Find where a register is saved (in memory or another register).
 | 
      
         | 1092 |  |  |    The result of frame_register_unwind is just where it is saved
 | 
      
         | 1093 |  |  |    relative to this particular frame.  */
 | 
      
         | 1094 |  |  |  
 | 
      
         | 1095 |  |  | static void
 | 
      
         | 1096 |  |  | frame_register_unwind_location (struct frame_info *this_frame, int regnum,
 | 
      
         | 1097 |  |  |                                 int *optimizedp, enum lval_type *lvalp,
 | 
      
         | 1098 |  |  |                                 CORE_ADDR *addrp, int *realnump)
 | 
      
         | 1099 |  |  | {
 | 
      
         | 1100 |  |  |   gdb_assert (this_frame == NULL || this_frame->level >= 0);
 | 
      
         | 1101 |  |  |  
 | 
      
         | 1102 |  |  |   while (this_frame != NULL)
 | 
      
         | 1103 |  |  |     {
 | 
      
         | 1104 |  |  |       frame_register_unwind (this_frame, regnum, optimizedp, lvalp,
 | 
      
         | 1105 |  |  |                              addrp, realnump, NULL);
 | 
      
         | 1106 |  |  |  
 | 
      
         | 1107 |  |  |       if (*optimizedp)
 | 
      
         | 1108 |  |  |         break;
 | 
      
         | 1109 |  |  |  
 | 
      
         | 1110 |  |  |       if (*lvalp != lval_register)
 | 
      
         | 1111 |  |  |         break;
 | 
      
         | 1112 |  |  |  
 | 
      
         | 1113 |  |  |       regnum = *realnump;
 | 
      
         | 1114 |  |  |       this_frame = get_next_frame (this_frame);
 | 
      
         | 1115 |  |  |     }
 | 
      
         | 1116 |  |  | }
 | 
      
         | 1117 |  |  |  
 | 
      
         | 1118 |  |  | /* Return a "struct frame_info" corresponding to the frame that called
 | 
      
         | 1119 |  |  |    THIS_FRAME.  Returns NULL if there is no such frame.
 | 
      
         | 1120 |  |  |  
 | 
      
         | 1121 |  |  |    Unlike get_prev_frame, this function always tries to unwind the
 | 
      
         | 1122 |  |  |    frame.  */
 | 
      
         | 1123 |  |  |  
 | 
      
         | 1124 |  |  | static struct frame_info *
 | 
      
         | 1125 |  |  | get_prev_frame_1 (struct frame_info *this_frame)
 | 
      
         | 1126 |  |  | {
 | 
      
         | 1127 |  |  |   struct frame_info *prev_frame;
 | 
      
         | 1128 |  |  |   struct frame_id this_id;
 | 
      
         | 1129 |  |  |   struct gdbarch *gdbarch;
 | 
      
         | 1130 |  |  |  
 | 
      
         | 1131 |  |  |   gdb_assert (this_frame != NULL);
 | 
      
         | 1132 |  |  |   gdbarch = get_frame_arch (this_frame);
 | 
      
         | 1133 |  |  |  
 | 
      
         | 1134 |  |  |   if (frame_debug)
 | 
      
         | 1135 |  |  |     {
 | 
      
         | 1136 |  |  |       fprintf_unfiltered (gdb_stdlog, "{ get_prev_frame_1 (this_frame=");
 | 
      
         | 1137 |  |  |       if (this_frame != NULL)
 | 
      
         | 1138 |  |  |         fprintf_unfiltered (gdb_stdlog, "%d", this_frame->level);
 | 
      
         | 1139 |  |  |       else
 | 
      
         | 1140 |  |  |         fprintf_unfiltered (gdb_stdlog, "<NULL>");
 | 
      
         | 1141 |  |  |       fprintf_unfiltered (gdb_stdlog, ") ");
 | 
      
         | 1142 |  |  |     }
 | 
      
         | 1143 |  |  |  
 | 
      
         | 1144 |  |  |   /* Only try to do the unwind once.  */
 | 
      
         | 1145 |  |  |   if (this_frame->prev_p)
 | 
      
         | 1146 |  |  |     {
 | 
      
         | 1147 |  |  |       if (frame_debug)
 | 
      
         | 1148 |  |  |         {
 | 
      
         | 1149 |  |  |           fprintf_unfiltered (gdb_stdlog, "-> ");
 | 
      
         | 1150 |  |  |           fprint_frame (gdb_stdlog, this_frame->prev);
 | 
      
         | 1151 |  |  |           fprintf_unfiltered (gdb_stdlog, " // cached \n");
 | 
      
         | 1152 |  |  |         }
 | 
      
         | 1153 |  |  |       return this_frame->prev;
 | 
      
         | 1154 |  |  |     }
 | 
      
         | 1155 |  |  |   this_frame->prev_p = 1;
 | 
      
         | 1156 |  |  |   this_frame->stop_reason = UNWIND_NO_REASON;
 | 
      
         | 1157 |  |  |  
 | 
      
         | 1158 |  |  |   /* Check that this frame's ID was valid.  If it wasn't, don't try to
 | 
      
         | 1159 |  |  |      unwind to the prev frame.  Be careful to not apply this test to
 | 
      
         | 1160 |  |  |      the sentinel frame.  */
 | 
      
         | 1161 |  |  |   this_id = get_frame_id (this_frame);
 | 
      
         | 1162 |  |  |   if (this_frame->level >= 0 && !frame_id_p (this_id))
 | 
      
         | 1163 |  |  |     {
 | 
      
         | 1164 |  |  |       if (frame_debug)
 | 
      
         | 1165 |  |  |         {
 | 
      
         | 1166 |  |  |           fprintf_unfiltered (gdb_stdlog, "-> ");
 | 
      
         | 1167 |  |  |           fprint_frame (gdb_stdlog, NULL);
 | 
      
         | 1168 |  |  |           fprintf_unfiltered (gdb_stdlog, " // this ID is NULL }\n");
 | 
      
         | 1169 |  |  |         }
 | 
      
         | 1170 |  |  |       this_frame->stop_reason = UNWIND_NULL_ID;
 | 
      
         | 1171 |  |  |       return NULL;
 | 
      
         | 1172 |  |  |     }
 | 
      
         | 1173 |  |  |  
 | 
      
         | 1174 |  |  |   /* Check that this frame's ID isn't inner to (younger, below, next)
 | 
      
         | 1175 |  |  |      the next frame.  This happens when a frame unwind goes backwards.
 | 
      
         | 1176 |  |  |      Exclude signal trampolines (due to sigaltstack the frame ID can
 | 
      
         | 1177 |  |  |      go backwards) and sentinel frames (the test is meaningless).  */
 | 
      
         | 1178 |  |  |   if (this_frame->next->level >= 0
 | 
      
         | 1179 |  |  |       && this_frame->next->unwind->type != SIGTRAMP_FRAME
 | 
      
         | 1180 |  |  |       && frame_id_inner (get_frame_arch (this_frame), this_id,
 | 
      
         | 1181 |  |  |                          get_frame_id (this_frame->next)))
 | 
      
         | 1182 |  |  |     {
 | 
      
         | 1183 |  |  |       if (frame_debug)
 | 
      
         | 1184 |  |  |         {
 | 
      
         | 1185 |  |  |           fprintf_unfiltered (gdb_stdlog, "-> ");
 | 
      
         | 1186 |  |  |           fprint_frame (gdb_stdlog, NULL);
 | 
      
         | 1187 |  |  |           fprintf_unfiltered (gdb_stdlog, " // this frame ID is inner }\n");
 | 
      
         | 1188 |  |  |         }
 | 
      
         | 1189 |  |  |       this_frame->stop_reason = UNWIND_INNER_ID;
 | 
      
         | 1190 |  |  |       return NULL;
 | 
      
         | 1191 |  |  |     }
 | 
      
         | 1192 |  |  |  
 | 
      
         | 1193 |  |  |   /* Check that this and the next frame are not identical.  If they
 | 
      
         | 1194 |  |  |      are, there is most likely a stack cycle.  As with the inner-than
 | 
      
         | 1195 |  |  |      test above, avoid comparing the inner-most and sentinel frames.  */
 | 
      
         | 1196 |  |  |   if (this_frame->level > 0
 | 
      
         | 1197 |  |  |       && frame_id_eq (this_id, get_frame_id (this_frame->next)))
 | 
      
         | 1198 |  |  |     {
 | 
      
         | 1199 |  |  |       if (frame_debug)
 | 
      
         | 1200 |  |  |         {
 | 
      
         | 1201 |  |  |           fprintf_unfiltered (gdb_stdlog, "-> ");
 | 
      
         | 1202 |  |  |           fprint_frame (gdb_stdlog, NULL);
 | 
      
         | 1203 |  |  |           fprintf_unfiltered (gdb_stdlog, " // this frame has same ID }\n");
 | 
      
         | 1204 |  |  |         }
 | 
      
         | 1205 |  |  |       this_frame->stop_reason = UNWIND_SAME_ID;
 | 
      
         | 1206 |  |  |       return NULL;
 | 
      
         | 1207 |  |  |     }
 | 
      
         | 1208 |  |  |  
 | 
      
         | 1209 |  |  |   /* Check that this and the next frame do not unwind the PC register
 | 
      
         | 1210 |  |  |      to the same memory location.  If they do, then even though they
 | 
      
         | 1211 |  |  |      have different frame IDs, the new frame will be bogus; two
 | 
      
         | 1212 |  |  |      functions can't share a register save slot for the PC.  This can
 | 
      
         | 1213 |  |  |      happen when the prologue analyzer finds a stack adjustment, but
 | 
      
         | 1214 |  |  |      no PC save.
 | 
      
         | 1215 |  |  |  
 | 
      
         | 1216 |  |  |      This check does assume that the "PC register" is roughly a
 | 
      
         | 1217 |  |  |      traditional PC, even if the gdbarch_unwind_pc method adjusts
 | 
      
         | 1218 |  |  |      it (we do not rely on the value, only on the unwound PC being
 | 
      
         | 1219 |  |  |      dependent on this value).  A potential improvement would be
 | 
      
         | 1220 |  |  |      to have the frame prev_pc method and the gdbarch unwind_pc
 | 
      
         | 1221 |  |  |      method set the same lval and location information as
 | 
      
         | 1222 |  |  |      frame_register_unwind.  */
 | 
      
         | 1223 |  |  |   if (this_frame->level > 0
 | 
      
         | 1224 |  |  |       && gdbarch_pc_regnum (gdbarch) >= 0
 | 
      
         | 1225 |  |  |       && get_frame_type (this_frame) == NORMAL_FRAME
 | 
      
         | 1226 |  |  |       && get_frame_type (this_frame->next) == NORMAL_FRAME)
 | 
      
         | 1227 |  |  |     {
 | 
      
         | 1228 |  |  |       int optimized, realnum, nrealnum;
 | 
      
         | 1229 |  |  |       enum lval_type lval, nlval;
 | 
      
         | 1230 |  |  |       CORE_ADDR addr, naddr;
 | 
      
         | 1231 |  |  |  
 | 
      
         | 1232 |  |  |       frame_register_unwind_location (this_frame,
 | 
      
         | 1233 |  |  |                                       gdbarch_pc_regnum (gdbarch),
 | 
      
         | 1234 |  |  |                                       &optimized, &lval, &addr, &realnum);
 | 
      
         | 1235 |  |  |       frame_register_unwind_location (get_next_frame (this_frame),
 | 
      
         | 1236 |  |  |                                       gdbarch_pc_regnum (gdbarch),
 | 
      
         | 1237 |  |  |                                       &optimized, &nlval, &naddr, &nrealnum);
 | 
      
         | 1238 |  |  |  
 | 
      
         | 1239 |  |  |       if ((lval == lval_memory && lval == nlval && addr == naddr)
 | 
      
         | 1240 |  |  |           || (lval == lval_register && lval == nlval && realnum == nrealnum))
 | 
      
         | 1241 |  |  |         {
 | 
      
         | 1242 |  |  |           if (frame_debug)
 | 
      
         | 1243 |  |  |             {
 | 
      
         | 1244 |  |  |               fprintf_unfiltered (gdb_stdlog, "-> ");
 | 
      
         | 1245 |  |  |               fprint_frame (gdb_stdlog, NULL);
 | 
      
         | 1246 |  |  |               fprintf_unfiltered (gdb_stdlog, " // no saved PC }\n");
 | 
      
         | 1247 |  |  |             }
 | 
      
         | 1248 |  |  |  
 | 
      
         | 1249 |  |  |           this_frame->stop_reason = UNWIND_NO_SAVED_PC;
 | 
      
         | 1250 |  |  |           this_frame->prev = NULL;
 | 
      
         | 1251 |  |  |           return NULL;
 | 
      
         | 1252 |  |  |         }
 | 
      
         | 1253 |  |  |     }
 | 
      
         | 1254 |  |  |  
 | 
      
         | 1255 |  |  |   /* Allocate the new frame but do not wire it in to the frame chain.
 | 
      
         | 1256 |  |  |      Some (bad) code in INIT_FRAME_EXTRA_INFO tries to look along
 | 
      
         | 1257 |  |  |      frame->next to pull some fancy tricks (of course such code is, by
 | 
      
         | 1258 |  |  |      definition, recursive).  Try to prevent it.
 | 
      
         | 1259 |  |  |  
 | 
      
         | 1260 |  |  |      There is no reason to worry about memory leaks, should the
 | 
      
         | 1261 |  |  |      remainder of the function fail.  The allocated memory will be
 | 
      
         | 1262 |  |  |      quickly reclaimed when the frame cache is flushed, and the `we've
 | 
      
         | 1263 |  |  |      been here before' check above will stop repeated memory
 | 
      
         | 1264 |  |  |      allocation calls.  */
 | 
      
         | 1265 |  |  |   prev_frame = FRAME_OBSTACK_ZALLOC (struct frame_info);
 | 
      
         | 1266 |  |  |   prev_frame->level = this_frame->level + 1;
 | 
      
         | 1267 |  |  |  
 | 
      
         | 1268 |  |  |   /* Don't yet compute ->unwind (and hence ->type).  It is computed
 | 
      
         | 1269 |  |  |      on-demand in get_frame_type, frame_register_unwind, and
 | 
      
         | 1270 |  |  |      get_frame_id.  */
 | 
      
         | 1271 |  |  |  
 | 
      
         | 1272 |  |  |   /* Don't yet compute the frame's ID.  It is computed on-demand by
 | 
      
         | 1273 |  |  |      get_frame_id().  */
 | 
      
         | 1274 |  |  |  
 | 
      
         | 1275 |  |  |   /* The unwound frame ID is validate at the start of this function,
 | 
      
         | 1276 |  |  |      as part of the logic to decide if that frame should be further
 | 
      
         | 1277 |  |  |      unwound, and not here while the prev frame is being created.
 | 
      
         | 1278 |  |  |      Doing this makes it possible for the user to examine a frame that
 | 
      
         | 1279 |  |  |      has an invalid frame ID.
 | 
      
         | 1280 |  |  |  
 | 
      
         | 1281 |  |  |      Some very old VAX code noted: [...]  For the sake of argument,
 | 
      
         | 1282 |  |  |      suppose that the stack is somewhat trashed (which is one reason
 | 
      
         | 1283 |  |  |      that "info frame" exists).  So, return 0 (indicating we don't
 | 
      
         | 1284 |  |  |      know the address of the arglist) if we don't know what frame this
 | 
      
         | 1285 |  |  |      frame calls.  */
 | 
      
         | 1286 |  |  |  
 | 
      
         | 1287 |  |  |   /* Link it in.  */
 | 
      
         | 1288 |  |  |   this_frame->prev = prev_frame;
 | 
      
         | 1289 |  |  |   prev_frame->next = this_frame;
 | 
      
         | 1290 |  |  |  
 | 
      
         | 1291 |  |  |   if (frame_debug)
 | 
      
         | 1292 |  |  |     {
 | 
      
         | 1293 |  |  |       fprintf_unfiltered (gdb_stdlog, "-> ");
 | 
      
         | 1294 |  |  |       fprint_frame (gdb_stdlog, prev_frame);
 | 
      
         | 1295 |  |  |       fprintf_unfiltered (gdb_stdlog, " }\n");
 | 
      
         | 1296 |  |  |     }
 | 
      
         | 1297 |  |  |  
 | 
      
         | 1298 |  |  |   return prev_frame;
 | 
      
         | 1299 |  |  | }
 | 
      
         | 1300 |  |  |  
 | 
      
         | 1301 |  |  | /* Debug routine to print a NULL frame being returned.  */
 | 
      
         | 1302 |  |  |  
 | 
      
         | 1303 |  |  | static void
 | 
      
         | 1304 |  |  | frame_debug_got_null_frame (struct ui_file *file,
 | 
      
         | 1305 |  |  |                             struct frame_info *this_frame,
 | 
      
         | 1306 |  |  |                             const char *reason)
 | 
      
         | 1307 |  |  | {
 | 
      
         | 1308 |  |  |   if (frame_debug)
 | 
      
         | 1309 |  |  |     {
 | 
      
         | 1310 |  |  |       fprintf_unfiltered (gdb_stdlog, "{ get_prev_frame (this_frame=");
 | 
      
         | 1311 |  |  |       if (this_frame != NULL)
 | 
      
         | 1312 |  |  |         fprintf_unfiltered (gdb_stdlog, "%d", this_frame->level);
 | 
      
         | 1313 |  |  |       else
 | 
      
         | 1314 |  |  |         fprintf_unfiltered (gdb_stdlog, "<NULL>");
 | 
      
         | 1315 |  |  |       fprintf_unfiltered (gdb_stdlog, ") -> // %s}\n", reason);
 | 
      
         | 1316 |  |  |     }
 | 
      
         | 1317 |  |  | }
 | 
      
         | 1318 |  |  |  
 | 
      
         | 1319 |  |  | /* Is this (non-sentinel) frame in the "main"() function?  */
 | 
      
         | 1320 |  |  |  
 | 
      
         | 1321 |  |  | static int
 | 
      
         | 1322 |  |  | inside_main_func (struct frame_info *this_frame)
 | 
      
         | 1323 |  |  | {
 | 
      
         | 1324 |  |  |   struct minimal_symbol *msymbol;
 | 
      
         | 1325 |  |  |   CORE_ADDR maddr;
 | 
      
         | 1326 |  |  |  
 | 
      
         | 1327 |  |  |   if (symfile_objfile == 0)
 | 
      
         | 1328 |  |  |     return 0;
 | 
      
         | 1329 |  |  |   msymbol = lookup_minimal_symbol (main_name (), NULL, symfile_objfile);
 | 
      
         | 1330 |  |  |   if (msymbol == NULL)
 | 
      
         | 1331 |  |  |     return 0;
 | 
      
         | 1332 |  |  |   /* Make certain that the code, and not descriptor, address is
 | 
      
         | 1333 |  |  |      returned.  */
 | 
      
         | 1334 |  |  |   maddr = gdbarch_convert_from_func_ptr_addr (get_frame_arch (this_frame),
 | 
      
         | 1335 |  |  |                                               SYMBOL_VALUE_ADDRESS (msymbol),
 | 
      
         | 1336 |  |  |                                               ¤t_target);
 | 
      
         | 1337 |  |  |   return maddr == get_frame_func (this_frame);
 | 
      
         | 1338 |  |  | }
 | 
      
         | 1339 |  |  |  
 | 
      
         | 1340 |  |  | /* Test whether THIS_FRAME is inside the process entry point function.  */
 | 
      
         | 1341 |  |  |  
 | 
      
         | 1342 |  |  | static int
 | 
      
         | 1343 |  |  | inside_entry_func (struct frame_info *this_frame)
 | 
      
         | 1344 |  |  | {
 | 
      
         | 1345 |  |  |   return (get_frame_func (this_frame) == entry_point_address ());
 | 
      
         | 1346 |  |  | }
 | 
      
         | 1347 |  |  |  
 | 
      
         | 1348 |  |  | /* Return a structure containing various interesting information about
 | 
      
         | 1349 |  |  |    the frame that called THIS_FRAME.  Returns NULL if there is entier
 | 
      
         | 1350 |  |  |    no such frame or the frame fails any of a set of target-independent
 | 
      
         | 1351 |  |  |    condition that should terminate the frame chain (e.g., as unwinding
 | 
      
         | 1352 |  |  |    past main()).
 | 
      
         | 1353 |  |  |  
 | 
      
         | 1354 |  |  |    This function should not contain target-dependent tests, such as
 | 
      
         | 1355 |  |  |    checking whether the program-counter is zero.  */
 | 
      
         | 1356 |  |  |  
 | 
      
         | 1357 |  |  | struct frame_info *
 | 
      
         | 1358 |  |  | get_prev_frame (struct frame_info *this_frame)
 | 
      
         | 1359 |  |  | {
 | 
      
         | 1360 |  |  |   struct frame_info *prev_frame;
 | 
      
         | 1361 |  |  |  
 | 
      
         | 1362 |  |  |   /* Return the inner-most frame, when the caller passes in NULL.  */
 | 
      
         | 1363 |  |  |   /* NOTE: cagney/2002-11-09: Not sure how this would happen.  The
 | 
      
         | 1364 |  |  |      caller should have previously obtained a valid frame using
 | 
      
         | 1365 |  |  |      get_selected_frame() and then called this code - only possibility
 | 
      
         | 1366 |  |  |      I can think of is code behaving badly.
 | 
      
         | 1367 |  |  |  
 | 
      
         | 1368 |  |  |      NOTE: cagney/2003-01-10: Talk about code behaving badly.  Check
 | 
      
         | 1369 |  |  |      block_innermost_frame().  It does the sequence: frame = NULL;
 | 
      
         | 1370 |  |  |      while (1) { frame = get_prev_frame (frame); .... }.  Ulgh!  Why
 | 
      
         | 1371 |  |  |      it couldn't be written better, I don't know.
 | 
      
         | 1372 |  |  |  
 | 
      
         | 1373 |  |  |      NOTE: cagney/2003-01-11: I suspect what is happening in
 | 
      
         | 1374 |  |  |      block_innermost_frame() is, when the target has no state
 | 
      
         | 1375 |  |  |      (registers, memory, ...), it is still calling this function.  The
 | 
      
         | 1376 |  |  |      assumption being that this function will return NULL indicating
 | 
      
         | 1377 |  |  |      that a frame isn't possible, rather than checking that the target
 | 
      
         | 1378 |  |  |      has state and then calling get_current_frame() and
 | 
      
         | 1379 |  |  |      get_prev_frame().  This is a guess mind.  */
 | 
      
         | 1380 |  |  |   if (this_frame == NULL)
 | 
      
         | 1381 |  |  |     {
 | 
      
         | 1382 |  |  |       /* NOTE: cagney/2002-11-09: There was a code segment here that
 | 
      
         | 1383 |  |  |          would error out when CURRENT_FRAME was NULL.  The comment
 | 
      
         | 1384 |  |  |          that went with it made the claim ...
 | 
      
         | 1385 |  |  |  
 | 
      
         | 1386 |  |  |          ``This screws value_of_variable, which just wants a nice
 | 
      
         | 1387 |  |  |          clean NULL return from block_innermost_frame if there are no
 | 
      
         | 1388 |  |  |          frames.  I don't think I've ever seen this message happen
 | 
      
         | 1389 |  |  |          otherwise.  And returning NULL here is a perfectly legitimate
 | 
      
         | 1390 |  |  |          thing to do.''
 | 
      
         | 1391 |  |  |  
 | 
      
         | 1392 |  |  |          Per the above, this code shouldn't even be called with a NULL
 | 
      
         | 1393 |  |  |          THIS_FRAME.  */
 | 
      
         | 1394 |  |  |       frame_debug_got_null_frame (gdb_stdlog, this_frame, "this_frame NULL");
 | 
      
         | 1395 |  |  |       return current_frame;
 | 
      
         | 1396 |  |  |     }
 | 
      
         | 1397 |  |  |  
 | 
      
         | 1398 |  |  |   /* There is always a frame.  If this assertion fails, suspect that
 | 
      
         | 1399 |  |  |      something should be calling get_selected_frame() or
 | 
      
         | 1400 |  |  |      get_current_frame().  */
 | 
      
         | 1401 |  |  |   gdb_assert (this_frame != NULL);
 | 
      
         | 1402 |  |  |  
 | 
      
         | 1403 |  |  |   /* tausq/2004-12-07: Dummy frames are skipped because it doesn't make much
 | 
      
         | 1404 |  |  |      sense to stop unwinding at a dummy frame.  One place where a dummy
 | 
      
         | 1405 |  |  |      frame may have an address "inside_main_func" is on HPUX.  On HPUX, the
 | 
      
         | 1406 |  |  |      pcsqh register (space register for the instruction at the head of the
 | 
      
         | 1407 |  |  |      instruction queue) cannot be written directly; the only way to set it
 | 
      
         | 1408 |  |  |      is to branch to code that is in the target space.  In order to implement
 | 
      
         | 1409 |  |  |      frame dummies on HPUX, the called function is made to jump back to where
 | 
      
         | 1410 |  |  |      the inferior was when the user function was called.  If gdb was inside
 | 
      
         | 1411 |  |  |      the main function when we created the dummy frame, the dummy frame will
 | 
      
         | 1412 |  |  |      point inside the main function.  */
 | 
      
         | 1413 |  |  |   if (this_frame->level >= 0
 | 
      
         | 1414 |  |  |       && get_frame_type (this_frame) != DUMMY_FRAME
 | 
      
         | 1415 |  |  |       && !backtrace_past_main
 | 
      
         | 1416 |  |  |       && inside_main_func (this_frame))
 | 
      
         | 1417 |  |  |     /* Don't unwind past main().  Note, this is done _before_ the
 | 
      
         | 1418 |  |  |        frame has been marked as previously unwound.  That way if the
 | 
      
         | 1419 |  |  |        user later decides to enable unwinds past main(), that will
 | 
      
         | 1420 |  |  |        automatically happen.  */
 | 
      
         | 1421 |  |  |     {
 | 
      
         | 1422 |  |  |       frame_debug_got_null_frame (gdb_stdlog, this_frame, "inside main func");
 | 
      
         | 1423 |  |  |       return NULL;
 | 
      
         | 1424 |  |  |     }
 | 
      
         | 1425 |  |  |  
 | 
      
         | 1426 |  |  |   /* If the user's backtrace limit has been exceeded, stop.  We must
 | 
      
         | 1427 |  |  |      add two to the current level; one of those accounts for backtrace_limit
 | 
      
         | 1428 |  |  |      being 1-based and the level being 0-based, and the other accounts for
 | 
      
         | 1429 |  |  |      the level of the new frame instead of the level of the current
 | 
      
         | 1430 |  |  |      frame.  */
 | 
      
         | 1431 |  |  |   if (this_frame->level + 2 > backtrace_limit)
 | 
      
         | 1432 |  |  |     {
 | 
      
         | 1433 |  |  |       frame_debug_got_null_frame (gdb_stdlog, this_frame,
 | 
      
         | 1434 |  |  |                                   "backtrace limit exceeded");
 | 
      
         | 1435 |  |  |       return NULL;
 | 
      
         | 1436 |  |  |     }
 | 
      
         | 1437 |  |  |  
 | 
      
         | 1438 |  |  |   /* If we're already inside the entry function for the main objfile,
 | 
      
         | 1439 |  |  |      then it isn't valid.  Don't apply this test to a dummy frame -
 | 
      
         | 1440 |  |  |      dummy frame PCs typically land in the entry func.  Don't apply
 | 
      
         | 1441 |  |  |      this test to the sentinel frame.  Sentinel frames should always
 | 
      
         | 1442 |  |  |      be allowed to unwind.  */
 | 
      
         | 1443 |  |  |   /* NOTE: cagney/2003-07-07: Fixed a bug in inside_main_func() -
 | 
      
         | 1444 |  |  |      wasn't checking for "main" in the minimal symbols.  With that
 | 
      
         | 1445 |  |  |      fixed asm-source tests now stop in "main" instead of halting the
 | 
      
         | 1446 |  |  |      backtrace in weird and wonderful ways somewhere inside the entry
 | 
      
         | 1447 |  |  |      file.  Suspect that tests for inside the entry file/func were
 | 
      
         | 1448 |  |  |      added to work around that (now fixed) case.  */
 | 
      
         | 1449 |  |  |   /* NOTE: cagney/2003-07-15: danielj (if I'm reading it right)
 | 
      
         | 1450 |  |  |      suggested having the inside_entry_func test use the
 | 
      
         | 1451 |  |  |      inside_main_func() msymbol trick (along with entry_point_address()
 | 
      
         | 1452 |  |  |      I guess) to determine the address range of the start function.
 | 
      
         | 1453 |  |  |      That should provide a far better stopper than the current
 | 
      
         | 1454 |  |  |      heuristics.  */
 | 
      
         | 1455 |  |  |   /* NOTE: tausq/2004-10-09: this is needed if, for example, the compiler
 | 
      
         | 1456 |  |  |      applied tail-call optimizations to main so that a function called
 | 
      
         | 1457 |  |  |      from main returns directly to the caller of main.  Since we don't
 | 
      
         | 1458 |  |  |      stop at main, we should at least stop at the entry point of the
 | 
      
         | 1459 |  |  |      application.  */
 | 
      
         | 1460 |  |  |   if (!backtrace_past_entry
 | 
      
         | 1461 |  |  |       && get_frame_type (this_frame) != DUMMY_FRAME && this_frame->level >= 0
 | 
      
         | 1462 |  |  |       && inside_entry_func (this_frame))
 | 
      
         | 1463 |  |  |     {
 | 
      
         | 1464 |  |  |       frame_debug_got_null_frame (gdb_stdlog, this_frame, "inside entry func");
 | 
      
         | 1465 |  |  |       return NULL;
 | 
      
         | 1466 |  |  |     }
 | 
      
         | 1467 |  |  |  
 | 
      
         | 1468 |  |  |   /* Assume that the only way to get a zero PC is through something
 | 
      
         | 1469 |  |  |      like a SIGSEGV or a dummy frame, and hence that NORMAL frames
 | 
      
         | 1470 |  |  |      will never unwind a zero PC.  */
 | 
      
         | 1471 |  |  |   if (this_frame->level > 0
 | 
      
         | 1472 |  |  |       && get_frame_type (this_frame) == NORMAL_FRAME
 | 
      
         | 1473 |  |  |       && get_frame_type (get_next_frame (this_frame)) == NORMAL_FRAME
 | 
      
         | 1474 |  |  |       && get_frame_pc (this_frame) == 0)
 | 
      
         | 1475 |  |  |     {
 | 
      
         | 1476 |  |  |       frame_debug_got_null_frame (gdb_stdlog, this_frame, "zero PC");
 | 
      
         | 1477 |  |  |       return NULL;
 | 
      
         | 1478 |  |  |     }
 | 
      
         | 1479 |  |  |  
 | 
      
         | 1480 |  |  |   return get_prev_frame_1 (this_frame);
 | 
      
         | 1481 |  |  | }
 | 
      
         | 1482 |  |  |  
 | 
      
         | 1483 |  |  | CORE_ADDR
 | 
      
         | 1484 |  |  | get_frame_pc (struct frame_info *frame)
 | 
      
         | 1485 |  |  | {
 | 
      
         | 1486 |  |  |   gdb_assert (frame->next != NULL);
 | 
      
         | 1487 |  |  |   return frame_pc_unwind (frame->next);
 | 
      
         | 1488 |  |  | }
 | 
      
         | 1489 |  |  |  
 | 
      
         | 1490 |  |  | /* Return an address that falls within NEXT_FRAME's caller's code
 | 
      
         | 1491 |  |  |    block, assuming that the caller is a THIS_TYPE frame.  */
 | 
      
         | 1492 |  |  |  
 | 
      
         | 1493 |  |  | CORE_ADDR
 | 
      
         | 1494 |  |  | frame_unwind_address_in_block (struct frame_info *next_frame,
 | 
      
         | 1495 |  |  |                                enum frame_type this_type)
 | 
      
         | 1496 |  |  | {
 | 
      
         | 1497 |  |  |   /* A draft address.  */
 | 
      
         | 1498 |  |  |   CORE_ADDR pc = frame_pc_unwind (next_frame);
 | 
      
         | 1499 |  |  |  
 | 
      
         | 1500 |  |  |   /* If NEXT_FRAME was called by a signal frame or dummy frame, then
 | 
      
         | 1501 |  |  |      we shold not adjust the unwound PC.  These frames may not call
 | 
      
         | 1502 |  |  |      their next frame in the normal way; the operating system or GDB
 | 
      
         | 1503 |  |  |      may have pushed their resume address manually onto the stack, so
 | 
      
         | 1504 |  |  |      it may be the very first instruction.  Even if the resume address
 | 
      
         | 1505 |  |  |      was not manually pushed, they expect to be returned to.  */
 | 
      
         | 1506 |  |  |   if (this_type != NORMAL_FRAME)
 | 
      
         | 1507 |  |  |     return pc;
 | 
      
         | 1508 |  |  |  
 | 
      
         | 1509 |  |  |   /* If THIS frame is not inner most (i.e., NEXT isn't the sentinel),
 | 
      
         | 1510 |  |  |      and NEXT is `normal' (i.e., not a sigtramp, dummy, ....) THIS
 | 
      
         | 1511 |  |  |      frame's PC ends up pointing at the instruction fallowing the
 | 
      
         | 1512 |  |  |      "call".  Adjust that PC value so that it falls on the call
 | 
      
         | 1513 |  |  |      instruction (which, hopefully, falls within THIS frame's code
 | 
      
         | 1514 |  |  |      block).  So far it's proved to be a very good approximation.  See
 | 
      
         | 1515 |  |  |      get_frame_type() for why ->type can't be used.  */
 | 
      
         | 1516 |  |  |   if (next_frame->level >= 0
 | 
      
         | 1517 |  |  |       && get_frame_type (next_frame) == NORMAL_FRAME)
 | 
      
         | 1518 |  |  |     --pc;
 | 
      
         | 1519 |  |  |   return pc;
 | 
      
         | 1520 |  |  | }
 | 
      
         | 1521 |  |  |  
 | 
      
         | 1522 |  |  | CORE_ADDR
 | 
      
         | 1523 |  |  | get_frame_address_in_block (struct frame_info *this_frame)
 | 
      
         | 1524 |  |  | {
 | 
      
         | 1525 |  |  |   return frame_unwind_address_in_block (this_frame->next,
 | 
      
         | 1526 |  |  |                                         get_frame_type (this_frame));
 | 
      
         | 1527 |  |  | }
 | 
      
         | 1528 |  |  |  
 | 
      
         | 1529 |  |  | static int
 | 
      
         | 1530 |  |  | pc_notcurrent (struct frame_info *frame)
 | 
      
         | 1531 |  |  | {
 | 
      
         | 1532 |  |  |   /* If FRAME is not the innermost frame, that normally means that
 | 
      
         | 1533 |  |  |      FRAME->pc points at the return instruction (which is *after* the
 | 
      
         | 1534 |  |  |      call instruction), and we want to get the line containing the
 | 
      
         | 1535 |  |  |      call (because the call is where the user thinks the program is).
 | 
      
         | 1536 |  |  |      However, if the next frame is either a SIGTRAMP_FRAME or a
 | 
      
         | 1537 |  |  |      DUMMY_FRAME, then the next frame will contain a saved interrupt
 | 
      
         | 1538 |  |  |      PC and such a PC indicates the current (rather than next)
 | 
      
         | 1539 |  |  |      instruction/line, consequently, for such cases, want to get the
 | 
      
         | 1540 |  |  |      line containing fi->pc.  */
 | 
      
         | 1541 |  |  |   struct frame_info *next = get_next_frame (frame);
 | 
      
         | 1542 |  |  |   int notcurrent = (next != NULL && get_frame_type (next) == NORMAL_FRAME);
 | 
      
         | 1543 |  |  |   return notcurrent;
 | 
      
         | 1544 |  |  | }
 | 
      
         | 1545 |  |  |  
 | 
      
         | 1546 |  |  | void
 | 
      
         | 1547 |  |  | find_frame_sal (struct frame_info *frame, struct symtab_and_line *sal)
 | 
      
         | 1548 |  |  | {
 | 
      
         | 1549 |  |  |   (*sal) = find_pc_line (get_frame_pc (frame), pc_notcurrent (frame));
 | 
      
         | 1550 |  |  | }
 | 
      
         | 1551 |  |  |  
 | 
      
         | 1552 |  |  | /* Per "frame.h", return the ``address'' of the frame.  Code should
 | 
      
         | 1553 |  |  |    really be using get_frame_id().  */
 | 
      
         | 1554 |  |  | CORE_ADDR
 | 
      
         | 1555 |  |  | get_frame_base (struct frame_info *fi)
 | 
      
         | 1556 |  |  | {
 | 
      
         | 1557 |  |  |   return get_frame_id (fi).stack_addr;
 | 
      
         | 1558 |  |  | }
 | 
      
         | 1559 |  |  |  
 | 
      
         | 1560 |  |  | /* High-level offsets into the frame.  Used by the debug info.  */
 | 
      
         | 1561 |  |  |  
 | 
      
         | 1562 |  |  | CORE_ADDR
 | 
      
         | 1563 |  |  | get_frame_base_address (struct frame_info *fi)
 | 
      
         | 1564 |  |  | {
 | 
      
         | 1565 |  |  |   if (get_frame_type (fi) != NORMAL_FRAME)
 | 
      
         | 1566 |  |  |     return 0;
 | 
      
         | 1567 |  |  |   if (fi->base == NULL)
 | 
      
         | 1568 |  |  |     fi->base = frame_base_find_by_frame (fi->next);
 | 
      
         | 1569 |  |  |   /* Sneaky: If the low-level unwind and high-level base code share a
 | 
      
         | 1570 |  |  |      common unwinder, let them share the prologue cache.  */
 | 
      
         | 1571 |  |  |   if (fi->base->unwind == fi->unwind)
 | 
      
         | 1572 |  |  |     return fi->base->this_base (fi->next, &fi->prologue_cache);
 | 
      
         | 1573 |  |  |   return fi->base->this_base (fi->next, &fi->base_cache);
 | 
      
         | 1574 |  |  | }
 | 
      
         | 1575 |  |  |  
 | 
      
         | 1576 |  |  | CORE_ADDR
 | 
      
         | 1577 |  |  | get_frame_locals_address (struct frame_info *fi)
 | 
      
         | 1578 |  |  | {
 | 
      
         | 1579 |  |  |   void **cache;
 | 
      
         | 1580 |  |  |   if (get_frame_type (fi) != NORMAL_FRAME)
 | 
      
         | 1581 |  |  |     return 0;
 | 
      
         | 1582 |  |  |   /* If there isn't a frame address method, find it.  */
 | 
      
         | 1583 |  |  |   if (fi->base == NULL)
 | 
      
         | 1584 |  |  |     fi->base = frame_base_find_by_frame (fi->next);
 | 
      
         | 1585 |  |  |   /* Sneaky: If the low-level unwind and high-level base code share a
 | 
      
         | 1586 |  |  |      common unwinder, let them share the prologue cache.  */
 | 
      
         | 1587 |  |  |   if (fi->base->unwind == fi->unwind)
 | 
      
         | 1588 |  |  |     cache = &fi->prologue_cache;
 | 
      
         | 1589 |  |  |   else
 | 
      
         | 1590 |  |  |     cache = &fi->base_cache;
 | 
      
         | 1591 |  |  |   return fi->base->this_locals (fi->next, cache);
 | 
      
         | 1592 |  |  | }
 | 
      
         | 1593 |  |  |  
 | 
      
         | 1594 |  |  | CORE_ADDR
 | 
      
         | 1595 |  |  | get_frame_args_address (struct frame_info *fi)
 | 
      
         | 1596 |  |  | {
 | 
      
         | 1597 |  |  |   void **cache;
 | 
      
         | 1598 |  |  |   if (get_frame_type (fi) != NORMAL_FRAME)
 | 
      
         | 1599 |  |  |     return 0;
 | 
      
         | 1600 |  |  |   /* If there isn't a frame address method, find it.  */
 | 
      
         | 1601 |  |  |   if (fi->base == NULL)
 | 
      
         | 1602 |  |  |     fi->base = frame_base_find_by_frame (fi->next);
 | 
      
         | 1603 |  |  |   /* Sneaky: If the low-level unwind and high-level base code share a
 | 
      
         | 1604 |  |  |      common unwinder, let them share the prologue cache.  */
 | 
      
         | 1605 |  |  |   if (fi->base->unwind == fi->unwind)
 | 
      
         | 1606 |  |  |     cache = &fi->prologue_cache;
 | 
      
         | 1607 |  |  |   else
 | 
      
         | 1608 |  |  |     cache = &fi->base_cache;
 | 
      
         | 1609 |  |  |   return fi->base->this_args (fi->next, cache);
 | 
      
         | 1610 |  |  | }
 | 
      
         | 1611 |  |  |  
 | 
      
         | 1612 |  |  | /* Level of the selected frame: 0 for innermost, 1 for its caller, ...
 | 
      
         | 1613 |  |  |    or -1 for a NULL frame.  */
 | 
      
         | 1614 |  |  |  
 | 
      
         | 1615 |  |  | int
 | 
      
         | 1616 |  |  | frame_relative_level (struct frame_info *fi)
 | 
      
         | 1617 |  |  | {
 | 
      
         | 1618 |  |  |   if (fi == NULL)
 | 
      
         | 1619 |  |  |     return -1;
 | 
      
         | 1620 |  |  |   else
 | 
      
         | 1621 |  |  |     return fi->level;
 | 
      
         | 1622 |  |  | }
 | 
      
         | 1623 |  |  |  
 | 
      
         | 1624 |  |  | enum frame_type
 | 
      
         | 1625 |  |  | get_frame_type (struct frame_info *frame)
 | 
      
         | 1626 |  |  | {
 | 
      
         | 1627 |  |  |   if (frame->unwind == NULL)
 | 
      
         | 1628 |  |  |     /* Initialize the frame's unwinder because that's what
 | 
      
         | 1629 |  |  |        provides the frame's type.  */
 | 
      
         | 1630 |  |  |     frame->unwind = frame_unwind_find_by_frame (frame->next,
 | 
      
         | 1631 |  |  |                                                 &frame->prologue_cache);
 | 
      
         | 1632 |  |  |   return frame->unwind->type;
 | 
      
         | 1633 |  |  | }
 | 
      
         | 1634 |  |  |  
 | 
      
         | 1635 |  |  | void
 | 
      
         | 1636 |  |  | deprecated_update_frame_pc_hack (struct frame_info *frame, CORE_ADDR pc)
 | 
      
         | 1637 |  |  | {
 | 
      
         | 1638 |  |  |   if (frame_debug)
 | 
      
         | 1639 |  |  |     fprintf_unfiltered (gdb_stdlog,
 | 
      
         | 1640 |  |  |                         "{ deprecated_update_frame_pc_hack (frame=%d,pc=0x%s) }\n",
 | 
      
         | 1641 |  |  |                         frame->level, paddr_nz (pc));
 | 
      
         | 1642 |  |  |   /* NOTE: cagney/2003-03-11: Some architectures (e.g., Arm) are
 | 
      
         | 1643 |  |  |      maintaining a locally allocated frame object.  Since such frames
 | 
      
         | 1644 |  |  |      are not in the frame chain, it isn't possible to assume that the
 | 
      
         | 1645 |  |  |      frame has a next.  Sigh.  */
 | 
      
         | 1646 |  |  |   if (frame->next != NULL)
 | 
      
         | 1647 |  |  |     {
 | 
      
         | 1648 |  |  |       /* While we're at it, update this frame's cached PC value, found
 | 
      
         | 1649 |  |  |          in the next frame.  Oh for the day when "struct frame_info"
 | 
      
         | 1650 |  |  |          is opaque and this hack on hack can just go away.  */
 | 
      
         | 1651 |  |  |       frame->next->prev_pc.value = pc;
 | 
      
         | 1652 |  |  |       frame->next->prev_pc.p = 1;
 | 
      
         | 1653 |  |  |     }
 | 
      
         | 1654 |  |  | }
 | 
      
         | 1655 |  |  |  
 | 
      
         | 1656 |  |  | void
 | 
      
         | 1657 |  |  | deprecated_update_frame_base_hack (struct frame_info *frame, CORE_ADDR base)
 | 
      
         | 1658 |  |  | {
 | 
      
         | 1659 |  |  |   if (frame_debug)
 | 
      
         | 1660 |  |  |     fprintf_unfiltered (gdb_stdlog,
 | 
      
         | 1661 |  |  |                         "{ deprecated_update_frame_base_hack (frame=%d,base=0x%s) }\n",
 | 
      
         | 1662 |  |  |                         frame->level, paddr_nz (base));
 | 
      
         | 1663 |  |  |   /* See comment in "frame.h".  */
 | 
      
         | 1664 |  |  |   frame->this_id.value.stack_addr = base;
 | 
      
         | 1665 |  |  | }
 | 
      
         | 1666 |  |  |  
 | 
      
         | 1667 |  |  | /* Memory access methods.  */
 | 
      
         | 1668 |  |  |  
 | 
      
         | 1669 |  |  | void
 | 
      
         | 1670 |  |  | get_frame_memory (struct frame_info *this_frame, CORE_ADDR addr,
 | 
      
         | 1671 |  |  |                   gdb_byte *buf, int len)
 | 
      
         | 1672 |  |  | {
 | 
      
         | 1673 |  |  |   read_memory (addr, buf, len);
 | 
      
         | 1674 |  |  | }
 | 
      
         | 1675 |  |  |  
 | 
      
         | 1676 |  |  | LONGEST
 | 
      
         | 1677 |  |  | get_frame_memory_signed (struct frame_info *this_frame, CORE_ADDR addr,
 | 
      
         | 1678 |  |  |                          int len)
 | 
      
         | 1679 |  |  | {
 | 
      
         | 1680 |  |  |   return read_memory_integer (addr, len);
 | 
      
         | 1681 |  |  | }
 | 
      
         | 1682 |  |  |  
 | 
      
         | 1683 |  |  | ULONGEST
 | 
      
         | 1684 |  |  | get_frame_memory_unsigned (struct frame_info *this_frame, CORE_ADDR addr,
 | 
      
         | 1685 |  |  |                            int len)
 | 
      
         | 1686 |  |  | {
 | 
      
         | 1687 |  |  |   return read_memory_unsigned_integer (addr, len);
 | 
      
         | 1688 |  |  | }
 | 
      
         | 1689 |  |  |  
 | 
      
         | 1690 |  |  | int
 | 
      
         | 1691 |  |  | safe_frame_unwind_memory (struct frame_info *this_frame,
 | 
      
         | 1692 |  |  |                           CORE_ADDR addr, gdb_byte *buf, int len)
 | 
      
         | 1693 |  |  | {
 | 
      
         | 1694 |  |  |   /* NOTE: read_memory_nobpt returns zero on success!  */
 | 
      
         | 1695 |  |  |   return !read_memory_nobpt (addr, buf, len);
 | 
      
         | 1696 |  |  | }
 | 
      
         | 1697 |  |  |  
 | 
      
         | 1698 |  |  | /* Architecture method.  */
 | 
      
         | 1699 |  |  |  
 | 
      
         | 1700 |  |  | struct gdbarch *
 | 
      
         | 1701 |  |  | get_frame_arch (struct frame_info *this_frame)
 | 
      
         | 1702 |  |  | {
 | 
      
         | 1703 |  |  |   return current_gdbarch;
 | 
      
         | 1704 |  |  | }
 | 
      
         | 1705 |  |  |  
 | 
      
         | 1706 |  |  | /* Stack pointer methods.  */
 | 
      
         | 1707 |  |  |  
 | 
      
         | 1708 |  |  | CORE_ADDR
 | 
      
         | 1709 |  |  | get_frame_sp (struct frame_info *this_frame)
 | 
      
         | 1710 |  |  | {
 | 
      
         | 1711 |  |  |   return frame_sp_unwind (this_frame->next);
 | 
      
         | 1712 |  |  | }
 | 
      
         | 1713 |  |  |  
 | 
      
         | 1714 |  |  | CORE_ADDR
 | 
      
         | 1715 |  |  | frame_sp_unwind (struct frame_info *next_frame)
 | 
      
         | 1716 |  |  | {
 | 
      
         | 1717 |  |  |   struct gdbarch *gdbarch = get_frame_arch (next_frame);
 | 
      
         | 1718 |  |  |   /* Normality - an architecture that provides a way of obtaining any
 | 
      
         | 1719 |  |  |      frame inner-most address.  */
 | 
      
         | 1720 |  |  |   if (gdbarch_unwind_sp_p (gdbarch))
 | 
      
         | 1721 |  |  |     return gdbarch_unwind_sp (gdbarch, next_frame);
 | 
      
         | 1722 |  |  |   /* Now things are really are grim.  Hope that the value returned by
 | 
      
         | 1723 |  |  |      the gdbarch_sp_regnum register is meaningful.  */
 | 
      
         | 1724 |  |  |   if (gdbarch_sp_regnum (gdbarch) >= 0)
 | 
      
         | 1725 |  |  |     return frame_unwind_register_unsigned (next_frame,
 | 
      
         | 1726 |  |  |                                            gdbarch_sp_regnum (gdbarch));
 | 
      
         | 1727 |  |  |   internal_error (__FILE__, __LINE__, _("Missing unwind SP method"));
 | 
      
         | 1728 |  |  | }
 | 
      
         | 1729 |  |  |  
 | 
      
         | 1730 |  |  | /* Return the reason why we can't unwind past FRAME.  */
 | 
      
         | 1731 |  |  |  
 | 
      
         | 1732 |  |  | enum unwind_stop_reason
 | 
      
         | 1733 |  |  | get_frame_unwind_stop_reason (struct frame_info *frame)
 | 
      
         | 1734 |  |  | {
 | 
      
         | 1735 |  |  |   /* If we haven't tried to unwind past this point yet, then assume
 | 
      
         | 1736 |  |  |      that unwinding would succeed.  */
 | 
      
         | 1737 |  |  |   if (frame->prev_p == 0)
 | 
      
         | 1738 |  |  |     return UNWIND_NO_REASON;
 | 
      
         | 1739 |  |  |  
 | 
      
         | 1740 |  |  |   /* Otherwise, we set a reason when we succeeded (or failed) to
 | 
      
         | 1741 |  |  |      unwind.  */
 | 
      
         | 1742 |  |  |   return frame->stop_reason;
 | 
      
         | 1743 |  |  | }
 | 
      
         | 1744 |  |  |  
 | 
      
         | 1745 |  |  | /* Return a string explaining REASON.  */
 | 
      
         | 1746 |  |  |  
 | 
      
         | 1747 |  |  | const char *
 | 
      
         | 1748 |  |  | frame_stop_reason_string (enum unwind_stop_reason reason)
 | 
      
         | 1749 |  |  | {
 | 
      
         | 1750 |  |  |   switch (reason)
 | 
      
         | 1751 |  |  |     {
 | 
      
         | 1752 |  |  |     case UNWIND_NULL_ID:
 | 
      
         | 1753 |  |  |       return _("unwinder did not report frame ID");
 | 
      
         | 1754 |  |  |  
 | 
      
         | 1755 |  |  |     case UNWIND_INNER_ID:
 | 
      
         | 1756 |  |  |       return _("previous frame inner to this frame (corrupt stack?)");
 | 
      
         | 1757 |  |  |  
 | 
      
         | 1758 |  |  |     case UNWIND_SAME_ID:
 | 
      
         | 1759 |  |  |       return _("previous frame identical to this frame (corrupt stack?)");
 | 
      
         | 1760 |  |  |  
 | 
      
         | 1761 |  |  |     case UNWIND_NO_SAVED_PC:
 | 
      
         | 1762 |  |  |       return _("frame did not save the PC");
 | 
      
         | 1763 |  |  |  
 | 
      
         | 1764 |  |  |     case UNWIND_NO_REASON:
 | 
      
         | 1765 |  |  |     case UNWIND_FIRST_ERROR:
 | 
      
         | 1766 |  |  |     default:
 | 
      
         | 1767 |  |  |       internal_error (__FILE__, __LINE__,
 | 
      
         | 1768 |  |  |                       "Invalid frame stop reason");
 | 
      
         | 1769 |  |  |     }
 | 
      
         | 1770 |  |  | }
 | 
      
         | 1771 |  |  |  
 | 
      
         | 1772 |  |  | extern initialize_file_ftype _initialize_frame; /* -Wmissing-prototypes */
 | 
      
         | 1773 |  |  |  
 | 
      
         | 1774 |  |  | static struct cmd_list_element *set_backtrace_cmdlist;
 | 
      
         | 1775 |  |  | static struct cmd_list_element *show_backtrace_cmdlist;
 | 
      
         | 1776 |  |  |  
 | 
      
         | 1777 |  |  | static void
 | 
      
         | 1778 |  |  | set_backtrace_cmd (char *args, int from_tty)
 | 
      
         | 1779 |  |  | {
 | 
      
         | 1780 |  |  |   help_list (set_backtrace_cmdlist, "set backtrace ", -1, gdb_stdout);
 | 
      
         | 1781 |  |  | }
 | 
      
         | 1782 |  |  |  
 | 
      
         | 1783 |  |  | static void
 | 
      
         | 1784 |  |  | show_backtrace_cmd (char *args, int from_tty)
 | 
      
         | 1785 |  |  | {
 | 
      
         | 1786 |  |  |   cmd_show_list (show_backtrace_cmdlist, from_tty, "");
 | 
      
         | 1787 |  |  | }
 | 
      
         | 1788 |  |  |  
 | 
      
         | 1789 |  |  | void
 | 
      
         | 1790 |  |  | _initialize_frame (void)
 | 
      
         | 1791 |  |  | {
 | 
      
         | 1792 |  |  |   obstack_init (&frame_cache_obstack);
 | 
      
         | 1793 |  |  |  
 | 
      
         | 1794 |  |  |   observer_attach_target_changed (frame_observer_target_changed);
 | 
      
         | 1795 |  |  |  
 | 
      
         | 1796 |  |  |   add_prefix_cmd ("backtrace", class_maintenance, set_backtrace_cmd, _("\
 | 
      
         | 1797 |  |  | Set backtrace specific variables.\n\
 | 
      
         | 1798 |  |  | Configure backtrace variables such as the backtrace limit"),
 | 
      
         | 1799 |  |  |                   &set_backtrace_cmdlist, "set backtrace ",
 | 
      
         | 1800 |  |  |                   0/*allow-unknown*/, &setlist);
 | 
      
         | 1801 |  |  |   add_prefix_cmd ("backtrace", class_maintenance, show_backtrace_cmd, _("\
 | 
      
         | 1802 |  |  | Show backtrace specific variables\n\
 | 
      
         | 1803 |  |  | Show backtrace variables such as the backtrace limit"),
 | 
      
         | 1804 |  |  |                   &show_backtrace_cmdlist, "show backtrace ",
 | 
      
         | 1805 |  |  |                   0/*allow-unknown*/, &showlist);
 | 
      
         | 1806 |  |  |  
 | 
      
         | 1807 |  |  |   add_setshow_boolean_cmd ("past-main", class_obscure,
 | 
      
         | 1808 |  |  |                            &backtrace_past_main, _("\
 | 
      
         | 1809 |  |  | Set whether backtraces should continue past \"main\"."), _("\
 | 
      
         | 1810 |  |  | Show whether backtraces should continue past \"main\"."), _("\
 | 
      
         | 1811 |  |  | Normally the caller of \"main\" is not of interest, so GDB will terminate\n\
 | 
      
         | 1812 |  |  | the backtrace at \"main\".  Set this variable if you need to see the rest\n\
 | 
      
         | 1813 |  |  | of the stack trace."),
 | 
      
         | 1814 |  |  |                            NULL,
 | 
      
         | 1815 |  |  |                            show_backtrace_past_main,
 | 
      
         | 1816 |  |  |                            &set_backtrace_cmdlist,
 | 
      
         | 1817 |  |  |                            &show_backtrace_cmdlist);
 | 
      
         | 1818 |  |  |  
 | 
      
         | 1819 |  |  |   add_setshow_boolean_cmd ("past-entry", class_obscure,
 | 
      
         | 1820 |  |  |                            &backtrace_past_entry, _("\
 | 
      
         | 1821 |  |  | Set whether backtraces should continue past the entry point of a program."),
 | 
      
         | 1822 |  |  |                            _("\
 | 
      
         | 1823 |  |  | Show whether backtraces should continue past the entry point of a program."),
 | 
      
         | 1824 |  |  |                            _("\
 | 
      
         | 1825 |  |  | Normally there are no callers beyond the entry point of a program, so GDB\n\
 | 
      
         | 1826 |  |  | will terminate the backtrace there.  Set this variable if you need to see \n\
 | 
      
         | 1827 |  |  | the rest of the stack trace."),
 | 
      
         | 1828 |  |  |                            NULL,
 | 
      
         | 1829 |  |  |                            show_backtrace_past_entry,
 | 
      
         | 1830 |  |  |                            &set_backtrace_cmdlist,
 | 
      
         | 1831 |  |  |                            &show_backtrace_cmdlist);
 | 
      
         | 1832 |  |  |  
 | 
      
         | 1833 |  |  |   add_setshow_integer_cmd ("limit", class_obscure,
 | 
      
         | 1834 |  |  |                            &backtrace_limit, _("\
 | 
      
         | 1835 |  |  | Set an upper bound on the number of backtrace levels."), _("\
 | 
      
         | 1836 |  |  | Show the upper bound on the number of backtrace levels."), _("\
 | 
      
         | 1837 |  |  | No more than the specified number of frames can be displayed or examined.\n\
 | 
      
         | 1838 |  |  | Zero is unlimited."),
 | 
      
         | 1839 |  |  |                            NULL,
 | 
      
         | 1840 |  |  |                            show_backtrace_limit,
 | 
      
         | 1841 |  |  |                            &set_backtrace_cmdlist,
 | 
      
         | 1842 |  |  |                            &show_backtrace_cmdlist);
 | 
      
         | 1843 |  |  |  
 | 
      
         | 1844 |  |  |   /* Debug this files internals. */
 | 
      
         | 1845 |  |  |   add_setshow_zinteger_cmd ("frame", class_maintenance, &frame_debug,  _("\
 | 
      
         | 1846 |  |  | Set frame debugging."), _("\
 | 
      
         | 1847 |  |  | Show frame debugging."), _("\
 | 
      
         | 1848 |  |  | When non-zero, frame specific internal debugging is enabled."),
 | 
      
         | 1849 |  |  |                             NULL,
 | 
      
         | 1850 |  |  |                             show_frame_debug,
 | 
      
         | 1851 |  |  |                             &setdebuglist, &showdebuglist);
 | 
      
         | 1852 |  |  | }
 |