| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- #include <assert.h>
- #include <linux/ptrace.h>
- #include "type.h"
- #define arch_typedef(_a, _t) { \
- .ttype = T_TYPEDEF, \
- .t = { .tdef = { .name = #_a, .type = _t } }, \
- }
- #define arch_pointer(_t) { \
- .ttype = T_POINTER, \
- .t = { .pointer = { .type = _t } }, \
- }
- type_t t_s8 = arch_typedef(s8, &t_c);
- type_t t_s8p = arch_pointer(&t_s8);
- type_t t_u8 = arch_typedef(u8, &t_uc);
- type_t t_u8p = arch_pointer(&t_u8);
- type_t t_s16 = arch_typedef(s16, &t_s);
- type_t t_s16p = arch_pointer(&t_s16);
- type_t t_u16 = arch_typedef(u16, &t_us);
- type_t t_u16p = arch_pointer(&t_u16);
- type_t t_s32 = arch_typedef(s32, &t_i);
- type_t t_s32p = arch_pointer(&t_s32);
- type_t t_u32 = arch_typedef(u32, &t_ui);
- type_t t_u32p = arch_pointer(&t_u32);
- type_t t_s64 = arch_typedef(s64, &t_l);
- type_t t_s64p = arch_pointer(&t_s64);
- type_t t_u64 = arch_typedef(u64, &t_ul);
- type_t t_u64p = arch_pointer(&t_u64);
- field_t f_pt_regs_fields[] = {
- { .name = "r15", .type = &t_ul },
- { .name = "r14", .type = &t_ul },
- { .name = "r13", .type = &t_ul },
- { .name = "r12", .type = &t_ul },
- { .name = "rbp", .type = &t_ul },
- { .name = "rbx", .type = &t_ul },
- { .name = "r11", .type = &t_ul },
- { .name = "r10", .type = &t_ul },
- { .name = "r9", .type = &t_ul },
- { .name = "r8", .type = &t_ul },
- { .name = "rax", .type = &t_ul },
- { .name = "rcx", .type = &t_ul },
- { .name = "rdx", .type = &t_ul },
- { .name = "rsi", .type = &t_ul },
- { .name = "rdi", .type = &t_ul },
- { .name = "orig_rax", .type = &t_ul },
- { .name = "rip", .type = &t_ul },
- { .name = "cs", .type = &t_ul },
- { .name = "eflags", .type = &t_ul },
- { .name = "rsp", .type = &t_ul },
- { .name = "ss", .type = &t_ul },
- { .type = NULL }
- };
- type_t t_pt_regs = {
- .ttype = T_STRUCT,
- .t.sou = {
- .name = "pt_regs",
- .fields = f_pt_regs_fields,
- },
- };
- type_t t_pt_regsp = {
- .ttype = T_POINTER,
- .t.pointer = {
- .type = &t_pt_regs,
- }
- };
- type_t *arch_types[] = {
- &t_s8, &t_s8p, &t_u8, &t_u8p,
- &t_s16, &t_s16p, &t_u16, &t_u16p,
- &t_s32, &t_s32p, &t_u32, &t_u32p,
- &t_s64, &t_s64p, &t_u64, &t_u64p,
- &t_pt_regs,
- NULL
- };
- __attribute__((constructor))
- static void arch_init(void)
- {
- type_add_list(arch_types);
- assert(t_pt_regs.size == sizeof(struct pt_regs));
- }
|