Index: gdb/gdbarch.sh |
diff --git a/gdb/gdbarch.sh b/gdb/gdbarch.sh |
index 06294abc40eea08e1db86b04dcc401a1d50a6b7c..a678a781e45fa0b7c85cfa0bc457cc9c88c25e52 100755 |
--- a/gdb/gdbarch.sh |
+++ b/gdb/gdbarch.sh |
@@ -2,7 +2,7 @@ |
# Architecture commands for GDB, the GNU debugger. |
# |
-# Copyright (C) 1998-2012 Free Software Foundation, Inc. |
+# Copyright (C) 1998-2013 Free Software Foundation, Inc. |
# |
# This file is part of GDB. |
# |
@@ -47,7 +47,10 @@ do_read () |
{ |
comment="" |
class="" |
- while read line |
+ # On some SH's, 'read' trims leading and trailing whitespace by |
+ # default (e.g., bash), while on others (e.g., dash), it doesn't. |
+ # Set IFS to empty to disable the trimming everywhere. |
+ while IFS='' read line |
do |
if test "${line}" = "" |
then |
@@ -466,13 +469,11 @@ m:const char *:register_name:int regnr:regnr::0 |
# use "register_type". |
M:struct type *:register_type:int reg_nr:reg_nr |
-# See gdbint.texinfo, and PUSH_DUMMY_CALL. |
M:struct frame_id:dummy_id:struct frame_info *this_frame:this_frame |
# Implement DUMMY_ID and PUSH_DUMMY_CALL, then delete |
# deprecated_fp_regnum. |
v:int:deprecated_fp_regnum:::-1:-1::0 |
-# See gdbint.texinfo. See infcall.c. |
M:CORE_ADDR:push_dummy_call: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:function, regcache, bp_addr, nargs, args, sp, struct_return, struct_addr |
v:int:call_dummy_location::::AT_ENTRY_POINT::0 |
M:CORE_ADDR:push_dummy_code: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:sp, funaddr, args, nargs, value_type, real_pc, bp_addr, regcache |
@@ -485,8 +486,13 @@ M:void:print_vector_info:struct ui_file *file, struct frame_info *frame, const c |
m:int:register_sim_regno:int reg_nr:reg_nr::legacy_register_sim_regno::0 |
m:int:cannot_fetch_register:int regnum:regnum::cannot_register_not::0 |
m:int:cannot_store_register:int regnum:regnum::cannot_register_not::0 |
-# setjmp/longjmp support. |
+ |
+# Determine the address where a longjmp will land and save this address |
+# in PC. Return nonzero on success. |
+# |
+# FRAME corresponds to the longjmp frame. |
F:int:get_longjmp_target:struct frame_info *frame, CORE_ADDR *pc:frame, pc |
+ |
# |
v:int:believe_pcc_promotion::::::: |
# |
@@ -574,9 +580,6 @@ m:CORE_ADDR:convert_from_func_ptr_addr:CORE_ADDR addr, struct target_ops *targ:a |
# sort of generic thing to handle alignment or segmentation (it's |
# possible it should be in TARGET_READ_PC instead). |
m:CORE_ADDR:addr_bits_remove:CORE_ADDR addr:addr::core_addr_identity::0 |
-# It is not at all clear why gdbarch_smash_text_address is not folded into |
-# gdbarch_addr_bits_remove. |
-m:CORE_ADDR:smash_text_address:CORE_ADDR addr:addr::core_addr_identity::0 |
# FIXME/cagney/2001-01-18: This should be split in two. A target method that |
# indicates if the target needs software single step. An ISA method to |
@@ -589,7 +592,7 @@ m:CORE_ADDR:smash_text_address:CORE_ADDR addr:addr::core_addr_identity::0 |
# FIXME/cagney/2001-01-18: The logic is backwards. It should be asking if the |
# target can single step. If not, then implement single step using breakpoints. |
# |
-# A return value of 1 means that the software_single_step breakpoints |
+# A return value of 1 means that the software_single_step breakpoints |
# were inserted; 0 means they were not. |
F:int:software_single_step:struct frame_info *frame:frame |
@@ -641,6 +644,13 @@ v:struct core_regset_section *:core_regset_sections:const char *name, int len::: |
# Create core file notes |
M:char *:make_corefile_notes:bfd *obfd, int *note_size:obfd, note_size |
+# The elfcore writer hook to use to write Linux prpsinfo notes to core |
+# files. Most Linux architectures use the same prpsinfo32 or |
+# prpsinfo64 layouts, and so won't need to provide this hook, as we |
+# call the Linux generic routines in bfd to write prpsinfo notes by |
+# default. |
+F:char *:elfcore_write_linux_prpsinfo:bfd *obfd, char *note_data, int *note_size, const struct elf_internal_linux_prpsinfo *info:obfd, note_data, note_size, info |
+ |
# Find core file memory regions |
M:int:find_memory_regions:find_memory_region_ftype func, void *data:func, data |
@@ -648,6 +658,10 @@ M:int:find_memory_regions:find_memory_region_ftype func, void *data:func, data |
# core file into buffer READBUF with length LEN. |
M:LONGEST:core_xfer_shared_libraries:gdb_byte *readbuf, ULONGEST offset, LONGEST len:readbuf, offset, len |
+# Read offset OFFSET of TARGET_OBJECT_LIBRARIES_AIX formatted shared |
+# libraries list from core file into buffer READBUF with length LEN. |
+M:LONGEST:core_xfer_shared_libraries_aix:gdb_byte *readbuf, ULONGEST offset, LONGEST len:readbuf, offset, len |
+ |
# How the core target converts a PTID from a core file to a string. |
M:char *:core_pid_to_str:ptid_t ptid:ptid |
@@ -788,6 +802,15 @@ M:int:process_record_signal:struct regcache *regcache, enum gdb_signal signal:re |
# (target_wait, target_resume, etc.). |
M:enum gdb_signal:gdb_signal_from_target:int signo:signo |
+# Signal translation: translate the GDB's internal signal number into |
+# the inferior's signal (target's) representation. The implementation |
+# of this method must be host independent. IOW, don't rely on symbols |
+# of the NAT_FILE header (the nm-*.h files), the host <signal.h> |
+# header, or similar headers. |
+# Return the target signal number if found, or -1 if the GDB internal |
+# signal number is invalid. |
+M:int:gdb_signal_to_target:enum gdb_signal signal:signal |
+ |
# Extra signal info inspection. |
# |
# Return a type suitable to inspect extra signal information. |
@@ -809,10 +832,10 @@ M:LONGEST:get_syscall_number:ptid_t ptid:ptid |
# \$10 ;; integer constant 10 |
# |
# in this case, this prefix would be the character \`\$\'. |
-v:const char *:stap_integer_prefix:::0:0::0:gdbarch->stap_integer_prefix |
+v:const char *:stap_integer_prefix:::0:0::0:pstring (gdbarch->stap_integer_prefix) |
# Suffix used to mark an integer constant on the architecture's assembly. |
-v:const char *:stap_integer_suffix:::0:0::0:gdbarch->stap_integer_suffix |
+v:const char *:stap_integer_suffix:::0:0::0:pstring (gdbarch->stap_integer_suffix) |
# Prefix used to mark a register name on the architecture's assembly. |
# For example, on x86 the register name is written as: |
@@ -820,10 +843,10 @@ v:const char *:stap_integer_suffix:::0:0::0:gdbarch->stap_integer_suffix |
# \%eax ;; register eax |
# |
# in this case, this prefix would be the character \`\%\'. |
-v:const char *:stap_register_prefix:::0:0::0:gdbarch->stap_register_prefix |
+v:const char *:stap_register_prefix:::0:0::0:pstring (gdbarch->stap_register_prefix) |
# Suffix used to mark a register name on the architecture's assembly |
-v:const char *:stap_register_suffix:::0:0::0:gdbarch->stap_register_suffix |
+v:const char *:stap_register_suffix:::0:0::0:pstring (gdbarch->stap_register_suffix) |
# Prefix used to mark a register indirection on the architecture's assembly. |
# For example, on x86 the register indirection is written as: |
@@ -834,7 +857,7 @@ v:const char *:stap_register_suffix:::0:0::0:gdbarch->stap_register_suffix |
# |
# Please note that we use the indirection prefix also for register |
# displacement, e.g., \`4\(\%eax\)\' on x86. |
-v:const char *:stap_register_indirection_prefix:::0:0::0:gdbarch->stap_register_indirection_prefix |
+v:const char *:stap_register_indirection_prefix:::0:0::0:pstring (gdbarch->stap_register_indirection_prefix) |
# Suffix used to mark a register indirection on the architecture's assembly. |
# For example, on x86 the register indirection is written as: |
@@ -845,7 +868,7 @@ v:const char *:stap_register_indirection_prefix:::0:0::0:gdbarch->stap_register_ |
# |
# Please note that we use the indirection suffix also for register |
# displacement, e.g., \`4\(\%eax\)\' on x86. |
-v:const char *:stap_register_indirection_suffix:::0:0::0:gdbarch->stap_register_indirection_suffix |
+v:const char *:stap_register_indirection_suffix:::0:0::0:pstring (gdbarch->stap_register_indirection_suffix) |
# Prefix used to name a register using GDB's nomenclature. |
# |
@@ -853,10 +876,10 @@ v:const char *:stap_register_indirection_suffix:::0:0::0:gdbarch->stap_register_ |
# language (e.g., \`10\' is the 10th general-purpose register). However, |
# inside GDB this same register has an \`r\' appended to its name, so the 10th |
# register would be represented as \`r10\' internally. |
-v:const char *:stap_gdb_register_prefix:::0:0::0:gdbarch->stap_gdb_register_prefix |
+v:const char *:stap_gdb_register_prefix:::0:0::0:pstring (gdbarch->stap_gdb_register_prefix) |
# Suffix used to name a register using GDB's nomenclature. |
-v:const char *:stap_gdb_register_suffix:::0:0::0:gdbarch->stap_gdb_register_suffix |
+v:const char *:stap_gdb_register_suffix:::0:0::0:pstring (gdbarch->stap_gdb_register_suffix) |
# Check if S is a single operand. |
# |
@@ -943,6 +966,11 @@ m:void:gen_return_address:struct agent_expr *ax, struct axs_value *value, CORE_A |
# Implement the "info proc" command. |
M:void:info_proc:char *args, enum info_proc_what what:args, what |
+# Implement the "info proc" command for core files. Noe that there |
+# are two "info_proc"-like methods on gdbarch -- one for core files, |
+# one for live targets. |
+M:void:core_info_proc:char *args, enum info_proc_what what:args, what |
+ |
# Iterate over all objfiles in the order that makes the most sense |
# for the architecture to make global symbol searches. |
# |
@@ -958,6 +986,8 @@ M:void:info_proc:char *args, enum info_proc_what what:args, what |
# inspected when the symbol search was requested. |
m:void:iterate_over_objfiles_in_search_order:iterate_over_objfiles_in_search_order_cb_ftype *cb, void *cb_data, struct objfile *current_objfile:cb, cb_data, current_objfile:0:default_iterate_over_objfiles_in_search_order::0 |
+# Ravenscar arch-dependent ops. |
+v:struct ravenscar_arch_ops *:ravenscar_ops:::NULL:NULL::0:host_address_to_string (gdbarch->ravenscar_ops) |
EOF |
} |
@@ -1006,12 +1036,12 @@ compare_new gdbarch.log |
copyright () |
{ |
cat <<EOF |
-/* *INDENT-OFF* */ /* THIS FILE IS GENERATED */ |
+/* *INDENT-OFF* */ /* THIS FILE IS GENERATED -*- buffer-read-only: t -*- */ |
+/* vi:set ro: */ |
/* Dynamic architecture support for GDB, the GNU debugger. |
- Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, |
- 2007, 2008, 2009 Free Software Foundation, Inc. |
+ Copyright (C) 1998-2013 Free Software Foundation, Inc. |
This file is part of GDB. |
@@ -1074,18 +1104,28 @@ struct syscall; |
struct agent_expr; |
struct axs_value; |
struct stap_parse_info; |
+struct ravenscar_arch_ops; |
+struct elf_internal_linux_prpsinfo; |
+ |
+/* The architecture associated with the inferior through the |
+ connection to the target. |
-/* The architecture associated with the connection to the target. |
- |
- The architecture vector provides some information that is really |
- a property of the target: The layout of certain packets, for instance; |
- or the solib_ops vector. Etc. To differentiate architecture accesses |
- to per-target properties from per-thread/per-frame/per-objfile properties, |
- accesses to per-target properties should be made through target_gdbarch. |
+ The architecture vector provides some information that is really a |
+ property of the inferior, accessed through a particular target: |
+ ptrace operations; the layout of certain RSP packets; the solib_ops |
+ vector; etc. To differentiate architecture accesses to |
+ per-inferior/target properties from |
+ per-thread/per-frame/per-objfile properties, accesses to |
+ per-inferior/target properties should be made through this |
+ gdbarch. */ |
+ |
+/* This is a convenience wrapper for 'current_inferior ()->gdbarch'. */ |
+extern struct gdbarch *target_gdbarch (void); |
+ |
+/* The initial, default architecture. It uses host values (for want of a better |
+ choice). */ |
+extern struct gdbarch startup_gdbarch; |
- Eventually, when support for multiple targets is implemented in |
- GDB, this global should be made target-specific. */ |
-extern struct gdbarch *target_gdbarch; |
/* Callback type for the 'iterate_over_objfiles_in_search_order' |
gdbarch method. */ |
@@ -1322,15 +1362,9 @@ extern int gdbarch_update_p (struct gdbarch_info info); |
extern struct gdbarch *gdbarch_find_by_info (struct gdbarch_info info); |
-/* Helper function. Set the global "target_gdbarch" to "gdbarch". |
- |
- FIXME: kettenis/20031124: Of the functions that follow, only |
- gdbarch_from_bfd is supposed to survive. The others will |
- dissappear since in the future GDB will (hopefully) be truly |
- multi-arch. However, for now we're still stuck with the concept of |
- a single active architecture. */ |
+/* Helper function. Set the target gdbarch to "gdbarch". */ |
-extern void deprecated_target_gdbarch_select_hack (struct gdbarch *gdbarch); |
+extern void set_target_gdbarch (struct gdbarch *gdbarch); |
/* Register per-architecture data-pointer. |
@@ -1375,7 +1409,7 @@ extern void set_gdbarch_from_file (bfd *); |
extern void initialize_current_architecture (void); |
/* gdbarch trace variable */ |
-extern int gdbarch_debug; |
+extern unsigned int gdbarch_debug; |
extern void gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file); |
@@ -1404,7 +1438,7 @@ cat <<EOF |
#include "floatformat.h" |
#include "gdb_assert.h" |
-#include "gdb_string.h" |
+#include <string.h> |
#include "reggroups.h" |
#include "osabi.h" |
#include "gdb_obstack.h" |
@@ -1421,7 +1455,7 @@ static void alloc_gdbarch_data (struct gdbarch *); |
#ifndef GDBARCH_DEBUG |
#define GDBARCH_DEBUG 0 |
#endif |
-int gdbarch_debug = GDBARCH_DEBUG; |
+unsigned int gdbarch_debug = GDBARCH_DEBUG; |
static void |
show_gdbarch_debug (struct ui_file *file, int from_tty, |
struct cmd_list_element *c, const char *value) |
@@ -1478,9 +1512,6 @@ printf " /* per-architecture data-pointers. */\n" |
printf " unsigned nr_data;\n" |
printf " void **data;\n" |
printf "\n" |
-printf " /* per-architecture swap-regions. */\n" |
-printf " struct gdbarch_swap *swap;\n" |
-printf "\n" |
cat <<EOF |
/* Multi-arch values. |
@@ -1546,8 +1577,8 @@ done |
cat <<EOF |
/* target specific vector and its dump routine. */ |
NULL, NULL, |
- /*per-architecture data-pointers and swap regions. */ |
- 0, NULL, NULL, |
+ /*per-architecture data-pointers. */ |
+ 0, NULL, |
/* Multi-arch values */ |
EOF |
function_list | while do_read |
@@ -1561,7 +1592,6 @@ cat <<EOF |
/* startup_gdbarch() */ |
}; |
-struct gdbarch *target_gdbarch = &startup_gdbarch; |
EOF |
# Create a new gdbarch struct |
@@ -2276,21 +2306,29 @@ gdbarch_find_by_info (struct gdbarch_info info) |
/* Make the specified architecture current. */ |
void |
-deprecated_target_gdbarch_select_hack (struct gdbarch *new_gdbarch) |
+set_target_gdbarch (struct gdbarch *new_gdbarch) |
{ |
gdb_assert (new_gdbarch != NULL); |
gdb_assert (new_gdbarch->initialized_p); |
- target_gdbarch = new_gdbarch; |
+ current_inferior ()->gdbarch = new_gdbarch; |
observer_notify_architecture_changed (new_gdbarch); |
registers_changed (); |
} |
+/* Return the current inferior's arch. */ |
+ |
+struct gdbarch * |
+target_gdbarch (void) |
+{ |
+ return current_inferior ()->gdbarch; |
+} |
+ |
extern void _initialize_gdbarch (void); |
void |
_initialize_gdbarch (void) |
{ |
- add_setshow_zinteger_cmd ("arch", class_maintenance, &gdbarch_debug, _("\\ |
+ add_setshow_zuinteger_cmd ("arch", class_maintenance, &gdbarch_debug, _("\\ |
Set architecture debugging."), _("\\ |
Show architecture debugging."), _("\\ |
When non-zero, architecture debugging is enabled."), |