diff --git a/configure b/configure index 064901f292dd..bc904afbeebc 100755 --- a/configure +++ b/configure @@ -339,7 +339,7 @@ if [ -z "$CFG_TARGET_TRIPLES" ] then CFG_TARGET_TRIPLES="${CFG_HOST_TRIPLE}" else - CFG_TARGET_TRIPLES="${CFG_TARGET_TRIPLES/,/ }" + CFG_TARGET_TRIPLES="$(echo $CFG_TARGET_TRIPLES | tr ',' ' ')" fi @@ -459,12 +459,26 @@ do LLVM_CXXFLAGS_32="-m32" LLVM_LDFLAGS_32="-m32" - # FIXME: Need to change flags for x64 - LLVM_CXX=$LLVM_CXX_32 - LLVM_CC=$LLVM_CC_32 - LLVM_CFLAGS=$LLVM_CFLAGS_32 - LLVM_CXXFLAGS=$LLVM_CXXFLAGS_32 - LLVM_LDFLAGS=$LLVM_LDFLAGS_32 + LLVM_CXX_64="g++" + LLVM_CC_64="gcc" + LLVM_CFLAGS_64="" + LLVM_CXXFLAGS_64="" + LLVM_LDFLAGS_64="" + + if echo $t | grep x86_64 + then + LLVM_CXX=$LLVM_CXX_64 + LLVM_CC=$LLVM_CC_64 + LLVM_CFLAGS=$LLVM_CFLAGS_64 + LLVM_CXXFLAGS=$LLVM_CXXFLAGS_64 + LLVM_LDFLAGS=$LLVM_LDFLAGS_64 + else + LLVM_CXX=$LLVM_CXX_32 + LLVM_CC=$LLVM_CC_32 + LLVM_CFLAGS=$LLVM_CFLAGS_32 + LLVM_CXXFLAGS=$LLVM_CXXFLAGS_32 + LLVM_LDFLAGS=$LLVM_LDFLAGS_32 + fi CXX=$LLVM_CXX CC=$LLVM_CC diff --git a/src/comp/back/x86_64.rs b/src/comp/back/x86_64.rs index 14b423224c08..97731965e934 100644 --- a/src/comp/back/x86_64.rs +++ b/src/comp/back/x86_64.rs @@ -18,11 +18,16 @@ fn get_target_strs(target_os: session::os) -> target_strs::t { } session::os_win32. { - "e-p:32:32-f64:64:64-i64:64:64-f80:32:32-n8:16:32" //NDM i386 + // FIXME: Test this. Copied from linux + "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-"+ + "f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-"+ + "s0:64:64-f80:128:128-n8:16:32:64-S128" } session::os_linux. { - "e-p:32:32-f64:32:64-i64:32:64-f80:32:32-n8:16:32" //NDM i386 + "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-"+ + "f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-"+ + "s0:64:64-f80:128:128-n8:16:32:64-S128" } }, diff --git a/src/lib/linux_os.rs b/src/lib/linux_os.rs index 418a6fd0ad20..2a172fb1d3c4 100644 --- a/src/lib/linux_os.rs +++ b/src/lib/linux_os.rs @@ -50,6 +50,7 @@ native mod libc { fn unsetenv(n: str::sbuf) -> c_int; fn pipe(buf: *mutable fd_t) -> c_int; fn waitpid(pid: pid_t, &status: c_int, options: c_int) -> pid_t; + fn readlink(path: str::sbuf, buf: str::sbuf, bufsize: size_t) -> ssize_t; } mod libc_constants { diff --git a/src/lib/run_program.rs b/src/lib/run_program.rs index a553f504001f..1808abd51ae6 100644 --- a/src/lib/run_program.rs +++ b/src/lib/run_program.rs @@ -278,7 +278,7 @@ fn waitpid(pid: pid_t) -> int { #[cfg(target_os = "linux")] fn WEXITSTATUS(status: i32) -> i32 { - (status >> 8) & 0xff + (status >> 8i32) & 0xffi32 } #[cfg(target_os = "macos")] diff --git a/src/rt/arch/x86_64/ccall.S b/src/rt/arch/x86_64/ccall.S index 7a69aecedbf7..7ea29f2cea1a 100644 --- a/src/rt/arch/x86_64/ccall.S +++ b/src/rt/arch/x86_64/ccall.S @@ -61,7 +61,7 @@ upcall_call_c_stack_float: _upcall_call_c_stack_shim: #else .globl upcall_call_c_stack_shim -upcall_call_c_stack_shim +upcall_call_c_stack_shim: #endif push %rbp mov %rsp,%rbp // save rsp