The apple m1 uses position independent executables (pie). I have implemented this in tccmacho.c Apple also uses the stack different for var_args. Also characters are signed instead of unsigned. This is implemented in arm64-gen.c/tccdefs.h Add bounds checking lib to lib/Makefile. Add underscore support in lib/atomic.S and lib/fetch_and_add.S Disable __clear_cache in lib/lib-arm64.c (Use system version). I will try to fix this in future push. Disable test_asm_call in tests/tcctest.c. Clang does not support @plt. Also disable weak symbols test. I will try to fix weak support in future push. Disable tests/tests2/124_atomic_counter.c for 64BITS. This is a bug in the atomic code and will be fixed in future push. You have to use --dwarf configure option. stabs only works with -run. tested on apple x86_64(10.5) and arm64(12.3).
Showing the changes to include (1 of 10 files). Show all
Unified · Split
| @@ -207,11 +207,18 @@ · 206 unmodified lines | |||
| 207 | &~3), *(type *)(ap - ((sizeof(type)+3)&~3))) | 207 | &~3), *(type *)(ap - ((sizeof(type)+3)&~3))) |
| 208 | 208 | ||
| 209 | #elif defined __aarch64__ | 209 | #elif defined __aarch64__ |
| 210 | #if defined __APPLE__ | ||
| 211 | typedef struct { | ||
| 212 | void *__stack; | ||
| 213 | } __builtin_va_list; | ||
| 214 | |||
| 215 | #else | ||
| 210 | typedef struct { | 216 | typedef struct { |
| 211 | void *__stack, *__gr_top, *__vr_top; | 217 | void *__stack, *__gr_top, *__vr_top; |
| 212 | int __gr_offs, __vr_offs; | 218 | int __gr_offs, __vr_offs; |
| 213 | } __builtin_va_list; | 219 | } __builtin_va_list; |
| 214 | 220 | ||
| 221 | #endif | ||
| 215 | #elif defined __riscv | 222 | #elif defined __riscv |
| 216 | typedef char *__builtin_va_list; | 223 | typedef char *__builtin_va_list; |
| 217 | #define __va_reg_size (__riscv_xlen >> 3) | 224 | #define __va_reg_size (__riscv_xlen >> 3) |