Commit | Line | Data |
---|---|---|
c6087fdc | 1 | /* |
e57a221f MS |
2 | * Copyright (C) 2008-2009 Michal Simek <monstr@monstr.eu> |
3 | * Copyright (C) 2008-2009 PetaLogix | |
c6087fdc MS |
4 | * Copyright (C) 2006 Atmark Techno, Inc. |
5 | * | |
6 | * This file is subject to the terms and conditions of the GNU General Public | |
7 | * License. See the file "COPYING" in the main directory of this archive | |
8 | * for more details. | |
9 | */ | |
10 | ||
11 | #ifndef _ASM_MICROBLAZE_ELF_H | |
12 | #define _ASM_MICROBLAZE_ELF_H | |
13 | ||
14 | /* | |
15 | * Note there is no "official" ELF designation for Microblaze. | |
16 | * I've snaffled the value from the microblaze binutils source code | |
17 | * /binutils/microblaze/include/elf/microblaze.h | |
18 | */ | |
69515f8b EI |
19 | #define EM_MICROBLAZE 189 |
20 | #define EM_MICROBLAZE_OLD 0xbaab | |
21 | #define ELF_ARCH EM_MICROBLAZE | |
c6087fdc MS |
22 | |
23 | /* | |
24 | * This is used to ensure we don't load something for the wrong architecture. | |
25 | */ | |
69515f8b EI |
26 | #define elf_check_arch(x) ((x)->e_machine == EM_MICROBLAZE \ |
27 | || (x)->e_machine == EM_MICROBLAZE_OLD) | |
c6087fdc MS |
28 | |
29 | /* | |
30 | * These are used to set parameters in the core dumps. | |
31 | */ | |
32 | #define ELF_CLASS ELFCLASS32 | |
33 | ||
e57a221f MS |
34 | #ifndef __uClinux__ |
35 | ||
36 | /* | |
37 | * ELF register definitions.. | |
38 | */ | |
39 | ||
40 | #include <asm/ptrace.h> | |
41 | #include <asm/byteorder.h> | |
42 | ||
43 | #ifndef ELF_GREG_T | |
44 | #define ELF_GREG_T | |
45 | typedef unsigned long elf_greg_t; | |
46 | #endif | |
47 | ||
48 | #ifndef ELF_NGREG | |
49 | #define ELF_NGREG (sizeof(struct pt_regs) / sizeof(elf_greg_t)) | |
50 | #endif | |
51 | ||
52 | #ifndef ELF_GREGSET_T | |
53 | #define ELF_GREGSET_T | |
54 | typedef elf_greg_t elf_gregset_t[ELF_NGREG]; | |
55 | #endif | |
56 | ||
57 | #ifndef ELF_FPREGSET_T | |
58 | #define ELF_FPREGSET_T | |
59 | ||
60 | /* TBD */ | |
61 | #define ELF_NFPREG 33 /* includes fsr */ | |
62 | typedef unsigned long elf_fpreg_t; | |
63 | typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG]; | |
64 | ||
65 | /* typedef struct user_fpu_struct elf_fpregset_t; */ | |
66 | #endif | |
67 | ||
68 | /* This is the location that an ET_DYN program is loaded if exec'ed. Typical | |
69 | * use of this is to invoke "./ld.so someprog" to test out a new version of | |
70 | * the loader. We need to make sure that it is out of the way of the program | |
71 | * that it will "exec", and that there is sufficient room for the brk. | |
72 | */ | |
73 | ||
74 | #define ELF_ET_DYN_BASE (0x08000000) | |
75 | ||
02b08045 | 76 | #ifdef __MICROBLAZEEL__ |
e57a221f MS |
77 | #define ELF_DATA ELFDATA2LSB |
78 | #else | |
79 | #define ELF_DATA ELFDATA2MSB | |
80 | #endif | |
81 | ||
ba9c4f88 | 82 | #define ELF_EXEC_PAGESIZE PAGE_SIZE |
e57a221f MS |
83 | |
84 | ||
85 | #define ELF_CORE_COPY_REGS(_dest, _regs) \ | |
86 | memcpy((char *) &_dest, (char *) _regs, \ | |
87 | sizeof(struct pt_regs)); | |
88 | ||
89 | /* This yields a mask that user programs can use to figure out what | |
90 | * instruction set this CPU supports. This could be done in user space, | |
91 | * but it's not easy, and we've already done it here. | |
92 | */ | |
93 | #define ELF_HWCAP (0) | |
94 | ||
95 | /* This yields a string that ld.so will use to load implementation | |
96 | * specific libraries for optimization. This is more specific in | |
97 | * intent than poking at uname or /proc/cpuinfo. | |
98 | ||
99 | * For the moment, we have only optimizations for the Intel generations, | |
100 | * but that could change... | |
101 | */ | |
102 | #define ELF_PLATFORM (NULL) | |
103 | ||
104 | /* Added _f parameter. Is this definition correct: TBD */ | |
105 | #define ELF_PLAT_INIT(_r, _f) \ | |
106 | do { \ | |
107 | _r->r1 = _r->r1 = _r->r2 = _r->r3 = \ | |
108 | _r->r4 = _r->r5 = _r->r6 = _r->r7 = \ | |
109 | _r->r8 = _r->r9 = _r->r10 = _r->r11 = \ | |
110 | _r->r12 = _r->r13 = _r->r14 = _r->r15 = \ | |
111 | _r->r16 = _r->r17 = _r->r18 = _r->r19 = \ | |
112 | _r->r20 = _r->r21 = _r->r22 = _r->r23 = \ | |
113 | _r->r24 = _r->r25 = _r->r26 = _r->r27 = \ | |
114 | _r->r28 = _r->r29 = _r->r30 = _r->r31 = \ | |
115 | 0; \ | |
116 | } while (0) | |
117 | ||
118 | #ifdef __KERNEL__ | |
16f3e95b JK |
119 | #define SET_PERSONALITY(ex) \ |
120 | set_personality(PER_LINUX_32BIT | (current->personality & (~PER_MASK))) | |
e57a221f MS |
121 | #endif |
122 | ||
123 | #endif /* __uClinux__ */ | |
124 | ||
c6087fdc | 125 | #endif /* _ASM_MICROBLAZE_ELF_H */ |