diff --git a/buildtest.c b/buildtest.c index e296c7f..1f277e8 100644 --- a/buildtest.c +++ b/buildtest.c @@ -3,8 +3,9 @@ int main() { -#if defined(__x86_64__) || defined(__aarch64__) || defined(__mips__) uint64_t pid = fork(); + + // Print the pid in hex char msg[17] = {' '}; msg[16] = '\n'; for(int i = 0; i < 16; ++i) { @@ -15,12 +16,23 @@ int main() { msg[i] = c; } write(STDIO, msg, 17); - #else - char *msg = "Hello World!\n"; - write(STDIO, msg, 13); -#endif + + // Child process exits + if(pid == 0) return 0; + //TODO: wait on child to remove zombie process + + #if defined(__x86_64__) + // Test the read syscall + #define INPUT_BUFFER_LEN 4096 + char input_buffer[INPUT_BUFFER_LEN] = {0}; + write(STDIO, "Enter some text:", 16); + intptr_t n_read = read(STDIO, input_buffer, INPUT_BUFFER_LEN); + write(STDIO, input_buffer, n_read); + #endif + return 69; } + void __libc_start_main() {exit(main());} void _start() { @@ -30,19 +42,3 @@ void _start() { void __start() { _start(); } -/* -#if defined(__x86_64__) - printf("Compiled for x86_64 architecture\n"); - #elif defined(__i386__) - printf("Compiled for x86 architecture\n"); - #elif defined(__arm__) - printf("Compiled for ARM architecture\n"); - #elif defined(__aarch64__) - printf("Compiled for ARM64 architecture\n"); - #elif defined(__mips__) - printf("Compiled for ARM architecture\n"); - #else - printf("Unknown architecture\n"); - #endif -*/ - diff --git a/sys.h b/sys.h index 46682ea..ab746a1 100644 --- a/sys.h +++ b/sys.h @@ -6,7 +6,15 @@ void exit(int8_t status); #define STDIO 1 #define STDERR 2 intptr_t write(int32_t fd, const void* buf, intptr_t size); -//intptr_t read(int32_t fd, const void* buf, intptr_t size); +#if defined(__x86_64__) +intptr_t read(int32_t fd, const void* buf, intptr_t size); +#endif uint32_t fork(); + +// Provide memset for clang +void *memset(void* s, int c, unsigned long n) { + int8_t* mem = s; + for(long int i = 0; i < n; ++i) mem[i] = c; +} #endif // !MINIMALSYS_H