Revision c16f9ed3 linux-user/strace.c
b/linux-user/strace.c | ||
---|---|---|
16 | 16 |
char *name; |
17 | 17 |
char *format; |
18 | 18 |
void (*call)(struct syscallname *, |
19 |
target_long, target_long, target_long,
|
|
20 |
target_long, target_long, target_long);
|
|
21 |
void (*result)(struct syscallname *, target_long);
|
|
19 |
abi_long, abi_long, abi_long,
|
|
20 |
abi_long, abi_long, abi_long);
|
|
21 |
void (*result)(struct syscallname *, abi_long);
|
|
22 | 22 |
}; |
23 | 23 |
|
24 | 24 |
/* |
... | ... | |
74 | 74 |
gemu_log("%d",cmd); |
75 | 75 |
} |
76 | 76 |
|
77 |
#ifdef TARGET_NR__newselect |
|
77 | 78 |
static void |
78 |
print_fdset(int n, target_ulong target_fds_addr)
|
|
79 |
print_fdset(int n, abi_ulong target_fds_addr)
|
|
79 | 80 |
{ |
80 | 81 |
int i; |
81 | 82 |
|
... | ... | |
101 | 102 |
} |
102 | 103 |
|
103 | 104 |
static void |
104 |
print_timeval(target_ulong tv_addr)
|
|
105 |
print_timeval(abi_ulong tv_addr)
|
|
105 | 106 |
{ |
106 | 107 |
if( tv_addr ) { |
107 | 108 |
struct target_timeval *tv; |
... | ... | |
115 | 116 |
} else |
116 | 117 |
gemu_log("NULL"); |
117 | 118 |
} |
119 |
#endif |
|
118 | 120 |
|
119 | 121 |
/* |
120 | 122 |
* Sysycall specific output functions |
121 | 123 |
*/ |
122 | 124 |
|
123 | 125 |
/* select */ |
126 |
#ifdef TARGET_NR__newselect |
|
124 | 127 |
static long newselect_arg1 = 0; |
125 | 128 |
static long newselect_arg2 = 0; |
126 | 129 |
static long newselect_arg3 = 0; |
... | ... | |
129 | 132 |
|
130 | 133 |
static void |
131 | 134 |
print_newselect(struct syscallname *name, |
132 |
target_long arg1, target_long arg2, target_long arg3,
|
|
133 |
target_long arg4, target_long arg5, target_long arg6)
|
|
135 |
abi_long arg1, abi_long arg2, abi_long arg3,
|
|
136 |
abi_long arg4, abi_long arg5, abi_long arg6)
|
|
134 | 137 |
{ |
135 |
gemu_log("%s(" TARGET_FMT_ld ",", name->name, arg1); |
|
138 |
gemu_log("%s(" TARGET_ABI_FMT_ld ",", name->name, arg1);
|
|
136 | 139 |
print_fdset(arg1, arg2); |
137 | 140 |
gemu_log(","); |
138 | 141 |
print_fdset(arg1, arg3); |
... | ... | |
149 | 152 |
newselect_arg4=arg4; |
150 | 153 |
newselect_arg5=arg5; |
151 | 154 |
} |
155 |
#endif |
|
152 | 156 |
|
153 | 157 |
static void |
154 | 158 |
print_semctl(struct syscallname *name, |
155 |
target_long arg1, target_long arg2, target_long arg3,
|
|
156 |
target_long arg4, target_long arg5, target_long arg6)
|
|
159 |
abi_long arg1, abi_long arg2, abi_long arg3,
|
|
160 |
abi_long arg4, abi_long arg5, abi_long arg6)
|
|
157 | 161 |
{ |
158 |
gemu_log("%s(" TARGET_FMT_ld "," TARGET_FMT_ld ",", name->name, arg1, arg2);
|
|
162 |
gemu_log("%s(" TARGET_ABI_FMT_ld "," TARGET_ABI_FMT_ld ",", name->name, arg1, arg2);
|
|
159 | 163 |
print_ipc_cmd(arg3); |
160 |
gemu_log(",0x" TARGET_FMT_lx ")", arg4); |
|
164 |
gemu_log(",0x" TARGET_ABI_FMT_lx ")", arg4);
|
|
161 | 165 |
} |
162 | 166 |
|
163 | 167 |
static void |
164 | 168 |
print_execve(struct syscallname *name, |
165 |
target_long arg1, target_long arg2, target_long arg3,
|
|
166 |
target_long arg4, target_long arg5, target_long arg6)
|
|
169 |
abi_long arg1, abi_long arg2, abi_long arg3,
|
|
170 |
abi_long arg4, abi_long arg5, abi_long arg6)
|
|
167 | 171 |
{ |
168 |
target_ulong arg_ptr_addr;
|
|
172 |
abi_ulong arg_ptr_addr;
|
|
169 | 173 |
char *s; |
170 | 174 |
|
171 | 175 |
if (!(s = lock_user_string(arg1))) |
... | ... | |
173 | 177 |
gemu_log("%s(\"%s\",{", name->name, s); |
174 | 178 |
unlock_user(s, arg1, 0); |
175 | 179 |
|
176 |
for (arg_ptr_addr = arg2; ; arg_ptr_addr += sizeof(target_ulong)) {
|
|
177 |
target_ulong *arg_ptr, arg_addr, s_addr;
|
|
180 |
for (arg_ptr_addr = arg2; ; arg_ptr_addr += sizeof(abi_ulong)) {
|
|
181 |
abi_ulong *arg_ptr, arg_addr, s_addr;
|
|
178 | 182 |
|
179 |
arg_ptr = lock_user(VERIFY_READ, arg_ptr_addr, sizeof(target_ulong), 1);
|
|
183 |
arg_ptr = lock_user(VERIFY_READ, arg_ptr_addr, sizeof(abi_ulong), 1);
|
|
180 | 184 |
if (!arg_ptr) |
181 | 185 |
return; |
182 | 186 |
arg_addr = tswapl(*arg_ptr); |
... | ... | |
192 | 196 |
gemu_log("NULL})"); |
193 | 197 |
} |
194 | 198 |
|
199 |
#ifdef TARGET_NR_ipc |
|
195 | 200 |
static void |
196 | 201 |
print_ipc(struct syscallname *name, |
197 |
target_long arg1, target_long arg2, target_long arg3,
|
|
198 |
target_long arg4, target_long arg5, target_long arg6)
|
|
202 |
abi_long arg1, abi_long arg2, abi_long arg3,
|
|
203 |
abi_long arg4, abi_long arg5, abi_long arg6)
|
|
199 | 204 |
{ |
200 | 205 |
switch(arg1) { |
201 | 206 |
case IPCOP_semctl: |
... | ... | |
203 | 208 |
print_semctl(name,arg2,arg3,arg4,arg5,arg6,0); |
204 | 209 |
break; |
205 | 210 |
default: |
206 |
gemu_log("%s(" TARGET_FMT_ld "," TARGET_FMT_ld "," TARGET_FMT_ld "," TARGET_FMT_ld ")",
|
|
211 |
gemu_log("%s(" TARGET_ABI_FMT_ld "," TARGET_ABI_FMT_ld "," TARGET_ABI_FMT_ld "," TARGET_ABI_FMT_ld ")",
|
|
207 | 212 |
name->name, arg1, arg2, arg3, arg4); |
208 | 213 |
} |
209 | 214 |
} |
215 |
#endif |
|
210 | 216 |
|
211 | 217 |
/* |
212 | 218 |
* Variants for the return value output function |
213 | 219 |
*/ |
214 | 220 |
|
215 | 221 |
static void |
216 |
print_syscall_ret_addr(struct syscallname *name, target_long ret)
|
|
222 |
print_syscall_ret_addr(struct syscallname *name, abi_long ret)
|
|
217 | 223 |
{ |
218 | 224 |
if( ret == -1 ) { |
219 | 225 |
gemu_log(" = -1 errno=%d (%s)\n", errno, target_strerror(errno)); |
220 | 226 |
} else { |
221 |
gemu_log(" = " TARGET_FMT_lx "\n", ret); |
|
227 |
gemu_log(" = " TARGET_ABI_FMT_lx "\n", ret);
|
|
222 | 228 |
} |
223 | 229 |
} |
224 | 230 |
|
225 | 231 |
#if 0 /* currently unused */ |
226 | 232 |
static void |
227 |
print_syscall_ret_raw(struct syscallname *name, target_long ret)
|
|
233 |
print_syscall_ret_raw(struct syscallname *name, abi_long ret)
|
|
228 | 234 |
{ |
229 |
gemu_log(" = " TARGET_FMT_lx "\n", ret); |
|
235 |
gemu_log(" = " TARGET_ABI_FMT_lx "\n", ret);
|
|
230 | 236 |
} |
231 | 237 |
#endif |
232 | 238 |
|
233 | 239 |
#ifdef TARGET_NR__newselect |
234 | 240 |
static void |
235 |
print_syscall_ret_newselect(struct syscallname *name, target_long ret)
|
|
241 |
print_syscall_ret_newselect(struct syscallname *name, abi_long ret)
|
|
236 | 242 |
{ |
237 |
gemu_log(" = " TARGET_FMT_lx " (", ret); |
|
243 |
gemu_log(" = " TARGET_ABI_FMT_lx " (", ret);
|
|
238 | 244 |
print_fdset(newselect_arg1,newselect_arg2); |
239 | 245 |
gemu_log(","); |
240 | 246 |
print_fdset(newselect_arg1,newselect_arg3); |
... | ... | |
261 | 267 |
*/ |
262 | 268 |
void |
263 | 269 |
print_syscall(int num, |
264 |
target_long arg1, target_long arg2, target_long arg3,
|
|
265 |
target_long arg4, target_long arg5, target_long arg6)
|
|
270 |
abi_long arg1, abi_long arg2, abi_long arg3,
|
|
271 |
abi_long arg4, abi_long arg5, abi_long arg6)
|
|
266 | 272 |
{ |
267 | 273 |
int i; |
268 | 274 |
char *format="%s(%ld,%ld,%ld,%ld,%ld,%ld)"; |
... | ... | |
284 | 290 |
|
285 | 291 |
|
286 | 292 |
void |
287 |
print_syscall_ret(int num, target_long ret)
|
|
293 |
print_syscall_ret(int num, abi_long ret)
|
|
288 | 294 |
{ |
289 | 295 |
int i; |
290 | 296 |
|
... | ... | |
294 | 300 |
scnames[i].result(&scnames[i],ret); |
295 | 301 |
} else { |
296 | 302 |
if( ret < 0 ) { |
297 |
gemu_log(" = -1 errno=%d (%s)\n", -ret, target_strerror(-ret));
|
|
303 |
gemu_log(" = -1 errno=" TARGET_ABI_FMT_ld " (%s)\n", -ret, target_strerror(-ret));
|
|
298 | 304 |
} else { |
299 |
gemu_log(" = %d\n", ret);
|
|
305 |
gemu_log(" = " TARGET_ABI_FMT_ld "\n", ret);
|
|
300 | 306 |
} |
301 | 307 |
} |
302 | 308 |
break; |
Also available in: Unified diff