x86_64-pc-cygwin-gcc编译程序集错误

时间:2013-11-19 02:02:53

标签: gcc assembly cygwin

我运行一个简单的x86-64 hello world汇编代码。

    .global main

    .text
main:                                
    mov     $message, %rdi       
    sub     $8, %rsp             
    call    puts                 
    add     $8, %rsp             
    ret  

message:
    .asciz "Hello, World"

我在cygwin下使用gcc_4.8.2在我的64位windows os下编译这个程序。

gcc -o helloworld helloworld.s

但编译器总是给我错误:

/tmp/ccylxw5q.o:fake:(.text+0x3): relocation truncated to fit: R_X86_64_32S against `.text'

如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

gas下(由gcc调用)如果要立即加载64位,则需要使用movabsq助记符。否则,汇编器将使用32位符号扩展mov,这也是32S的重定位类型所指示的。在某些内存布局下,message的最终地址可能不会表示为32位符号扩展值,这可能会导致截断警告。