The port is functional. Bound checking is not supported yet.
Unified · Split
| @@ -73,6 +73,7 @@ NATIVE_DEFINES_$(CONFIG_i386) += -DTCC_TARGET_I386 · 72 unmodified lines | ||
| 73 | 73 | NATIVE_DEFINES_$(CONFIG_x86_64) += -DTCC_TARGET_X86_64 |
| 74 | 74 | NATIVE_DEFINES_$(CONFIG_WIN32) += -DTCC_TARGET_PE |
| 75 | 75 | NATIVE_DEFINES_$(CONFIG_uClibc) += -DTCC_UCLIBC |
| 76 | +NATIVE_DEFINES_$(CONFIG_musl) += -DTCC_MUSL | |
| 76 | 77 | NATIVE_DEFINES_$(CONFIG_arm) += -DTCC_TARGET_ARM |
| 77 | 78 | NATIVE_DEFINES_$(CONFIG_arm_eabihf) += -DTCC_ARM_EABI -DTCC_ARM_HARDFLOAT |
| 78 | 79 | NATIVE_DEFINES_$(CONFIG_arm_eabi) += -DTCC_ARM_EABI |
| @@ -352,6 +352,8 @@ if test -z "$cross_prefix" ; then · 351 unmodified lines | ||
| 352 | 352 | |
| 353 | 353 | if test -f "/lib/ld-uClibc.so.0" ; then |
| 354 | 354 | confvars="$confvars uClibc" |
| 355 | + elif test -f "/lib/ld-musl-$cpu.so.1"; then | |
| 356 | + confvars="$confvars musl" | |
| 355 | 357 | fi |
| 356 | 358 | fi |
| 357 | 359 | else |
| @@ -16,7 +16,11 @@ typedef struct { · 15 unmodified lines | ||
| 16 | 16 | char *reg_save_area; |
| 17 | 17 | } __va_list_struct; |
| 18 | 18 | |
| 19 | +/* Avoid conflicting definition for va_list on musl libc */ | |
| 20 | +#ifndef __DEFINED_va_list | |
| 19 | 21 | typedef __va_list_struct va_list[1]; |
| 22 | +#define __DEFINED_va_list | |
| 23 | +#endif | |
| 20 | 24 | |
| 21 | 25 | void __va_start(__va_list_struct *ap, void *fp); |
| 22 | 26 | void *__va_arg(__va_list_struct *ap, int arg_type, int size, int align); |
| @@ -30,6 +30,10 @@ ifeq ($(TARGETOS),Darwin) · 29 unmodified lines | ||
| 30 | 30 | BCHECK_O = |
| 31 | 31 | endif |
| 32 | 32 | |
| 33 | +ifeq ($(CONFIG_musl),yes) | |
| 34 | + BCHECK_O = | |
| 35 | +endif | |
| 36 | + | |
| 33 | 37 | I386_O = libtcc1.o alloca86.o alloca86-bt.o $(BCHECK_O) |
| 34 | 38 | X86_64_O = libtcc1.o alloca86_64.o alloca86_64-bt.o $(BCHECK_O) |
| 35 | 39 | ARM_O = libtcc1.o armeabi.o alloca-arm.o |
| @@ -48,7 +48,7 @@ · 47 unmodified lines | ||
| 48 | 48 | #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) \ |
| 49 | 49 | || defined(__DragonFly__) || defined(__dietlibc__) \ |
| 50 | 50 | || defined(__UCLIBC__) || defined(__OpenBSD__) || defined(__NetBSD__) \ |
| 51 | − || defined(_WIN32) || defined(TCC_UCLIBC) | |
| 51 | + || defined(_WIN32) || defined(TCC_UCLIBC) || defined(TCC_MUSL) | |
| 52 | 52 | //#warning Bound checking does not support malloc (etc.) in this environment. |
| 53 | 53 | #undef CONFIG_TCC_MALLOC_HOOKS |
| 54 | 54 | #undef HAVE_MEMALIGN |
| @@ -851,6 +851,10 @@ LIBTCCAPI TCCState *tcc_new(void) · 850 unmodified lines | ||
| 851 | 851 | tcc_define_symbol(s, "__ILP32__", NULL); |
| 852 | 852 | #endif |
| 853 | 853 | |
| 854 | +#if defined(TCC_MUSL) | |
| 855 | + tcc_define_symbol(s, "__builtin_va_list", "void *"); | |
| 856 | +#endif /* TCC_MUSL */ | |
| 857 | + | |
| 854 | 858 | #ifdef TCC_TARGET_PE |
| 855 | 859 | tcc_define_symbol(s, "__WCHAR_TYPE__", "unsigned short"); |
| 856 | 860 | tcc_define_symbol(s, "__WINT_TYPE__", "unsigned short"); |
| @@ -136,7 +136,7 @@ · 135 unmodified lines | ||
| 136 | 136 | |
| 137 | 137 | #if !defined(TCC_UCLIBC) && !defined(TCC_TARGET_ARM) && \ |
| 138 | 138 | !defined(TCC_TARGET_ARM64) && !defined(TCC_TARGET_C67) && \ |
| 139 | − !defined(CONFIG_USE_LIBGCC) | |
| 139 | + !defined(CONFIG_USE_LIBGCC) && !defined(TCC_MUSL) | |
| 140 | 140 | #define CONFIG_TCC_BCHECK /* enable bound checking code */ |
| 141 | 141 | #endif |
| 142 | 142 | |
| @@ -239,11 +239,23 @@ · 96 unmodified lines | ||
| 239 | 239 | # elif defined(TCC_UCLIBC) |
| 240 | 240 | # define CONFIG_TCC_ELFINTERP "/lib/ld-uClibc.so.0" /* is there a uClibc for x86_64 ? */ |
| 241 | 241 | # elif defined TCC_TARGET_ARM64 |
| 242 | −# define CONFIG_TCC_ELFINTERP "/lib/ld-linux-aarch64.so.1" | |
| 242 | +# if defined(TCC_MUSL) | |
| 243 | +# define CONFIG_TCC_ELFINTERP "/lib/ld-musl-aarch64.so.1" | |
| 244 | +# else | |
| 245 | +# define CONFIG_TCC_ELFINTERP "/lib/ld-linux-aarch64.so.1" | |
| 246 | +# endif | |
| 243 | 247 | # elif defined(TCC_TARGET_X86_64) |
| 244 | −# define CONFIG_TCC_ELFINTERP "/lib64/ld-linux-x86-64.so.2" | |
| 248 | +# if defined(TCC_MUSL) | |
| 249 | +# define CONFIG_TCC_ELFINTERP "/lib/ld-musl-x86_64.so.1" | |
| 250 | +# else | |
| 251 | +# define CONFIG_TCC_ELFINTERP "/lib64/ld-linux-x86-64.so.2" | |
| 252 | +# endif | |
| 245 | 253 | # elif !defined(TCC_ARM_EABI) |
| 246 | −# define CONFIG_TCC_ELFINTERP "/lib/ld-linux.so.2" | |
| 254 | +# if defined(TCC_MUSL) | |
| 255 | +# define CONFIG_TCC_ELFINTERP "/lib/ld-musl-arm.so.1" | |
| 256 | +# else | |
| 257 | +# define CONFIG_TCC_ELFINTERP "/lib/ld-linux.so.2" | |
| 258 | +# endif | |
| 247 | 259 | # endif |
| 248 | 260 | #endif |
| 249 | 261 | |
| @@ -1718,7 +1718,7 @@ static int final_sections_reloc(TCCState *s1) · 1717 unmodified lines | ||
| 1718 | 1718 | /* XXX: ignore sections with allocated relocations ? */ |
| 1719 | 1719 | for(i = 1; i < s1->nb_sections; i++) { |
| 1720 | 1720 | s = s1->sections[i]; |
| 1721 | −#ifdef TCC_TARGET_I386 | |
| 1721 | +#if defined(TCC_TARGET_I386) || defined(TCC_MUSL) | |
| 1722 | 1722 | if (s->reloc && s != s1->got && (s->sh_flags & SHF_ALLOC)) //gr |
| 1723 | 1723 | /* On X86 gdb 7.3 works in any case but gdb 6.6 will crash if SHF_ALLOC |
| 1724 | 1724 | checking is removed */ |