[转]GDBINT gdb internal Notes …
来源:互联网 发布:阿里云静态资源 编辑:程序博客网 时间:2024/06/03 17:35
Operating System ABI VariantHandling
OS的ABI主要影响target defination的两个部分:sniffers andhandlers.
handler
defs.h
OS ABI framework 接口函数:
const
void
void
enum
void
Initializing a NewArchitecture
Registers andMemory
GDB 采用的target machine模型是十分简单的:GDB假定一种机器包含一组寄存器和一块内存,每个寄存器有一定的大小.GDB把寄存器的一切封装到像 gdbarch_register_name这样的一系列函数中,继而做到正确处理.GDB 支持各种endian的机器:big-endian, little-endian,bi-endian(request commnet).
Pointers Are Not AlwaysAddresses
有些特殊的平台,同一个word,其用于codepointer和datapointe的时候有不同的解释,比如D10V,同样是0xC020,当用于数据地址的时候代表地址0xC020,但是用于代码地址的时候,需要转换一下,代表0x30080(详见D10V或者GDBINT).所以在GDB中,对于address和pointer是区分对待的.address代表字节地址,而pointer指向特定的数据类型:dataor code or other....,pointer需要转换以下才是address,大部分平台是相等的值,部分平台需要移位等操作.但是大部分平台上,这两者是等价的,以下函数用于转换pointer和address: (详见GDBINT)
CORE_ADDR
CORE_ADDR
CORE_ADDR
CORE_ADDR
CORE_ADDR
void
AddressClasses
当不同种类的address可以而从调试信息中(如DWARF2)获取时,应该定义以下宏来支持GDB认知这些区别,或者给GDB user提供类型信息.
int
int
祥见GDBINT.
Raw andVirtual Register Representations
注:这里描述的内容已经过时,请参考下一节.
一些体系结构在寄存器和内存中对一个值的表达方式是不同的.用GDB的术语来定义,在寄存器中的表达方式叫raw
在几乎所有的体系上,数据类型的virtual和rawrepresentations 是一致的.但是有例外,如:
intREGISTER_CONVERTIBLE
intDEPRECATED_REGISTER_RAW_SIZE
intDEPRECATED_REGISTER_VIRTUAL_SIZE
structtype
voidREGISTER_CONVERT_TO_VIRTUAL
voidREGISTER_CONVERT_TO_RAW
Using Different Register and Memory DataRepresentations
Maintainer's note:GDB操作寄存器的方式正在变革中,详见
这里解决的问题和上一节一样:x86 80-bit浮点寄存器,还有Alpha 可以把32 bit integer values 存到floating-pointregisters.
这种问题也可以定义如下的宏来解决:
int
voidgdbarch_register_to_value
voidgdbarch_value_to_register
voidREGISTER_CONVERT_TO_TYPE
int gdbarch_char_signed(gdbarch)
int gdbarch_double_bit(gdbarch)
int gdbarch_float_bit (gdbarch)
int gdbarch_int_bit (gdbarch)
int gdbarch_long_bit (gdbarch)
int gdbarch_long_double_bit(gdbarch)
int gdbarch_long_long_bit(gdbarch)
int gdbarch_ptr_bit (gdbarch)
int gdbarch_short_bit (gdbarch)
int gdbarch_cannot_store_register(gdbarch, regnum)
int gdbarch_convert_register_p(gdbarch, regnum, struct type *type)
void gdbarch_value_to_register(gdbarch, frame, type, buf)
int gdbarch_sp_regnum(gdbarch)
register_reggroup_p (gdbarch, regnum, reggroup)
DEPRECATED_REGISTER_VIRTUAL_SIZE (reg)
DEPRECATED_REGISTER_VIRTUAL_TYPE (reg)
struct type *register_type (gdbarch, reg)
REGISTER_CONVERT_TO_VIRTUAL(reg, type, from, to)
const struct regset *regset_from_core_section (struct gdbarch *gdbarch, const char * sect_name, size_tsect_size)
voidgdbarch_register_to_value(gdbarch, frame, regnum, type, fur)
int gdbarch_stab_reg_to_regnum(gdbarch, stab_regnr)
void gdbarch_store_return_value (gdbarch, type, regcache,valbuf)
gdbarch_ps_regnum(gdbarch
int gdbarch_sdb_reg_to_regnum(gdbarch, sdb_regnr)
StackFrame:
SOFTWARE_SINGLE_STEP_P()
SOFTWARE_SINGLE_STEP(signal,insert_breakpoints_p)
DEPRECATED_FRAME_SAVED_PC(frame)
CORE_ADDR gdbarch_unwind_pc(next_frame)
CORE_ADDR gdbarch_unwind_sp(gdbarch, next_frame)
CORE_ADDR frame_align (gdbarch,address)
int gdbarch_frame_red_zone_size(gdbarch)
DEPRECATED_FRAME_CHAIN(frame)
DEPRECATED_FRAME_CHAIN_VALID(chain,thisframe)
DEPRECATED_FRAME_INIT_SAVED_REGS(frame)
int gdbarch_frame_num_args(gdbarch, frame)
void gdbarch_extract_return_value(gdbarch, type, regbuf, valbuf)
DEPRECATED_FP_REGNUM
DEPRECATED_FRAMELESS_FUNCTION_INVOCATION(fi)
FUNCTION_EPILOGUE_SIZE
DEPRECATED_FUNCTION_START_OFFSET
int gdbarch_inner_than (gdbarch, lhs, rhs)
gdbarch_get_longjmp_target
TARGET_READ_FP
CORE_ADDR gdbarch_read_pc (gdbarch,regcache)
gdbarch_write_pc (gdbarch, regcache, val)
DEPRECATED_USE_STRUCT_CONVENTION (gcc_p, type)
CORE_ADDR
int
int
int gdbarch_stabs_argument_has_addr(gdbarch, type)
CORE_ADDR gdbarch_skip_prologue (gdbarch, ip)
CORE_ADDR gdbarch_push_dummy_call (gdbarch, function, regcache,bp_addr, nargs, args, sp, struct_return, struct_addr)
CORE_ADDR gdbarch_push_dummy_code (gdbarch, sp, funaddr, using_gcc,args, nargs, value_type, real_pc, bp_addr, regcache)
DEPRECATED_REG_STRUCT_HAS_ADDR (gcc_p,type)
Addresspointer:
int address_class_name_to_type_flags (gdbarch, name,type_flags_ptr)int address_class_name_to_type_flags_p (gdbarch)
int gdbarch_address_class_type_flags (gdbarch, byte_size,dwarf2_addr_class)int gdbarch_address_class_type_flags_p(gdbarch)const char *gdbarch_address_class_type_flags_to_name(gdbarch, type_flags)
int gdbarch_address_class_type_flags_to_name_p(gdbarch)
DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS_P()
Compiler and BFD:
int
int gdbarch_dwarf2_reg_to_regnum(gdbarch, dwarf2_regnr)
int gdbarch_ecoff_reg_to_regnum(gdbarch, ecoff_regnr)
int gdbarch_dwarf_reg_to_regnum(gdbarch, dwarf_regnr)
GCC_COMPILED_FLAG_SYMBOL
GCC2_COMPILED_FLAG_SYMBOL
SOFUN_ADDRESS_MAYBE_MISSING
PROCESS_LINENUMBER_HOOK
VARIABLES_INSIDE_BLOCK (desc,gcc_p)
BreakPoint wathpoint
BREAKPOINT:定义breakpoint使用的指令,不能长于最短指令.如果采用trap则不必定义.如果才用非法指令或者其他值则必须定义TARGET_HAS_HARDWARE_WATCHPOINTSBIG_BREAKPOINT LITTLE_BREAKPOINT :类似BREAKPOINT, 但是用于 bi-endiantargets.const gdb_byte *gdbarch_breakpoint_from_pc
gdbarch_memory_remove_breakpoint
I386_USE_GENERIC_WATCHPOINTS
DISABLE_UNSETTABLE_BREAK (addr)
CORE_ADDR gdbarch_decr_pc_after_break(gdbarch)
void gdbarch_skip_permanent_breakpoint (gdbarch,regcache)
UserInterface
voidgdbarch_print_float_info (gdbarch, file, frame,args)
void gdbarch_print_registers_info (gdbarch, frame, regnum,all)
int gdbarch_print_vector_info (gdbarch, file, frame,args)
int gdbarch_print_insn (gdbarch, vma, info)
frame_id gdbarch_unwind_dummy_id (gdbarch, frame)
Motorola M68K:
BPT_VECTOR
REMOTE_BPT_VECTOR:
const char *gdbarch_name_of_malloc(gdbarch)
Misc:
DEPRECATED_IBM6000_TARGET
SYMBOL_RELOADING_DEFAULT
- [转]GDBINT gdb internal Notes …
- [转]GDBINT gdb internal Notes …
- [转]GDBINT gdb internal Notes …
- [转]GDBINT gdb internal Notes …
- [转]GDBINT gdb internal Notes …
- [转]GDBINT gdb internal Notes …
- [转] 彼尔…
- ORA-00700: soft internal error, …
- ORA-00600: internal er…
- [转]GCC 4.6 warning: variable …
- [转]GCC 4.6 warning: variable …
-  
- Lotus Notes 中Sametime 无法自动…
- 集线器 交换机 路由器 网桥 …
- HTTP 错误 500.0 - Internal Serve…
- HTTP error 500 Internal server e…
-
- 使用BBED修改SCN …
- Elipse插件开发之打ZIP安装包
- [转] linux的压缩解压命令 —— tar…
- linux的命令混合使用
- [转]Gdb/Armulator 源代码分析
- [转]GDBINT gdb internal Notes …
- [转]GDBINT gdb internal Notes …
- [转]GDBINT gdb internal Notes …
- undefined reference to 'pthread_…
- 【转】gcc命令
- [转]Linux下运行OProfile进行系…
- [转]linux shell if 参数
- [转]再谈shell之“>/dev/null 2>&…
- [转]逃离x86架构
- [转]CPU体系结构CISC与RISC之争