Commit | Line | Data |
---|---|---|
6bc9a396 CL |
1 | #ifndef _ASM_SCORE_ELF_H |
2 | #define _ASM_SCORE_ELF_H | |
3 | ||
d8aa899b CL |
4 | #include <linux/ptrace.h> |
5 | ||
6bc9a396 CL |
6 | #define EM_SCORE7 135 |
7 | ||
8 | /* Relocation types. */ | |
9 | #define R_SCORE_NONE 0 | |
10 | #define R_SCORE_HI16 1 | |
11 | #define R_SCORE_LO16 2 | |
12 | #define R_SCORE_BCMP 3 | |
13 | #define R_SCORE_24 4 | |
14 | #define R_SCORE_PC19 5 | |
15 | #define R_SCORE16_11 6 | |
16 | #define R_SCORE16_PC8 7 | |
17 | #define R_SCORE_ABS32 8 | |
18 | #define R_SCORE_ABS16 9 | |
19 | #define R_SCORE_DUMMY2 10 | |
20 | #define R_SCORE_GP15 11 | |
21 | #define R_SCORE_GNU_VTINHERIT 12 | |
22 | #define R_SCORE_GNU_VTENTRY 13 | |
23 | #define R_SCORE_GOT15 14 | |
24 | #define R_SCORE_GOT_LO16 15 | |
25 | #define R_SCORE_CALL15 16 | |
26 | #define R_SCORE_GPREL32 17 | |
27 | #define R_SCORE_REL32 18 | |
28 | #define R_SCORE_DUMMY_HI16 19 | |
29 | #define R_SCORE_IMM30 20 | |
30 | #define R_SCORE_IMM32 21 | |
31 | ||
d8aa899b CL |
32 | /* ELF register definitions */ |
33 | typedef unsigned long elf_greg_t; | |
34 | ||
35 | #define ELF_NGREG (sizeof(struct pt_regs) / sizeof(elf_greg_t)) | |
36 | typedef elf_greg_t elf_gregset_t[ELF_NGREG]; | |
6bc9a396 | 37 | |
d8aa899b CL |
38 | /* Score does not have fp regs. */ |
39 | typedef double elf_fpreg_t; | |
40 | typedef elf_fpreg_t elf_fpregset_t; | |
6bc9a396 CL |
41 | |
42 | #define elf_check_arch(x) ((x)->e_machine == EM_SCORE7) | |
43 | ||
44 | /* | |
45 | * These are used to set parameters in the core dumps. | |
46 | */ | |
47 | #define ELF_CLASS ELFCLASS32 | |
48 | ||
49 | /* | |
50 | * These are used to set parameters in the core dumps. | |
51 | */ | |
52 | #define ELF_DATA ELFDATA2LSB | |
53 | #define ELF_ARCH EM_SCORE7 | |
54 | ||
55 | #define SET_PERSONALITY(ex) \ | |
56 | do { \ | |
57 | set_personality(PER_LINUX); \ | |
58 | } while (0) | |
59 | ||
60 | struct task_struct; | |
61 | struct pt_regs; | |
62 | ||
d8aa899b | 63 | #define CORE_DUMP_USE_REGSET |
6bc9a396 CL |
64 | #define ELF_EXEC_PAGESIZE PAGE_SIZE |
65 | ||
66 | /* This yields a mask that user programs can use to figure out what | |
67 | instruction set this cpu supports. This could be done in userspace, | |
68 | but it's not easy, and we've already done it here. */ | |
69 | ||
70 | #define ELF_HWCAP (0) | |
71 | ||
72 | /* This yields a string that ld.so will use to load implementation | |
73 | specific libraries for optimization. This is more specific in | |
74 | intent than poking at uname or /proc/cpuinfo. | |
75 | ||
76 | For the moment, we have only optimizations for the Intel generations, | |
77 | but that could change... */ | |
78 | ||
79 | #define ELF_PLATFORM (NULL) | |
80 | ||
81 | #define ELF_PLAT_INIT(_r, load_addr) \ | |
82 | do { \ | |
83 | _r->regs[1] = _r->regs[2] = _r->regs[3] = _r->regs[4] = 0; \ | |
84 | _r->regs[5] = _r->regs[6] = _r->regs[7] = _r->regs[8] = 0; \ | |
85 | _r->regs[9] = _r->regs[10] = _r->regs[11] = _r->regs[12] = 0; \ | |
86 | _r->regs[13] = _r->regs[14] = _r->regs[15] = _r->regs[16] = 0; \ | |
87 | _r->regs[17] = _r->regs[18] = _r->regs[19] = _r->regs[20] = 0; \ | |
88 | _r->regs[21] = _r->regs[22] = _r->regs[23] = _r->regs[24] = 0; \ | |
89 | _r->regs[25] = _r->regs[26] = _r->regs[27] = _r->regs[28] = 0; \ | |
90 | _r->regs[30] = _r->regs[31] = 0; \ | |
91 | } while (0) | |
92 | ||
93 | /* This is the location that an ET_DYN program is loaded if exec'ed. Typical | |
94 | use of this is to invoke "./ld.so someprog" to test out a new version of | |
95 | the loader. We need to make sure that it is out of the way of the program | |
96 | that it will "exec", and that there is sufficient room for the brk. */ | |
97 | ||
98 | #ifndef ELF_ET_DYN_BASE | |
99 | #define ELF_ET_DYN_BASE (TASK_SIZE / 3 * 2) | |
100 | #endif | |
101 | ||
102 | #endif /* _ASM_SCORE_ELF_H */ |