Fix another corner case with C/asm symtable

See testcase (from grischka).  If the asm has no .globl,
but there's a (non-static) C definition the symbol should
be exported, even if the first reference comes from asm.
This commit is contained in:
Michael Matz
2017-12-04 03:51:14 +01:00
parent 529b44c0d5
commit cc6cb7f0e2
4 changed files with 29 additions and 3 deletions

View File

@@ -422,9 +422,10 @@ ST_FUNC void asm_free_labels(TCCState *st)
for(s = st->asm_labels; s != NULL; s = s1) {
ElfSym *esym = elfsym(s);
s1 = s->prev;
/* Possibly update binding and visibility from asm directives. */
/* Possibly update binding and visibility from asm directives
if the symbol has no C decl (type is VT_VOID).*/
s->type.t &= ~VT_EXTERN;
if (esym) {
if (esym && s->type.t == VT_VOID) {
if (!s->a.asmexport && esym->st_shndx != SHN_UNDEF)
s->type.t |= VT_STATIC;
if (s->a.visibility)