root/arch/nds32/include/asm/elf.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


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

/* [<][>][^][v][top][bottom][index][help] */