Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 16 May 2004 01:19:54 +0200 (CEST)
From:      marcov@stack.nl (Marco van de Voort)
To:        freebsd-amd64@freebsd.org
Subject:   ABI question, porting ports to amd64
Message-ID:  <20040515231954.4594F93@toad.stack.nl>

next in thread | raw e-mail | index | archive | help

I read the ABI info on x86-64.org, and objdumped some linux and freebsd
code, and I ran into a linux<->freebsd difference something I can't figure
out:

There is a mov %rcx,%r10 instruction before each syscall on the testbox I
use (which is plain 5.2.1 afaik). The linux code doesn't have this mov
afaik. Moreover, it seems to serve no purpose.

I tried to figure out why this is done, but have failed. 
Can somebody shed some light on this?

P.s. this is for amd64 version of the fpc-devel port, a Delphi compiler,
which has the possibillity of doing syscalls besides linking to libc.

Example: sys_select:

0000000000400264 <__sys_select>:
  400264:       48 c7 c0 5d 00 00 00    mov    $0x5d,%rax
  40026b:       49 89 ca                mov    %rcx,%r10	<---- this mov
  40026e:       0f 05                   syscall
  400270:       72 01                   jb     400273 <__sys_select+0xf>
  400272:       c3                      retq
  400273:       e9 00 00 00 00          jmpq   400278 <.cerror>

0000000000400278 <.cerror>:
  400278:       50                      push   %rax
  400279:       e8 0e 03 00 00          callq  40058c <__error_unthreaded>
  40027e:       59                      pop    %rcx
  40027f:       48 89 08                mov    %rcx,(%rax)
  400282:       48 c7 c0 ff ff ff ff    mov    $0xffffffffffffffff,%rax
  400289:       48 c7 c2 ff ff ff ff    mov    $0xffffffffffffffff,%rdx
  400290:       c3                      retq

calling code:

  40023a:       48 8d 4c 24 10          lea    0x10(%rsp,1),%rcx
  40023f:       48 8d 94 24 90 00 00    lea    0x90(%rsp,1),%rdx
  400246:       00
  400247:       48 8d b4 24 10 01 00    lea    0x110(%rsp,1),%rsi
  40024e:       00
  40024f:       bf 05 00 00 00          mov    $0x5,%edi
  400254:       e8 0b 00 00 00          callq  400264 <__sys_select>


Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20040515231954.4594F93>