From 6eaa6439f08297f9e2e219e3cd0ede8937fe3808 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Tue, 14 Jul 2015 15:45:50 -0700 Subject: [PATCH] Add tests for compiling assembly --- gcc-test/build.rs | 8 ++++++++ gcc-test/src/i686.S | 9 +++++++++ gcc-test/src/lib.rs | 4 ++-- gcc-test/src/x86_64.S | 9 +++++++++ gcc-test/src/x86_64.asm | 8 ++++++++ gcc-test/tests/all.rs | 7 +++++++ 6 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 gcc-test/src/i686.S create mode 100644 gcc-test/src/x86_64.S create mode 100644 gcc-test/src/x86_64.asm diff --git a/gcc-test/build.rs b/gcc-test/build.rs index aa977c6..696ea12 100644 --- a/gcc-test/build.rs +++ b/gcc-test/build.rs @@ -14,4 +14,12 @@ fn main() { .file("src/bar1.c") .file("src/bar2.c") .compile("libbar.a"); + + let target = std::env::var("TARGET").unwrap(); + let file = target.split("-").next().unwrap(); + let file = format!("src/{}.{}", file, + if target.contains("msvc") {"asm"} else {"S"}); + gcc::Config::new() + .file(file) + .compile("libasm.a"); } diff --git a/gcc-test/src/i686.S b/gcc-test/src/i686.S new file mode 100644 index 0000000..3ed9e86 --- /dev/null +++ b/gcc-test/src/i686.S @@ -0,0 +1,9 @@ +.globl asm +asm: + mov $7, %eax + ret + +.globl _asm +_asm: + mov $7, %eax + ret diff --git a/gcc-test/src/lib.rs b/gcc-test/src/lib.rs index 86c99df..0e992db 100644 --- a/gcc-test/src/lib.rs +++ b/gcc-test/src/lib.rs @@ -1,8 +1,8 @@ extern { pub fn foo() -> i32; -} -extern { pub fn bar1() -> i32; pub fn bar2() -> i32; + + pub fn asm() -> i32; } diff --git a/gcc-test/src/x86_64.S b/gcc-test/src/x86_64.S new file mode 100644 index 0000000..3ed9e86 --- /dev/null +++ b/gcc-test/src/x86_64.S @@ -0,0 +1,9 @@ +.globl asm +asm: + mov $7, %eax + ret + +.globl _asm +_asm: + mov $7, %eax + ret diff --git a/gcc-test/src/x86_64.asm b/gcc-test/src/x86_64.asm new file mode 100644 index 0000000..1c03101 --- /dev/null +++ b/gcc-test/src/x86_64.asm @@ -0,0 +1,8 @@ +_TEXT SEGMENT + +asm PROC + MOV EAX, 7 + RET +asm ENDP + +END diff --git a/gcc-test/tests/all.rs b/gcc-test/tests/all.rs index e85969b..ca24ba8 100644 --- a/gcc-test/tests/all.rs +++ b/gcc-test/tests/all.rs @@ -17,3 +17,10 @@ fn bar_here() { } } + +#[test] +fn asm_here() { + unsafe { + assert_eq!(asm(), 7); + } +}