elf.h 5.7 KB

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