diff options
author | Jonas Bonn <jonas@southpole.se> | 2011-06-04 15:43:49 -0400 |
---|---|---|
committer | Jonas Bonn <jonas@southpole.se> | 2011-07-22 12:46:39 -0400 |
commit | 58e0166a4772aaeb10c9b0f6d59f19099d2047df (patch) | |
tree | 9b4407ee02d1364a98ddb1604143444ff2bf7631 /arch/openrisc/include/asm/elf.h | |
parent | 769a8a96229e6b2f1e3a2b3b38e27981f7fb9902 (diff) |
OpenRISC: Headers
Signed-off-by: Jonas Bonn <jonas@southpole.se>
Reviewed-by: Arnd Bergmann <arnd@arndb.de>
Diffstat (limited to 'arch/openrisc/include/asm/elf.h')
-rw-r--r-- | arch/openrisc/include/asm/elf.h | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/arch/openrisc/include/asm/elf.h b/arch/openrisc/include/asm/elf.h new file mode 100644 index 000000000000..2ce603bbfdd3 --- /dev/null +++ b/arch/openrisc/include/asm/elf.h | |||
@@ -0,0 +1,108 @@ | |||
1 | /* | ||
2 | * OpenRISC Linux | ||
3 | * | ||
4 | * Linux architectural port borrowing liberally from similar works of | ||
5 | * others. All original copyrights apply as per the original source | ||
6 | * declaration. | ||
7 | * | ||
8 | * OpenRISC implementation: | ||
9 | * Copyright (C) 2003 Matjaz Breskvar <phoenix@bsemi.com> | ||
10 | * Copyright (C) 2010-2011 Jonas Bonn <jonas@southpole.se> | ||
11 | * et al. | ||
12 | * | ||
13 | * This program is free software; you can redistribute it and/or modify | ||
14 | * it under the terms of the GNU General Public License as published by | ||
15 | * the Free Software Foundation; either version 2 of the License, or | ||
16 | * (at your option) any later version. | ||
17 | */ | ||
18 | |||
19 | #ifndef __ASM_OPENRISC_ELF_H | ||
20 | #define __ASM_OPENRISC_ELF_H | ||
21 | |||
22 | /* | ||
23 | * ELF register definitions.. | ||
24 | */ | ||
25 | #include <linux/types.h> | ||
26 | #include <linux/ptrace.h> | ||
27 | |||
28 | |||
29 | /* The OR1K relocation types... not all relevant for module loader */ | ||
30 | #define R_OR32_NONE 0 | ||
31 | #define R_OR32_32 1 | ||
32 | #define R_OR32_16 2 | ||
33 | #define R_OR32_8 3 | ||
34 | #define R_OR32_CONST 4 | ||
35 | #define R_OR32_CONSTH 5 | ||
36 | #define R_OR32_JUMPTARG 6 | ||
37 | #define R_OR32_VTINHERIT 7 | ||
38 | #define R_OR32_VTENTRY 8 | ||
39 | |||
40 | typedef unsigned long elf_greg_t; | ||
41 | |||
42 | /* | ||
43 | * Note that NGREG is defined to ELF_NGREG in include/linux/elfcore.h, and is | ||
44 | * thus exposed to user-space. | ||
45 | */ | ||
46 | #define ELF_NGREG (sizeof(struct user_regs_struct) / sizeof(elf_greg_t)) | ||
47 | typedef elf_greg_t elf_gregset_t[ELF_NGREG]; | ||
48 | |||
49 | /* A placeholder; OR32 does not have fp support yes, so no fp regs for now. */ | ||
50 | typedef unsigned long elf_fpregset_t; | ||
51 | |||
52 | /* This should be moved to include/linux/elf.h */ | ||
53 | #define EM_OR32 0x8472 | ||
54 | #define EM_OPENRISC 92 /* OpenRISC 32-bit embedded processor */ | ||
55 | |||
56 | /* | ||
57 | * These are used to set parameters in the core dumps. | ||
58 | */ | ||
59 | #define ELF_ARCH EM_OR32 | ||
60 | #define ELF_CLASS ELFCLASS32 | ||
61 | #define ELF_DATA ELFDATA2MSB | ||
62 | |||
63 | #ifdef __KERNEL__ | ||
64 | |||
65 | /* | ||
66 | * This is used to ensure we don't load something for the wrong architecture. | ||
67 | */ | ||
68 | |||
69 | #define elf_check_arch(x) \ | ||
70 | (((x)->e_machine == EM_OR32) || ((x)->e_machine == EM_OPENRISC)) | ||
71 | |||
72 | /* This is the location that an ET_DYN program is loaded if exec'ed. Typical | ||
73 | use of this is to invoke "./ld.so someprog" to test out a new version of | ||
74 | the loader. We need to make sure that it is out of the way of the program | ||
75 | that it will "exec", and that there is sufficient room for the brk. */ | ||
76 | |||
77 | #define ELF_ET_DYN_BASE (0x08000000) | ||
78 | |||
79 | /* | ||
80 | * Enable dump using regset. | ||
81 | * This covers all of general/DSP/FPU regs. | ||
82 | */ | ||
83 | #define CORE_DUMP_USE_REGSET | ||
84 | |||
85 | #define ELF_EXEC_PAGESIZE 8192 | ||
86 | |||
87 | extern void dump_elf_thread(elf_greg_t *dest, struct pt_regs *pt); | ||
88 | #define ELF_CORE_COPY_REGS(dest, regs) dump_elf_thread(dest, regs); | ||
89 | |||
90 | /* This yields a mask that user programs can use to figure out what | ||
91 | instruction set this cpu supports. This could be done in userspace, | ||
92 | but it's not easy, and we've already done it here. */ | ||
93 | |||
94 | #define ELF_HWCAP (0) | ||
95 | |||
96 | /* This yields a string that ld.so will use to load implementation | ||
97 | specific libraries for optimization. This is more specific in | ||
98 | intent than poking at uname or /proc/cpuinfo. | ||
99 | |||
100 | For the moment, we have only optimizations for the Intel generations, | ||
101 | but that could change... */ | ||
102 | |||
103 | #define ELF_PLATFORM (NULL) | ||
104 | |||
105 | #define SET_PERSONALITY(ex) set_personality(PER_LINUX) | ||
106 | |||
107 | #endif /* __KERNEL__ */ | ||
108 | #endif | ||