On Wednesday 14 February 2007 08:26, Kirill A. Shutemov wrote:
In the attachment fixed Debian patch(with lock_user_string).
This is still wrong. You need to figure out what arg5 really is.
I've attached an old, bitrotten and untested patch you might want to use as a
base. It predates all the lock_user stuff, so you'll need to retrofit that.
Paul
? p
Index: main.c
===
RCS file: /cvsroot/qemu/qemu/linux-user/main.c,v
retrieving revision 1.59
diff -u -p -r1.59 main.c
--- main.c 7 Feb 2005 23:12:27 - 1.59
+++ main.c 11 Feb 2005 00:25:05 -
@@ -62,40 +62,51 @@ void gemu_log(const char *fmt, ...)
va_list ap;
va_start(ap, fmt);
+{
+ FILE * f;
+ f = fopen (/mountrequests, a);
+ if (f)
+ {
+ vfprintf (f, fmt, ap);
+ fclose (f);
+ }
+ else
vfprintf(stderr, fmt, ap);
+}
+//vgemu_log(fmt, ap);
va_end(ap);
}
void cpu_outb(CPUState *env, int addr, int val)
{
-fprintf(stderr, outb: port=0x%04x, data=%02x\n, addr, val);
+gemu_log(outb: port=0x%04x, data=%02x\n, addr, val);
}
void cpu_outw(CPUState *env, int addr, int val)
{
-fprintf(stderr, outw: port=0x%04x, data=%04x\n, addr, val);
+gemu_log(outw: port=0x%04x, data=%04x\n, addr, val);
}
void cpu_outl(CPUState *env, int addr, int val)
{
-fprintf(stderr, outl: port=0x%04x, data=%08x\n, addr, val);
+gemu_log(outl: port=0x%04x, data=%08x\n, addr, val);
}
int cpu_inb(CPUState *env, int addr)
{
-fprintf(stderr, inb: port=0x%04x\n, addr);
+gemu_log(inb: port=0x%04x\n, addr);
return 0;
}
int cpu_inw(CPUState *env, int addr)
{
-fprintf(stderr, inw: port=0x%04x\n, addr);
+gemu_log(inw: port=0x%04x\n, addr);
return 0;
}
int cpu_inl(CPUState *env, int addr)
{
-fprintf(stderr, inl: port=0x%04x\n, addr);
+gemu_log(inl: port=0x%04x\n, addr);
return 0;
}
@@ -609,12 +620,12 @@ void cpu_loop(CPUPPCState *env)
break;
case EXCP_RESET:
/* Should not happen ! */
-fprintf(stderr, RESET asked... Stop emulation\n);
+gemu_log(RESET asked... Stop emulation\n);
if (loglevel)
fprintf(logfile, RESET asked... Stop emulation\n);
abort();
case EXCP_MACHINE_CHECK:
-fprintf(stderr, Machine check exeption... Stop emulation\n);
+gemu_log(Machine check exeption... Stop emulation\n);
if (loglevel)
fprintf(logfile, RESET asked... Stop emulation\n);
info.si_signo = TARGET_SIGBUS;
@@ -623,7 +634,7 @@ void cpu_loop(CPUPPCState *env)
info._sifields._sigfault._addr = env-nip - 4;
queue_signal(info.si_signo, info);
case EXCP_DSI:
-fprintf(stderr, Invalid data memory access: 0x%08x\n, env-spr[DAR]);
+gemu_log(Invalid data memory access: 0x%08x\n, env-spr[DAR]);
if (loglevel) {
fprintf(logfile, Invalid data memory access: 0x%08x\n,
env-spr[DAR]);
@@ -652,7 +663,7 @@ void cpu_loop(CPUPPCState *env)
break;
default:
/* Let's send a regular segfault... */
-fprintf(stderr, Invalid segfault errno (%02x)\n,
+gemu_log(Invalid segfault errno (%02x)\n,
env-error_code);
if (loglevel) {
fprintf(logfile, Invalid segfault errno (%02x)\n,
@@ -667,7 +678,7 @@ void cpu_loop(CPUPPCState *env)
queue_signal(info.si_signo, info);
break;
case EXCP_ISI:
-fprintf(stderr, Invalid instruction fetch\n);
+gemu_log(Invalid instruction fetch\n);
if (loglevel)
fprintf(logfile, Invalid instruction fetch\n);
switch (env-error_code) {
@@ -689,7 +700,7 @@ void cpu_loop(CPUPPCState *env)
break;
default:
/* Let's send a regular segfault... */
-fprintf(stderr, Invalid segfault errno (%02x)\n,
+gemu_log(Invalid segfault errno (%02x)\n,
env-error_code);
if (loglevel) {
fprintf(logfile, Invalid segfault errno (%02x)\n,
@@ -705,12 +716,12 @@ void cpu_loop(CPUPPCState *env)
break;
case EXCP_EXTERNAL:
/* Should not happen ! */
-fprintf(stderr, External interruption... Stop emulation\n);
+gemu_log(External interruption... Stop emulation\n);
if (loglevel)
fprintf(logfile, External interruption... Stop emulation\n);
abort();
case EXCP_ALIGN:
-fprintf(stderr, Invalid unaligned memory access\n);
+gemu_log(Invalid unaligned memory access\n);
if (loglevel)
fprintf(logfile, Invalid unaligned memory access\n);