bug-binutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Bug gas/17567] New: RIP Relative Addressing fails on macho64 format


From: bmpotter13 at gmail dot com
Subject: [Bug gas/17567] New: RIP Relative Addressing fails on macho64 format
Date: Sat, 08 Nov 2014 05:04:39 +0000

https://sourceware.org/bugzilla/show_bug.cgi?id=17567

            Bug ID: 17567
           Summary: RIP Relative Addressing fails on macho64 format
           Product: binutils
           Version: 2.24
            Status: NEW
          Severity: normal
          Priority: P2
         Component: gas
          Assignee: unassigned at sourceware dot org
          Reporter: bmpotter13 at gmail dot com

I am using binutils 2.24 to try to write a string to standard out of screen.
Macho-64 does not support assignment of 32 bit absolute addresses. A working
solution is to use RIP relative addressing.

Using the following:

movq msg, %rdi
...
msg: .ascii "Hello\n"

it generates the error "write64bit.s:6: Error: cannot represent relocation type
BFD_RELOC_X86_64_32S"

while the following

leaq msg(%rip), %rdi
...
msg: .ascii "Hello\n"

generates no errors, assembles, and links without errors.

Using 2.24 'as', this produces "leaq 0x0(%rip), %rdi" rather than "leaq
0x13(%rip), %rdi" as shown from the objdump disassembly.

Disassembly of section .text:

0000000000001fcd <_main>:
    1fcd:       b8 04 00 00 02          mov    $0x2000004,%eax
    1fd2:       48 c7 c7 01 00 00 00    mov    $0x1,%rdi
    1fd9:       48 8d 35 00 00 00 00    lea    0x0(%rip),%rsi        # 1fe0
<_main+0x13>
    1fe0:       48 c7 c2 0d 00 00 00    mov    $0xd,%rdx
    1fe7:       0f 05                   syscall 
    1fe9:       b8 01 00 00 02          mov    $0x2000001,%eax
    1fee:       48 31 ff                xor    %rdi,%rdi
    1ff1:       0f 05                   syscall 


The source code assembles correctly using the 1.38 provided by Xcode. 

I compiled from source using:

~/Downloads/binutils-2.24/configure --disable-werror
make

~/Downloads/binutils-2.24/gas/configure
make
sudo make install

Assembled and linked with
as -o write64bit.o write64bit.s
ld -lSystem -macosx_version_min 10.10 -o write64bit write64bit.o

write64bit.s source code
.global _main

_main:
    movl $0x2000004, %eax
    movq $1, %rdi
    leaq msg(%rip), %rsi
    movq $0xd, %rdx
    syscall

    movl $0x2000001, %eax
    xorq %rdi, %rdi
    syscall

msg: .ascii "Hello world!\n"

-- 
You are receiving this mail because:
You are on the CC list for the bug.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]