History

macos: Fix asm-c-connect-test

via some heavy-handed hackery in the ASM symbol handling in case C symbols get a leading underscore (but ASM symbols do not). But this is now like clang and GCC on Darwin work: asm symbols are undecorated, C symbols get a _ prepended, so to connect both some trickery is involved for the ASM symbols that don't have a _ prepended. They must be included in the C symbol table (because that's what we use to lookup also ASM labels), but they also must not disturb the normal C symbol (which don't have the _ prepended), so they need some mangling. A bit unsatisfying, but well. So, add asm-c-connect-test to the working ones for Darwin as well.

Michael Matz committed 6 years ago

Commit fbfe6201 parent 3cf7bec8 files · +69 −9Browse files

Showing the changes to tests (5 of 8 files). Show all

Unified · Split

5 files
  1. tests/Makefile +1 −1
  2. tests/asm-c-connect-1.c +11 −2
  3. tests/asm-c-connect-2.c +10 −1
  4. tests/tcctest.c +1 −1
  5. tests/tests2/85_asm-outside-function.c +6 −1
tests/Makefile+1−1
@@ -46,7 +46,7 @@ ifeq ($(ARCH),riscv64) · 45 unmodified lines
4646 endif
4747 endif
4848 ifdef CONFIG_OSX # some don't work yet
49− TESTS := $(filter-out memtest dlltest asm-c-connect-test, $(TESTS))
49+ TESTS := $(filter-out memtest dlltest, $(TESTS))
5050 endif
5151 ifeq (,$(filter arm64 i386 x86_64,$(ARCH)))
5252 TESTS := $(filter-out vla_test-run,$(TESTS))
tests/asm-c-connect-1.c+11−2
@@ -2,11 +2,20 @@ · 1 unmodified line
22
33 #if defined _WIN32 && !defined __TINYC__
44 # define _ "_"
5+#elif defined __APPLE__
6+# define _ "_"
57 #else
68 # define _
79 #endif
810
9−static int x1_c(void)
11+#ifdef __clang__
12+/* clang needs some help tp not throw functions away even at -O0 */
13+#define __USED __attribute__((__used__))
14+#else
15+#define __USED
16+#endif
17+
18+static int __USED x1_c (void)
1019 {
1120 printf(" x1");
1221 return 1;
@@ -37,7 +46,7 @@ int main(int argc, char *argv[]) · 24 unmodified lines
3746 }
3847
3948 static
40−int x2(void)
49+int __USED x2(void)
4150 {
4251 printf(" x2");
4352 return 2;
tests/asm-c-connect-2.c+10−1
@@ -2,10 +2,19 @@ · 1 unmodified line
22
33 #if defined _WIN32 && !defined __TINYC__
44 # define _ "_"
5+#elif defined __APPLE__
6+# define _ "_"
57 #else
68 # define _
79 #endif
810
11+#ifdef __clang__
12+/* clang needs some help tp not throw functions away even at -O0 */
13+#define __USED __attribute__((__used__))
14+#else
15+#define __USED
16+#endif
17+
918 int x3(void)
1019 {
1120 printf(" x3");
@@ -30,7 +39,7 @@ void callx5_again(void) · 18 unmodified lines
3039 asm("call "_"x6");
3140 }
3241
33−static void x6()
42+static void __USED x6()
3443 {
3544 printf(" x6-2");
3645 }
tests/tcctest.c+1−1
@@ -3650,7 +3650,7 @@ void test_asm_call(void) · 3649 unmodified lines
36503650 asm volatile ("push %%rdi; push %%rdi; mov %0, %%rdi;"
36513651 #if 1 && !defined(__TINYC__) && (defined(__PIC__) || defined(__PIE__)) && !defined(__APPLE__)
36523652 "call getenv@plt;"
3653−#elif defined(__APPLE__) && !defined(__TINYC__)
3653+#elif defined(__APPLE__)
36543654 "call _getenv;"
36553655 #else
36563656 "call getenv;"
tests/tests2/85_asm-outside-function.c+6−1
@@ -1,6 +1,11 @@
1+#ifdef __APPLE__
2+#define _ "_"
3+#else
4+#define _
5+#endif
16 extern int printf (const char *, ...);
27 extern void vide(void);
3−__asm__("vide: ret");
8+__asm__(_"vide: ret");
49
510 int main() {
611 vide();

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t