| /*--------------------------------------------------------------------*/ |
| /*--- Basic Mach traps. mach_traps-amd64-darwin.S ---*/ |
| /*--------------------------------------------------------------------*/ |
| |
| /* |
| This file is part of Valgrind, a dynamic binary instrumentation |
| framework. |
| |
| Copyright (C) 2007-2015 Apple Inc. |
| Greg Parker gparker@apple.com |
| |
| This program is free software; you can redistribute it and/or |
| modify it under the terms of the GNU General Public License as |
| published by the Free Software Foundation; either version 2 of the |
| License, or (at your option) any later version. |
| |
| This program is distributed in the hope that it will be useful, but |
| WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| General Public License for more details. |
| |
| You should have received a copy of the GNU General Public License |
| along with this program; if not, write to the Free Software |
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA |
| 02111-1307, USA. |
| |
| The GNU General Public License is contained in the file COPYING. |
| */ |
| |
| #include "pub_core_basics_asm.h" |
| |
| #if defined(VGP_amd64_darwin) |
| |
| #include "vki/vki-scnums-darwin.h" |
| |
| // mach_port_name_t task_self_trap(void) |
| .text |
| .align 4 |
| .globl _task_self_trap |
| _task_self_trap: |
| movq $__NR_task_self_trap, %rax |
| movq %rcx, %r10 |
| syscall |
| ret |
| |
| // DDD: doesn't get used... |
| // // mach_port_name_t host_self_trap(void) |
| // .text |
| // .align 4 |
| // .globl _host_self_trap |
| //_host_self_trap: |
| // movq $__NR_host_self_trap, %rax |
| // movq %rcx, %r10 |
| // syscall |
| // ret |
| |
| // mach_port_name_t thread_self_trap(void) |
| .text |
| .align 4 |
| .globl _thread_self_trap |
| _thread_self_trap: |
| movq $__NR_thread_self_trap, %rax |
| movq %rcx, %r10 |
| syscall |
| ret |
| |
| // mach_msg_return_t mach_msg_trap(...) |
| .text |
| .align 4 |
| .globl _mach_msg_trap |
| _mach_msg_trap: |
| movq $__NR_mach_msg_trap, %rax |
| movq %rcx, %r10 |
| syscall |
| ret |
| |
| // mach_port_t mach_reply_port(...) |
| .text |
| .align 4 |
| .globl _mach_reply_port |
| _mach_reply_port: |
| movq $__NR_mach_reply_port, %rax |
| movq %rcx, %r10 |
| syscall |
| ret |
| |
| // boolean_t swtch_pri(int) |
| .text |
| .align 4 |
| .globl _swtch_pri |
| _swtch_pri: |
| movq $__NR_swtch_pri, %rax |
| movq %rcx, %r10 |
| syscall |
| ret |
| |
| // kern_return_t semaphore_wait(semaphore_t) |
| .text |
| .align 4 |
| .globl _semaphore_wait |
| _semaphore_wait: |
| movq $__NR_semaphore_wait_trap, %rax |
| movq %rcx, %r10 |
| syscall |
| ret |
| |
| // kern_return_t semaphore_signal(semaphore_t) |
| .text |
| .align 4 |
| .globl _semaphore_signal |
| _semaphore_signal: |
| movq $__NR_semaphore_signal_trap, %rax |
| movq %rcx, %r10 |
| syscall |
| ret |
| |
| // kern_return_t semaphore_signal_thread(semaphore_t, thread_t) |
| .text |
| .align 4 |
| .globl _semaphore_signal_thread |
| _semaphore_signal_thread: |
| movq $__NR_semaphore_signal_thread_trap, %rax |
| movq %rcx, %r10 |
| syscall |
| ret |
| |
| // kern_return_t semaphore_wait_signal(semaphore_t, semaphore_t) |
| .text |
| .align 4 |
| .globl _semaphore_wait_signal |
| _semaphore_wait_signal: |
| movq $__NR_semaphore_wait_signal_trap, %rax |
| movq %rcx, %r10 |
| syscall |
| ret |
| |
| #endif // defined(VGP_amd64_darwin) |
| |
| /* Let the linker know we don't need an executable stack */ |
| MARK_STACK_NO_EXEC |
| |
| /*--------------------------------------------------------------------*/ |
| /*--- end ---*/ |
| /*--------------------------------------------------------------------*/ |