1/* ld.so _start code. 2 Copyright (C) 2022 Free Software Foundation, Inc. 3 4 This file is part of the GNU C Library. 5 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. 10 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. 15 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/>. */ 19 20#include <sysdep.h> 21 22ENTRY (_start) 23 /* Create an initial frame with 0 LR and FP */ 24 cfi_undefined (x30) 25 mov x29, #0 26 mov x30, #0 27 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 53END (_start) 54