Path: blob/main/stand/kboot/libkboot/arch/aarch64/start_arch.h
34914 views
/*1* Copyright (c) 2022, Netflix, Inc.2*3* SPDX-License-Identifier: BSD-2-Clause4*/56/*7* Provides a _start routine that calls a _start_c routine that takes a pointer8* to the stack as documented in crt1.c. We skip the pointer to _DYNAMIC since9* we don't support dynamic libraries, at all. And while _start_c is our own10* thing and doesn't have a second arg, we comport to the calling conventions11* that glibc and musl have by passing x1 as 0 for the dynamic pointer. We12* likely could call main directly with only a few more lines of code, but this13* is simple enough and concentrates all the expressable in C stuff there. We14* also generate eh_frames should we need to debug things (it doesn't change the15* genreated code, but leaves enough breadcrumbs to keep gdb happy)16*/1718__asm__(19".text\n" /* ENTRY(_start) -- can't expand and stringify, so by hand */20".align 2\n"21".global _start\n"22".type _start, #function\n"23"_start:\n"24".cfi_startproc\n"25/*26* Linux zeros all registers so x29 (frame pointer) and x30 (link register) are 0.27*/28" mov x0, sp\n" /* Pointer to argc, etc kernel left on the stack */29" and sp, x0, #-16\n" /* Align stack to 16-byte boundary */30" b _start_c\n" /* Our MI code takes it from here */31/* NORETURN */32".ltorg\n" /* END(_start) */33".cfi_endproc\n"34".size _start, .-_start\n"35);363738