Make all platforms build properly

This commit is contained in:
topjohnwu 2024-02-24 05:10:54 -08:00
parent 66f49dfab5
commit 0dbaf52566
4 changed files with 36 additions and 16 deletions

View File

@ -241,7 +241,6 @@ def clean_elf():
def run_ndk_build(flags):
os.chdir("native")
flags = "NDK_PROJECT_PATH=. NDK_APPLICATION_MK=src/Application.mk " + flags
cpu_count = 1
proc = system(f"{ndk_build} {flags} -j{cpu_count}")
if proc.returncode != 0:
error("Build binary failed!")

View File

@ -27,25 +27,18 @@ ENTRY(syscall)
.cfi_adjust_cfa_offset 4
.cfi_rel_offset ebp, 0
# Get and save the system call entry address.
call __kernel_syscall
push %eax
.cfi_adjust_cfa_offset 4
.cfi_rel_offset eax, 0
# Load all the arguments from the calling frame.
# (Not all will be valid, depending on the syscall.)
mov 24(%esp),%eax
mov 28(%esp),%ebx
mov 32(%esp),%ecx
mov 36(%esp),%edx
mov 40(%esp),%esi
mov 44(%esp),%edi
mov 48(%esp),%ebp
mov 20(%esp),%eax
mov 24(%esp),%ebx
mov 28(%esp),%ecx
mov 32(%esp),%edx
mov 36(%esp),%esi
mov 40(%esp),%edi
mov 44(%esp),%ebp
# Make the system call.
call *(%esp)
addl $4, %esp
int $0x80
# Error?
cmpl $-MAX_ERRNO, %eax

View File

@ -1,6 +1,14 @@
#include <string.h>
#include <malloc.h>
void *memset(void *dst, int ch, size_t n) {
return __builtin_memset(dst, ch, n);
}
void *memmove(void *dst, const void *src, size_t n) {
return __builtin_memmove(dst, src, n);
}
void *memcpy(void *dst, const void *src, size_t size) {
return __builtin_memcpy(dst, src, size);
}

View File

@ -161,3 +161,23 @@ void __wrap_abort_message(const char* format, ...) {
int __cxa_atexit(void (*func) (void *), void * arg, void * dso_handle) {
return 0;
}
// Dummy function symbols
long dummy() { return 0; }
#define DUMMY_SYMBOL(name) \
__asm__(".global " #name " \n " #name " = dummy")
DUMMY_SYMBOL(pthread_setspecific);
DUMMY_SYMBOL(pthread_key_create);
DUMMY_SYMBOL(pthread_key_delete);
DUMMY_SYMBOL(pthread_getspecific);
// Workaround LTO bug: https://github.com/llvm/llvm-project/issues/61101
#if defined(__i386__)
extern long *_GLOBAL_OFFSET_TABLE_;
long unused() {
return *_GLOBAL_OFFSET_TABLE_;
}
#endif