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
46endif46endif
47endif47endif
48ifdef CONFIG_OSX # some don't work yet48ifdef 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))
50endif50endif
51ifeq (,$(filter arm64 i386 x86_64,$(ARCH)))51ifeq (,$(filter arm64 i386 x86_64,$(ARCH)))
52 TESTS := $(filter-out vla_test-run,$(TESTS))52 TESTS := $(filter-out vla_test-run,$(TESTS))
tests/asm-c-connect-1.c+11−2
@@ -2,11 +2,20 @@ · 1 unmodified line
2 2
3#if defined _WIN32 && !defined __TINYC__3#if defined _WIN32 && !defined __TINYC__
4# define _ "_"4# define _ "_"
5#elif defined __APPLE__
6# define _ "_"
5#else7#else
6# define _8# define _
7#endif9#endif
8 10
9static 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
18static int __USED x1_c (void)
10{19{
11 printf(" x1");20 printf(" x1");
12 return 1;21 return 1;
@@ -37,7 +46,7 @@ int main(int argc, char *argv[]) · 24 unmodified lines
37}46}
38 47
39static48static
40int x2(void)49int __USED x2(void)
41{50{
42 printf(" x2");51 printf(" x2");
43 return 2;52 return 2;
tests/asm-c-connect-2.c+10−1
@@ -2,10 +2,19 @@ · 1 unmodified line
2 2
3#if defined _WIN32 && !defined __TINYC__3#if defined _WIN32 && !defined __TINYC__
4# define _ "_"4# define _ "_"
5#elif defined __APPLE__
6# define _ "_"
5#else7#else
6# define _8# define _
7#endif9#endif
8 10
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
9int x3(void)18int x3(void)
10{19{
11 printf(" x3");20 printf(" x3");
@@ -30,7 +39,7 @@ void callx5_again(void) · 18 unmodified lines
30 asm("call "_"x6");39 asm("call "_"x6");
31}40}
32 41
33static void x6()42static void __USED x6()
34{43{
35 printf(" x6-2");44 printf(" x6-2");
36}45}
tests/tcctest.c+1−1
@@ -3650,7 +3650,7 @@ void test_asm_call(void) · 3649 unmodified lines
3650 asm volatile ("push %%rdi; push %%rdi; mov %0, %%rdi;"3650 asm volatile ("push %%rdi; push %%rdi; mov %0, %%rdi;"
3651#if 1 && !defined(__TINYC__) && (defined(__PIC__) || defined(__PIE__)) && !defined(__APPLE__)3651#if 1 && !defined(__TINYC__) && (defined(__PIC__) || defined(__PIE__)) && !defined(__APPLE__)
3652 "call getenv@plt;"3652 "call getenv@plt;"
3653#elif defined(__APPLE__) && !defined(__TINYC__)3653#elif defined(__APPLE__)
3654 "call _getenv;"3654 "call _getenv;"
3655#else3655#else
3656 "call getenv;"3656 "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
1extern int printf (const char *, ...);6extern int printf (const char *, ...);
2extern void vide(void);7extern void vide(void);
3__asm__("vide: ret");8__asm__(_"vide: ret");
4 9
5int main() {10int main() {
6 vide();11 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