Add x86_64 start code to access argc and argv
This commit is contained in:
@@ -1,8 +1,25 @@
|
||||
#if defined(__x86_64__)
|
||||
#include "../int.h"
|
||||
#include "../sys.h"
|
||||
|
||||
// Start code
|
||||
#ifndef _START_DEFINED
|
||||
#define _START_DEFINED
|
||||
extern int main(int argc, char** argv);
|
||||
void _start() {
|
||||
void* fp = __builtin_frame_address(0);
|
||||
register int argc asm("rdi") = *(uint64_t*)(fp+8);
|
||||
register char** argv asm("rsi") = fp+16;
|
||||
exit(main(argc, argv));
|
||||
}
|
||||
#endif /* ifndef _START_DEFINED */
|
||||
|
||||
//include other generic functions
|
||||
#include "generic.h"
|
||||
|
||||
//
|
||||
// syscall functions
|
||||
|
||||
#define SYS_EXIT 60
|
||||
void exit(int8_t status) {
|
||||
asm volatile(
|
||||
@@ -243,4 +260,17 @@ int clock_nanosleep(clockid_t clockid, int flags, const struct timespec *t, stru
|
||||
return rtn;
|
||||
}
|
||||
|
||||
#define SYS_RT_SIGACTION 13
|
||||
int rt_sigaction(int signum, const void* act, void* oldact, size_t sigset_len) {
|
||||
int rtn;
|
||||
asm volatile(
|
||||
"mov %5, %%r10\n"
|
||||
"syscall\n"
|
||||
: "=a"(rtn)
|
||||
: "a"(SYS_RT_SIGACTION), "D"(signum), "S"(act), "d"(oldact), "r"(sigset_len)
|
||||
: "rcx", "r11", "memory"
|
||||
);
|
||||
return rtn;
|
||||
}
|
||||
|
||||
#endif /* ifdef __x86_64__ */
|
||||
|
||||
Reference in New Issue
Block a user