From a105837aaeb16fdea39bb6607c548c6d1ab38d1d Mon Sep 17 00:00:00 2001 From: seyko Date: Thu, 26 Mar 2015 06:04:36 +0300 Subject: [PATCH] fix: enforce bcheck.o linking when -b option is used fixes a crash for the empry program (tcc -b empty.c) empty.c: int main() { return 0; } --- Makefile | 6 ++++++ tccelf.c | 5 ++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index b990e4d8..afcd30d0 100644 --- a/Makefile +++ b/Makefile @@ -140,6 +140,7 @@ PROGS_CROSS=$($(X64_CROSS)_LINK) $($(WIN32_CROSS)_LINK) $($(WIN64_CROSS)_LINK) $ LIBTCC1_CROSS=lib/i386-win/libtcc1.a lib/x86_64-win/libtcc1.a lib/i386/libtcc1.a lib/x86_64/libtcc1.a \ lib/arm64/libtcc1.a LIBTCC1=libtcc1.a +BCHECK=yes else ifeq ($(ARCH),x86-64) NATIVE_FILES=$(X86_64_FILES) PROGS_CROSS=$($(I386_CROSS)_LINK) $($(WIN32_CROSS)_LINK) $($(WIN64_CROSS)_LINK) $(ARM_CROSS) $(ARM64_CROSS) $(C67_CROSS) $(WINCE_CROSS) @@ -284,6 +285,10 @@ ifneq ($(LIBTCC1),) mkdir -p "$(tccdir)/$(ARCH)" $(INSTALL) -m644 $(LIBTCC1) "$(tccdir)/$(ARCH)" endif +ifneq ($(BCHECK),) + -mkdir -p "$(tccdir)/$(ARCH)" + $(INSTALL) -m644 lib/$(ARCH)/bcheck.o "$(tccdir)/$(ARCH)" +endif $(INSTALL) -m644 $(addprefix $(top_srcdir)/include/,$(TCC_INCLUDES)) $(top_srcdir)/tcclib.h "$(tccdir)/include" mkdir -p "$(libdir)" $(INSTALL) -m644 $(LIBTCC) "$(libdir)" @@ -303,6 +308,7 @@ ifdef CONFIG_CROSS mkdir -p "$(tccdir)/arm64" $(INSTALL) -m644 lib/arm64/libtcc1.a "$(tccdir)/arm64" $(INSTALL) -m644 lib/i386/libtcc1.a "$(tccdir)/i386" + $(INSTALL) -m644 lib/i386/bcheck.o "$(tccdir)/i386" $(INSTALL) -m644 lib/x86_64/libtcc1.a "$(tccdir)/x86-64" $(INSTALL) -m644 $(top_srcdir)/win32/lib/*.def "$(tccdir)/win32/lib" $(INSTALL) -m644 lib/i386-win/libtcc1.a "$(tccdir)/win32/lib/32" diff --git a/tccelf.c b/tccelf.c index 5f526dff..e3c62b8a 100644 --- a/tccelf.c +++ b/tccelf.c @@ -1564,7 +1564,10 @@ ST_FUNC void tcc_add_bcheck(TCCState *s1) pinit = section_ptr_add(init_section, 5); pinit[0] = 0xe8; put32(pinit + 1, -4); - sym_index = find_elf_sym(symtab_section, "__bound_init"); + 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); } -- 2.11.4.GIT