From 21eadbe6f1f3390e61e4be58b277c35f590d4f76 Mon Sep 17 00:00:00 2001 From: Jyun-Yan You Date: Sun, 1 Jan 2012 14:36:48 +0800 Subject: [PATCH] add missing library, enable segmented stacks for freebsd --- mk/platform.mk | 2 +- src/comp/back/link.rs | 9 ++++----- src/rt/arch/x86_64/record_sp.S | 10 ++++++---- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/mk/platform.mk b/mk/platform.mk index 40a3dd8ebc6..a978ccc95aa 100644 --- a/mk/platform.mk +++ b/mk/platform.mk @@ -25,7 +25,7 @@ ifneq ($(findstring freebsd,$(CFG_OSTYPE)),) CFG_LIB_NAME=lib$(1).so CFG_LIB_GLOB=lib$(1)-*.so CFG_GCCISH_CFLAGS += -fPIC -I/usr/local/include - CFG_GCCISH_LINK_FLAGS += -shared -fPIC -lpthread -lrt + CFG_GCCISH_LINK_FLAGS += -shared -fPIC -lpthread -lrt -L/usr/local/lib -lexecinfo CFG_GCCISH_DEF_FLAG := -Wl,--export-dynamic,--dynamic-list= CFG_GCCISH_PRE_LIB_FLAGS := -Wl,-whole-archive CFG_GCCISH_POST_LIB_FLAGS := -Wl,-no-whole-archive diff --git a/src/comp/back/link.rs b/src/comp/back/link.rs index 34f58b60aa9..7f413735acd 100644 --- a/src/comp/back/link.rs +++ b/src/comp/back/link.rs @@ -220,7 +220,6 @@ fn run_passes(sess: session::session, llmod: ModuleRef, output: str) { } else { FileType = LLVMAssemblyFile; } // Write optimized bitcode if --save-temps was on. - let seg_stack = sess.get_targ_cfg().os != session::os_freebsd; if opts.save_temps { // Always output the bitcode file with --save-temps @@ -245,7 +244,7 @@ fn run_passes(sess: session::session, llmod: ModuleRef, output: str) { buf_o, LLVMAssemblyFile, CodeGenOptLevel, - seg_stack)})}); + true)})}); } @@ -265,7 +264,7 @@ fn run_passes(sess: session::session, llmod: ModuleRef, output: str) { buf_o, LLVMObjectFile, CodeGenOptLevel, - seg_stack)})}); + true)})}); } } else { // If we aren't saving temps then just output the file @@ -283,7 +282,7 @@ fn run_passes(sess: session::session, llmod: ModuleRef, output: str) { buf_o, FileType, CodeGenOptLevel, - seg_stack)})}); + true)})}); } // Clean up and return @@ -661,7 +660,7 @@ fn rmext(filename: str) -> str { } if sess.get_targ_cfg().os == session::os_freebsd { - gcc_args += ["-lrt"]; + gcc_args += ["-lrt", "-L/usr/local/lib", "-lexecinfo"]; } // OS X 10.6 introduced 'compact unwind info', which is produced by the diff --git a/src/rt/arch/x86_64/record_sp.S b/src/rt/arch/x86_64/record_sp.S index 4330d4cfb76..3b238d33c77 100644 --- a/src/rt/arch/x86_64/record_sp.S +++ b/src/rt/arch/x86_64/record_sp.S @@ -14,21 +14,23 @@ .globl GET_SP .globl CHECK_STACK -#if defined(__linux__) || defined(__FreeBSD__) +#if defined(__linux__) RECORD_SP: movq %rdi, %fs:112 ret -#else -#if defined(__APPLE__) +#elif defined(__APPLE__) RECORD_SP: movq $0x60+90*8, %rsi movq %rdi, %gs:(%rsi) ret +#elif defined(__FreeBSD__) +RECORD_SP: + movq %rdi, %fs:24 + ret #else RECORD_SP: ret #endif -#endif GET_SP: movq %rsp, %rax -- GitLab