浏览代码

Merge pull request #29 from japaric/weak-memcpy

add weak `memcpy` et al symbols
Jorge Aparicio 8 年之前
父节点
当前提交
89594e16ae
共有 3 个文件被更改,包括 22 次插入1 次删除
  1. 6 0
      Cargo.toml
  2. 11 0
      ci/script.sh
  3. 5 1
      src/lib.rs

+ 6 - 0
Cargo.toml

@@ -3,5 +3,11 @@ authors = ["Jorge Aparicio <japaricious@gmail.com>"]
 name = "rustc_builtins"
 version = "0.1.0"
 
+[dependencies]
+rlibc = { git = "https://github.com/alexcrichton/rlibc", optional = true }
+
 [dev-dependencies]
 quickcheck = "0.3.1"
+
+[features]
+default = ["rlibc/weak"]

+ 11 - 0
ci/script.sh

@@ -9,10 +9,21 @@ build() {
 
 inspect() {
     $PREFIX$NM -g --defined-only target/**/debug/*.rlib
+
     set +e
     $PREFIX$OBJDUMP -Cd target/**/debug/*.rlib
     $PREFIX$OBJDUMP -Cd target/**/release/*.rlib
     set -e
+
+    # Check presence of weak symbols
+    case $TRAVIS_OS_NAME in
+        linux)
+            local symbols=( memcmp memcpy memmove memset )
+            for symbol in "${symbols[@]}"; do
+                $PREFIX$NM target/**/debug/deps/librlibc*.rlib | grep -q "W $symbol"
+            done
+            ;;
+    esac
 }
 
 run_tests() {

+ 5 - 1
src/lib.rs

@@ -1,8 +1,9 @@
-#![allow(unused_features)]
 #![feature(asm)]
 #![feature(core_intrinsics)]
+#![feature(linkage)]
 #![feature(naked_functions)]
 #![cfg_attr(not(test), no_std)]
+#![no_builtins]
 // TODO(rust-lang/rust#35021) uncomment when that PR lands
 // #![feature(rustc_builtins)]
 
@@ -16,6 +17,9 @@ extern crate quickcheck;
 #[cfg(test)]
 extern crate core;
 
+#[cfg(all(not(windows), not(target_os = "macos")))]
+extern crate rlibc;
+
 #[cfg(target_arch = "arm")]
 pub mod arm;