25 |
* SUCH DAMAGE. |
* SUCH DAMAGE. |
26 |
* |
* |
27 |
* |
* |
28 |
* $Id: useremul.c,v 1.62 2005/08/16 06:49:26 debug Exp $ |
* $Id: useremul.c,v 1.64 2005/08/27 17:29:06 debug Exp $ |
29 |
* |
* |
30 |
* Userland (syscall) emulation. |
* Userland (syscall) emulation. |
31 |
* |
* |
32 |
* TODO: |
* TODO: |
33 |
* |
* |
34 |
* NetBSD/pmax: |
* environment passing for most emulation modes |
35 |
* environment passing |
* |
36 |
* more syscalls |
* implement more syscalls |
37 |
* |
* |
38 |
* 32-bit vs 64-bit problems? MIPS n32, o32, n64? |
* 32-bit vs 64-bit problems? MIPS n32, o32, n64? |
39 |
* |
* |
232 |
} |
} |
233 |
break; |
break; |
234 |
|
|
235 |
|
case ARCH_ALPHA: |
236 |
|
debug("useremul__netbsd_setup(): ALPHA: TODO\n"); |
237 |
|
break; |
238 |
|
|
239 |
case ARCH_ARM: |
case ARCH_ARM: |
240 |
debug("useremul__netbsd_setup(): ARM: TODO\n"); |
debug("useremul__netbsd_setup(): ARM: TODO\n"); |
241 |
break; |
break; |
832 |
arg3 = cpu->cd.ppc.gpr[6]; |
arg3 = cpu->cd.ppc.gpr[6]; |
833 |
/* TODO: More arguments? Stack arguments? */ |
/* TODO: More arguments? Stack arguments? */ |
834 |
break; |
break; |
835 |
|
|
836 |
|
case ARCH_ARM: |
837 |
|
sysnr = code & 0xfffff; |
838 |
|
arg0 = cpu->cd.arm.r[0]; |
839 |
|
arg1 = cpu->cd.arm.r[1]; |
840 |
|
arg2 = cpu->cd.arm.r[2]; |
841 |
|
arg3 = cpu->cd.arm.r[3]; |
842 |
|
/* TODO: More arguments? Stack arguments? */ |
843 |
|
break; |
844 |
|
|
845 |
|
default:fatal("netbsd syscall for this arch: TODO\n"); |
846 |
|
exit(1); |
847 |
} |
} |
848 |
|
|
849 |
/* |
/* |
1203 |
|
|
1204 |
|
|
1205 |
switch (cpu->machine->arch) { |
switch (cpu->machine->arch) { |
1206 |
|
case ARCH_ARM: |
1207 |
|
/* NetBSD/arm return values: */ |
1208 |
|
cpu->cd.arm.r[0] = result_low; |
1209 |
|
cpu->cd.arm.cpsr &= ~ARM_FLAG_C; |
1210 |
|
if (error_flag) { |
1211 |
|
cpu->cd.arm.cpsr |= ARM_FLAG_C; |
1212 |
|
cpu->cd.arm.r[0] = error_code; |
1213 |
|
} |
1214 |
|
if (result_high_set) |
1215 |
|
cpu->cd.arm.r[1] = result_high; |
1216 |
|
break; |
1217 |
case ARCH_MIPS: |
case ARCH_MIPS: |
1218 |
/* |
/* |
1219 |
* NetBSD/mips return values: |
* NetBSD/mips return values: |
1756 |
add_useremul("NetBSD/pmax", ARCH_MIPS, "R3000", |
add_useremul("NetBSD/pmax", ARCH_MIPS, "R3000", |
1757 |
useremul__netbsd, useremul__netbsd_setup); |
useremul__netbsd, useremul__netbsd_setup); |
1758 |
|
|
1759 |
add_useremul("NetBSD/arm", ARCH_ARM, "ARM", |
add_useremul("NetBSD/arm", ARCH_ARM, "SA1110", |
1760 |
useremul__netbsd, useremul__netbsd_setup); |
useremul__netbsd, useremul__netbsd_setup); |
1761 |
|
|
1762 |
add_useremul("NetBSD/amd64", ARCH_X86, "AMD64", |
add_useremul("NetBSD/amd64", ARCH_X86, "AMD64", |
1763 |
useremul__netbsd, useremul__netbsd_setup); |
useremul__netbsd, useremul__netbsd_setup); |
1764 |
|
|
1765 |
|
add_useremul("NetBSD/alpha", ARCH_ALPHA, "Alpha", |
1766 |
|
useremul__netbsd, useremul__netbsd_setup); |
1767 |
|
|
1768 |
add_useremul("Linux/PPC64", ARCH_PPC, "PPC970", |
add_useremul("Linux/PPC64", ARCH_PPC, "PPC970", |
1769 |
useremul__linux, useremul__linux_setup); |
useremul__linux, useremul__linux_setup); |
1770 |
|
|