1f76d27a697a7b0bf3b84490baf60623fc96a23afnjn 2f76d27a697a7b0bf3b84490baf60623fc96a23afnjn/*--------------------------------------------------------------------*/ 3f76d27a697a7b0bf3b84490baf60623fc96a23afnjn/*--- Support for doing system calls. syscall-amd64-darwin.S ---*/ 4f76d27a697a7b0bf3b84490baf60623fc96a23afnjn/*--------------------------------------------------------------------*/ 5f76d27a697a7b0bf3b84490baf60623fc96a23afnjn 6f76d27a697a7b0bf3b84490baf60623fc96a23afnjn/* 7f76d27a697a7b0bf3b84490baf60623fc96a23afnjn This file is part of Valgrind, a dynamic binary instrumentation 8f76d27a697a7b0bf3b84490baf60623fc96a23afnjn framework. 9f76d27a697a7b0bf3b84490baf60623fc96a23afnjn 10b3a1e4bffbdbbf38304f216af405009868f43628sewardj Copyright (C) 2000-2015 Julian Seward 11f76d27a697a7b0bf3b84490baf60623fc96a23afnjn jseward@acm.org 12f76d27a697a7b0bf3b84490baf60623fc96a23afnjn 13f76d27a697a7b0bf3b84490baf60623fc96a23afnjn This program is free software; you can redistribute it and/or 14f76d27a697a7b0bf3b84490baf60623fc96a23afnjn modify it under the terms of the GNU General Public License as 15f76d27a697a7b0bf3b84490baf60623fc96a23afnjn published by the Free Software Foundation; either version 2 of the 16f76d27a697a7b0bf3b84490baf60623fc96a23afnjn License, or (at your option) any later version. 17f76d27a697a7b0bf3b84490baf60623fc96a23afnjn 18f76d27a697a7b0bf3b84490baf60623fc96a23afnjn This program is distributed in the hope that it will be useful, but 19f76d27a697a7b0bf3b84490baf60623fc96a23afnjn WITHOUT ANY WARRANTY; without even the implied warranty of 20f76d27a697a7b0bf3b84490baf60623fc96a23afnjn MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 21f76d27a697a7b0bf3b84490baf60623fc96a23afnjn General Public License for more details. 22f76d27a697a7b0bf3b84490baf60623fc96a23afnjn 23f76d27a697a7b0bf3b84490baf60623fc96a23afnjn You should have received a copy of the GNU General Public License 24f76d27a697a7b0bf3b84490baf60623fc96a23afnjn along with this program; if not, write to the Free Software 25f76d27a697a7b0bf3b84490baf60623fc96a23afnjn Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 26f76d27a697a7b0bf3b84490baf60623fc96a23afnjn 02111-1307, USA. 27f76d27a697a7b0bf3b84490baf60623fc96a23afnjn 28f76d27a697a7b0bf3b84490baf60623fc96a23afnjn The GNU General Public License is contained in the file COPYING. 29f76d27a697a7b0bf3b84490baf60623fc96a23afnjn*/ 30f76d27a697a7b0bf3b84490baf60623fc96a23afnjn 313f1d6138db68f2aa74c5d005c3333cbe94788c7bflorian#include "pub_core_basics_asm.h" 323f1d6138db68f2aa74c5d005c3333cbe94788c7bflorian 338b68b64759254d514d98328c496cbd88cde4c9a5njn#if defined(VGP_amd64_darwin) 348b68b64759254d514d98328c496cbd88cde4c9a5njn 351a1e95c1f385a9b3b4f13f231eebaafff6e56450njn#include "pub_core_vkiscnums_asm.h" 36f76d27a697a7b0bf3b84490baf60623fc96a23afnjn#include "libvex_guest_offsets.h" 37f76d27a697a7b0bf3b84490baf60623fc96a23afnjn 38f76d27a697a7b0bf3b84490baf60623fc96a23afnjn 39f76d27a697a7b0bf3b84490baf60623fc96a23afnjn/*----------------------------------------------------------------*/ 40f76d27a697a7b0bf3b84490baf60623fc96a23afnjn/* 41f76d27a697a7b0bf3b84490baf60623fc96a23afnjn Perform a syscall for the client. This will run a syscall 42f76d27a697a7b0bf3b84490baf60623fc96a23afnjn with the client's specific per-thread signal mask. 43f76d27a697a7b0bf3b84490baf60623fc96a23afnjn 44f76d27a697a7b0bf3b84490baf60623fc96a23afnjn The structure of this function is such that, if the syscall is 45f76d27a697a7b0bf3b84490baf60623fc96a23afnjn interrupted by a signal, we can determine exactly what 46f76d27a697a7b0bf3b84490baf60623fc96a23afnjn execution state we were in with respect to the execution of 47f76d27a697a7b0bf3b84490baf60623fc96a23afnjn the syscall by examining the value of %eip in the signal 48f76d27a697a7b0bf3b84490baf60623fc96a23afnjn handler. This means that we can always do the appropriate 49f76d27a697a7b0bf3b84490baf60623fc96a23afnjn thing to precisely emulate the kernel's signal/syscall 50f76d27a697a7b0bf3b84490baf60623fc96a23afnjn interactions. 51f76d27a697a7b0bf3b84490baf60623fc96a23afnjn 52f76d27a697a7b0bf3b84490baf60623fc96a23afnjn The syscall number is taken from the argument, even though it 53f76d27a697a7b0bf3b84490baf60623fc96a23afnjn should also be in guest_state->guest_RAX. The syscall result 54f76d27a697a7b0bf3b84490baf60623fc96a23afnjn is written back to guest_state->guest_RAX on completion. 55f76d27a697a7b0bf3b84490baf60623fc96a23afnjn 56f76d27a697a7b0bf3b84490baf60623fc96a23afnjn Returns 0 if the syscall was successfully called (even if the 57f76d27a697a7b0bf3b84490baf60623fc96a23afnjn syscall itself failed), or a -ve error code if one of the 58f76d27a697a7b0bf3b84490baf60623fc96a23afnjn sigprocmasks failed (there's no way to determine which one 59f76d27a697a7b0bf3b84490baf60623fc96a23afnjn failed). 60f76d27a697a7b0bf3b84490baf60623fc96a23afnjn 61f76d27a697a7b0bf3b84490baf60623fc96a23afnjn VG_(fixup_guest_state_after_syscall_interrupted) does the 62f76d27a697a7b0bf3b84490baf60623fc96a23afnjn thread state fixup in the case where we were interrupted by a 63f76d27a697a7b0bf3b84490baf60623fc96a23afnjn signal. 64f76d27a697a7b0bf3b84490baf60623fc96a23afnjn 65f76d27a697a7b0bf3b84490baf60623fc96a23afnjn Prototype: 66f76d27a697a7b0bf3b84490baf60623fc96a23afnjn 67f76d27a697a7b0bf3b84490baf60623fc96a23afnjn Int ML_(do_syscall_for_client_WRK( 68f76d27a697a7b0bf3b84490baf60623fc96a23afnjn Int syscallno, // rdi 69f76d27a697a7b0bf3b84490baf60623fc96a23afnjn void* guest_state, // rsi 70f76d27a697a7b0bf3b84490baf60623fc96a23afnjn const vki_sigset_t *sysmask, // rdx 71f76d27a697a7b0bf3b84490baf60623fc96a23afnjn const vki_sigset_t *postmask, // rcx 72f76d27a697a7b0bf3b84490baf60623fc96a23afnjn Int sigsetSzB) // r8 73f76d27a697a7b0bf3b84490baf60623fc96a23afnjn 74f76d27a697a7b0bf3b84490baf60623fc96a23afnjn Note that sigsetSzB is totally ignored (and irrelevant). 75f76d27a697a7b0bf3b84490baf60623fc96a23afnjn*/ 76f76d27a697a7b0bf3b84490baf60623fc96a23afnjn 77f76d27a697a7b0bf3b84490baf60623fc96a23afnjn/* from vki_arch.h */ 78f76d27a697a7b0bf3b84490baf60623fc96a23afnjn#define VKI_SIG_SETMASK 3 79f76d27a697a7b0bf3b84490baf60623fc96a23afnjn 80f76d27a697a7b0bf3b84490baf60623fc96a23afnjn/* DO_SYSCALL MACH|MDEP|UNIX */ 81f76d27a697a7b0bf3b84490baf60623fc96a23afnjn#define MACH 1 82f76d27a697a7b0bf3b84490baf60623fc96a23afnjn#define MDEP 2 83f76d27a697a7b0bf3b84490baf60623fc96a23afnjn#define UNIX 3 84f76d27a697a7b0bf3b84490baf60623fc96a23afnjn 85f76d27a697a7b0bf3b84490baf60623fc96a23afnjn.macro DO_SYSCALL 86f76d27a697a7b0bf3b84490baf60623fc96a23afnjn /* save callee-saved regs */ 87f76d27a697a7b0bf3b84490baf60623fc96a23afnjn pushq %rbp 88f76d27a697a7b0bf3b84490baf60623fc96a23afnjn movq %rsp, %rbp 89f76d27a697a7b0bf3b84490baf60623fc96a23afnjn // stack is now aligned 90f76d27a697a7b0bf3b84490baf60623fc96a23afnjn pushq %rdi // -8(%rbp) syscallno 91f76d27a697a7b0bf3b84490baf60623fc96a23afnjn pushq %rsi // -16(%rbp) guest_state 92f76d27a697a7b0bf3b84490baf60623fc96a23afnjn pushq %rdx // -24(%rbp) sysmask 93f76d27a697a7b0bf3b84490baf60623fc96a23afnjn pushq %rcx // -32(%rbp) postmask 94f76d27a697a7b0bf3b84490baf60623fc96a23afnjn pushq %r8 // -40(%rbp) sigsetSzB 95f76d27a697a7b0bf3b84490baf60623fc96a23afnjn // stack is now aligned 96f76d27a697a7b0bf3b84490baf60623fc96a23afnjn 97f76d27a697a7b0bf3b84490baf60623fc96a23afnjnL_$0_1: /* Even though we can't take a signal until the sigprocmask completes, 98f76d27a697a7b0bf3b84490baf60623fc96a23afnjn start the range early. 99f76d27a697a7b0bf3b84490baf60623fc96a23afnjn If rip is in the range [1,2), the syscall hasn't been started yet */ 100f76d27a697a7b0bf3b84490baf60623fc96a23afnjn 101f76d27a697a7b0bf3b84490baf60623fc96a23afnjn /* Set the signal mask which should be current during the syscall. */ 102f76d27a697a7b0bf3b84490baf60623fc96a23afnjn /* GrP fixme signals 103f76d27a697a7b0bf3b84490baf60623fc96a23afnjn DDD: JRS fixme: use __NR___pthread_sigmask, not __NR_rt_sigprocmask 104f76d27a697a7b0bf3b84490baf60623fc96a23afnjn movq $__NR_rt_sigprocmask, %rax // syscall # 105f76d27a697a7b0bf3b84490baf60623fc96a23afnjn movq $VKI_SIG_SETMASK, %rdi // how 106f76d27a697a7b0bf3b84490baf60623fc96a23afnjn movq -24(%rbp), %rsi // sysmask 107f76d27a697a7b0bf3b84490baf60623fc96a23afnjn movq -32(%rbp), %rdx // postmask 108f76d27a697a7b0bf3b84490baf60623fc96a23afnjn movq -40(%rbp), %r10 // sigsetSzB in r10 not rcx 109f76d27a697a7b0bf3b84490baf60623fc96a23afnjn DDD: fixme return address 110f76d27a697a7b0bf3b84490baf60623fc96a23afnjn syscall 111f76d27a697a7b0bf3b84490baf60623fc96a23afnjn 112f76d27a697a7b0bf3b84490baf60623fc96a23afnjn jnc 7f // sigprocmask failed 113f76d27a697a7b0bf3b84490baf60623fc96a23afnjn */ 114f76d27a697a7b0bf3b84490baf60623fc96a23afnjn 115f76d27a697a7b0bf3b84490baf60623fc96a23afnjn /* OK, that worked. Now do the syscall proper. */ 116f76d27a697a7b0bf3b84490baf60623fc96a23afnjn 117f76d27a697a7b0bf3b84490baf60623fc96a23afnjn /* 6 register parameters */ 118f76d27a697a7b0bf3b84490baf60623fc96a23afnjn movq -16(%rbp), %r11 /* r11 = VexGuestAMD64State * */ 119f76d27a697a7b0bf3b84490baf60623fc96a23afnjn movq OFFSET_amd64_RDI(%r11), %rdi 120f76d27a697a7b0bf3b84490baf60623fc96a23afnjn movq OFFSET_amd64_RSI(%r11), %rsi 121f76d27a697a7b0bf3b84490baf60623fc96a23afnjn movq OFFSET_amd64_RDX(%r11), %rdx 122f76d27a697a7b0bf3b84490baf60623fc96a23afnjn movq OFFSET_amd64_RCX(%r11), %r10 /* rcx is passed in r10 instead */ 123f76d27a697a7b0bf3b84490baf60623fc96a23afnjn movq OFFSET_amd64_R8(%r11), %r8 124f76d27a697a7b0bf3b84490baf60623fc96a23afnjn movq OFFSET_amd64_R9(%r11), %r9 125f76d27a697a7b0bf3b84490baf60623fc96a23afnjn /* 2 stack parameters plus return address (ignored by syscall) */ 126f76d27a697a7b0bf3b84490baf60623fc96a23afnjn movq OFFSET_amd64_RSP(%r11), %r11 /* r11 = simulated RSP */ 127f76d27a697a7b0bf3b84490baf60623fc96a23afnjn movq 16(%r11), %rax 128f76d27a697a7b0bf3b84490baf60623fc96a23afnjn pushq %rax 129f76d27a697a7b0bf3b84490baf60623fc96a23afnjn movq 8(%r11), %rax 130f76d27a697a7b0bf3b84490baf60623fc96a23afnjn pushq %rax 131f76d27a697a7b0bf3b84490baf60623fc96a23afnjn /* stack is currently aligned - return address misaligns */ 132f76d27a697a7b0bf3b84490baf60623fc96a23afnjn movq 0(%r11), %rax 133f76d27a697a7b0bf3b84490baf60623fc96a23afnjn pushq %rax 134f76d27a697a7b0bf3b84490baf60623fc96a23afnjn /* syscallno */ 135f76d27a697a7b0bf3b84490baf60623fc96a23afnjn movq -8(%rbp), %rax 136f76d27a697a7b0bf3b84490baf60623fc96a23afnjn 137f76d27a697a7b0bf3b84490baf60623fc96a23afnjn /* If rip==2, then the syscall was either just about 138f76d27a697a7b0bf3b84490baf60623fc96a23afnjn to start, or was interrupted and the kernel was 139f76d27a697a7b0bf3b84490baf60623fc96a23afnjn restarting it. */ 140f76d27a697a7b0bf3b84490baf60623fc96a23afnjnL_$0_2: syscall 141f76d27a697a7b0bf3b84490baf60623fc96a23afnjnL_$0_3: /* In the range [3, 4), the syscall result is in %rax, 142f76d27a697a7b0bf3b84490baf60623fc96a23afnjn but hasn't been committed to RAX. */ 143f76d27a697a7b0bf3b84490baf60623fc96a23afnjn 144f76d27a697a7b0bf3b84490baf60623fc96a23afnjn /* stack contents: 3 words for syscall above, plus our prologue */ 145f76d27a697a7b0bf3b84490baf60623fc96a23afnjn setc 0(%rsp) /* stash returned carry flag */ 146f76d27a697a7b0bf3b84490baf60623fc96a23afnjn 147f76d27a697a7b0bf3b84490baf60623fc96a23afnjn movq -16(%rbp), %r11 /* r11 = VexGuestAMD64State * */ 148f76d27a697a7b0bf3b84490baf60623fc96a23afnjn movq %rax, OFFSET_amd64_RAX(%r11) /* save back to RAX */ 149f76d27a697a7b0bf3b84490baf60623fc96a23afnjn movq %rdx, OFFSET_amd64_RDX(%r11) /* save back to RDX */ 150f76d27a697a7b0bf3b84490baf60623fc96a23afnjn 151f76d27a697a7b0bf3b84490baf60623fc96a23afnjn.if $0 == UNIX 152f76d27a697a7b0bf3b84490baf60623fc96a23afnjn /* save carry flag to VEX */ 153f76d27a697a7b0bf3b84490baf60623fc96a23afnjn xor %rax, %rax 154f76d27a697a7b0bf3b84490baf60623fc96a23afnjn movb 0(%rsp), %al 155f76d27a697a7b0bf3b84490baf60623fc96a23afnjn movq %rax, %rdi /* arg1 = new flag */ 156f76d27a697a7b0bf3b84490baf60623fc96a23afnjn movq %r11, %rsi /* arg2 = vex state */ 157f76d27a697a7b0bf3b84490baf60623fc96a23afnjn addq $$24, %rsp /* remove syscall parameters */ 158f76d27a697a7b0bf3b84490baf60623fc96a23afnjn call _LibVEX_GuestAMD64_put_rflag_c 159f76d27a697a7b0bf3b84490baf60623fc96a23afnjn.else 160f76d27a697a7b0bf3b84490baf60623fc96a23afnjn addq $$24, %rsp /* remove syscall parameters*/ 161f76d27a697a7b0bf3b84490baf60623fc96a23afnjn.endif 162f76d27a697a7b0bf3b84490baf60623fc96a23afnjn 163f76d27a697a7b0bf3b84490baf60623fc96a23afnjnL_$0_4: /* Re-block signals. If eip is in [4,5), then the syscall 164f76d27a697a7b0bf3b84490baf60623fc96a23afnjn is complete and we needn't worry about it. */ 165f76d27a697a7b0bf3b84490baf60623fc96a23afnjn /* GrP fixme signals 166f76d27a697a7b0bf3b84490baf60623fc96a23afnjn DDD: JRS fixme: use __NR___pthread_sigmask, not __NR_rt_sigprocmask 167f76d27a697a7b0bf3b84490baf60623fc96a23afnjn PUSH_di_si_dx_cx_8 168f76d27a697a7b0bf3b84490baf60623fc96a23afnjn 169f76d27a697a7b0bf3b84490baf60623fc96a23afnjn movq $__NR_rt_sigprocmask, %rax // syscall # 170f76d27a697a7b0bf3b84490baf60623fc96a23afnjn movq $VKI_SIG_SETMASK, %rdi // how 171f76d27a697a7b0bf3b84490baf60623fc96a23afnjn movq %rcx, %rsi // postmask 172f76d27a697a7b0bf3b84490baf60623fc96a23afnjn xorq %rdx, %rdx // NULL 173f76d27a697a7b0bf3b84490baf60623fc96a23afnjn movq %r8, %r10 // sigsetSzB 174f76d27a697a7b0bf3b84490baf60623fc96a23afnjn DDD: fixme return address 175f76d27a697a7b0bf3b84490baf60623fc96a23afnjn syscall 176f76d27a697a7b0bf3b84490baf60623fc96a23afnjn 177f76d27a697a7b0bf3b84490baf60623fc96a23afnjn POP_di_si_dx_cx_8 178f76d27a697a7b0bf3b84490baf60623fc96a23afnjn 179f76d27a697a7b0bf3b84490baf60623fc96a23afnjn jnc 7f // sigprocmask failed 180f76d27a697a7b0bf3b84490baf60623fc96a23afnjn */ 181f76d27a697a7b0bf3b84490baf60623fc96a23afnjnL_$0_5: /* now safe from signals */ 182f76d27a697a7b0bf3b84490baf60623fc96a23afnjn movq $$0, %rax /* SUCCESS */ 183f76d27a697a7b0bf3b84490baf60623fc96a23afnjn movq %rbp, %rsp 184f76d27a697a7b0bf3b84490baf60623fc96a23afnjn popq %rbp 185f76d27a697a7b0bf3b84490baf60623fc96a23afnjn ret 186f76d27a697a7b0bf3b84490baf60623fc96a23afnjn 187f76d27a697a7b0bf3b84490baf60623fc96a23afnjn/* GrP fixme signals 188f76d27a697a7b0bf3b84490baf60623fc96a23afnjnL_$0_7: // failure: return 0x8000 | error code 189f76d27a697a7b0bf3b84490baf60623fc96a23afnjn DDD: fixme return value 190f76d27a697a7b0bf3b84490baf60623fc96a23afnjn movq %rbp, %rsp 191f76d27a697a7b0bf3b84490baf60623fc96a23afnjn popq %rbp 192f76d27a697a7b0bf3b84490baf60623fc96a23afnjn ret 193f76d27a697a7b0bf3b84490baf60623fc96a23afnjn*/ 194f76d27a697a7b0bf3b84490baf60623fc96a23afnjn 195f76d27a697a7b0bf3b84490baf60623fc96a23afnjn.endmacro 196f76d27a697a7b0bf3b84490baf60623fc96a23afnjn 197f76d27a697a7b0bf3b84490baf60623fc96a23afnjn 198f76d27a697a7b0bf3b84490baf60623fc96a23afnjn.globl ML_(do_syscall_for_client_unix_WRK) 199f76d27a697a7b0bf3b84490baf60623fc96a23afnjnML_(do_syscall_for_client_unix_WRK): 200f76d27a697a7b0bf3b84490baf60623fc96a23afnjn DO_SYSCALL UNIX 201f76d27a697a7b0bf3b84490baf60623fc96a23afnjn 202f76d27a697a7b0bf3b84490baf60623fc96a23afnjn.globl ML_(do_syscall_for_client_mach_WRK) 203f76d27a697a7b0bf3b84490baf60623fc96a23afnjnML_(do_syscall_for_client_mach_WRK): 204f76d27a697a7b0bf3b84490baf60623fc96a23afnjn DO_SYSCALL MACH 205f76d27a697a7b0bf3b84490baf60623fc96a23afnjn 206f76d27a697a7b0bf3b84490baf60623fc96a23afnjn.globl ML_(do_syscall_for_client_mdep_WRK) 207f76d27a697a7b0bf3b84490baf60623fc96a23afnjnML_(do_syscall_for_client_mdep_WRK): 208f76d27a697a7b0bf3b84490baf60623fc96a23afnjn DO_SYSCALL MDEP 209f76d27a697a7b0bf3b84490baf60623fc96a23afnjn 210f76d27a697a7b0bf3b84490baf60623fc96a23afnjn.data 211f76d27a697a7b0bf3b84490baf60623fc96a23afnjn/* export the ranges so that 212f76d27a697a7b0bf3b84490baf60623fc96a23afnjn VG_(fixup_guest_state_after_syscall_interrupted) can do the 213f76d27a697a7b0bf3b84490baf60623fc96a23afnjn right thing */ 214f76d27a697a7b0bf3b84490baf60623fc96a23afnjn 215f76d27a697a7b0bf3b84490baf60623fc96a23afnjn/* eg MK_L_SCLASS_N(UNIX,99) produces L_3_99 216f76d27a697a7b0bf3b84490baf60623fc96a23afnjn since UNIX is #defined to 3 at the top of this file */ 217f76d27a697a7b0bf3b84490baf60623fc96a23afnjn#define FOO(scclass,labelno) L_##scclass##_##labelno 218f76d27a697a7b0bf3b84490baf60623fc96a23afnjn#define MK_L_SCCLASS_N(scclass,labelno) FOO(scclass,labelno) 219f76d27a697a7b0bf3b84490baf60623fc96a23afnjn 220f76d27a697a7b0bf3b84490baf60623fc96a23afnjn.globl ML_(blksys_setup_MACH) 221f76d27a697a7b0bf3b84490baf60623fc96a23afnjn.globl ML_(blksys_restart_MACH) 222f76d27a697a7b0bf3b84490baf60623fc96a23afnjn.globl ML_(blksys_complete_MACH) 223f76d27a697a7b0bf3b84490baf60623fc96a23afnjn.globl ML_(blksys_committed_MACH) 224f76d27a697a7b0bf3b84490baf60623fc96a23afnjn.globl ML_(blksys_finished_MACH) 225f76d27a697a7b0bf3b84490baf60623fc96a23afnjnML_(blksys_setup_MACH): .quad MK_L_SCCLASS_N(MACH,1) 226f76d27a697a7b0bf3b84490baf60623fc96a23afnjnML_(blksys_restart_MACH): .quad MK_L_SCCLASS_N(MACH,2) 227f76d27a697a7b0bf3b84490baf60623fc96a23afnjnML_(blksys_complete_MACH): .quad MK_L_SCCLASS_N(MACH,3) 228f76d27a697a7b0bf3b84490baf60623fc96a23afnjnML_(blksys_committed_MACH): .quad MK_L_SCCLASS_N(MACH,4) 229f76d27a697a7b0bf3b84490baf60623fc96a23afnjnML_(blksys_finished_MACH): .quad MK_L_SCCLASS_N(MACH,5) 230f76d27a697a7b0bf3b84490baf60623fc96a23afnjn 231f76d27a697a7b0bf3b84490baf60623fc96a23afnjn.globl ML_(blksys_setup_MDEP) 232f76d27a697a7b0bf3b84490baf60623fc96a23afnjn.globl ML_(blksys_restart_MDEP) 233f76d27a697a7b0bf3b84490baf60623fc96a23afnjn.globl ML_(blksys_complete_MDEP) 234f76d27a697a7b0bf3b84490baf60623fc96a23afnjn.globl ML_(blksys_committed_MDEP) 235f76d27a697a7b0bf3b84490baf60623fc96a23afnjn.globl ML_(blksys_finished_MDEP) 236f76d27a697a7b0bf3b84490baf60623fc96a23afnjnML_(blksys_setup_MDEP): .quad MK_L_SCCLASS_N(MDEP,1) 237f76d27a697a7b0bf3b84490baf60623fc96a23afnjnML_(blksys_restart_MDEP): .quad MK_L_SCCLASS_N(MDEP,2) 238f76d27a697a7b0bf3b84490baf60623fc96a23afnjnML_(blksys_complete_MDEP): .quad MK_L_SCCLASS_N(MDEP,3) 239f76d27a697a7b0bf3b84490baf60623fc96a23afnjnML_(blksys_committed_MDEP): .quad MK_L_SCCLASS_N(MDEP,4) 240f76d27a697a7b0bf3b84490baf60623fc96a23afnjnML_(blksys_finished_MDEP): .quad MK_L_SCCLASS_N(MDEP,5) 241f76d27a697a7b0bf3b84490baf60623fc96a23afnjn 242f76d27a697a7b0bf3b84490baf60623fc96a23afnjn.globl ML_(blksys_setup_UNIX) 243f76d27a697a7b0bf3b84490baf60623fc96a23afnjn.globl ML_(blksys_restart_UNIX) 244f76d27a697a7b0bf3b84490baf60623fc96a23afnjn.globl ML_(blksys_complete_UNIX) 245f76d27a697a7b0bf3b84490baf60623fc96a23afnjn.globl ML_(blksys_committed_UNIX) 246f76d27a697a7b0bf3b84490baf60623fc96a23afnjn.globl ML_(blksys_finished_UNIX) 247f76d27a697a7b0bf3b84490baf60623fc96a23afnjnML_(blksys_setup_UNIX): .quad MK_L_SCCLASS_N(UNIX,1) 248f76d27a697a7b0bf3b84490baf60623fc96a23afnjnML_(blksys_restart_UNIX): .quad MK_L_SCCLASS_N(UNIX,2) 249f76d27a697a7b0bf3b84490baf60623fc96a23afnjnML_(blksys_complete_UNIX): .quad MK_L_SCCLASS_N(UNIX,3) 250f76d27a697a7b0bf3b84490baf60623fc96a23afnjnML_(blksys_committed_UNIX): .quad MK_L_SCCLASS_N(UNIX,4) 251f76d27a697a7b0bf3b84490baf60623fc96a23afnjnML_(blksys_finished_UNIX): .quad MK_L_SCCLASS_N(UNIX,5) 252f76d27a697a7b0bf3b84490baf60623fc96a23afnjn 2538b68b64759254d514d98328c496cbd88cde4c9a5njn#endif // defined(VGP_amd64_darwin) 254f76d27a697a7b0bf3b84490baf60623fc96a23afnjn 2553f1d6138db68f2aa74c5d005c3333cbe94788c7bflorian/* Let the linker know we don't need an executable stack */ 2563f1d6138db68f2aa74c5d005c3333cbe94788c7bflorianMARK_STACK_NO_EXEC 2573f1d6138db68f2aa74c5d005c3333cbe94788c7bflorian 258f76d27a697a7b0bf3b84490baf60623fc96a23afnjn/*--------------------------------------------------------------------*/ 259f76d27a697a7b0bf3b84490baf60623fc96a23afnjn/*--- end ---*/ 260f76d27a697a7b0bf3b84490baf60623fc96a23afnjn/*--------------------------------------------------------------------*/ 261