| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- #include <assert.h>
- #include "type.h"
- #define arch_typedef(_a, _t) { \
- .ttype = T_TYPEDEF, \
- .tdef = { .name = #_a, .type = _t }, \
- }
- struct type t_s8 = arch_typedef(s8, &t_schar);
- struct type t_u8 = arch_typedef(u8, &t_uchar);
- struct type t_s16 = arch_typedef(s16, &t_sshort);
- struct type t_u16 = arch_typedef(u16, &t_ushort);
- struct type t_s32 = arch_typedef(s32, &t_sint);
- struct type t_u32 = arch_typedef(u32, &t_uint);
- struct type t_s64 = arch_typedef(s64, &t_slong);
- struct type t_u64 = arch_typedef(u64, &t_ulong);
- struct tfield f_pt_regs_fields[] = {
- { .name = "r15", .type = &t_ulong },
- { .name = "r14", .type = &t_ulong },
- { .name = "r13", .type = &t_ulong },
- { .name = "r12", .type = &t_ulong },
- { .name = "rbp", .type = &t_ulong },
- { .name = "rbx", .type = &t_ulong },
- { .name = "r11", .type = &t_ulong },
- { .name = "r10", .type = &t_ulong },
- { .name = "r9", .type = &t_ulong },
- { .name = "r8", .type = &t_ulong },
- { .name = "rax", .type = &t_ulong },
- { .name = "rcx", .type = &t_ulong },
- { .name = "rdx", .type = &t_ulong },
- { .name = "rsi", .type = &t_ulong },
- { .name = "rdi", .type = &t_ulong },
- { .name = "orig_rax", .type = &t_ulong },
- { .name = "rip", .type = &t_ulong },
- { .name = "cs", .type = &t_ulong },
- { .name = "eflags", .type = &t_ulong },
- { .name = "rsp", .type = &t_ulong },
- { .name = "ss", .type = &t_ulong },
- { .type = NULL }
- };
- struct type t_pt_regs = {
- .ttype = T_STRUCT,
- .sou = {
- .name = "pt_regs",
- .fields = f_pt_regs_fields,
- },
- };
- struct type *arch_types[] = {
- &t_s8, &t_u8,
- &t_s16, &t_u16,
- &t_s32, &t_u32,
- &t_s64, &t_u64,
- &t_pt_regs,
- NULL
- };
- const char *arch_register_argument(int num)
- {
- switch (num) {
- case 0: return "rdi";
- case 1: return "rsi";
- case 2: return "rdx";
- case 3: return "r10";
- case 4: return "r8";
- case 5: return "r9";
- }
- return NULL;
- }
- const char *arch_register_pc(void)
- {
- return "rip";
- }
- const char *arch_register_return(void)
- {
- return "rax";
- }
- __attribute__((constructor))
- static void arch_init(void)
- {
- type_add_list(arch_types);
- }
|