Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) // Copyright (C) 2005-2017 Andes Technology Corporation
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4) #ifndef __ASMNDS32_ELF_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5) #define __ASMNDS32_ELF_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8)  * ELF register definitions..
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) #include <asm/ptrace.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) #include <asm/fpu.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) #include <linux/elf-em.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) typedef unsigned long elf_greg_t;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) typedef unsigned long elf_freg_t[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) extern unsigned int elf_hwcap;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) #define R_NDS32_NONE			0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) #define R_NDS32_16_RELA			19
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) #define R_NDS32_32_RELA			20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) #define R_NDS32_9_PCREL_RELA		22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) #define R_NDS32_15_PCREL_RELA		23
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) #define R_NDS32_17_PCREL_RELA		24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) #define R_NDS32_25_PCREL_RELA		25
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) #define R_NDS32_HI20_RELA		26
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) #define R_NDS32_LO12S3_RELA		27
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) #define R_NDS32_LO12S2_RELA		28
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) #define R_NDS32_LO12S1_RELA		29
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) #define R_NDS32_LO12S0_RELA		30
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) #define R_NDS32_SDA15S3_RELA    	31
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) #define R_NDS32_SDA15S2_RELA    	32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) #define R_NDS32_SDA15S1_RELA    	33
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) #define R_NDS32_SDA15S0_RELA    	34
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) #define R_NDS32_GOT20			37
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) #define R_NDS32_25_PLTREL		38
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) #define R_NDS32_COPY			39
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) #define R_NDS32_GLOB_DAT		40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) #define R_NDS32_JMP_SLOT		41
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) #define R_NDS32_RELATIVE		42
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) #define R_NDS32_GOTOFF			43
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) #define R_NDS32_GOTPC20			44
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) #define R_NDS32_GOT_HI20		45
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) #define R_NDS32_GOT_LO12		46
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) #define R_NDS32_GOTPC_HI20		47
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) #define R_NDS32_GOTPC_LO12		48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) #define R_NDS32_GOTOFF_HI20		49
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) #define R_NDS32_GOTOFF_LO12		50
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) #define R_NDS32_INSN16			51
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) #define R_NDS32_LABEL			52
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) #define R_NDS32_LONGCALL1		53
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) #define R_NDS32_LONGCALL2		54
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) #define R_NDS32_LONGCALL3		55
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) #define R_NDS32_LONGJUMP1		56
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) #define R_NDS32_LONGJUMP2		57
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) #define R_NDS32_LONGJUMP3		58
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) #define R_NDS32_LOADSTORE		59
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) #define R_NDS32_9_FIXED_RELA		60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) #define R_NDS32_15_FIXED_RELA		61
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) #define R_NDS32_17_FIXED_RELA		62
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) #define R_NDS32_25_FIXED_RELA		63
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) #define R_NDS32_PLTREL_HI20		64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) #define R_NDS32_PLTREL_LO12		65
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) #define R_NDS32_PLT_GOTREL_HI20		66
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) #define R_NDS32_PLT_GOTREL_LO12		67
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) #define R_NDS32_LO12S0_ORI_RELA		72
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) #define R_NDS32_DWARF2_OP1_RELA     	77
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) #define R_NDS32_DWARF2_OP2_RELA     	78
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) #define R_NDS32_DWARF2_LEB_RELA     	79
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) #define R_NDS32_WORD_9_PCREL_RELA	94
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) #define R_NDS32_LONGCALL4 		107
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) #define R_NDS32_RELA_NOP_MIX		192
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) #define R_NDS32_RELA_NOP_MAX		255
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) #define ELF_NGREG (sizeof (struct user_pt_regs) / sizeof(elf_greg_t))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) #define ELF_CORE_COPY_REGS(dest, regs)	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) 	*(struct user_pt_regs *)&(dest) = (regs)->user_regs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) typedef elf_greg_t elf_gregset_t[ELF_NGREG];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) /* Core file format: The core file is written in such a way that gdb
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83)    can understand it and provide useful information to the user (under
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84)    linux we use the 'trad-core' bfd).  There are quite a number of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85)    obstacles to being able to view the contents of the floating point
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86)    registers, and until these are solved you will not be able to view the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87)    contents of them.  Actually, you can read in the core file and look at
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88)    the contents of the user struct to find out what the floating point
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89)    registers contain.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90)    The actual file contents are as follows:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91)    UPAGE: 1 page consisting of a user struct that tells gdb what is present
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92)    in the file.  Directly after this is a copy of the task_struct, which
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93)    is currently not used by gdb, but it may come in useful at some point.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94)    All of the registers are stored as part of the upage.  The upage should
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95)    always be only one page.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96)    DATA: The data area is stored.  We use current->end_text to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97)    current->brk to pick up all of the user variables, plus any memory
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98)    that may have been malloced.  No attempt is made to determine if a page
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99)    is demand-zero or if a page is totally unused, we just cover the entire
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100)    range.  All of the addresses are rounded in such a way that an integral
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101)    number of pages is written.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102)    STACK: We need the stack information in order to get a meaningful
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103)    backtrace.  We need to write the data from (esp) to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104)    current->start_stack, so we round each of these off in order to be able
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105)    to write an integer number of pages.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106)    The minimum core file size is 3 pages, or 12288 bytes.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) struct user_fp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110)         unsigned long long fd_regs[32];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111)         unsigned long fpcsr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) typedef struct user_fp elf_fpregset_t;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) struct elf32_hdr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) #define elf_check_arch(x)		((x)->e_machine == EM_NDS32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120)  * These are used to set parameters in the core dumps.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) #define ELF_CLASS	ELFCLASS32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) #ifdef __NDS32_EB__
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) #define ELF_DATA	ELFDATA2MSB
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) #define ELF_DATA	ELFDATA2LSB
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) #define ELF_ARCH	EM_NDS32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) #define USE_ELF_CORE_DUMP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) #define ELF_EXEC_PAGESIZE	PAGE_SIZE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) /* This is the location that an ET_DYN program is loaded if exec'ed.  Typical
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133)    use of this is to invoke "./ld.so someprog" to test out a new version of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134)    the loader.  We need to make sure that it is out of the way of the program
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135)    that it will "exec", and that there is sufficient room for the brk.  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) #define ELF_ET_DYN_BASE	(2 * TASK_SIZE / 3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) /* When the program starts, a1 contains a pointer to a function to be
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140)    registered with atexit, as per the SVR4 ABI.  A value of 0 means we
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141)    have no such handler.  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) #define ELF_PLAT_INIT(_r, load_addr)	(_r)->uregs[0] = 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) /* This yields a mask that user programs can use to figure out what
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145)    instruction set this cpu supports. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) #define ELF_HWCAP	(elf_hwcap)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) #ifdef __KERNEL__
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) #define ELF_PLATFORM    (NULL)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) /* Old NetWinder binaries were compiled in such a way that the iBCS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154)    heuristic always trips on them.  Until these binaries become uncommon
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155)    enough not to care, don't trust the `ibcs' flag here.  In any case
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156)    there is no other ELF system currently supported by iBCS.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157)    @@ Could print a warning message to encourage users to upgrade.  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) #define SET_PERSONALITY(ex)	set_personality(PER_LINUX)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) #if IS_ENABLED(CONFIG_FPU)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) #define FPU_AUX_ENT	NEW_AUX_ENT(AT_FPUCW, FPCSR_INIT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) #define FPU_AUX_ENT	NEW_AUX_ENT(AT_IGNORE, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) #define ARCH_DLINFO						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) do {								\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) 	/* Optional FPU initialization */			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) 	FPU_AUX_ENT;						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) 								\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) 	NEW_AUX_ENT(AT_SYSINFO_EHDR,				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) 		    (elf_addr_t)current->mm->context.vdso);	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) } while (0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) #define ARCH_HAS_SETUP_ADDITIONAL_PAGES 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) struct linux_binprm;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) int arch_setup_additional_pages(struct linux_binprm *, int);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) #endif