Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(901)

Side by Side Diff: gdb/infcall.c

Issue 124383005: GDB 7.6.50 (Closed) Base URL: http://git.chromium.org/native_client/nacl-gdb.git@upstream
Patch Set: Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « gdb/infcall.h ('k') | gdb/infcmd.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* Perform an inferior function call, for GDB, the GNU debugger. 1 /* Perform an inferior function call, for GDB, the GNU debugger.
2 2
3 Copyright (C) 1986-2012 Free Software Foundation, Inc. 3 Copyright (C) 1986-2013 Free Software Foundation, Inc.
4 4
5 This file is part of GDB. 5 This file is part of GDB.
6 6
7 This program is free software; you can redistribute it and/or modify 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 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 9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version. 10 (at your option) any later version.
11 11
12 This program is distributed in the hope that it will be useful, 12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details. 15 GNU General Public License for more details.
16 16
17 You should have received a copy of the GNU General Public License 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/>. */ 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
19 19
20 #include "defs.h" 20 #include "defs.h"
21 #include "breakpoint.h" 21 #include "breakpoint.h"
22 #include "tracepoint.h" 22 #include "tracepoint.h"
23 #include "target.h" 23 #include "target.h"
24 #include "regcache.h" 24 #include "regcache.h"
25 #include "inferior.h" 25 #include "inferior.h"
26 #include "gdb_assert.h" 26 #include "gdb_assert.h"
27 #include "block.h" 27 #include "block.h"
28 #include "gdbcore.h" 28 #include "gdbcore.h"
29 #include "language.h" 29 #include "language.h"
30 #include "objfiles.h" 30 #include "objfiles.h"
31 #include "gdbcmd.h" 31 #include "gdbcmd.h"
32 #include "command.h" 32 #include "command.h"
33 #include "gdb_string.h" 33 #include <string.h>
34 #include "infcall.h" 34 #include "infcall.h"
35 #include "dummy-frame.h" 35 #include "dummy-frame.h"
36 #include "ada-lang.h" 36 #include "ada-lang.h"
37 #include "gdbthread.h" 37 #include "gdbthread.h"
38 #include "exceptions.h" 38 #include "exceptions.h"
39 39
40 /* If we can't find a function's name from its address, 40 /* If we can't find a function's name from its address,
41 we print this instead. */ 41 we print this instead. */
42 #define RAW_FUNCTION_ADDRESS_FORMAT "at 0x%s" 42 #define RAW_FUNCTION_ADDRESS_FORMAT "at 0x%s"
43 #define RAW_FUNCTION_ADDRESS_SIZE (sizeof (RAW_FUNCTION_ADDRESS_FORMAT) \ 43 #define RAW_FUNCTION_ADDRESS_SIZE (sizeof (RAW_FUNCTION_ADDRESS_FORMAT) \
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
206 type = lookup_pointer_type (TYPE_TARGET_TYPE (type)); 206 type = lookup_pointer_type (TYPE_TARGET_TYPE (type));
207 break; 207 break;
208 case TYPE_CODE_UNDEF: 208 case TYPE_CODE_UNDEF:
209 case TYPE_CODE_PTR: 209 case TYPE_CODE_PTR:
210 case TYPE_CODE_STRUCT: 210 case TYPE_CODE_STRUCT:
211 case TYPE_CODE_UNION: 211 case TYPE_CODE_UNION:
212 case TYPE_CODE_VOID: 212 case TYPE_CODE_VOID:
213 case TYPE_CODE_SET: 213 case TYPE_CODE_SET:
214 case TYPE_CODE_RANGE: 214 case TYPE_CODE_RANGE:
215 case TYPE_CODE_STRING: 215 case TYPE_CODE_STRING:
216 case TYPE_CODE_BITSTRING:
217 case TYPE_CODE_ERROR: 216 case TYPE_CODE_ERROR:
218 case TYPE_CODE_MEMBERPTR: 217 case TYPE_CODE_MEMBERPTR:
219 case TYPE_CODE_METHODPTR: 218 case TYPE_CODE_METHODPTR:
220 case TYPE_CODE_METHOD: 219 case TYPE_CODE_METHOD:
221 case TYPE_CODE_COMPLEX: 220 case TYPE_CODE_COMPLEX:
222 default: 221 default:
223 break; 222 break;
224 } 223 }
225 224
226 return value_cast (type, arg); 225 return value_cast (type, arg);
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
349 { 348 {
350 { 349 {
351 struct symbol *symbol = find_pc_function (funaddr); 350 struct symbol *symbol = find_pc_function (funaddr);
352 351
353 if (symbol) 352 if (symbol)
354 return SYMBOL_PRINT_NAME (symbol); 353 return SYMBOL_PRINT_NAME (symbol);
355 } 354 }
356 355
357 { 356 {
358 /* Try the minimal symbols. */ 357 /* Try the minimal symbols. */
359 struct minimal_symbol *msymbol = lookup_minimal_symbol_by_pc (funaddr); 358 struct bound_minimal_symbol msymbol = lookup_minimal_symbol_by_pc (funaddr);
360 359
361 if (msymbol) 360 if (msymbol.minsym)
362 return SYMBOL_PRINT_NAME (msymbol); 361 return SYMBOL_PRINT_NAME (msymbol.minsym);
363 } 362 }
364 363
365 { 364 {
366 char *tmp = xstrprintf (_(RAW_FUNCTION_ADDRESS_FORMAT), 365 char *tmp = xstrprintf (_(RAW_FUNCTION_ADDRESS_FORMAT),
367 hex_string (funaddr)); 366 hex_string (funaddr));
368 367
369 gdb_assert (strlen (tmp) + 1 <= buf_size); 368 gdb_assert (strlen (tmp) + 1 <= buf_size);
370 strcpy (buf, tmp); 369 strcpy (buf, tmp);
371 xfree (tmp); 370 xfree (tmp);
372 return buf; 371 return buf;
(...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after
702 args[i] = value_addr (args[i]); 701 args[i] = value_addr (args[i]);
703 } 702 }
704 } 703 }
705 704
706 /* Reserve space for the return structure to be written on the 705 /* Reserve space for the return structure to be written on the
707 stack, if necessary. Make certain that the value is correctly 706 stack, if necessary. Make certain that the value is correctly
708 aligned. */ 707 aligned. */
709 708
710 if (struct_return || hidden_first_param_p) 709 if (struct_return || hidden_first_param_p)
711 { 710 {
712 int len = TYPE_LENGTH (values_type);
713
714 if (gdbarch_inner_than (gdbarch, 1, 2)) 711 if (gdbarch_inner_than (gdbarch, 1, 2))
715 { 712 {
716 /* Stack grows downward. Align STRUCT_ADDR and SP after 713 /* Stack grows downward. Align STRUCT_ADDR and SP after
717 making space for the return value. */ 714 making space for the return value. */
718 » sp -= len; 715 » sp -= TYPE_LENGTH (values_type);
719 if (gdbarch_frame_align_p (gdbarch)) 716 if (gdbarch_frame_align_p (gdbarch))
720 sp = gdbarch_frame_align (gdbarch, sp); 717 sp = gdbarch_frame_align (gdbarch, sp);
721 struct_addr = sp; 718 struct_addr = sp;
722 } 719 }
723 else 720 else
724 { 721 {
725 /* Stack grows upward. Align the frame, allocate space, and 722 /* Stack grows upward. Align the frame, allocate space, and
726 then again, re-align the frame??? */ 723 then again, re-align the frame??? */
727 if (gdbarch_frame_align_p (gdbarch)) 724 if (gdbarch_frame_align_p (gdbarch))
728 sp = gdbarch_frame_align (gdbarch, sp); 725 sp = gdbarch_frame_align (gdbarch, sp);
729 struct_addr = sp; 726 struct_addr = sp;
730 » sp += len; 727 » sp += TYPE_LENGTH (values_type);
731 if (gdbarch_frame_align_p (gdbarch)) 728 if (gdbarch_frame_align_p (gdbarch))
732 sp = gdbarch_frame_align (gdbarch, sp); 729 sp = gdbarch_frame_align (gdbarch, sp);
733 } 730 }
734 } 731 }
735 732
736 if (hidden_first_param_p) 733 if (hidden_first_param_p)
737 { 734 {
738 struct value **new_args; 735 struct value **new_args;
739 736
740 /* Add the new argument to the front of the argument list. */ 737 /* Add the new argument to the front of the argument list. */
(...skipping 385 matching lines...) Expand 10 before | Expand all | Expand 10 after
1126 what gdb should do if a std::terminate() call is made from the\n\ 1123 what gdb should do if a std::terminate() call is made from the\n\
1127 default exception handler. If set, gdb unwinds the stack and restores\n\ 1124 default exception handler. If set, gdb unwinds the stack and restores\n\
1128 the context to what it was before the call. If unset, gdb allows the\n\ 1125 the context to what it was before the call. If unset, gdb allows the\n\
1129 std::terminate call to proceed.\n\ 1126 std::terminate call to proceed.\n\
1130 The default is to unwind the frame."), 1127 The default is to unwind the frame."),
1131 NULL, 1128 NULL,
1132 show_unwind_on_terminating_exception_p, 1129 show_unwind_on_terminating_exception_p,
1133 &setlist, &showlist); 1130 &setlist, &showlist);
1134 1131
1135 } 1132 }
OLDNEW
« no previous file with comments | « gdb/infcall.h ('k') | gdb/infcmd.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698