Home | History | Annotate | Download | only in asm
      1 /* SPDX-License-Identifier: GPL-2.0 */
      2 /*
      3  * (C) Copyright 2017 NVIDIA Corporation <www.nvidia.com>
      4  *
      5  * Derived from Linux kernel v4.14 files:
      6  *
      7  * arch/arm64/include/asm/assembler.h:
      8  * Based on arch/arm/include/asm/assembler.h, arch/arm/mm/proc-macros.S
      9  * Copyright (C) 1996-2000 Russell King
     10  * Copyright (C) 2012 ARM Ltd.
     11  *
     12  * arch/arm64/kernel/head.S:
     13  * Based on arch/arm/kernel/head.S
     14  * Copyright (C) 1994-2002 Russell King
     15  * Copyright (C) 2003-2012 ARM Ltd.
     16  * Authors:	Catalin Marinas <catalin.marinas (at) arm.com>
     17  *		Will Deacon <will.deacon (at) arm.com>
     18  *
     19  * arch/arm64/kernel/image.h:
     20  * Copyright (C) 2014 ARM Ltd.
     21  */
     22 
     23 	/*
     24 	 * Emit a 64-bit absolute little endian symbol reference in a way that
     25 	 * ensures that it will be resolved at build time, even when building a
     26 	 * PIE binary. This requires cooperation from the linker script, which
     27 	 * must emit the lo32/hi32 halves individually.
     28 	 */
     29 	.macro	le64sym, sym
     30 	.long	\sym\()_lo32
     31 	.long	\sym\()_hi32
     32 	.endm
     33 
     34 .globl _start
     35 _start:
     36 	/*
     37 	 * DO NOT MODIFY. Image header expected by Linux boot-loaders.
     38 	 */
     39 	b	reset				/* branch to kernel start, magic */
     40 	.long	0				/* reserved */
     41 	le64sym	_kernel_offset_le		/* Image load offset from start of RAM, little-endian */
     42 	le64sym	_kernel_size_le			/* Effective size of kernel image, little-endian */
     43 	le64sym	_kernel_flags_le		/* Informative flags, little-endian */
     44 	.quad	0				/* reserved */
     45 	.quad	0				/* reserved */
     46 	.quad	0				/* reserved */
     47 	.ascii	"ARM\x64"			/* Magic number */
     48 	.long	0				/* reserved */
     49