diff options
Diffstat (limited to 'include/asm-arm')
-rw-r--r-- | include/asm-arm/elf.h | 48 |
1 files changed, 16 insertions, 32 deletions
diff --git a/include/asm-arm/elf.h b/include/asm-arm/elf.h index f3929307a56b..642382d2c9f0 100644 --- a/include/asm-arm/elf.h +++ b/include/asm-arm/elf.h | |||
@@ -114,40 +114,24 @@ extern char elf_platform[]; | |||
114 | have no such handler. */ | 114 | have no such handler. */ |
115 | #define ELF_PLAT_INIT(_r, load_addr) (_r)->ARM_r0 = 0 | 115 | #define ELF_PLAT_INIT(_r, load_addr) (_r)->ARM_r0 = 0 |
116 | 116 | ||
117 | #ifndef CONFIG_IWMMXT | ||
118 | |||
119 | /* Old NetWinder binaries were compiled in such a way that the iBCS | ||
120 | heuristic always trips on them. Until these binaries become uncommon | ||
121 | enough not to care, don't trust the `ibcs' flag here. In any case | ||
122 | there is no other ELF system currently supported by iBCS. | ||
123 | @@ Could print a warning message to encourage users to upgrade. */ | ||
124 | #define SET_PERSONALITY(ex,ibcs2) \ | ||
125 | set_personality(((ex).e_flags & EF_ARM_APCS26 ? PER_LINUX : PER_LINUX_32BIT)) | ||
126 | |||
127 | #else | ||
128 | |||
129 | /* | 117 | /* |
130 | * All iWMMXt capable CPUs don't support 26-bit mode. Yet they can run | 118 | * Since the FPA coprocessor uses CP1 and CP2, and iWMMXt uses CP0 |
131 | * legacy binaries which used to contain FPA11 floating point instructions | 119 | * and CP1, we only enable access to the iWMMXt coprocessor if the |
132 | * that have always been emulated by the kernel. PFA11 and iWMMXt overlap | 120 | * binary is EABI or softfloat (and thus, guaranteed not to use |
133 | * on coprocessor 1 space though. We therefore must decide if given task | 121 | * FPA instructions.) |
134 | * is allowed to use CP 0 and 1 for iWMMXt, or if they should be blocked | ||
135 | * at all times for the prefetch exception handler to catch FPA11 opcodes | ||
136 | * and emulate them. The best indication to discriminate those two cases | ||
137 | * is the SOFT_FLOAT flag in the ELF header. | ||
138 | */ | 122 | */ |
139 | 123 | #define SET_PERSONALITY(ex, ibcs2) \ | |
140 | #define SET_PERSONALITY(ex,ibcs2) \ | 124 | do { \ |
141 | do { \ | 125 | if ((ex).e_flags & EF_ARM_APCS26) { \ |
142 | set_personality(PER_LINUX_32BIT); \ | 126 | set_personality(PER_LINUX); \ |
143 | if (((ex).e_flags & EF_ARM_EABI_MASK) || \ | 127 | } else { \ |
144 | ((ex).e_flags & EF_ARM_SOFT_FLOAT)) \ | 128 | set_personality(PER_LINUX_32BIT); \ |
145 | set_thread_flag(TIF_USING_IWMMXT); \ | 129 | if (elf_hwcap & HWCAP_IWMMXT && (ex).e_flags & (EF_ARM_EABI_MASK | EF_ARM_SOFT_FLOAT)) \ |
146 | else \ | 130 | set_thread_flag(TIF_USING_IWMMXT); \ |
147 | clear_thread_flag(TIF_USING_IWMMXT); \ | 131 | else \ |
148 | } while (0) | 132 | clear_thread_flag(TIF_USING_IWMMXT); \ |
149 | 133 | } \ | |
150 | #endif | 134 | } while (0) |
151 | 135 | ||
152 | #endif | 136 | #endif |
153 | 137 | ||