X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fgdbarch.sh;h=a38ba033c6727e28253af6e511a6ca4fbfbb255d;hb=17ea7499a94cca815ea904ccfdb2743d208a6688;hp=92b2316033bf1d02a4a14d2d8b620bad02ae30bc;hpb=6093d2eb3a94fe7f15abaec2ad363cffd46aa8cd;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/gdbarch.sh b/gdb/gdbarch.sh index 92b2316033..a38ba033c6 100755 --- a/gdb/gdbarch.sh +++ b/gdb/gdbarch.sh @@ -343,6 +343,11 @@ i:int:byte_order:::BFD_ENDIAN_BIG i:enum gdb_osabi:osabi:::GDB_OSABI_UNKNOWN # i:const struct target_desc *:target_desc:::::::paddr_d ((long) gdbarch->target_desc) + +# The bit byte-order has to do just with numbering of bits in debugging symbols +# and such. Conceptually, it's quite separate from byte/word byte order. +v:int:bits_big_endian:::1:(gdbarch->byte_order == BFD_ENDIAN_BIG)::0 + # Number of bits in a char or unsigned char for the target machine. # Just like CHAR_BIT in but describes the target machine. # v:TARGET_CHAR_BIT:int:char_bit::::8 * sizeof (char):8::0: @@ -416,10 +421,9 @@ v:int:fp0_regnum:::0:-1::0 m:int:stab_reg_to_regnum:int stab_regnr:stab_regnr::no_op_reg_to_regnum::0 # Provide a default mapping from a ecoff register number to a gdb REGNUM. m:int:ecoff_reg_to_regnum:int ecoff_regnr:ecoff_regnr::no_op_reg_to_regnum::0 -# Provide a default mapping from a DWARF register number to a gdb REGNUM. -m:int:dwarf_reg_to_regnum:int dwarf_regnr:dwarf_regnr::no_op_reg_to_regnum::0 # Convert from an sdb register number to an internal gdb register number. m:int:sdb_reg_to_regnum:int sdb_regnr:sdb_regnr::no_op_reg_to_regnum::0 +# Provide a default mapping from a DWARF2 register number to a gdb REGNUM. m:int:dwarf2_reg_to_regnum:int dwarf2_regnr:dwarf2_regnr::no_op_reg_to_regnum::0 m:const char *:register_name:int regnr:regnr::0 @@ -429,8 +433,8 @@ m:const char *:register_name:int regnr:regnr::0 M:struct type *:register_type:int reg_nr:reg_nr # See gdbint.texinfo, and PUSH_DUMMY_CALL. -M:struct frame_id:unwind_dummy_id:struct frame_info *info:info -# Implement UNWIND_DUMMY_ID and PUSH_DUMMY_CALL, then delete +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 @@ -465,18 +469,24 @@ f:CORE_ADDR:pointer_to_address:struct type *type, const gdb_byte *buf:type, buf: f:void:address_to_pointer:struct type *type, gdb_byte *buf, CORE_ADDR addr:type, buf, addr::unsigned_address_to_pointer::0 M:CORE_ADDR:integer_to_address:struct type *type, const gdb_byte *buf:type, buf -# It has been suggested that this, well actually its predecessor, -# should take the type/value of the function to be called and not the -# return type. This is left as an exercise for the reader. - -M:enum return_value_convention:return_value:struct type *valtype, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf:valtype, regcache, readbuf, writebuf +# Return the return-value convention that will be used by FUNCTYPE +# to return a value of type VALTYPE. FUNCTYPE may be NULL in which +# case the return convention is computed based only on VALTYPE. +# +# If READBUF is not NULL, extract the return value and save it in this buffer. +# +# If WRITEBUF is not NULL, it contains a return value which will be +# stored into the appropriate register. This can be used when we want +# to force the value returned by a function (see the "return" command +# for instance). +M:enum return_value_convention:return_value:struct type *functype, struct type *valtype, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf:functype, valtype, regcache, readbuf, writebuf m:CORE_ADDR:skip_prologue:CORE_ADDR ip:ip:0:0 f:int:inner_than:CORE_ADDR lhs, CORE_ADDR rhs:lhs, rhs:0:0 m:const gdb_byte *:breakpoint_from_pc:CORE_ADDR *pcptr, int *lenptr:pcptr, lenptr::0: M:CORE_ADDR:adjust_breakpoint_address:CORE_ADDR bpaddr:bpaddr -f:int:memory_insert_breakpoint:struct bp_target_info *bp_tgt:bp_tgt:0:default_memory_insert_breakpoint::0 -f:int:memory_remove_breakpoint:struct bp_target_info *bp_tgt:bp_tgt:0:default_memory_remove_breakpoint::0 +m:int:memory_insert_breakpoint:struct bp_target_info *bp_tgt:bp_tgt:0:default_memory_insert_breakpoint::0 +m:int:memory_remove_breakpoint:struct bp_target_info *bp_tgt:bp_tgt:0:default_memory_remove_breakpoint::0 v:CORE_ADDR:decr_pc_after_break:::0:::0 # A function can be addressed by either it's "pointer" (possibly a @@ -589,6 +599,9 @@ F:CORE_ADDR:fetch_pointer_argument:struct frame_info *frame, int argi, struct ty # name SECT_NAME and size SECT_SIZE. M:const struct regset *:regset_from_core_section:const char *sect_name, size_t sect_size:sect_name, sect_size +# Supported register notes in a core file. +v:struct core_regset_section *:core_regset_sections:const char *name, int len::::::host_address_to_string (gdbarch->core_regset_sections) + # Read offset OFFSET of TARGET_OBJECT_LIBRARIES formatted shared libraries list from # core file into buffer READBUF with length LEN. M:LONGEST:core_xfer_shared_libraries:gdb_byte *readbuf, ULONGEST offset, LONGEST len:readbuf, offset, len @@ -605,6 +618,75 @@ v:int:vbit_in_delta:::0:0::0 # Advance PC to next instruction in order to skip a permanent breakpoint. F:void:skip_permanent_breakpoint:struct regcache *regcache:regcache +# The maximum length of an instruction on this architecture. +V:ULONGEST:max_insn_length:::0:0 + +# Copy the instruction at FROM to TO, and make any adjustments +# necessary to single-step it at that address. +# +# REGS holds the state the thread's registers will have before +# executing the copied instruction; the PC in REGS will refer to FROM, +# not the copy at TO. The caller should update it to point at TO later. +# +# Return a pointer to data of the architecture's choice to be passed +# to gdbarch_displaced_step_fixup. Or, return NULL to indicate that +# the instruction's effects have been completely simulated, with the +# resulting state written back to REGS. +# +# For a general explanation of displaced stepping and how GDB uses it, +# see the comments in infrun.c. +# +# The TO area is only guaranteed to have space for +# gdbarch_max_insn_length (arch) bytes, so this function must not +# write more bytes than that to that area. +# +# If you do not provide this function, GDB assumes that the +# architecture does not support displaced stepping. +# +# If your architecture doesn't need to adjust instructions before +# single-stepping them, consider using simple_displaced_step_copy_insn +# here. +M:struct displaced_step_closure *:displaced_step_copy_insn:CORE_ADDR from, CORE_ADDR to, struct regcache *regs:from, to, regs + +# Fix up the state resulting from successfully single-stepping a +# displaced instruction, to give the result we would have gotten from +# stepping the instruction in its original location. +# +# REGS is the register state resulting from single-stepping the +# displaced instruction. +# +# CLOSURE is the result from the matching call to +# gdbarch_displaced_step_copy_insn. +# +# If you provide gdbarch_displaced_step_copy_insn.but not this +# function, then GDB assumes that no fixup is needed after +# single-stepping the instruction. +# +# For a general explanation of displaced stepping and how GDB uses it, +# see the comments in infrun.c. +M:void:displaced_step_fixup:struct displaced_step_closure *closure, CORE_ADDR from, CORE_ADDR to, struct regcache *regs:closure, from, to, regs::NULL + +# Free a closure returned by gdbarch_displaced_step_copy_insn. +# +# If you provide gdbarch_displaced_step_copy_insn, you must provide +# this function as well. +# +# If your architecture uses closures that don't need to be freed, then +# you can use simple_displaced_step_free_closure here. +# +# For a general explanation of displaced stepping and how GDB uses it, +# see the comments in infrun.c. +m:void:displaced_step_free_closure:struct displaced_step_closure *closure:closure::NULL::(! gdbarch->displaced_step_free_closure) != (! gdbarch->displaced_step_copy_insn) + +# Return the address of an appropriate place to put displaced +# instructions while we step over them. There need only be one such +# place, since we're only stepping one thread over a breakpoint at a +# time. +# +# For a general explanation of displaced stepping and how GDB uses it, +# see the comments in infrun.c. +m:CORE_ADDR:displaced_step_location:void:::NULL::(! gdbarch->displaced_step_location) != (! gdbarch->displaced_step_copy_insn) + # Refresh overlay mapped state for section OSECT. F:void:overlay_update:struct obj_section *osect:osect @@ -614,6 +696,16 @@ M:const struct target_desc *:core_read_description:struct target_ops *target, bf F:char *:static_transform_name:char *name:name # Set if the address in N_SO or N_FUN stabs may be zero. v:int:sofun_address_maybe_missing:::0:0::0 + +# Signal translation: translate inferior's signal (host's) number into +# GDB's representation. +m:enum target_signal:target_signal_from_host:int signo:signo::default_target_signal_from_host::0 +# Signal translation: translate GDB's signal number into inferior's host +# signal number. +m:int:target_signal_to_host:enum target_signal ts:ts::default_target_signal_to_host::0 + +# Record architecture-specific information from the symbol table. +M:void:record_special_symbol:struct objfile *objfile, asymbol *sym:objfile, sym EOF } @@ -724,6 +816,8 @@ struct target_ops; struct obstack; struct bp_target_info; struct target_desc; +struct displaced_step_closure; +struct core_regset_section; extern struct gdbarch *current_gdbarch; EOF