From cdcd1977d7b8d8f92a950777462e3d02af90a6bc Mon Sep 17 00:00:00 2001 From: Jakob Kaivo Date: Sat, 15 Aug 2020 09:03:26 -0400 Subject: implement as syscall --- src/__sys.x86-32.s | 18 ++++++++++++++++++ src/__sys.x86-64.s | 21 +++++++++++++++++++++ src/_sys.x86-32.s | 18 ------------------ src/_sys.x86-64.s | 21 --------------------- src/sys/times/times.c | 5 +++-- 5 files changed, 42 insertions(+), 41 deletions(-) create mode 100644 src/__sys.x86-32.s create mode 100644 src/__sys.x86-64.s delete mode 100644 src/_sys.x86-32.s delete mode 100644 src/_sys.x86-64.s (limited to 'src') diff --git a/src/__sys.x86-32.s b/src/__sys.x86-32.s new file mode 100644 index 00000000..ad60201d --- /dev/null +++ b/src/__sys.x86-32.s @@ -0,0 +1,18 @@ +.global __syscall +__syscall: + mov 4(%esp), %eax + mov 8(%esp), %ebx + mov 12(%esp), %ecx + mov 16(%esp), %edx + mov 20(%esp), %esi + mov 24(%esp), %edi + mov 28(%esp), %ebp + sysenter + ret + +/* FIXME: this seems to be unpossible to put in a shared library */ +/* FIXME: it may be worthwhile to separate this into crt1.s */ +.global _start +_start: + /* TODO */ + call __libc_start diff --git a/src/__sys.x86-64.s b/src/__sys.x86-64.s new file mode 100644 index 00000000..415a8084 --- /dev/null +++ b/src/__sys.x86-64.s @@ -0,0 +1,21 @@ +.global __syscall +__syscall: + mov %rdi, %rax + mov %rsi, %rdi + mov %rdx, %rsi + mov %rcx, %rdx + mov %r8, %r10 + mov %r9, %r8 + mov 8(%rsp), %r9 + syscall + ret + +.global _start +_start: + popq %rdi + movq %rsp, %rsi + call __main + +.global __stack_chk_fail +__stack_chk_fail: + ret diff --git a/src/_sys.x86-32.s b/src/_sys.x86-32.s deleted file mode 100644 index ad60201d..00000000 --- a/src/_sys.x86-32.s +++ /dev/null @@ -1,18 +0,0 @@ -.global __syscall -__syscall: - mov 4(%esp), %eax - mov 8(%esp), %ebx - mov 12(%esp), %ecx - mov 16(%esp), %edx - mov 20(%esp), %esi - mov 24(%esp), %edi - mov 28(%esp), %ebp - sysenter - ret - -/* FIXME: this seems to be unpossible to put in a shared library */ -/* FIXME: it may be worthwhile to separate this into crt1.s */ -.global _start -_start: - /* TODO */ - call __libc_start diff --git a/src/_sys.x86-64.s b/src/_sys.x86-64.s deleted file mode 100644 index 415a8084..00000000 --- a/src/_sys.x86-64.s +++ /dev/null @@ -1,21 +0,0 @@ -.global __syscall -__syscall: - mov %rdi, %rax - mov %rsi, %rdi - mov %rdx, %rsi - mov %rcx, %rdx - mov %r8, %r10 - mov %r9, %r8 - mov 8(%rsp), %r9 - syscall - ret - -.global _start -_start: - popq %rdi - movq %rsp, %rsi - call __main - -.global __stack_chk_fail -__stack_chk_fail: - ret diff --git a/src/sys/times/times.c b/src/sys/times/times.c index 753d66ae..f677d3b4 100644 --- a/src/sys/times/times.c +++ b/src/sys/times/times.c @@ -1,11 +1,12 @@ #include "time.h" #include +#include "_syscall.h" clock_t times(struct tms *buffer) { - (void)buffer; - return (clock_t)-1; + SYSCALL(times, clock_t, -1, buffer, 0, 0, 0, 0, 0); } + /* POSIX(1) */ -- cgit v1.2.1