Fix build scripts, align some code, make a workable test

This commit is contained in:
flysand7 2023-07-23 02:23:39 +11:00
parent b5e4824060
commit f2be833f82
4 changed files with 74 additions and 61 deletions

View File

@ -10,6 +10,7 @@ clang -fPIC -nostdlib -I "include" -g "src/ciabatta.c" -c -o "bin/ciabatta.o"
rm "$LIB_FILE" 2> /dev/null rm "$LIB_FILE" 2> /dev/null
if [ "$1" != "-shared" ]; then if [ "$1" != "-shared" ]; then
[ -f "lib/ciabatta.a" ] && rm "lib/ciabatta.a"
llvm-ar -q "lib/ciabatta.a" "bin/crt_ctors.o" "bin/crt_entry.o" "bin/ciabatta.o" llvm-ar -q "lib/ciabatta.a" "bin/crt_ctors.o" "bin/crt_entry.o" "bin/ciabatta.o"
else else
clang -fPIC -nostdlib -shared -o "lib/ciabatta.so" "bin/ciabatta.o" clang -fPIC -nostdlib -shared -o "lib/ciabatta.so" "bin/ciabatta.o"

View File

@ -24,7 +24,7 @@ _start:
pop rsi pop rsi
mov rdx, qword [rsp] mov rdx, qword [rsp]
;; Align stack to 16, push junk and stack ptr ;; Align stack to 16, push junk and stack ptr
and rsi, ~0xf and rsp, ~0xf
push rax push rax
push rsp push rsp
;; Push fini and init sections ;; Push fini and init sections

View File

@ -1,4 +1,10 @@
int __stack_chk_fial() {
// TODO: implement proper stack protector support
return 0;
}
void __libc_start_main( void __libc_start_main(
int (*main)(int, char**, char**), int (*main)(int, char**, char**),
int argc, char **argv, int argc, char **argv,
@ -7,5 +13,7 @@ void __libc_start_main(
void (*rtld_fini)(void), void (*rtld_fini)(void),
void *stack_end void *stack_end
) { ) {
static char string[] = "Hello, world!\n";
syscall_write(STDOUT_FILENO, string, sizeof string);
syscall_exit(0); syscall_exit(0);
} }

View File

@ -1,67 +1,71 @@
#if os_is_linux() #if os_is_linux()
#define SYS_read 0 #define STDIN_FILENO 0
#define SYS_write 1 #define STDOUT_FILENO 1
#define SYS_open 2 #define STDERR_FILENO 2
#define SYS_close 3
#define SYS_stat 4 #define SYS_read 0
#define SYS_fstat 5 #define SYS_write 1
#define SYS_lstat 6 #define SYS_open 2
#define SYS_poll 7 #define SYS_close 3
#define SYS_lseek 8 #define SYS_stat 4
#define SYS_mmap 9 #define SYS_fstat 5
#define SYS_mprotect 10 #define SYS_lstat 6
#define SYS_munmap 11 #define SYS_poll 7
#define SYS_brk 12 #define SYS_lseek 8
#define SYS_rt_sigaction 13 #define SYS_mmap 9
#define SYS_mprotect 10
#define SYS_munmap 11
#define SYS_brk 12
#define SYS_rt_sigaction 13
#define SYS_rt_sigprocmask 14 #define SYS_rt_sigprocmask 14
#define SYS_rt_sigreturn 15 #define SYS_rt_sigreturn 15
#define SYS_ioctl 16 #define SYS_ioctl 16
#define SYS_pread64 17 #define SYS_pread64 17
#define SYS_pwrite64 18 #define SYS_pwrite64 18
#define SYS_readv 19 #define SYS_readv 19
#define SYS_writev 20 #define SYS_writev 20
#define SYS_access 21 #define SYS_access 21
#define SYS_pipe 22 #define SYS_pipe 22
#define SYS_select 23 #define SYS_select 23
#define SYS_sched_yield 24 #define SYS_sched_yield 24
#define SYS_mremap 25 #define SYS_mremap 25
#define SYS_msync 26 #define SYS_msync 26
#define SYS_mincore 27 #define SYS_mincore 27
#define SYS_madvise 28 #define SYS_madvise 28
#define SYS_shmget 29 #define SYS_shmget 29
#define SYS_shmat 30 #define SYS_shmat 30
#define SYS_shmctl 31 #define SYS_shmctl 31
#define SYS_dup 32 #define SYS_dup 32
#define SYS_dup2 33 #define SYS_dup2 33
#define SYS_pause 34 #define SYS_pause 34
#define SYS_nanosleep 35 #define SYS_nanosleep 35
#define SYS_getitimer 36 #define SYS_getitimer 36
#define SYS_alarm 37 #define SYS_alarm 37
#define SYS_setitimer 38 #define SYS_setitimer 38
#define SYS_getpid 39 #define SYS_getpid 39
#define SYS_sendfile 40 #define SYS_sendfile 40
#define SYS_socket 41 #define SYS_socket 41
#define SYS_connect 42 #define SYS_connect 42
#define SYS_accept 43 #define SYS_accept 43
#define SYS_sendto 44 #define SYS_sendto 44
#define SYS_recvfrom 45 #define SYS_recvfrom 45
#define SYS_sendmsg 46 #define SYS_sendmsg 46
#define SYS_recvmsg 47 #define SYS_recvmsg 47
#define SYS_shutdown 48 #define SYS_shutdown 48
#define SYS_bind 49 #define SYS_bind 49
#define SYS_listen 50 #define SYS_listen 50
#define SYS_getsockname 51 #define SYS_getsockname 51
#define SYS_getpeername 52 #define SYS_getpeername 52
#define SYS_socketpair 53 #define SYS_socketpair 53
#define SYS_setsockopt 54 #define SYS_setsockopt 54
#define SYS_getsockopt 55 #define SYS_getsockopt 55
#define SYS_clone 56 #define SYS_clone 56
#define SYS_fork 57 #define SYS_fork 57
#define SYS_vfork 58 #define SYS_vfork 58
#define SYS_execve 59 #define SYS_execve 59
#define SYS_exit 60 #define SYS_exit 60
// Syscall stubs // Syscall stubs