diff options
Diffstat (limited to 'Tests/Assembler')
-rw-r--r-- | Tests/Assembler/CMakeLists.txt | 22 | ||||
-rw-r--r-- | Tests/Assembler/main-linux-x86-gas.s | 29 | ||||
-rw-r--r-- | Tests/Assembler/main.c | 7 |
3 files changed, 58 insertions, 0 deletions
diff --git a/Tests/Assembler/CMakeLists.txt b/Tests/Assembler/CMakeLists.txt new file mode 100644 index 0000000..e68393e --- /dev/null +++ b/Tests/Assembler/CMakeLists.txt @@ -0,0 +1,22 @@ +project(Assembler) + +set(SRCS) + +# if no file has been set as source and we are on linux with an x86 processor try to use the gas/as assembler +if(NOT SRCS AND CMAKE_SYSTEM_NAME MATCHES Linux AND CMAKE_SYSTEM_PROCESSOR MATCHES "[ix].?86$") + message(STATUS "Trying to enable ASM-ATT for Linux/x86") + enable_language(ASM-ATT) + if(CMAKE_ASM-ATT_COMPILER_WORKS) + message(STATUS "Trying to enable ASM-ATT for Linux/x86 - succeeded") + # this assembler file was created using gcc -S main.c + set(SRCS main-linux-x86-gas.s) + endif(CMAKE_ASM-ATT_COMPILER_WORKS) +endif(NOT SRCS AND CMAKE_SYSTEM_NAME MATCHES Linux AND CMAKE_SYSTEM_PROCESSOR MATCHES "[ix].?86$") + +if(NOT SRCS) + message(STATUS "No assembler enabled, using C") + set(SRCS main.c) +endif(NOT SRCS) + +add_executable(HelloAsm ${SRCS}) +set_target_properties(HelloAsm PROPERTIES LINKER_LANGUAGE C) diff --git a/Tests/Assembler/main-linux-x86-gas.s b/Tests/Assembler/main-linux-x86-gas.s new file mode 100644 index 0000000..9e260a3 --- /dev/null +++ b/Tests/Assembler/main-linux-x86-gas.s @@ -0,0 +1,29 @@ + .file "main.c" + .section .rodata + .align 4 +.LC0: + .string "hello assembler world, %d arguments given\n" + .text +.globl main + .type main, @function +main: + leal 4(%esp), %ecx + andl $-16, %esp + pushl -4(%ecx) + pushl %ebp + movl %esp, %ebp + pushl %ecx + subl $20, %esp + movl (%ecx), %eax + movl %eax, 4(%esp) + movl $.LC0, (%esp) + call printf + movl $0, %eax + addl $20, %esp + popl %ecx + popl %ebp + leal -4(%ecx), %esp + ret + .size main, .-main + .ident "GCC: (GNU) 4.1.2 20060928 (prerelease) (Ubuntu 4.1.1-13ubuntu5)" + .section .note.GNU-stack,"",@progbits diff --git a/Tests/Assembler/main.c b/Tests/Assembler/main.c new file mode 100644 index 0000000..3704ad0 --- /dev/null +++ b/Tests/Assembler/main.c @@ -0,0 +1,7 @@ +#include <stdio.h> + +int main(int argc, char** argv) +{ + printf("hello assembler world, %d arguments given\n", argc); + return 0; +} |