]> git.lizzy.rs Git - rust.git/commitdiff
add missing library, enable segmented stacks for freebsd
authorJyun-Yan You <jyyou@cs.nctu.edu.tw>
Sun, 1 Jan 2012 06:36:48 +0000 (14:36 +0800)
committerBrian Anderson <banderson@mozilla.com>
Mon, 2 Jan 2012 04:18:55 +0000 (20:18 -0800)
mk/platform.mk
src/comp/back/link.rs
src/rt/arch/x86_64/record_sp.S

index 40a3dd8ebc6b959d257f4f0e8f6c6a50f1cbb587..a978ccc95aa16bee630cf195fd81f00b5c8cb59e 100644 (file)
@@ -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
index 34f58b60aa91e72673419dccf0423b8c0fed3b2f..7f413735acd6fc0e2ddabddf0ea4442603569ad7 100644 (file)
@@ -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
index 4330d4cfb76021ae6e9f76d13b4fd186869e9362..3b238d33c77870b8d6ad40f7c0e1bf2572985b2f 100644 (file)
 .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