Fix tests2/120_alias.c on macos

While MacOS doesn't natively support the alias attribute, let's support
it with TCC anyway.  This means we need to make a decision if the
string in the alias attribute is decorated or not due to the implicit
underscore on MacOS.  To make life easier we decide that it's the C name,
i.e. without underscore, and so TCC needs to emit alias names with
underscore handling.

Irrespective of that the test case needs to deal with the underscore
itself for __asm__ renaming which is always requiring the assembler name.
This commit is contained in:
Michael Matz 2020-10-01 17:52:16 +02:00
parent 0da93838c1
commit 78da4586a0
2 changed files with 5 additions and 1 deletions

View file

@ -8472,7 +8472,7 @@ found:
if (!esym) if (!esym)
tcc_error("unsupported forward __alias__ attribute"); tcc_error("unsupported forward __alias__ attribute");
put_extern_sym2(sym, esym->st_shndx, put_extern_sym2(sym, esym->st_shndx,
esym->st_value, esym->st_size, 0); esym->st_value, esym->st_size, 1);
} }
} else { } else {
if (type.t & VT_STATIC) if (type.t & VT_STATIC)

View file

@ -6,7 +6,11 @@ void target(void) {
} }
void alias_for_target(void) __attribute__((alias("target"))); void alias_for_target(void) __attribute__((alias("target")));
#ifdef __leading_underscore
void asm_for_target(void) __asm__("_target");
#else
void asm_for_target(void) __asm__("target"); void asm_for_target(void) __asm__("target");
#endif
/* This is not supposed to compile, alias targets must be defined in the /* This is not supposed to compile, alias targets must be defined in the
same unit. In TCC they even must be defined before the reference same unit. In TCC they even must be defined before the reference