]> rtime.felk.cvut.cz Git - mcf548x/linux.git/blob - arch/m68k/include/asm/elf.h
Current (FEC from 2.6.31 port, no CAN, no I2C, no PCI)
[mcf548x/linux.git] / arch / m68k / include / asm / elf.h
1 #ifndef __ASMm68k_ELF_H
2 #define __ASMm68k_ELF_H
3
4 /*
5  * ELF register definitions..
6  */
7
8 #include <asm/ptrace.h>
9 #include <asm/user.h>
10
11 /*
12  * 68k ELF relocation types
13  */
14 #define R_68K_NONE      0
15 #define R_68K_32        1
16 #define R_68K_16        2
17 #define R_68K_8         3
18 #define R_68K_PC32      4
19 #define R_68K_PC16      5
20 #define R_68K_PC8       6
21 #define R_68K_GOT32     7
22 #define R_68K_GOT16     8
23 #define R_68K_GOT8      9
24 #define R_68K_GOT32O    10
25 #define R_68K_GOT16O    11
26 #define R_68K_GOT8O     12
27 #define R_68K_PLT32     13
28 #define R_68K_PLT16     14
29 #define R_68K_PLT8      15
30 #define R_68K_PLT32O    16
31 #define R_68K_PLT16O    17
32 #define R_68K_PLT8O     18
33 #define R_68K_COPY      19
34 #define R_68K_GLOB_DAT  20
35 #define R_68K_JMP_SLOT  21
36 #define R_68K_RELATIVE  22
37 /* TLS static relocations */
38 #define R_68K_TLS_GD32          25
39 #define R_68K_TLS_GD16          26
40 #define R_68K_TLS_GD8           27
41 #define R_68K_TLS_LDM32         28
42 #define R_68K_TLS_LDM16         29
43 #define R_68K_TLS_LDM8          30
44 #define R_68K_TLS_LDO32         31
45 #define R_68K_TLS_LDO16         32
46 #define R_68K_TLS_LDO8          33
47 #define R_68K_TLS_IE32          34
48 #define R_68K_TLS_IE16          35
49 #define R_68K_TLS_IE8           36
50 #define R_68K_TLS_LE32          37
51 #define R_68K_TLS_LE16          38
52 #define R_68K_TLS_LE8           39
53 /* TLS dynamic relocations */
54 #define R_68K_TLS_DTPMOD32      40
55 #define R_68K_TLS_DTPREL32      41
56 #define R_68K_TLS_TPREL32       42
57 typedef unsigned long elf_greg_t;
58
59 #define ELF_NGREG (sizeof(struct user_regs_struct) / sizeof(elf_greg_t))
60 typedef elf_greg_t elf_gregset_t[ELF_NGREG];
61
62 typedef struct user_m68kfp_struct elf_fpregset_t;
63
64 /*
65  * This is used to ensure we don't load something for the wrong architecture.
66  */
67 #define elf_check_arch(x) ((x)->e_machine == EM_68K)
68
69 /*
70  * These are used to set parameters in the core dumps.
71  */
72 #define ELF_CLASS       ELFCLASS32
73 #define ELF_DATA        ELFDATA2MSB
74 #define ELF_ARCH        EM_68K
75
76 /* For SVR4/m68k the function pointer to be registered with `atexit' is
77    passed in %a1.  Although my copy of the ABI has no such statement, it
78    is actually used on ASV.  */
79 #define ELF_PLAT_INIT(_r, load_addr)    _r->a1 = 0
80
81 // ColdFire cache requires at least 8 kB pages
82
83 #if !defined(CONFIG_SUN3) && !defined(CONFIG_COLDFIRE)
84 #define ELF_EXEC_PAGESIZE       4096
85 #else
86 #define ELF_EXEC_PAGESIZE       8192
87 #endif
88
89 /* This is the location that an ET_DYN program is loaded if exec'ed.  Typical
90    use of this is to invoke "./ld.so someprog" to test out a new version of
91    the loader.  We need to make sure that it is out of the way of the program
92    that it will "exec", and that there is sufficient room for the brk.  */
93
94 #ifndef CONFIG_SUN3
95 #define ELF_ET_DYN_BASE         0xD0000000UL
96 #else
97 #define ELF_ET_DYN_BASE         0x0D800000UL
98 #endif
99
100 #define ELF_CORE_COPY_REGS(pr_reg, regs)                                \
101         /* Bleech. */                                                   \
102         pr_reg[0] = regs->d1;                                           \
103         pr_reg[1] = regs->d2;                                           \
104         pr_reg[2] = regs->d3;                                           \
105         pr_reg[3] = regs->d4;                                           \
106         pr_reg[4] = regs->d5;                                           \
107         pr_reg[7] = regs->a0;                                           \
108         pr_reg[8] = regs->a1;                                           \
109         pr_reg[9] = regs->a2;                                           \
110         pr_reg[14] = regs->d0;                                          \
111         pr_reg[15] = rdusp();                                           \
112         pr_reg[16] = regs->orig_d0;                                     \
113         pr_reg[17] = regs->sr;                                          \
114         pr_reg[18] = regs->pc;                                          \
115         pr_reg[19] = (regs->format << 12) | regs->vector;               \
116         {                                                               \
117           struct switch_stack *sw = ((struct switch_stack *)regs) - 1;  \
118           pr_reg[5] = sw->d6;                                           \
119           pr_reg[6] = sw->d7;                                           \
120           pr_reg[10] = sw->a3;                                          \
121           pr_reg[11] = sw->a4;                                          \
122           pr_reg[12] = sw->a5;                                          \
123           pr_reg[13] = sw->a6;                                          \
124         }
125
126 /* This yields a mask that user programs can use to figure out what
127    instruction set this cpu supports.  */
128
129 #define ELF_HWCAP       (0)
130
131 /* This yields a string that ld.so will use to load implementation
132    specific libraries for optimization.  This is more specific in
133    intent than poking at uname or /proc/cpuinfo.  */
134
135 #define ELF_PLATFORM  (NULL)
136
137 #define SET_PERSONALITY(ex) set_personality(PER_LINUX)
138
139 /*
140  * VDSO
141  */
142 #ifdef CONFIG_VSYSCALL
143 extern unsigned int vdso_enabled;
144
145 #define VDSO_BASE               ((unsigned long)current->mm->context.vdso)
146 #define VDSO_SYM(x)             (VDSO_BASE + (unsigned long)(x))
147
148 #define VSYSCALL_AUX_ENT                                        \
149         if (vdso_enabled)                                       \
150                 NEW_AUX_ENT(AT_SYSINFO_EHDR, VDSO_BASE);
151
152 /* additional pages */
153 #define ARCH_HAS_SETUP_ADDITIONAL_PAGES 1
154
155 struct linux_binprm;
156 extern int arch_setup_additional_pages(struct linux_binprm *bprm,
157                                        int executable_stack);
158
159 #else
160 /* no VSYSCALL_AUX_ENT */
161 #define VSYSCALL_AUX_ENT
162 #endif
163
164 #define ARCH_DLINFO                                             \
165 do {                                                            \
166         /* vsyscall entry */                                    \
167         VSYSCALL_AUX_ENT;                                       \
168 } while (0);
169
170
171 #endif