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 | */ | |
19 | #define EM_XILINX_MICROBLAZE 0xbaab | |
20 | #define ELF_ARCH EM_XILINX_MICROBLAZE | |
21 | ||
22 | /* | |
23 | * This is used to ensure we don't load something for the wrong architecture. | |
24 | */ | |
25 | #define elf_check_arch(x) ((x)->e_machine == EM_XILINX_MICROBLAZE) | |
26 | ||
27 | /* | |
28 | * These are used to set parameters in the core dumps. | |
29 | */ | |
30 | #define ELF_CLASS ELFCLASS32 | |
31 | ||
e57a221f MS |
32 | #ifndef __uClinux__ |
33 | ||
34 | /* | |
35 | * ELF register definitions.. | |
36 | */ | |
37 | ||
38 | #include <asm/ptrace.h> | |
39 | #include <asm/byteorder.h> | |
40 | ||
41 | #ifndef ELF_GREG_T | |
42 | #define ELF_GREG_T | |
43 | typedef unsigned long elf_greg_t; | |
44 | #endif | |
45 | ||
46 | #ifndef ELF_NGREG | |
47 | #define ELF_NGREG (sizeof(struct pt_regs) / sizeof(elf_greg_t)) | |
48 | #endif | |
49 | ||
50 | #ifndef ELF_GREGSET_T | |
51 | #define ELF_GREGSET_T | |
52 | typedef elf_greg_t elf_gregset_t[ELF_NGREG]; | |
53 | #endif | |
54 | ||
55 | #ifndef ELF_FPREGSET_T | |
56 | #define ELF_FPREGSET_T | |
57 | ||
58 | /* TBD */ | |
59 | #define ELF_NFPREG 33 /* includes fsr */ | |
60 | typedef unsigned long elf_fpreg_t; | |
61 | typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG]; | |
62 | ||
63 | /* typedef struct user_fpu_struct elf_fpregset_t; */ | |
64 | #endif | |
65 | ||
66 | /* This is the location that an ET_DYN program is loaded if exec'ed. Typical | |
67 | * use of this is to invoke "./ld.so someprog" to test out a new version of | |
68 | * the loader. We need to make sure that it is out of the way of the program | |
69 | * that it will "exec", and that there is sufficient room for the brk. | |
70 | */ | |
71 | ||
72 | #define ELF_ET_DYN_BASE (0x08000000) | |
73 | ||
74 | #ifdef __LITTLE_ENDIAN__ | |
75 | #define ELF_DATA ELFDATA2LSB | |
76 | #else | |
77 | #define ELF_DATA ELFDATA2MSB | |
78 | #endif | |
79 | ||
80 | #define USE_ELF_CORE_DUMP | |
81 | #define ELF_EXEC_PAGESIZE 4096 | |
82 | ||
83 | ||
84 | #define ELF_CORE_COPY_REGS(_dest, _regs) \ | |
85 | memcpy((char *) &_dest, (char *) _regs, \ | |
86 | sizeof(struct pt_regs)); | |
87 | ||
88 | /* This yields a mask that user programs can use to figure out what | |
89 | * instruction set this CPU supports. This could be done in user space, | |
90 | * but it's not easy, and we've already done it here. | |
91 | */ | |
92 | #define ELF_HWCAP (0) | |
93 | ||
94 | /* This yields a string that ld.so will use to load implementation | |
95 | * specific libraries for optimization. This is more specific in | |
96 | * intent than poking at uname or /proc/cpuinfo. | |
97 | ||
98 | * For the moment, we have only optimizations for the Intel generations, | |
99 | * but that could change... | |
100 | */ | |
101 | #define ELF_PLATFORM (NULL) | |
102 | ||
103 | /* Added _f parameter. Is this definition correct: TBD */ | |
104 | #define ELF_PLAT_INIT(_r, _f) \ | |
105 | do { \ | |
106 | _r->r1 = _r->r1 = _r->r2 = _r->r3 = \ | |
107 | _r->r4 = _r->r5 = _r->r6 = _r->r7 = \ | |
108 | _r->r8 = _r->r9 = _r->r10 = _r->r11 = \ | |
109 | _r->r12 = _r->r13 = _r->r14 = _r->r15 = \ | |
110 | _r->r16 = _r->r17 = _r->r18 = _r->r19 = \ | |
111 | _r->r20 = _r->r21 = _r->r22 = _r->r23 = \ | |
112 | _r->r24 = _r->r25 = _r->r26 = _r->r27 = \ | |
113 | _r->r28 = _r->r29 = _r->r30 = _r->r31 = \ | |
114 | 0; \ | |
115 | } while (0) | |
116 | ||
117 | #ifdef __KERNEL__ | |
118 | #define SET_PERSONALITY(ex) set_personality(PER_LINUX_32BIT) | |
119 | #endif | |
120 | ||
121 | #endif /* __uClinux__ */ | |
122 | ||
c6087fdc | 123 | #endif /* _ASM_MICROBLAZE_ELF_H */ |