elf: Ignore loader debug env vars for setuid
[glibc.git] / sysdeps / aarch64 / dl-start.S
blobdd9c0725b93ec791c0e8b4d63a26cbd0cf275e27
1 /* ld.so _start code.
2    Copyright (C) 2022-2023 Free Software Foundation, Inc.
4    This file is part of the GNU C Library.
6    The GNU C Library is free software; you can redistribute it and/or
7    modify it under the terms of the GNU Lesser General Public
8    License as published by the Free Software Foundation; either
9    version 2.1 of the License, or (at your option) any later version.
11    The GNU C Library is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14    Lesser General Public License for more details.
16    You should have received a copy of the GNU Lesser General Public
17    License along with the GNU C Library; if not, see
18    <https://www.gnu.org/licenses/>.  */
20 #include <sysdep.h>
22 ENTRY (_start)
23         /* Create an initial frame with 0 LR and FP */
24         cfi_undefined (x30)
25         mov     x29, #0
26         mov     x30, #0
28         mov     x0, sp
29         PTR_ARG (0)
30         bl      _dl_start
31         /* Returns user entry point in x0.  */
32         mov     PTR_REG (21), PTR_REG (0)
33 .globl _dl_start_user
34 .type _dl_start_user, %function
35 _dl_start_user:
36         /* Get argc.  */
37         ldr     PTR_REG (1), [sp]
38         /* Get argv.  */
39         add     x2, sp, PTR_SIZE
40         /* Compute envp.  */
41         add     PTR_REG (3), PTR_REG (2), PTR_REG (1), lsl PTR_LOG_SIZE
42         add     PTR_REG (3), PTR_REG (3), PTR_SIZE
43         adrp    x16, _rtld_local
44         add     PTR_REG (16), PTR_REG (16), :lo12:_rtld_local
45         ldr     PTR_REG (0), [x16]
46         bl      _dl_init
47         /* Load the finalizer function.  */
48         adrp    x0, _dl_fini
49         add     PTR_REG (0), PTR_REG (0), :lo12:_dl_fini
50         /* Jump to the user's entry point.  */
51         mov     x16, x21
52         br      x16
53 END (_start)