]> git.ipfire.org Git - thirdparty/glibc.git/blame - ports/sysdeps/unix/sysv/linux/arm/nptl/pt-vfork.S
Move all files into ports/ subdirectory in preparation for merge with glibc
[thirdparty/glibc.git] / ports / sysdeps / unix / sysv / linux / arm / nptl / pt-vfork.S
CommitLineData
01b32e73 1/* Copyright (C) 2005, 2010 Free Software Foundation, Inc.
02a9f771
DJ
2 This file is part of the GNU C Library.
3
4 The GNU C Library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Lesser General Public
6 License as published by the Free Software Foundation; either
7 version 2.1 of the License, or (at your option) any later version.
8
9 The GNU C Library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Lesser General Public License for more details.
13
14 You should have received a copy of the GNU Lesser General Public
ab84e3ff
PE
15 License along with the GNU C Library. If not, see
16 <http://www.gnu.org/licenses/>. */
02a9f771
DJ
17
18#include <tcb-offsets.h>
19
20/* Save the PID value. */
21#define SAVE_PID \
22 str lr, [sp, #-4]!; /* Save LR. */ \
01b32e73
TS
23 cfi_adjust_cfa_offset (4); \
24 cfi_rel_offset (lr, 0); \
02a9f771
DJ
25 mov r0, #0xffff0fff; /* Point to the high page. */ \
26 mov lr, pc; /* Save our return address. */ \
27 sub pc, r0, #31; /* Jump to the TLS entry. */ \
28 ldr lr, [sp], #4; /* Restore LR. */ \
01b32e73
TS
29 cfi_adjust_cfa_offset (-4); \
30 cfi_restore (lr); \
02a9f771
DJ
31 mov r2, r0; /* Save the TLS addr in r2. */ \
32 ldr r3, [r2, #PID_OFFSET]; /* Load the saved PID. */ \
33 rsb r0, r3, #0; /* Negate it. */ \
34 str r0, [r2, #PID_OFFSET] /* Store the temporary PID. */
35
36/* Restore the old PID value in the parent. */
37#define RESTORE_PID \
38 cmp r0, #0; /* If we are the parent... */ \
39 strne r3, [r2, #PID_OFFSET] /* ... restore the saved PID. */
40
41#include "../vfork.S"