summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/sys/arch/amd64/conf/user.ld28
-rw-r--r--src/sys/arch/amd64/os/os_proc.c2
2 files changed, 30 insertions, 0 deletions
diff --git a/src/sys/arch/amd64/conf/user.ld b/src/sys/arch/amd64/conf/user.ld
new file mode 100644
index 0000000..004509a
--- /dev/null
+++ b/src/sys/arch/amd64/conf/user.ld
@@ -0,0 +1,28 @@
+OUTPUT_FORMAT(elf64-x86-64)
+ENTRY(_start)
+
+SECTIONS
+{
+ . = 0x1000;
+
+ .text : ALIGN(8)
+ {
+ *(.text)
+ }
+
+ .rodata : ALIGN(8)
+ {
+ *(.rodata)
+ }
+
+ .data : ALIGN(8)
+ {
+ *(.data)
+ }
+
+ .bss : ALIGN(8)
+ {
+ *(COMMON)
+ *(.bss)
+ }
+}
diff --git a/src/sys/arch/amd64/os/os_proc.c b/src/sys/arch/amd64/os/os_proc.c
index 61ef51e..7a65b34 100644
--- a/src/sys/arch/amd64/os/os_proc.c
+++ b/src/sys/arch/amd64/os/os_proc.c
@@ -137,5 +137,7 @@ md_set_ip(struct proc *procp, uintptr_t ip)
pcbp = &procp->pcb;
tfp = &pcbp->tf;
tfp->rip = ip;
+ mmu_write_vas(&procp->pcb.vas);
+ __proc_kick(tfp);
return 0;
}