From f2cfc07554c698dcd2f12dab223aece4d40198c2 Mon Sep 17 00:00:00 2001 From: seyko Date: Sat, 28 Mar 2015 19:41:01 +0300 Subject: [PATCH] fix: try to add a bounds.o only if __bounds_init not found /usr/local/lib/tcc/i386/bcheck.o: error: '__bound_error_msg' defined twice #include int main () { #if 1 int v[10]; v[10] = 0; fprintf(stderr, "is bounds error catched?\n"); #endif return 0; } // tcc -b test.c --- tccelf.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/tccelf.c b/tccelf.c index bd2c147..0ac151a 100644 --- a/tccelf.c +++ b/tccelf.c @@ -1589,10 +1589,13 @@ ST_FUNC void tcc_add_bcheck(TCCState *s1) pinit = section_ptr_add(init_section, 5); pinit[0] = 0xe8; put32(pinit + 1, -4); - tcc_add_support(s1, "bcheck.o"); sym_index = find_elf_sym(symtab_section, "__bound_init"); - if (!sym_index) - tcc_error("__bound_init not defined"); + if (!sym_index) { + tcc_add_support(s1, "bcheck.o"); + sym_index = find_elf_sym(symtab_section, "__bound_init"); + if (!sym_index) + tcc_error("__bound_init not defined"); + } put_elf_reloc(symtab_section, init_section, init_section->data_offset - 4, R_386_PC32, sym_index); }