55#include "tracewrap.h"
66#include "qemu/log.h"
77
8- const char * regs [8 ] = {"EAX_32" , "ECX_32" , "EDX_32" , "EBX_32" , "ESP_32" , "EBP_32" , "ESI_32" , "EDI_32" };
9- const char * segs [6 ] = {"ES_BASE_32" , "CS_BASE_32" , "SS_BASE_32" , "DS_BASE_32" , "FS_BASE_32" , "GS_BASE_32" };
8+
9+ static const char * const regs [CPU_NB_REGS ] = {
10+ #ifdef TARGET_X86_64
11+ [R_EAX ] = "RAX" ,
12+ [R_EBX ] = "RBX" ,
13+ [R_ECX ] = "RCX" ,
14+ [R_EDX ] = "RDX" ,
15+ [R_ESI ] = "RSI" ,
16+ [R_EDI ] = "RDI" ,
17+ [R_EBP ] = "RBP" ,
18+ [R_ESP ] = "RSP" ,
19+ [8 ] = "R8" ,
20+ [9 ] = "R9" ,
21+ [10 ] = "R10" ,
22+ [11 ] = "R11" ,
23+ [12 ] = "R12" ,
24+ [13 ] = "R13" ,
25+ [14 ] = "R14" ,
26+ [15 ] = "R15" ,
27+ #else
28+ [R_EAX ] = "EAX" ,
29+ [R_EBX ] = "EBX" ,
30+ [R_ECX ] = "ECX" ,
31+ [R_EDX ] = "EDX" ,
32+ [R_ESI ] = "ESI" ,
33+ [R_EDI ] = "EDI" ,
34+ [R_EBP ] = "EBP" ,
35+ [R_ESP ] = "ESP" ,
36+ #endif
37+ };
1038
1139#define CPU_NB_SEGS 6
40+ static const char * const segs [CPU_NB_SEGS ] = {
41+ [R_ES ] = "ES_BASE" ,
42+ [R_CS ] = "CS_BASE" ,
43+ [R_SS ] = "SS_BASE" ,
44+ [R_DS ] = "DS_BASE" ,
45+ [R_FS ] = "FS_BASE" ,
46+ [R_GS ] = "GS_BASE"
47+ };
1248
1349void HELPER (trace_newframe )(target_ulong pc )
1450{
1551 qemu_trace_newframe (pc , 0 );
1652}
1753
18- void HELPER (trace_endframe )(CPUArchState * env , target_ulong old_pc , uint32_t size )
54+ void HELPER (trace_endframe )(CPUArchState * env , target_ulong old_pc , target_ulong size )
1955{
2056 //qemu_trace_endframe(env, env->eip - size, size);
2157 qemu_trace_endframe (env , old_pc , size );
2258}
2359
24- OperandInfo * load_store_reg (uint32_t reg , uint32_t val , int ls )
60+ OperandInfo * load_store_reg (target_ulong reg , target_ulong val , int ls )
2561{
2662 //fprintf(stderr, "load_store_reg: reg: (%s) 0x%d, val: 0x%08x, ls: %d\n", (reg < CPU_NB_REGS) ? regs[reg] : "EFLAGS", reg, val, ls);
2763 RegOperand * ro = (RegOperand * )malloc (sizeof (RegOperand ));
2864 reg_operand__init (ro );
2965 int isSeg = reg & (1 << SEG_BIT );
3066 reg &= ~(1 << SEG_BIT );
3167
32- char * reg_name = ( char * ) malloc ( 16 ) ;
68+ const char * reg_name = NULL ;
3369 if (isSeg )
3470 {
35- sprintf ( reg_name , "R_%s" , ( reg < CPU_NB_SEGS ) ? segs [reg ] : "<UNDEF>" ) ;
71+ reg_name = reg < CPU_NB_SEGS ? segs [reg ] : "<UNDEF>" ;
3672 } else {
37- sprintf (reg_name , "R_%s" , (reg < CPU_NB_REGS ) ? regs [reg ] : "EFLAGS" );
73+ reg_name = reg < CPU_NB_REGS ? regs [reg ] :
74+ #ifdef TARGET_X86_64
75+ "RFLAGS" ;
76+ #else
77+ "EFLAGS" ;
78+ #endif
3879 }
39- ro -> name = reg_name ;
80+ ro -> name = malloc (strlen (reg_name ) + 1 );
81+ strcpy (ro -> name , reg_name );
4082
4183 OperandInfoSpecific * ois = (OperandInfoSpecific * )malloc (sizeof (OperandInfoSpecific ));
4284 operand_info_specific__init (ois );
@@ -55,25 +97,25 @@ OperandInfo * load_store_reg(uint32_t reg, uint32_t val, int ls)
5597 oi -> bit_length = 0 ;
5698 oi -> operand_info_specific = ois ;
5799 oi -> operand_usage = ou ;
58- oi -> value .len = 4 ;
100+ oi -> value .len = sizeof ( val ) ;
59101 oi -> value .data = malloc (oi -> value .len );
60- memcpy (oi -> value .data , & val , 4 );
102+ memcpy (oi -> value .data , & val , sizeof ( val ) );
61103
62104 return oi ;
63105}
64106
65- void HELPER (trace_load_reg )(uint32_t reg , uint32_t val )
107+ void HELPER (trace_load_reg )(target_ulong reg , target_ulong val )
66108{
67- qemu_log ("This register (r%d ) was read. Value 0x%x \n" , reg , val );
109+ qemu_log ("This register (r" TARGET_FMT_ld " ) was read. Value 0x" TARGET_FMT_lx " \n" , reg , val );
68110
69111 OperandInfo * oi = load_store_reg (reg , val , 0 );
70112
71113 qemu_trace_add_operand (oi , 0x1 );
72114}
73115
74- void HELPER (trace_store_reg )(uint32_t reg , uint32_t val )
116+ void HELPER (trace_store_reg )(target_ulong reg , target_ulong val )
75117{
76- qemu_log ("This register (r%d ) was written. Value: 0x%x \n" , reg , val );
118+ qemu_log ("This register (r" TARGET_FMT_ld " ) was written. Value: 0x" TARGET_FMT_lx " \n" , reg , val );
77119
78120 OperandInfo * oi = load_store_reg (reg , val , 1 );
79121
@@ -102,7 +144,7 @@ void HELPER(trace_store_eflags)(CPUArchState *env)
102144 qemu_trace_add_operand (oi , 0x2 );
103145}
104146
105- OperandInfo * load_store_mem (uint32_t addr , uint32_t val , int ls , int len )
147+ OperandInfo * load_store_mem (target_ulong addr , target_ulong val , int ls , int len )
106148{
107149 //fprintf(stderr, "load_store_mem: addr: 0x%08x, val: 0x%08x, ls: %d\n", addr, val, ls);
108150 MemOperand * mo = (MemOperand * )malloc (sizeof (MemOperand ));
@@ -134,20 +176,20 @@ OperandInfo * load_store_mem(uint32_t addr, uint32_t val, int ls, int len)
134176 return oi ;
135177}
136178
137- void HELPER (trace_ld )(CPUArchState * env , uint32_t val , uint32_t addr )
179+ void HELPER (trace_ld )(CPUArchState * env , target_ulong val , target_ulong addr )
138180{
139- qemu_log ("This was a read 0x" TARGET_FMT_lx " addr:0x%x value:0x%x \n" , env -> eip , addr , val );
181+ qemu_log ("This was a read 0x" TARGET_FMT_lx " addr:0x" TARGET_FMT_lx " value:0x" TARGET_FMT_lx " \n" , env -> eip , addr , val );
140182
141- OperandInfo * oi = load_store_mem (addr , val , 0 , 4 );
183+ OperandInfo * oi = load_store_mem (addr , val , 0 , sizeof ( val ) );
142184
143185 qemu_trace_add_operand (oi , 0x1 );
144186}
145187
146- void HELPER (trace_st )(CPUArchState * env , uint32_t val , uint32_t addr )
188+ void HELPER (trace_st )(CPUArchState * env , target_ulong val , target_ulong addr )
147189{
148- qemu_log ("This was a store 0x" TARGET_FMT_lx " addr:0x%x value:0x%x \n" , env -> eip , addr , val );
190+ qemu_log ("This was a store 0x" TARGET_FMT_lx " addr:0x" TARGET_FMT_lx " value:0x" TARGET_FMT_lx " \n" , env -> eip , addr , val );
149191
150- OperandInfo * oi = load_store_mem (addr , val , 1 , 4 );
192+ OperandInfo * oi = load_store_mem (addr , val , 1 , sizeof ( val ) );
151193
152194 qemu_trace_add_operand (oi , 0x2 );
153195}
0 commit comments