summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2015-04-30 16:29:40 +0200
committercinap_lenrek <cinap_lenrek@felloff.net>2015-04-30 16:29:40 +0200
commit35c9648ee10f187f1b2d0d3f884c40c95874d315 (patch)
tree730de4ad63a342d8ead233e9ce7cfa9c5088ddff
parent12bb7bcfff4db1b122c4643859f3d4f1420fba38 (diff)
pass Ureg* argument to note handler in R0 register on arm
userspace note handlers, like any function, expect ther first argument in R0 register on arm.
-rw-r--r--sys/src/9/kw/syscall.c3
-rw-r--r--sys/src/9/omap/syscall.c3
-rw-r--r--sys/src/9/teg2/syscall.c2
-rw-r--r--sys/src/9/zynq/trap.c1
4 files changed, 9 insertions, 0 deletions
diff --git a/sys/src/9/kw/syscall.c b/sys/src/9/kw/syscall.c
index 555d767ee..30cc29c40 100644
--- a/sys/src/9/kw/syscall.c
+++ b/sys/src/9/kw/syscall.c
@@ -78,6 +78,7 @@ noted(Ureg* cur, uintptr arg0)
nf->arg0 = &nf->ureg;
nf->ip = 0;
cur->sp = PTR2UINT(nf);
+ cur->r0 = PTR2UINT(nf->arg0);
break;
default:
up->lastnote.flag = NDebug;
@@ -163,6 +164,8 @@ notify(Ureg* ureg)
ureg->sp = sp;
ureg->pc = PTR2UINT(up->notify);
+ ureg->r0 = PTR2UINT(nf->arg0);
+
up->notified = 1;
up->nnote--;
memmove(&up->lastnote, &up->note[0], sizeof(Note));
diff --git a/sys/src/9/omap/syscall.c b/sys/src/9/omap/syscall.c
index 224ee2c29..882aef2cc 100644
--- a/sys/src/9/omap/syscall.c
+++ b/sys/src/9/omap/syscall.c
@@ -78,6 +78,7 @@ noted(Ureg* cur, uintptr arg0)
nf->arg0 = &nf->ureg;
nf->ip = 0;
cur->sp = PTR2UINT(nf);
+ cur->r0 = PTR2UINT(nf->arg0);
break;
default:
up->lastnote.flag = NDebug;
@@ -163,6 +164,8 @@ notify(Ureg* ureg)
ureg->sp = sp;
ureg->pc = PTR2UINT(up->notify);
+ ureg->r0 = PTR2UINT(nf->arg0);
+
up->notified = 1;
up->nnote--;
memmove(&up->lastnote, &up->note[0], sizeof(Note));
diff --git a/sys/src/9/teg2/syscall.c b/sys/src/9/teg2/syscall.c
index 4bdfc4edb..be24849b2 100644
--- a/sys/src/9/teg2/syscall.c
+++ b/sys/src/9/teg2/syscall.c
@@ -84,6 +84,7 @@ noted(Ureg* cur, uintptr arg0)
nf->arg0 = &nf->ureg;
nf->ip = 0;
cur->sp = PTR2UINT(nf);
+ cur->r0 = PTR2UINT(nf->arg0);
break;
default:
up->lastnote.flag = NDebug;
@@ -169,6 +170,7 @@ notify(Ureg* ureg)
ureg->sp = sp;
ureg->pc = PTR2UINT(up->notify);
+ ureg->r0 = PTR2UINT(nf->arg0);
up->notified = 1;
up->nnote--;
diff --git a/sys/src/9/zynq/trap.c b/sys/src/9/zynq/trap.c
index 54e445899..510860b63 100644
--- a/sys/src/9/zynq/trap.c
+++ b/sys/src/9/zynq/trap.c
@@ -423,6 +423,7 @@ noted(Ureg *ureg, ulong arg0)
sp = oureg - 4 * BY2WD - ERRMAX;
splhi();
ureg->sp = sp;
+ ureg->r0 = (uintptr) oureg;
((ulong *) sp)[1] = oureg;
((ulong *) sp)[0] = 0;
break;