1*d0dcd65cSjoerg/* $NetBSD: ptrace.S,v 1.12 2013/11/30 20:20:42 joerg Exp $ */ 25aefcfdcSbjh21 35aefcfdcSbjh21/*- 45aefcfdcSbjh21 * Copyright (c) 1990 The Regents of the University of California. 55aefcfdcSbjh21 * All rights reserved. 65aefcfdcSbjh21 * 75aefcfdcSbjh21 * Redistribution and use in source and binary forms, with or without 85aefcfdcSbjh21 * modification, are permitted provided that the following conditions 95aefcfdcSbjh21 * are met: 105aefcfdcSbjh21 * 1. Redistributions of source code must retain the above copyright 115aefcfdcSbjh21 * notice, this list of conditions and the following disclaimer. 125aefcfdcSbjh21 * 2. Redistributions in binary form must reproduce the above copyright 135aefcfdcSbjh21 * notice, this list of conditions and the following disclaimer in the 145aefcfdcSbjh21 * documentation and/or other materials provided with the distribution. 15eb7c1594Sagc * 3. Neither the name of the University nor the names of its contributors 165aefcfdcSbjh21 * may be used to endorse or promote products derived from this software 175aefcfdcSbjh21 * without specific prior written permission. 185aefcfdcSbjh21 * 195aefcfdcSbjh21 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 205aefcfdcSbjh21 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 215aefcfdcSbjh21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 225aefcfdcSbjh21 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 235aefcfdcSbjh21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 245aefcfdcSbjh21 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 255aefcfdcSbjh21 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 265aefcfdcSbjh21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 275aefcfdcSbjh21 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 285aefcfdcSbjh21 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 295aefcfdcSbjh21 * SUCH DAMAGE. 305aefcfdcSbjh21 * 315aefcfdcSbjh21 * from: @(#)ptrace.s 5.1 (Berkeley) 4/23/90 325aefcfdcSbjh21 */ 335aefcfdcSbjh21 345aefcfdcSbjh21#include "SYS.h" 355aefcfdcSbjh21 365aefcfdcSbjh21ENTRY(ptrace) 375aefcfdcSbjh21#ifdef _REENTRANT 382a674d4fSmatt#if !defined(__thumb__) || defined(_ARM_ARCH_T2) 392a674d4fSmatt push {r0-r3, lr} 402a674d4fSmatt#else 412a674d4fSmatt push {r0-r4} 422a674d4fSmatt mov r4, lr 432a674d4fSmatt#endif 44d4ffdc1dSchris sub sp, sp, #4 /* align stack */ 45*d0dcd65cSjoerg bl PLT_SYM(_C_LABEL(__errno)) 46d4ffdc1dSchris add sp, sp, #4 /* unalign stack */ 472a674d4fSmatt movs r1, #0 485aefcfdcSbjh21 str r1, [r0] 492a674d4fSmatt#if !defined(__thumb__) || defined(_ARM_ARCH_T2) 502a674d4fSmatt pop {r0-r3, lr} 515aefcfdcSbjh21#else 522a674d4fSmatt mov lr, r4 532a674d4fSmatt pop {r0-r4} 542a674d4fSmatt#endif 552a674d4fSmatt#else 562a674d4fSmatt push {r0, r1} 574d12bfcdSjoerg#ifdef __PIC__ 585aefcfdcSbjh21 /* Setup the GOT */ 591b907e18Sthorpej ldr r0, .Lgot 602a674d4fSmatt adr r1, .Lgot 612a674d4fSmatt add r0, r0, r1 621b907e18Sthorpej ldr r1, .Lerrno 635aefcfdcSbjh21 ldr r1, [r0, r1] 645aefcfdcSbjh21#else 651b907e18Sthorpej ldr r1, .Lerrno 664d12bfcdSjoerg#endif /* __PIC__ */ 672a674d4fSmatt movs r0, #0 685aefcfdcSbjh21 str r0, [r1] 692a674d4fSmatt pop {r0, r1} 705aefcfdcSbjh21#endif /* _REENTRANT */ 715aefcfdcSbjh21 724cb97060Sbjh21 SYSTRAP(ptrace) 732a674d4fSmatt _INVOKE_CERROR() 74ed6e0e9eSrearnsha RET 755aefcfdcSbjh21 765aefcfdcSbjh21#ifndef _REENTRANT 774d12bfcdSjoerg#ifdef __PIC__ 785aefcfdcSbjh21 .align 0 791b907e18Sthorpej.Lgot: 802a674d4fSmatt .word _C_LABEL(_GLOBAL_OFFSET_TABLE_) - .Lgot 814d12bfcdSjoerg#endif /* __PIC__ */ 825aefcfdcSbjh21 831b907e18Sthorpej.Lerrno: 845feec233Smatt .word PIC_SYM(_C_LABEL(errno), GOT) 855aefcfdcSbjh21#endif /* !_REENTRANT */ 862a674d4fSmattEND(ptrace) 87