GDB (xrefs)
/tmp/gdb-8.1/gdb/infcall.c
Go to the documentation of this file.
1 /* Perform an inferior function call, for GDB, the GNU debugger.
2 
3  Copyright (C) 1986-2018 Free Software Foundation, Inc.
4 
5  This file is part of GDB.
6 
7  This program is free software; you can redistribute it and/or modify
8  it under the terms of the GNU General Public License as published by
9  the Free Software Foundation; either version 3 of the License, or
10  (at your option) any later version.
11 
12  This program is distributed in the hope that it will be useful,
13  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  GNU General Public License for more details.
16 
17  You should have received a copy of the GNU General Public License
18  along with this program. If not, see <http://www.gnu.org/licenses/>. */
19 
20 #include "defs.h"
21 #include "infcall.h"
22 #include "breakpoint.h"
23 #include "tracepoint.h"
24 #include "target.h"
25 #include "regcache.h"
26 #include "inferior.h"
27 #include "infrun.h"
28 #include "block.h"
29 #include "gdbcore.h"
30 #include "language.h"
31 #include "objfiles.h"
32 #include "gdbcmd.h"
33 #include "command.h"
34 #include "dummy-frame.h"
35 #include "ada-lang.h"
36 #include "gdbthread.h"
37 #include "event-top.h"
38 #include "observer.h"
39 #include "top.h"
40 #include "interps.h"
41 #include "thread-fsm.h"
42 
43 /* If we can't find a function's name from its address,
44  we print this instead. */
45 #define RAW_FUNCTION_ADDRESS_FORMAT "at 0x%s"
46 #define RAW_FUNCTION_ADDRESS_SIZE (sizeof (RAW_FUNCTION_ADDRESS_FORMAT) \
47  + 2 * sizeof (CORE_ADDR))
48 
49 /* NOTE: cagney/2003-04-16: What's the future of this code?
50 
51  GDB needs an asynchronous expression evaluator, that means an
52  asynchronous inferior function call implementation, and that in
53  turn means restructuring the code so that it is event driven. */
54 
55 /* How you should pass arguments to a function depends on whether it
56  was defined in K&R style or prototype style. If you define a
57  function using the K&R syntax that takes a `float' argument, then
58  callers must pass that argument as a `double'. If you define the
59  function using the prototype syntax, then you must pass the
60  argument as a `float', with no promotion.
61 
62  Unfortunately, on certain older platforms, the debug info doesn't
63  indicate reliably how each function was defined. A function type's
64  TYPE_PROTOTYPED flag may be clear, even if the function was defined
65  in prototype style. When calling a function whose TYPE_PROTOTYPED
66  flag is clear, GDB consults this flag to decide what to do.
67 
68  For modern targets, it is proper to assume that, if the prototype
69  flag is clear, that can be trusted: `float' arguments should be
70  promoted to `double'. For some older targets, if the prototype
71  flag is clear, that doesn't tell us anything. The default is to
72  trust the debug information; the user can override this behavior
73  with "set coerce-float-to-double 0". */
74 
75 static int coerce_float_to_double_p = 1;
76 static void
77 show_coerce_float_to_double_p (struct ui_file *file, int from_tty,
78  struct cmd_list_element *c, const char *value)
79 {
80  fprintf_filtered (file,
81  _("Coercion of floats to doubles "
82  "when calling functions is %s.\n"),
83  value);
84 }
85 
86 /* This boolean tells what gdb should do if a signal is received while
87  in a function called from gdb (call dummy). If set, gdb unwinds
88  the stack and restore the context to what as it was before the
89  call.
90 
91  The default is to stop in the frame where the signal was received. */
92 
93 static int unwind_on_signal_p = 0;
94 static void
95 show_unwind_on_signal_p (struct ui_file *file, int from_tty,
96  struct cmd_list_element *c, const char *value)
97 {
98  fprintf_filtered (file,
99  _("Unwinding of stack if a signal is "
100  "received while in a call dummy is %s.\n"),
101  value);
102 }
103 
104 /* This boolean tells what gdb should do if a std::terminate call is
105  made while in a function called from gdb (call dummy).
106  As the confines of a single dummy stack prohibit out-of-frame
107  handlers from handling a raised exception, and as out-of-frame
108  handlers are common in C++, this can lead to no handler being found
109  by the unwinder, and a std::terminate call. This is a false positive.
110  If set, gdb unwinds the stack and restores the context to what it
111  was before the call.
112 
113  The default is to unwind the frame if a std::terminate call is
114  made. */
115 
117 
118 static void
120  struct cmd_list_element *c,
121  const char *value)
122 
123 {
124  fprintf_filtered (file,
125  _("Unwind stack if a C++ exception is "
126  "unhandled while in a call dummy is %s.\n"),
127  value);
128 }
129 
130 /* Perform the standard coercions that are specified
131  for arguments to be passed to C or Ada functions.
132 
133  If PARAM_TYPE is non-NULL, it is the expected parameter type.
134  IS_PROTOTYPED is non-zero if the function declaration is prototyped.
135  SP is the stack pointer were additional data can be pushed (updating
136  its value as needed). */
137 
138 static struct value *
139 value_arg_coerce (struct gdbarch *gdbarch, struct value *arg,
140  struct type *param_type, int is_prototyped, CORE_ADDR *sp)
141 {
142  const struct builtin_type *builtin = builtin_type (gdbarch);
143  struct type *arg_type = check_typedef (value_type (arg));
144  struct type *type
145  = param_type ? check_typedef (param_type) : arg_type;
146 
147  /* Perform any Ada-specific coercion first. */
149  arg = ada_convert_actual (arg, type);
150 
151  /* Force the value to the target if we will need its address. At
152  this point, we could allocate arguments on the stack instead of
153  calling malloc if we knew that their addresses would not be
154  saved by the called function. */
155  arg = value_coerce_to_target (arg);
156 
157  switch (TYPE_CODE (type))
158  {
159  case TYPE_CODE_REF:
161  {
162  struct value *new_value;
163 
164  if (TYPE_IS_REFERENCE (arg_type))
165  return value_cast_pointers (type, arg, 0);
166 
167  /* Cast the value to the reference's target type, and then
168  convert it back to a reference. This will issue an error
169  if the value was not previously in memory - in some cases
170  we should clearly be allowing this, but how? */
171  new_value = value_cast (TYPE_TARGET_TYPE (type), arg);
172  new_value = value_ref (new_value, TYPE_CODE (type));
173  return new_value;
174  }
175  case TYPE_CODE_INT:
176  case TYPE_CODE_CHAR:
177  case TYPE_CODE_BOOL:
178  case TYPE_CODE_ENUM:
179  /* If we don't have a prototype, coerce to integer type if necessary. */
180  if (!is_prototyped)
181  {
182  if (TYPE_LENGTH (type) < TYPE_LENGTH (builtin->builtin_int))
183  type = builtin->builtin_int;
184  }
185  /* Currently all target ABIs require at least the width of an integer
186  type for an argument. We may have to conditionalize the following
187  type coercion for future targets. */
188  if (TYPE_LENGTH (type) < TYPE_LENGTH (builtin->builtin_int))
189  type = builtin->builtin_int;
190  break;
191  case TYPE_CODE_FLT:
192  if (!is_prototyped && coerce_float_to_double_p)
193  {
194  if (TYPE_LENGTH (type) < TYPE_LENGTH (builtin->builtin_double))
195  type = builtin->builtin_double;
196  else if (TYPE_LENGTH (type) > TYPE_LENGTH (builtin->builtin_double))
197  type = builtin->builtin_long_double;
198  }
199  break;
200  case TYPE_CODE_FUNC:
202  break;
203  case TYPE_CODE_ARRAY:
204  /* Arrays are coerced to pointers to their first element, unless
205  they are vectors, in which case we want to leave them alone,
206  because they are passed by value. */
208  if (!TYPE_VECTOR (type))
210  break;
211  case TYPE_CODE_UNDEF:
212  case TYPE_CODE_PTR:
213  case TYPE_CODE_STRUCT:
214  case TYPE_CODE_UNION:
215  case TYPE_CODE_VOID:
216  case TYPE_CODE_SET:
217  case TYPE_CODE_RANGE:
218  case TYPE_CODE_STRING:
219  case TYPE_CODE_ERROR:
220  case TYPE_CODE_MEMBERPTR:
221  case TYPE_CODE_METHODPTR:
222  case TYPE_CODE_METHOD:
223  case TYPE_CODE_COMPLEX:
224  default:
225  break;
226  }
227 
228  return value_cast (type, arg);
229 }
230 
231 /* Return the return type of a function with its first instruction exactly at
232  the PC address. Return NULL otherwise. */
233 
234 static struct type *
236 {
237  struct symbol *sym = find_pc_function (pc);
238 
239  if (sym != NULL && BLOCK_START (SYMBOL_BLOCK_VALUE (sym)) == pc
240  && SYMBOL_TYPE (sym) != NULL)
241  return TYPE_TARGET_TYPE (SYMBOL_TYPE (sym));
242 
243  return NULL;
244 }
245 
246 /* Determine a function's address and its return type from its value.
247  Calls error() if the function is not valid for calling. */
248 
249 CORE_ADDR
250 find_function_addr (struct value *function, struct type **retval_type)
251 {
252  struct type *ftype = check_typedef (value_type (function));
253  struct gdbarch *gdbarch = get_type_arch (ftype);
254  struct type *value_type = NULL;
255  /* Initialize it just to avoid a GCC false warning. */
256  CORE_ADDR funaddr = 0;
257 
258  /* If it's a member function, just look at the function
259  part of it. */
260 
261  /* Determine address to call. */
262  if (TYPE_CODE (ftype) == TYPE_CODE_FUNC
263  || TYPE_CODE (ftype) == TYPE_CODE_METHOD)
264  funaddr = value_address (function);
265  else if (TYPE_CODE (ftype) == TYPE_CODE_PTR)
266  {
267  funaddr = value_as_address (function);
268  ftype = check_typedef (TYPE_TARGET_TYPE (ftype));
269  if (TYPE_CODE (ftype) == TYPE_CODE_FUNC
270  || TYPE_CODE (ftype) == TYPE_CODE_METHOD)
271  funaddr = gdbarch_convert_from_func_ptr_addr (gdbarch, funaddr,
272  &current_target);
273  }
274  if (TYPE_CODE (ftype) == TYPE_CODE_FUNC
275  || TYPE_CODE (ftype) == TYPE_CODE_METHOD)
276  {
277  value_type = TYPE_TARGET_TYPE (ftype);
278 
279  if (TYPE_GNU_IFUNC (ftype))
280  {
281  funaddr = gnu_ifunc_resolve_addr (gdbarch, funaddr);
282 
283  /* Skip querying the function symbol if no RETVAL_TYPE has been
284  asked for. */
285  if (retval_type)
287  }
288  }
289  else if (TYPE_CODE (ftype) == TYPE_CODE_INT)
290  {
291  /* Handle the case of functions lacking debugging info.
292  Their values are characters since their addresses are char. */
293  if (TYPE_LENGTH (ftype) == 1)
294  funaddr = value_as_address (value_addr (function));
295  else
296  {
297  /* Handle function descriptors lacking debug info. */
298  int found_descriptor = 0;
299 
300  funaddr = 0; /* pacify "gcc -Werror" */
301  if (VALUE_LVAL (function) == lval_memory)
302  {
303  CORE_ADDR nfunaddr;
304 
305  funaddr = value_as_address (value_addr (function));
306  nfunaddr = funaddr;
307  funaddr = gdbarch_convert_from_func_ptr_addr (gdbarch, funaddr,
308  &current_target);
309  if (funaddr != nfunaddr)
310  found_descriptor = 1;
311  }
312  if (!found_descriptor)
313  /* Handle integer used as address of a function. */
314  funaddr = (CORE_ADDR) value_as_long (function);
315  }
316  }
317  else
318  error (_("Invalid data type for function to be called."));
319 
320  if (retval_type != NULL)
321  *retval_type = value_type;
323 }
324 
325 /* For CALL_DUMMY_ON_STACK, push a breakpoint sequence that the called
326  function returns to. */
327 
328 static CORE_ADDR
330  CORE_ADDR sp, CORE_ADDR funaddr,
331  struct value **args, int nargs,
332  struct type *value_type,
333  CORE_ADDR *real_pc, CORE_ADDR *bp_addr,
334  struct regcache *regcache)
335 {
337 
338  return gdbarch_push_dummy_code (gdbarch, sp, funaddr,
339  args, nargs, value_type, real_pc, bp_addr,
340  regcache);
341 }
342 
343 /* See infcall.h. */
344 
345 void
346 error_call_unknown_return_type (const char *func_name)
347 {
348  if (func_name != NULL)
349  error (_("'%s' has unknown return type; "
350  "cast the call to its declared return type"),
351  func_name);
352  else
353  error (_("function has unknown return type; "
354  "cast the call to its declared return type"));
355 }
356 
357 /* Fetch the name of the function at FUNADDR.
358  This is used in printing an error message for call_function_by_hand.
359  BUF is used to print FUNADDR in hex if the function name cannot be
360  determined. It must be large enough to hold formatted result of
361  RAW_FUNCTION_ADDRESS_FORMAT. */
362 
363 static const char *
364 get_function_name (CORE_ADDR funaddr, char *buf, int buf_size)
365 {
366  {
367  struct symbol *symbol = find_pc_function (funaddr);
368 
369  if (symbol)
370  return SYMBOL_PRINT_NAME (symbol);
371  }
372 
373  {
374  /* Try the minimal symbols. */
375  struct bound_minimal_symbol msymbol = lookup_minimal_symbol_by_pc (funaddr);
376 
377  if (msymbol.minsym)
378  return MSYMBOL_PRINT_NAME (msymbol.minsym);
379  }
380 
381  {
383  hex_string (funaddr));
384 
385  gdb_assert (strlen (tmp) + 1 <= buf_size);
386  strcpy (buf, tmp);
387  xfree (tmp);
388  return buf;
389  }
390 }
391 
392 /* All the meta data necessary to extract the call's return value. */
393 
395 {
396  /* The caller frame's architecture. */
397  struct gdbarch *gdbarch;
398 
399  /* The called function. */
400  struct value *function;
401 
402  /* The return value's type. */
403  struct type *value_type;
404 
405  /* Are we returning a value using a structure return or a normal
406  value return? */
408 
409  /* If using a structure return, this is the structure's address. */
411 
412  /* Whether stack temporaries are enabled. */
414 };
415 
416 /* Extract the called function's return value. */
417 
418 static struct value *
420 {
421  struct value *retval = NULL;
422  int stack_temporaries = thread_stack_temporaries_enabled_p (inferior_ptid);
423 
424  if (TYPE_CODE (ri->value_type) == TYPE_CODE_VOID)
425  retval = allocate_value (ri->value_type);
426  else if (ri->struct_return_p)
427  {
428  if (stack_temporaries)
429  {
430  retval = value_from_contents_and_address (ri->value_type, NULL,
431  ri->struct_addr);
433  }
434  else
435  {
436  retval = allocate_value (ri->value_type);
437  read_value_memory (retval, 0, 1, ri->struct_addr,
438  value_contents_raw (retval),
439  TYPE_LENGTH (ri->value_type));
440  }
441  }
442  else
443  {
444  retval = allocate_value (ri->value_type);
447  value_contents_raw (retval), NULL);
448  if (stack_temporaries && class_or_union_p (ri->value_type))
449  {
450  /* Values of class type returned in registers are copied onto
451  the stack and their lval_type set to lval_memory. This is
452  required because further evaluation of the expression
453  could potentially invoke methods on the return value
454  requiring GDB to evaluate the "this" pointer. To evaluate
455  the this pointer, GDB needs the memory address of the
456  value. */
457  value_force_lval (retval, ri->struct_addr);
459  }
460  }
461 
462  gdb_assert (retval != NULL);
463  return retval;
464 }
465 
466 /* Data for the FSM that manages an infcall. It's main job is to
467  record the called function's return value. */
468 
470 {
471  /* The base class. */
473 
474  /* All the info necessary to be able to extract the return
475  value. */
477 
478  /* The called function's return value. This is extracted from the
479  target before the dummy frame is popped. */
481 
482  /* The top level that started the infcall (and is synchronously
483  waiting for it to end). */
484  struct ui *waiting_ui;
485 };
486 
487 static int call_thread_fsm_should_stop (struct thread_fsm *self,
488  struct thread_info *thread);
489 static int call_thread_fsm_should_notify_stop (struct thread_fsm *self);
490 
491 /* call_thread_fsm's vtable. */
492 
494 {
495  NULL, /*dtor */
496  NULL, /* clean_up */
498  NULL, /* return_value */
499  NULL, /* async_reply_reason*/
501 };
502 
503 /* Allocate a new call_thread_fsm object. */
504 
505 static struct call_thread_fsm *
506 new_call_thread_fsm (struct ui *waiting_ui, struct interp *cmd_interp,
507  struct gdbarch *gdbarch, struct value *function,
508  struct type *value_type,
509  int struct_return_p, CORE_ADDR struct_addr)
510 {
511  struct call_thread_fsm *sm;
512 
513  sm = XCNEW (struct call_thread_fsm);
514  thread_fsm_ctor (&sm->thread_fsm, &call_thread_fsm_ops, cmd_interp);
515 
517  sm->return_meta_info.function = function;
519  sm->return_meta_info.struct_return_p = struct_return_p;
520  sm->return_meta_info.struct_addr = struct_addr;
521 
522  sm->waiting_ui = waiting_ui;
523 
524  return sm;
525 }
526 
527 /* Implementation of should_stop method for infcalls. */
528 
529 static int
531  struct thread_info *thread)
532 {
533  struct call_thread_fsm *f = (struct call_thread_fsm *) self;
534 
536  {
537  /* Done. */
539 
540  /* Stash the return value before the dummy frame is popped and
541  registers are restored to what they were before the
542  call.. */
544 
545  /* Break out of wait_sync_command_done. */
549  }
550 
551  return 1;
552 }
553 
554 /* Implementation of should_notify_stop method for infcalls. */
555 
556 static int
558 {
559  if (thread_fsm_finished_p (self))
560  {
561  /* Infcall succeeded. Be silent and proceed with evaluating the
562  expression. */
563  return 0;
564  }
565 
566  /* Something wrong happened. E.g., an unexpected breakpoint
567  triggered, or a signal was intercepted. Notify the stop. */
568  return 1;
569 }
570 
571 /* Subroutine of call_function_by_hand to simplify it.
572  Start up the inferior and wait for it to stop.
573  Return the exception if there's an error, or an exception with
574  reason >= 0 if there's no error.
575 
576  This is done inside a TRY_CATCH so the caller needn't worry about
577  thrown errors. The caller should rethrow if there's an error. */
578 
579 static struct gdb_exception
581  struct thread_info *call_thread, CORE_ADDR real_pc)
582 {
583  struct gdb_exception caught_error = exception_none;
584  int saved_in_infcall = call_thread->control.in_infcall;
585  ptid_t call_thread_ptid = call_thread->ptid;
586  enum prompt_state saved_prompt_state = current_ui->prompt_state;
587  int was_running = call_thread->state == THREAD_RUNNING;
588  int saved_ui_async = current_ui->async;
589 
590  /* Infcalls run synchronously, in the foreground. */
592  /* So that we don't print the prompt prematurely in
593  fetch_inferior_event. */
594  current_ui->async = 0;
595 
597 
598  call_thread->control.in_infcall = 1;
599 
601 
602  /* Associate the FSM with the thread after clear_proceed_status
603  (otherwise it'd clear this FSM), and before anything throws, so
604  we don't leak it (and any resources it manages). */
605  call_thread->thread_fsm = &sm->thread_fsm;
606 
608 
609  /* We want to print return value, please... */
610  call_thread->control.proceed_to_finish = 1;
611 
612  TRY
613  {
614  proceed (real_pc, GDB_SIGNAL_0);
615 
616  /* Inferior function calls are always synchronous, even if the
617  target supports asynchronous execution. */
619  }
621  {
622  caught_error = e;
623  }
624  END_CATCH
625 
626  /* If GDB has the prompt blocked before, then ensure that it remains
627  so. normal_stop calls async_enable_stdin, so reset the prompt
628  state again here. In other cases, stdin will be re-enabled by
629  inferior_event_handler, when an exception is thrown. */
630  current_ui->prompt_state = saved_prompt_state;
633  else
635  current_ui->async = saved_ui_async;
636 
637  /* At this point the current thread may have changed. Refresh
638  CALL_THREAD as it could be invalid if its thread has exited. */
639  call_thread = find_thread_ptid (call_thread_ptid);
640 
641  /* If the infcall does NOT succeed, normal_stop will have already
642  finished the thread states. However, on success, normal_stop
643  defers here, so that we can set back the thread states to what
644  they were before the call. Note that we must also finish the
645  state of new threads that might have spawned while the call was
646  running. The main cases to handle are:
647 
648  - "(gdb) print foo ()", or any other command that evaluates an
649  expression at the prompt. (The thread was marked stopped before.)
650 
651  - "(gdb) break foo if return_false()" or similar cases where we
652  do an infcall while handling an event (while the thread is still
653  marked running). In this example, whether the condition
654  evaluates true and thus we'll present a user-visible stop is
655  decided elsewhere. */
656  if (!was_running
657  && ptid_equal (call_thread_ptid, inferior_ptid)
660 
662 
663  /* Call breakpoint_auto_delete on the current contents of the bpstat
664  of inferior call thread.
665  If all error()s out of proceed ended up calling normal_stop
666  (and perhaps they should; it already does in the special case
667  of error out of resume()), then we wouldn't need this. */
668  if (caught_error.reason < 0)
669  {
670  if (call_thread != NULL)
672  }
673 
674  if (call_thread != NULL)
675  call_thread->control.in_infcall = saved_in_infcall;
676 
677  return caught_error;
678 }
679 
680 /* A cleanup function that calls delete_std_terminate_breakpoint. */
681 static void
683 {
685 }
686 
687 /* See infcall.h. */
688 
689 struct value *
690 call_function_by_hand (struct value *function,
691  type *default_return_type,
692  int nargs, struct value **args)
693 {
694  return call_function_by_hand_dummy (function, default_return_type,
695  nargs, args, NULL, NULL);
696 }
697 
698 /* All this stuff with a dummy frame may seem unnecessarily complicated
699  (why not just save registers in GDB?). The purpose of pushing a dummy
700  frame which looks just like a real frame is so that if you call a
701  function and then hit a breakpoint (get a signal, etc), "backtrace"
702  will look right. Whether the backtrace needs to actually show the
703  stack at the time the inferior function was called is debatable, but
704  it certainly needs to not display garbage. So if you are contemplating
705  making dummy frames be different from normal frames, consider that. */
706 
707 /* Perform a function call in the inferior.
708  ARGS is a vector of values of arguments (NARGS of them).
709  FUNCTION is a value, the function to be called.
710  Returns a value representing what the function returned.
711  May fail to return, if a breakpoint or signal is hit
712  during the execution of the function.
713 
714  ARGS is modified to contain coerced values. */
715 
716 struct value *
718  type *default_return_type,
719  int nargs, struct value **args,
720  dummy_frame_dtor_ftype *dummy_dtor,
721  void *dummy_dtor_data)
722 {
723  CORE_ADDR sp;
724  struct type *values_type, *target_values_type;
725  unsigned char struct_return = 0, hidden_first_param_p = 0;
726  CORE_ADDR struct_addr = 0;
727  struct infcall_control_state *inf_status;
728  struct cleanup *inf_status_cleanup;
729  struct infcall_suspend_state *caller_state;
730  CORE_ADDR funaddr;
731  CORE_ADDR real_pc;
732  struct type *ftype = check_typedef (value_type (function));
733  CORE_ADDR bp_addr;
734  struct frame_id dummy_id;
735  struct cleanup *args_cleanup;
736  struct frame_info *frame;
737  struct gdbarch *gdbarch;
738  struct cleanup *terminate_bp_cleanup;
739  ptid_t call_thread_ptid;
740  struct gdb_exception e;
741  char name_buf[RAW_FUNCTION_ADDRESS_SIZE];
742  int stack_temporaries = thread_stack_temporaries_enabled_p (inferior_ptid);
743 
744  if (TYPE_CODE (ftype) == TYPE_CODE_PTR)
745  ftype = check_typedef (TYPE_TARGET_TYPE (ftype));
746 
748  noprocess ();
749 
750  if (get_traceframe_number () >= 0)
751  error (_("May not call functions while looking at trace frames."));
752 
754  error (_("Cannot call functions in reverse mode."));
755 
756  frame = get_current_frame ();
757  gdbarch = get_frame_arch (frame);
758 
760  error (_("This target does not support function calls."));
761 
762  /* A cleanup for the inferior status.
763  This is only needed while we're preparing the inferior function call. */
764  inf_status = save_infcall_control_state ();
765  inf_status_cleanup
767 
768  /* Save the caller's registers and other state associated with the
769  inferior itself so that they can be restored once the
770  callee returns. To allow nested calls the registers are (further
771  down) pushed onto a dummy frame stack. Include a cleanup (which
772  is tossed once the regcache has been pushed). */
773  caller_state = save_infcall_suspend_state ();
775 
776  /* Ensure that the initial SP is correctly aligned. */
777  {
778  CORE_ADDR old_sp = get_frame_sp (frame);
779 
781  {
782  sp = gdbarch_frame_align (gdbarch, old_sp);
783  /* NOTE: cagney/2003-08-13: Skip the "red zone". For some
784  ABIs, a function can use memory beyond the inner most stack
785  address. AMD64 called that region the "red zone". Skip at
786  least the "red zone" size before allocating any space on
787  the stack. */
788  if (gdbarch_inner_than (gdbarch, 1, 2))
790  else
792  /* Still aligned? */
793  gdb_assert (sp == gdbarch_frame_align (gdbarch, sp));
794  /* NOTE: cagney/2002-09-18:
795 
796  On a RISC architecture, a void parameterless generic dummy
797  frame (i.e., no parameters, no result) typically does not
798  need to push anything the stack and hence can leave SP and
799  FP. Similarly, a frameless (possibly leaf) function does
800  not push anything on the stack and, hence, that too can
801  leave FP and SP unchanged. As a consequence, a sequence of
802  void parameterless generic dummy frame calls to frameless
803  functions will create a sequence of effectively identical
804  frames (SP, FP and TOS and PC the same). This, not
805  suprisingly, results in what appears to be a stack in an
806  infinite loop --- when GDB tries to find a generic dummy
807  frame on the internal dummy frame stack, it will always
808  find the first one.
809 
810  To avoid this problem, the code below always grows the
811  stack. That way, two dummy frames can never be identical.
812  It does burn a few bytes of stack but that is a small price
813  to pay :-). */
814  if (sp == old_sp)
815  {
816  if (gdbarch_inner_than (gdbarch, 1, 2))
817  /* Stack grows down. */
818  sp = gdbarch_frame_align (gdbarch, old_sp - 1);
819  else
820  /* Stack grows up. */
821  sp = gdbarch_frame_align (gdbarch, old_sp + 1);
822  }
823  /* SP may have underflown address zero here from OLD_SP. Memory access
824  functions will probably fail in such case but that is a target's
825  problem. */
826  }
827  else
828  /* FIXME: cagney/2002-09-18: Hey, you loose!
829 
830  Who knows how badly aligned the SP is!
831 
832  If the generic dummy frame ends up empty (because nothing is
833  pushed) GDB won't be able to correctly perform back traces.
834  If a target is having trouble with backtraces, first thing to
835  do is add FRAME_ALIGN() to the architecture vector. If that
836  fails, try dummy_id().
837 
838  If the ABI specifies a "Red Zone" (see the doco) the code
839  below will quietly trash it. */
840  sp = old_sp;
841 
842  /* Skip over the stack temporaries that might have been generated during
843  the evaluation of an expression. */
844  if (stack_temporaries)
845  {
846  struct value *lastval;
847 
849  if (lastval != NULL)
850  {
851  CORE_ADDR lastval_addr = value_address (lastval);
852 
853  if (gdbarch_inner_than (gdbarch, 1, 2))
854  {
855  gdb_assert (sp >= lastval_addr);
856  sp = lastval_addr;
857  }
858  else
859  {
860  gdb_assert (sp <= lastval_addr);
861  sp = lastval_addr + TYPE_LENGTH (value_type (lastval));
862  }
863 
865  sp = gdbarch_frame_align (gdbarch, sp);
866  }
867  }
868  }
869 
870  funaddr = find_function_addr (function, &values_type);
871  if (values_type == NULL)
872  values_type = default_return_type;
873  if (values_type == NULL)
874  {
875  const char *name = get_function_name (funaddr,
876  name_buf, sizeof (name_buf));
877  error (_("'%s' has unknown return type; "
878  "cast the call to its declared return type"),
879  name);
880  }
881 
882  values_type = check_typedef (values_type);
883 
884  /* Are we returning a value using a structure return (passing a
885  hidden argument pointing to storage) or a normal value return?
886  There are two cases: language-mandated structure return and
887  target ABI structure return. The variable STRUCT_RETURN only
888  describes the latter. The language version is handled by passing
889  the return location as the first parameter to the function,
890  even preceding "this". This is different from the target
891  ABI version, which is target-specific; for instance, on ia64
892  the first argument is passed in out0 but the hidden structure
893  return pointer would normally be passed in r8. */
894 
896  {
897  hidden_first_param_p = 1;
898 
899  /* Tell the target specific argument pushing routine not to
900  expect a value. */
901  target_values_type = builtin_type (gdbarch)->builtin_void;
902  }
903  else
904  {
905  struct_return = using_struct_return (gdbarch, function, values_type);
906  target_values_type = values_type;
907  }
908 
910 
911  /* Determine the location of the breakpoint (and possibly other
912  stuff) that the called function will return to. The SPARC, for a
913  function returning a structure or union, needs to make space for
914  not just the breakpoint but also an extra word containing the
915  size (?) of the structure being passed. */
916 
918  {
919  case ON_STACK:
920  {
921  const gdb_byte *bp_bytes;
922  CORE_ADDR bp_addr_as_address;
923  int bp_size;
924 
925  /* Be careful BP_ADDR is in inferior PC encoding while
926  BP_ADDR_AS_ADDRESS is a plain memory address. */
927 
928  sp = push_dummy_code (gdbarch, sp, funaddr, args, nargs,
929  target_values_type, &real_pc, &bp_addr,
931 
932  /* Write a legitimate instruction at the point where the infcall
933  breakpoint is going to be inserted. While this instruction
934  is never going to be executed, a user investigating the
935  memory from GDB would see this instruction instead of random
936  uninitialized bytes. We chose the breakpoint instruction
937  as it may look as the most logical one to the user and also
938  valgrind 3.7.0 needs it for proper vgdb inferior calls.
939 
940  If software breakpoints are unsupported for this target we
941  leave the user visible memory content uninitialized. */
942 
943  bp_addr_as_address = bp_addr;
944  bp_bytes = gdbarch_breakpoint_from_pc (gdbarch, &bp_addr_as_address,
945  &bp_size);
946  if (bp_bytes != NULL)
947  write_memory (bp_addr_as_address, bp_bytes, bp_size);
948  }
949  break;
950  case AT_ENTRY_POINT:
951  {
952  CORE_ADDR dummy_addr;
953 
954  real_pc = funaddr;
955  dummy_addr = entry_point_address ();
956 
957  /* A call dummy always consists of just a single breakpoint, so
958  its address is the same as the address of the dummy.
959 
960  The actual breakpoint is inserted separatly so there is no need to
961  write that out. */
962  bp_addr = dummy_addr;
963  break;
964  }
965  default:
966  internal_error (__FILE__, __LINE__, _("bad switch"));
967  }
968 
969  if (nargs < TYPE_NFIELDS (ftype))
970  error (_("Too few arguments in function call."));
971 
972  {
973  int i;
974 
975  for (i = nargs - 1; i >= 0; i--)
976  {
977  int prototyped;
978  struct type *param_type;
979 
980  /* FIXME drow/2002-05-31: Should just always mark methods as
981  prototyped. Can we respect TYPE_VARARGS? Probably not. */
982  if (TYPE_CODE (ftype) == TYPE_CODE_METHOD)
983  prototyped = 1;
984  if (TYPE_TARGET_TYPE (ftype) == NULL && TYPE_NFIELDS (ftype) == 0
985  && default_return_type != NULL)
986  {
987  /* Calling a no-debug function with the return type
988  explicitly cast. Assume the function is prototyped,
989  with a prototype matching the types of the arguments.
990  E.g., with:
991  float mult (float v1, float v2) { return v1 * v2; }
992  This:
993  (gdb) p (float) mult (2.0f, 3.0f)
994  Is a simpler alternative to:
995  (gdb) p ((float (*) (float, float)) mult) (2.0f, 3.0f)
996  */
997  prototyped = 1;
998  }
999  else if (i < TYPE_NFIELDS (ftype))
1000  prototyped = TYPE_PROTOTYPED (ftype);
1001  else
1002  prototyped = 0;
1003 
1004  if (i < TYPE_NFIELDS (ftype))
1005  param_type = TYPE_FIELD_TYPE (ftype, i);
1006  else
1007  param_type = NULL;
1008 
1009  args[i] = value_arg_coerce (gdbarch, args[i],
1010  param_type, prototyped, &sp);
1011 
1012  if (param_type != NULL && language_pass_by_reference (param_type))
1013  args[i] = value_addr (args[i]);
1014  }
1015  }
1016 
1017  /* Reserve space for the return structure to be written on the
1018  stack, if necessary. Make certain that the value is correctly
1019  aligned.
1020 
1021  While evaluating expressions, we reserve space on the stack for
1022  return values of class type even if the language ABI and the target
1023  ABI do not require that the return value be passed as a hidden first
1024  argument. This is because we want to store the return value as an
1025  on-stack temporary while the expression is being evaluated. This
1026  enables us to have chained function calls in expressions.
1027 
1028  Keeping the return values as on-stack temporaries while the expression
1029  is being evaluated is OK because the thread is stopped until the
1030  expression is completely evaluated. */
1031 
1032  if (struct_return || hidden_first_param_p
1033  || (stack_temporaries && class_or_union_p (values_type)))
1034  {
1035  if (gdbarch_inner_than (gdbarch, 1, 2))
1036  {
1037  /* Stack grows downward. Align STRUCT_ADDR and SP after
1038  making space for the return value. */
1039  sp -= TYPE_LENGTH (values_type);
1041  sp = gdbarch_frame_align (gdbarch, sp);
1042  struct_addr = sp;
1043  }
1044  else
1045  {
1046  /* Stack grows upward. Align the frame, allocate space, and
1047  then again, re-align the frame??? */
1049  sp = gdbarch_frame_align (gdbarch, sp);
1050  struct_addr = sp;
1051  sp += TYPE_LENGTH (values_type);
1053  sp = gdbarch_frame_align (gdbarch, sp);
1054  }
1055  }
1056 
1057  if (hidden_first_param_p)
1058  {
1059  struct value **new_args;
1060 
1061  /* Add the new argument to the front of the argument list. */
1062  new_args = XNEWVEC (struct value *, nargs + 1);
1063  new_args[0] = value_from_pointer (lookup_pointer_type (values_type),
1064  struct_addr);
1065  memcpy (&new_args[1], &args[0], sizeof (struct value *) * nargs);
1066  args = new_args;
1067  nargs++;
1068  args_cleanup = make_cleanup (xfree, args);
1069  }
1070  else
1071  args_cleanup = make_cleanup (null_cleanup, NULL);
1072 
1073  /* Create the dummy stack frame. Pass in the call dummy address as,
1074  presumably, the ABI code knows where, in the call dummy, the
1075  return address should be pointed. */
1077  bp_addr, nargs, args,
1078  sp, struct_return, struct_addr);
1079 
1080  do_cleanups (args_cleanup);
1081 
1082  /* Set up a frame ID for the dummy frame so we can pass it to
1083  set_momentary_breakpoint. We need to give the breakpoint a frame
1084  ID so that the breakpoint code can correctly re-identify the
1085  dummy breakpoint. */
1086  /* Sanity. The exact same SP value is returned by PUSH_DUMMY_CALL,
1087  saved as the dummy-frame TOS, and used by dummy_id to form
1088  the frame ID's stack address. */
1089  dummy_id = frame_id_build (sp, bp_addr);
1090 
1091  /* Create a momentary breakpoint at the return address of the
1092  inferior. That way it breaks when it returns. */
1093 
1094  {
1095  symtab_and_line sal;
1097  sal.pc = bp_addr;
1098  sal.section = find_pc_overlay (sal.pc);
1099 
1100  /* Sanity. The exact same SP value is returned by
1101  PUSH_DUMMY_CALL, saved as the dummy-frame TOS, and used by
1102  dummy_id to form the frame ID's stack address. */
1103  breakpoint *bpt
1105  dummy_id, bp_call_dummy).release ();
1106 
1107  /* set_momentary_breakpoint invalidates FRAME. */
1108  frame = NULL;
1109 
1110  bpt->disposition = disp_del;
1111  gdb_assert (bpt->related_breakpoint == bpt);
1112 
1114  if (longjmp_b)
1115  {
1116  /* Link BPT into the chain of LONGJMP_B. */
1117  bpt->related_breakpoint = longjmp_b;
1118  while (longjmp_b->related_breakpoint != bpt->related_breakpoint)
1119  longjmp_b = longjmp_b->related_breakpoint;
1120  longjmp_b->related_breakpoint = bpt;
1121  }
1122  }
1123 
1124  /* Create a breakpoint in std::terminate.
1125  If a C++ exception is raised in the dummy-frame, and the
1126  exception handler is (normally, and expected to be) out-of-frame,
1127  the default C++ handler will (wrongly) be called in an inferior
1128  function call. This is wrong, as an exception can be normally
1129  and legally handled out-of-frame. The confines of the dummy frame
1130  prevent the unwinder from finding the correct handler (or any
1131  handler, unless it is in-frame). The default handler calls
1132  std::terminate. This will kill the inferior. Assert that
1133  terminate should never be called in an inferior function
1134  call. Place a momentary breakpoint in the std::terminate function
1135  and if triggered in the call, rewind. */
1138 
1139  /* Discard both inf_status and caller_state cleanups.
1140  From this point on we explicitly restore the associated state
1141  or discard it. */
1142  discard_cleanups (inf_status_cleanup);
1143 
1144  /* Everything's ready, push all the info needed to restore the
1145  caller (and identify the dummy-frame) onto the dummy-frame
1146  stack. */
1147  dummy_frame_push (caller_state, &dummy_id, inferior_ptid);
1148  if (dummy_dtor != NULL)
1150  dummy_dtor, dummy_dtor_data);
1151 
1152  /* Register a clean-up for unwind_on_terminating_exception_breakpoint. */
1153  terminate_bp_cleanup = make_cleanup (cleanup_delete_std_terminate_breakpoint,
1154  NULL);
1155 
1156  /* - SNIP - SNIP - SNIP - SNIP - SNIP - SNIP - SNIP - SNIP - SNIP -
1157  If you're looking to implement asynchronous dummy-frames, then
1158  just below is the place to chop this function in two.. */
1159 
1160  /* TP is invalid after run_inferior_call returns, so enclose this
1161  in a block so that it's only in scope during the time it's valid. */
1162  {
1163  struct thread_info *tp = inferior_thread ();
1164  struct thread_fsm *saved_sm;
1165  struct call_thread_fsm *sm;
1166 
1167  /* Save the current FSM. We'll override it. */
1168  saved_sm = tp->thread_fsm;
1169  tp->thread_fsm = NULL;
1170 
1171  /* Save this thread's ptid, we need it later but the thread
1172  may have exited. */
1173  call_thread_ptid = tp->ptid;
1174 
1175  /* Run the inferior until it stops. */
1176 
1177  /* Create the FSM used to manage the infcall. It tells infrun to
1178  not report the stop to the user, and captures the return value
1179  before the dummy frame is popped. run_inferior_call registers
1180  it with the thread ASAP. */
1182  gdbarch, function,
1183  values_type,
1184  struct_return || hidden_first_param_p,
1185  struct_addr);
1186 
1187  e = run_inferior_call (sm, tp, real_pc);
1188 
1189  observer_notify_inferior_call_post (call_thread_ptid, funaddr);
1190 
1191  tp = find_thread_ptid (call_thread_ptid);
1192  if (tp != NULL)
1193  {
1194  /* The FSM should still be the same. */
1195  gdb_assert (tp->thread_fsm == &sm->thread_fsm);
1196 
1198  {
1199  struct value *retval;
1200 
1201  /* The inferior call is successful. Pop the dummy frame,
1202  which runs its destructors and restores the inferior's
1203  suspend state, and restore the inferior control
1204  state. */
1205  dummy_frame_pop (dummy_id, call_thread_ptid);
1206  restore_infcall_control_state (inf_status);
1207 
1208  /* Get the return value. */
1209  retval = sm->return_value;
1210 
1211  /* Clean up / destroy the call FSM, and restore the
1212  original one. */
1213  thread_fsm_clean_up (tp->thread_fsm, tp);
1215  tp->thread_fsm = saved_sm;
1216 
1218 
1219  do_cleanups (terminate_bp_cleanup);
1220  gdb_assert (retval != NULL);
1221  return retval;
1222  }
1223 
1224  /* Didn't complete. Restore previous state machine, and
1225  handle the error. */
1226  tp->thread_fsm = saved_sm;
1227  }
1228  }
1229 
1230  /* Rethrow an error if we got one trying to run the inferior. */
1231 
1232  if (e.reason < 0)
1233  {
1234  const char *name = get_function_name (funaddr,
1235  name_buf, sizeof (name_buf));
1236 
1237  discard_infcall_control_state (inf_status);
1238 
1239  /* We could discard the dummy frame here if the program exited,
1240  but it will get garbage collected the next time the program is
1241  run anyway. */
1242 
1243  switch (e.reason)
1244  {
1245  case RETURN_ERROR:
1246  throw_error (e.error, _("%s\n\
1247 An error occurred while in a function called from GDB.\n\
1248 Evaluation of the expression containing the function\n\
1249 (%s) will be abandoned.\n\
1250 When the function is done executing, GDB will silently stop."),
1251  e.message, name);
1252  case RETURN_QUIT:
1253  default:
1254  throw_exception (e);
1255  }
1256  }
1257 
1258  /* If the program has exited, or we stopped at a different thread,
1259  exit and inform the user. */
1260 
1261  if (! target_has_execution)
1262  {
1263  const char *name = get_function_name (funaddr,
1264  name_buf, sizeof (name_buf));
1265 
1266  /* If we try to restore the inferior status,
1267  we'll crash as the inferior is no longer running. */
1268  discard_infcall_control_state (inf_status);
1269 
1270  /* We could discard the dummy frame here given that the program exited,
1271  but it will get garbage collected the next time the program is
1272  run anyway. */
1273 
1274  error (_("The program being debugged exited while in a function "
1275  "called from GDB.\n"
1276  "Evaluation of the expression containing the function\n"
1277  "(%s) will be abandoned."),
1278  name);
1279  }
1280 
1281  if (! ptid_equal (call_thread_ptid, inferior_ptid))
1282  {
1283  const char *name = get_function_name (funaddr,
1284  name_buf, sizeof (name_buf));
1285 
1286  /* We've switched threads. This can happen if another thread gets a
1287  signal or breakpoint while our thread was running.
1288  There's no point in restoring the inferior status,
1289  we're in a different thread. */
1290  discard_infcall_control_state (inf_status);
1291  /* Keep the dummy frame record, if the user switches back to the
1292  thread with the hand-call, we'll need it. */
1294  error (_("\
1295 The program received a signal in another thread while\n\
1296 making a function call from GDB.\n\
1297 Evaluation of the expression containing the function\n\
1298 (%s) will be abandoned.\n\
1299 When the function is done executing, GDB will silently stop."),
1300  name);
1301  else
1302  error (_("\
1303 The program stopped in another thread while making a function call from GDB.\n\
1304 Evaluation of the expression containing the function\n\
1305 (%s) will be abandoned.\n\
1306 When the function is done executing, GDB will silently stop."),
1307  name);
1308  }
1309 
1310  {
1311  /* Make a copy as NAME may be in an objfile freed by dummy_frame_pop. */
1312  std::string name = get_function_name (funaddr, name_buf,
1313  sizeof (name_buf));
1314 
1316  {
1317  /* We stopped inside the FUNCTION because of a random
1318  signal. Further execution of the FUNCTION is not
1319  allowed. */
1320 
1321  if (unwind_on_signal_p)
1322  {
1323  /* The user wants the context restored. */
1324 
1325  /* We must get back to the frame we were before the
1326  dummy call. */
1327  dummy_frame_pop (dummy_id, call_thread_ptid);
1328 
1329  /* We also need to restore inferior status to that before the
1330  dummy call. */
1331  restore_infcall_control_state (inf_status);
1332 
1333  /* FIXME: Insert a bunch of wrap_here; name can be very
1334  long if it's a C++ name with arguments and stuff. */
1335  error (_("\
1336 The program being debugged was signaled while in a function called from GDB.\n\
1337 GDB has restored the context to what it was before the call.\n\
1338 To change this behavior use \"set unwindonsignal off\".\n\
1339 Evaluation of the expression containing the function\n\
1340 (%s) will be abandoned."),
1341  name.c_str ());
1342  }
1343  else
1344  {
1345  /* The user wants to stay in the frame where we stopped
1346  (default).
1347  Discard inferior status, we're not at the same point
1348  we started at. */
1349  discard_infcall_control_state (inf_status);
1350 
1351  /* FIXME: Insert a bunch of wrap_here; name can be very
1352  long if it's a C++ name with arguments and stuff. */
1353  error (_("\
1354 The program being debugged was signaled while in a function called from GDB.\n\
1355 GDB remains in the frame where the signal was received.\n\
1356 To change this behavior use \"set unwindonsignal on\".\n\
1357 Evaluation of the expression containing the function\n\
1358 (%s) will be abandoned.\n\
1359 When the function is done executing, GDB will silently stop."),
1360  name.c_str ());
1361  }
1362  }
1363 
1365  {
1366  /* We must get back to the frame we were before the dummy
1367  call. */
1368  dummy_frame_pop (dummy_id, call_thread_ptid);
1369 
1370  /* We also need to restore inferior status to that before
1371  the dummy call. */
1372  restore_infcall_control_state (inf_status);
1373 
1374  error (_("\
1375 The program being debugged entered a std::terminate call, most likely\n\
1376 caused by an unhandled C++ exception. GDB blocked this call in order\n\
1377 to prevent the program from being terminated, and has restored the\n\
1378 context to its original state before the call.\n\
1379 To change this behaviour use \"set unwind-on-terminating-exception off\".\n\
1380 Evaluation of the expression containing the function (%s)\n\
1381 will be abandoned."),
1382  name.c_str ());
1383  }
1384  else if (stop_stack_dummy == STOP_NONE)
1385  {
1386 
1387  /* We hit a breakpoint inside the FUNCTION.
1388  Keep the dummy frame, the user may want to examine its state.
1389  Discard inferior status, we're not at the same point
1390  we started at. */
1391  discard_infcall_control_state (inf_status);
1392 
1393  /* The following error message used to say "The expression
1394  which contained the function call has been discarded."
1395  It is a hard concept to explain in a few words. Ideally,
1396  GDB would be able to resume evaluation of the expression
1397  when the function finally is done executing. Perhaps
1398  someday this will be implemented (it would not be easy). */
1399  /* FIXME: Insert a bunch of wrap_here; name can be very long if it's
1400  a C++ name with arguments and stuff. */
1401  error (_("\
1402 The program being debugged stopped while in a function called from GDB.\n\
1403 Evaluation of the expression containing the function\n\
1404 (%s) will be abandoned.\n\
1405 When the function is done executing, GDB will silently stop."),
1406  name.c_str ());
1407  }
1408 
1409  }
1410 
1411  /* The above code errors out, so ... */
1412  gdb_assert_not_reached ("... should not be here");
1413 }
1414 
1415 void
1417 {
1418  add_setshow_boolean_cmd ("coerce-float-to-double", class_obscure,
1420 Set coercion of floats to doubles when calling functions."), _("\
1421 Show coercion of floats to doubles when calling functions"), _("\
1422 Variables of type float should generally be converted to doubles before\n\
1423 calling an unprototyped function, and left alone when calling a prototyped\n\
1424 function. However, some older debug info formats do not provide enough\n\
1425 information to determine that a function is prototyped. If this flag is\n\
1426 set, GDB will perform the conversion for a function it considers\n\
1427 unprototyped.\n\
1428 The default is to perform the conversion.\n"),
1429  NULL,
1431  &setlist, &showlist);
1432 
1433  add_setshow_boolean_cmd ("unwindonsignal", no_class,
1434  &unwind_on_signal_p, _("\
1435 Set unwinding of stack if a signal is received while in a call dummy."), _("\
1436 Show unwinding of stack if a signal is received while in a call dummy."), _("\
1437 The unwindonsignal lets the user determine what gdb should do if a signal\n\
1438 is received while in a function called from gdb (call dummy). If set, gdb\n\
1439 unwinds the stack and restore the context to what as it was before the call.\n\
1440 The default is to stop in the frame where the signal was received."),
1441  NULL,
1443  &setlist, &showlist);
1444 
1445  add_setshow_boolean_cmd ("unwind-on-terminating-exception", no_class,
1447 Set unwinding of stack if std::terminate is called while in call dummy."), _("\
1448 Show unwinding of stack if std::terminate() is called while in a call dummy."),
1449  _("\
1450 The unwind on terminating exception flag lets the user determine\n\
1451 what gdb should do if a std::terminate() call is made from the\n\
1452 default exception handler. If set, gdb unwinds the stack and restores\n\
1453 the context to what it was before the call. If unset, gdb allows the\n\
1454 std::terminate call to proceed.\n\
1455 The default is to unwind the frame."),
1456  NULL,
1458  &setlist, &showlist);
1459 
1460 }
void() dummy_frame_dtor_ftype(void *data, int registers_valid)
Definition: dummy-frame.h:59
const char * string
Definition: signals.c:50
struct value * call_function_by_hand_dummy(struct value *function, type *default_return_type, int nargs, struct value **args, dummy_frame_dtor_ftype *dummy_dtor, void *dummy_dtor_data)
Definition: infcall.c:717
void restore_infcall_control_state(struct infcall_control_state *)
Definition: infrun.c:8999
struct value * return_value
Definition: infcall.c:480
ptid_t user_visible_resume_ptid(int step)
Definition: infrun.c:2252
struct frame_id frame_id_build(CORE_ADDR stack_addr, CORE_ADDR code_addr)
Definition: frame.c:624
struct thread_info * find_thread_ptid(ptid_t ptid)
Definition: thread.c:514
int class_or_union_p(const struct type *t)
Definition: gdbtypes.c:3114
struct value * value_addr(struct value *arg1)
Definition: valops.c:1462
struct ui * current_ui
Definition: event-top.c:453
struct type * builtin_long_double
Definition: gdbtypes.h:1512
#define SYMBOL_PRINT_NAME(symbol)
Definition: symtab.h:542
static int coerce_float_to_double_p
Definition: infcall.c:75
struct frame_info * get_current_frame(void)
Definition: frame.c:1563
struct value * value_from_contents_and_address(struct type *type, const gdb_byte *valaddr, CORE_ADDR address)
Definition: value.c:3599
bfd_vma CORE_ADDR
Definition: common-types.h:41
static const char * get_function_name(CORE_ADDR funaddr, char *buf, int buf_size)
Definition: infcall.c:364
static struct gdb_exception run_inferior_call(struct call_thread_fsm *sm, struct thread_info *call_thread, CORE_ADDR real_pc)
Definition: infcall.c:580
CORE_ADDR struct_addr
Definition: infcall.c:410
void xfree(void *)
CORE_ADDR gdbarch_frame_align(struct gdbarch *gdbarch, CORE_ADDR address)
Definition: gdbarch.c:3141
int gdbarch_push_dummy_code_p(struct gdbarch *gdbarch)
Definition: gdbarch.c:2405
int gdbarch_inner_than(struct gdbarch *gdbarch, CORE_ADDR lhs, CORE_ADDR rhs)
Definition: gdbarch.c:2827
struct infcall_suspend_state * save_infcall_suspend_state(void)
Definition: infrun.c:8824
LONGEST value_as_long(struct value *val)
Definition: value.c:2749
int async
Definition: top.h:102
void dummy_frame_pop(struct frame_id dummy_id, ptid_t ptid)
Definition: dummy-frame.c:205
void thread_fsm_delete(struct thread_fsm *self)
Definition: thread-fsm.c:36
void breakpoint_auto_delete(bpstat bs)
Definition: breakpoint.c:11624
Definition: interps.h:41
const struct builtin_type * builtin_type(struct gdbarch *gdbarch)
Definition: gdbtypes.c:5217
void register_dummy_frame_dtor(struct frame_id dummy_id, ptid_t ptid, dummy_frame_dtor_ftype *dtor, void *dtor_data)
Definition: dummy-frame.c:234
CORE_ADDR get_frame_sp(struct frame_info *this_frame)
Definition: frame.c:2782
enum errors error
void internal_error(const char *file, int line, const char *fmt,...)
Definition: errors.c:50
struct thread_info * inferior_thread(void)
Definition: thread.c:90
CORE_ADDR gdbarch_deprecated_function_start_offset(struct gdbarch *gdbarch)
Definition: gdbarch.c:2987
int thread_stack_temporaries_enabled_p(ptid_t ptid)
Definition: thread.c:795
static int unwind_on_terminating_exception_p
Definition: infcall.c:116
const struct gdb_exception exception_none
#define ON_STACK
Definition: inferior.h:263
void read_value_memory(struct value *val, LONGEST bit_offset, int stack, CORE_ADDR memaddr, gdb_byte *buffer, size_t length)
Definition: valops.c:950
void thread_fsm_clean_up(struct thread_fsm *self, struct thread_info *thread)
Definition: thread-fsm.c:49
enum language la_language
Definition: language.h:144
struct obj_section * section
Definition: symtab.h:1753
enum thread_state state
Definition: gdbthread.h:287
#define _(String)
Definition: gdb_locale.h:35
static int call_thread_fsm_should_stop(struct thread_fsm *self, struct thread_info *thread)
Definition: infcall.c:530
struct cleanup * make_cleanup_restore_infcall_suspend_state(struct infcall_suspend_state *)
Definition: infrun.c:8912
breakpoint * related_breakpoint
Definition: breakpoint.h:759
#define BLOCK_START(bl)
Definition: block.h:105
#define TYPE_PROTOTYPED(t)
Definition: gdbtypes.h:232
#define TYPE_FIELD_TYPE(thistype, n)
Definition: gdbtypes.h:1371
#define END_CATCH
#define VALUE_LVAL(val)
Definition: value.h:414
struct value * allocate_value(struct type *type)
Definition: value.c:1036
struct regcache * get_current_regcache(void)
Definition: regcache.c:446
static void ours()
Definition: target.c:483
struct thread_fsm thread_fsm
Definition: infcall.c:472
struct obj_section * find_pc_overlay(CORE_ADDR pc)
Definition: symfile.c:3173
#define TYPE_IS_REFERENCE(t)
Definition: gdbtypes.h:332
scoped_restore_tmpl< T > make_scoped_restore(T *var)
void null_cleanup(void *arg)
Definition: cleanups.c:294
#define TRY
#define MSYMBOL_PRINT_NAME(symbol)
Definition: symtab.h:708
struct type * value_type
Definition: infcall.c:403
static struct thread_fsm_ops call_thread_fsm_ops
Definition: infcall.c:493
struct cmd_list_element * setlist
Definition: cli-cmds.c:111
#define AT_ENTRY_POINT
Definition: inferior.h:264
const char *const name
Definition: aarch64-tdep.c:76
int gdbarch_call_dummy_location(struct gdbarch *gdbarch)
Definition: gdbarch.c:2388
int gdbarch_frame_align_p(struct gdbarch *gdbarch)
Definition: gdbarch.c:3134
struct type * check_typedef(struct type *type)
Definition: gdbtypes.c:2421
#define TYPE_GNU_IFUNC(t)
Definition: gdbtypes.h:283
enum exec_direction_kind execution_direction
Definition: infrun.c:9088
#define CATCH(EXCEPTION, MASK)
bpdisp disposition
Definition: breakpoint.h:697
void dummy_frame_push(struct infcall_suspend_state *caller_state, const struct frame_id *dummy_id, ptid_t ptid)
Definition: dummy-frame.c:91
struct target_ops current_target
static int call_thread_fsm_should_notify_stop(struct thread_fsm *self)
Definition: infcall.c:557
void fprintf_filtered(struct ui_file *stream, const char *format,...)
Definition: utils.c:2008
struct symbol * find_pc_function(CORE_ADDR pc)
Definition: blockframe.c:150
struct value * value_cast_pointers(struct type *type, struct value *arg2, int subclass_check)
Definition: valops.c:306
enum prompt_state prompt_state
Definition: top.h:131
CORE_ADDR gdbarch_push_dummy_code(struct gdbarch *gdbarch, CORE_ADDR sp, CORE_ADDR funaddr, struct value **args, int nargs, struct type *value_type, CORE_ADDR *real_pc, CORE_ADDR *bp_addr, struct regcache *regcache)
Definition: gdbarch.c:2412
Definition: ptid.h:35
CORE_ADDR gdbarch_convert_from_func_ptr_addr(struct gdbarch *gdbarch, CORE_ADDR addr, struct target_ops *targ)
Definition: gdbarch.c:3191
int using_struct_return(struct gdbarch *gdbarch, struct value *function, struct type *value_type)
Definition: value.c:3823
struct cmd_list_element * showlist
Definition: cli-cmds.c:119
struct_return
Definition: arm-tdep.h:88
#define TYPE_VECTOR(t)
Definition: gdbtypes.h:252
#define gdb_assert_not_reached(message)
Definition: gdb_assert.h:55
int get_traceframe_number(void)
Definition: tracepoint.c:2976
struct cleanup * make_cleanup(make_cleanup_ftype *function, void *arg)
Definition: cleanups.c:116
struct value * value_coerce_to_target(struct value *val)
Definition: valops.c:1388
Definition: gdbtypes.h:749
void finish_thread_state(ptid_t ptid)
Definition: thread.c:1052
struct gdbarch * get_type_arch(const struct type *type)
Definition: gdbtypes.c:234
void _initialize_infcall(void)
Definition: infcall.c:1416
enum return_value_convention gdbarch_return_value(struct gdbarch *gdbarch, struct value *function, struct type *valtype, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf)
Definition: gdbarch.c:2728
Definition: top.h:56
void maybe_remove_breakpoints(void)
Definition: infrun.c:8076
void push_thread_stack_temporary(ptid_t ptid, struct value *v)
Definition: thread.c:808
struct value * value_cast(struct type *type, struct value *arg2)
Definition: valops.c:351
struct thread_fsm * thread_fsm
Definition: gdbthread.h:337
int thread_fsm_finished_p(struct thread_fsm *self)
Definition: thread-fsm.c:84
ptid_t ptid
Definition: gdbthread.h:219
#define target_has_execution
Definition: target.h:1756
char * xstrprintf(const char *format,...)
Definition: common-utils.c:107
char c_style_arrays
Definition: language.h:309
CORE_ADDR gdbarch_push_dummy_call(struct gdbarch *gdbarch, struct value *function, struct regcache *regcache, CORE_ADDR bp_addr, int nargs, struct value **args, CORE_ADDR sp, int struct_return, CORE_ADDR struct_addr)
Definition: gdbarch.c:2371
struct value * get_last_thread_stack_temporary(ptid_t)
Definition: thread.c:842
static CORE_ADDR push_dummy_code(struct gdbarch *gdbarch, CORE_ADDR sp, CORE_ADDR funaddr, struct value **args, int nargs, struct type *value_type, CORE_ADDR *real_pc, CORE_ADDR *bp_addr, struct regcache *regcache)
Definition: infcall.c:329
struct gdbarch * gdbarch
Definition: infcall.c:397
#define gdb_assert(expr)
Definition: gdb_assert.h:32
Definition: value.c:169
void disable_watchpoints_before_interactive_call_start(void)
Definition: breakpoint.c:8477
int stopped_by_random_signal
Definition: infcmd.c:107
struct value * value_ref(struct value *arg1, enum type_code refcode)
Definition: valops.c:1521
void discard_infcall_control_state(struct infcall_control_state *)
Definition: infrun.c:9058
void throw_exception(struct gdb_exception exception)
bfd_byte gdb_byte
Definition: common-types.h:38
struct value * value_from_pointer(struct type *type, CORE_ADDR addr)
Definition: value.c:3560
#define XNEWVEC(T, N)
Definition: poison.h:145
void discard_cleanups(struct cleanup *old_chain)
Definition: cleanups.c:212
breakpoint_up set_momentary_breakpoint(struct gdbarch *gdbarch, struct symtab_and_line sal, struct frame_id frame_id, enum bptype type)
Definition: breakpoint.c:8545
const struct language_defn * current_language
Definition: language.c:81
CORE_ADDR entry_point_address(void)
Definition: objfiles.c:469
#define TYPE_TARGET_TYPE(thistype)
Definition: gdbtypes.h:1226
int gdbarch_frame_red_zone_size(struct gdbarch *gdbarch)
Definition: gdbarch.c:3175
struct type * builtin_double
Definition: gdbtypes.h:1511
struct bound_minimal_symbol lookup_minimal_symbol_by_pc(CORE_ADDR pc)
Definition: minsyms.c:928
void proceed(CORE_ADDR addr, enum gdb_signal siggnal)
Definition: infrun.c:2977
#define XCNEW(T)
Definition: poison.h:121
void ui_register_input_event_handler(struct ui *ui)
Definition: event-top.c:520
#define SYMBOL_BLOCK_VALUE(symbol)
Definition: symtab.h:467
struct breakpoint * set_longjmp_breakpoint_for_call_dummy(void)
Definition: breakpoint.c:7355
#define RAW_FUNCTION_ADDRESS_FORMAT
Definition: infcall.c:45
int stack_temporaries_enabled
Definition: infcall.c:413
#define TYPE_CODE(thistype)
Definition: gdbtypes.h:1238
static void show_unwind_on_terminating_exception_p(struct ui_file *file, int from_tty, struct cmd_list_element *c, const char *value)
Definition: infcall.c:119
void clear_proceed_status(int step)
Definition: infrun.c:2860
thread_control_state control
Definition: gdbthread.h:291
void error_call_unknown_return_type(const char *func_name)
Definition: infcall.c:346
void wait_sync_command_done(void)
Definition: top.c:497
prompt_state
Definition: top.h:31
const gdb_byte * gdbarch_breakpoint_from_pc(struct gdbarch *gdbarch, CORE_ADDR *pcptr, int *lenptr)
Definition: gdbarch.c:2844
CORE_ADDR find_function_addr(struct value *function, struct type **retval_type)
Definition: infcall.c:250
ptid_t inferior_ptid
Definition: infcmd.c:94
struct minimal_symbol * minsym
Definition: minsyms.h:34
struct interp * command_interp(void)
Definition: interps.c:321
struct program_space * pspace
Definition: symtab.h:1749
void add_setshow_boolean_cmd(const char *name, enum command_class theclass, int *var, const char *set_doc, const char *show_doc, const char *help_doc, cmd_const_sfunc_ftype *set_func, show_value_ftype *show_func, struct cmd_list_element **set_list, struct cmd_list_element **show_list)
Definition: cli-decode.c:569
#define TYPE_NFIELDS(thistype)
Definition: gdbtypes.h:1239
void set_std_terminate_breakpoint(void)
Definition: breakpoint.c:7450
static struct value * value_arg_coerce(struct gdbarch *gdbarch, struct value *arg, struct type *param_type, int is_prototyped, CORE_ADDR *sp)
Definition: infcall.c:139
CORE_ADDR pc
Definition: symtab.h:1759
static struct call_thread_fsm * new_call_thread_fsm(struct ui *waiting_ui, struct interp *cmd_interp, struct gdbarch *gdbarch, struct value *function, struct type *value_type, int struct_return_p, CORE_ADDR struct_addr)
Definition: infcall.c:506
void observer_notify_inferior_call_post(ptid_t thread, CORE_ADDR address)
int ptid_equal(const ptid_t &ptid1, const ptid_t &ptid2)
Definition: ptid.c:71
static struct value * get_call_return_value(struct call_return_meta_info *ri)
Definition: infcall.c:419
void observer_notify_inferior_call_pre(ptid_t thread, CORE_ADDR address)
struct program_space * current_program_space
Definition: progspace.c:35
static void show_unwind_on_signal_p(struct ui_file *file, int from_tty, struct cmd_list_element *c, const char *value)
Definition: infcall.c:95
static int ignore(struct target_ops *ops, struct gdbarch *gdbarch, struct bp_target_info *bp_tgt)
Definition: corelow.c:879
struct value * call_function_by_hand(struct value *function, type *default_return_type, int nargs, struct value **args)
Definition: infcall.c:690
int input_fd
Definition: top.h:123
const char * message
void value_force_lval(struct value *v, CORE_ADDR addr)
Definition: value.c:1839
static void cleanup_delete_std_terminate_breakpoint(void *ignore)
Definition: infcall.c:682
struct type * value_type(const struct value *value)
Definition: value.c:1095
#define SYMBOL_TYPE(symbol)
Definition: symtab.h:1161
struct value * ada_convert_actual(struct value *actual, struct type *formal_type0)
Definition: ada-lang.c:4497
CORE_ADDR value_as_address(struct value *val)
Definition: value.c:2762
int gdbarch_push_dummy_call_p(struct gdbarch *gdbarch)
Definition: gdbarch.c:2364
gdb_byte * value_contents_raw(struct value *value)
Definition: value.c:1158
static void show_coerce_float_to_double_p(struct ui_file *file, int from_tty, struct cmd_list_element *c, const char *value)
Definition: infcall.c:77
void delete_std_terminate_breakpoint(void)
Definition: breakpoint.c:7465
void thread_fsm_ctor(struct thread_fsm *self, struct thread_fsm_ops *ops, struct interp *cmd_interp)
Definition: thread-fsm.c:25
#define TYPE_LENGTH(thistype)
Definition: gdbtypes.h:1235
enum stop_stack_kind stop_stack_dummy
Definition: infcmd.c:102
static struct type * find_function_return_type(CORE_ADDR pc)
Definition: infcall.c:235
void write_memory(CORE_ADDR memaddr, const bfd_byte *myaddr, ssize_t len)
Definition: corefile.c:394
#define RAW_FUNCTION_ADDRESS_SIZE
Definition: infcall.c:46
CORE_ADDR value_address(const struct value *value)
Definition: value.c:1529
void enable_watchpoints_after_interactive_call_stop(void)
Definition: breakpoint.c:8492
void noprocess(void)
Definition: target.c:548
static int unwind_on_signal_p
Definition: infcall.c:93
struct type * builtin_void
Definition: gdbtypes.h:1500
struct value * function
Definition: infcall.c:400
void error(const char *fmt,...)
Definition: errors.c:38
void delete_file_handler(int fd)
Definition: event-loop.c:564
struct type * lookup_pointer_type(struct type *type)
Definition: gdbtypes.c:381
void thread_fsm_set_finished(struct thread_fsm *self)
Definition: thread-fsm.c:76
struct gdbarch * get_frame_arch(struct frame_info *this_frame)
Definition: frame.c:2691
struct cleanup * make_cleanup_restore_infcall_control_state(struct infcall_control_state *)
Definition: infrun.c:9052
void throw_error(enum errors error, const char *fmt,...)
#define gnu_ifunc_resolve_addr
Definition: symtab.h:1736
struct ui * waiting_ui
Definition: infcall.c:484
void do_cleanups(struct cleanup *old_chain)
Definition: cleanups.c:174
struct call_return_meta_info return_meta_info
Definition: infcall.c:476
int language_pass_by_reference(struct type *type)
Definition: language.c:660
enum return_reason reason
struct type * builtin_int
Definition: gdbtypes.h:1503
struct infcall_control_state * save_infcall_control_state(void)
Definition: infrun.c:8952
int gdbarch_return_in_first_hidden_param_p(struct gdbarch *gdbarch, struct type *type)
Definition: gdbarch.c:2745