diff --git a/libtcc.c b/libtcc.c index 54184e2..9a04a9e 100644 --- a/libtcc.c +++ b/libtcc.c @@ -780,6 +780,8 @@ static void put_extern_sym2(Sym *sym, Section *section, if (FUNC_CALL(attr) == FUNC_STDCALL) other |= 2; #endif + } else if ((sym->type.t & VT_BTYPE) == VT_VOID) { + sym_type = STT_NOTYPE; } else { sym_type = STT_OBJECT; } diff --git a/tccasm.c b/tccasm.c index 6862ef5..56bf6cd 100644 --- a/tccasm.c +++ b/tccasm.c @@ -712,6 +712,12 @@ static int tcc_assemble(TCCState *s1, int do_preprocess) define_start = define_stack; + /* an elf symbol of type STT_FILE must be put so that STB_LOCAL + symbols can be safely used */ + put_elf_sym(symtab_section, 0, 0, + ELFW(ST_INFO)(STB_LOCAL, STT_FILE), 0, + SHN_ABS, file->filename); + ret = tcc_assemble_internal(s1, do_preprocess); cur_text_section->data_offset = ind;