MIPS: Avoid FP ELF checks when CONFIG_MIPS_FP_SUPPORT=n
When CONFIG_MIPS_FP_SUPPORT=n we don't support floating point, so we can avoid needless checks of ELF headers specifying the FP ABI or NaN encoding to use. Deselect CONFIG_ARCH_BINFMT_ELF_STATE in this case to avoid the need for our arch_elf_pt_proc() & arch_check_elf() functions, and stub out the mips_set_personality_nan() & mips_set_personality_fp() functions such that SET_PERSONALITY() doesn't need to worry about any of this. Signed-off-by: Paul Burton <paul.burton@mips.com> Patchwork: https://patchwork.linux-mips.org/patch/21011/ Cc: linux-mips@linux-mips.org
This commit is contained in:
parent
4eec81d7d8
commit
ea6a37373f
|
@ -2,7 +2,7 @@
|
|||
config MIPS
|
||||
bool
|
||||
default y
|
||||
select ARCH_BINFMT_ELF_STATE
|
||||
select ARCH_BINFMT_ELF_STATE if MIPS_FP_SUPPORT
|
||||
select ARCH_CLOCKSOURCE_DATA
|
||||
select ARCH_DISCARD_MEMBLOCK
|
||||
select ARCH_HAS_ELF_RANDOMIZE
|
||||
|
|
|
@ -481,6 +481,8 @@ struct linux_binprm;
|
|||
extern int arch_setup_additional_pages(struct linux_binprm *bprm,
|
||||
int uses_interp);
|
||||
|
||||
#ifdef CONFIG_MIPS_FP_SUPPORT
|
||||
|
||||
struct arch_elf_state {
|
||||
int nan_2008;
|
||||
int fp_abi;
|
||||
|
@ -497,19 +499,35 @@ struct arch_elf_state {
|
|||
.overall_fp_mode = -1, \
|
||||
}
|
||||
|
||||
/* Whether to accept legacy-NaN and 2008-NaN user binaries. */
|
||||
extern bool mips_use_nan_legacy;
|
||||
extern bool mips_use_nan_2008;
|
||||
|
||||
extern int arch_elf_pt_proc(void *ehdr, void *phdr, struct file *elf,
|
||||
bool is_interp, struct arch_elf_state *state);
|
||||
|
||||
extern int arch_check_elf(void *ehdr, bool has_interpreter, void *interp_ehdr,
|
||||
struct arch_elf_state *state);
|
||||
|
||||
/* Whether to accept legacy-NaN and 2008-NaN user binaries. */
|
||||
extern bool mips_use_nan_legacy;
|
||||
extern bool mips_use_nan_2008;
|
||||
|
||||
extern void mips_set_personality_nan(struct arch_elf_state *state);
|
||||
extern void mips_set_personality_fp(struct arch_elf_state *state);
|
||||
|
||||
#else /* !CONFIG_MIPS_FP_SUPPORT */
|
||||
|
||||
struct arch_elf_state;
|
||||
|
||||
static inline void mips_set_personality_nan(struct arch_elf_state *state)
|
||||
{
|
||||
/* no-op */
|
||||
}
|
||||
|
||||
static inline void mips_set_personality_fp(struct arch_elf_state *state)
|
||||
{
|
||||
/* no-op */
|
||||
}
|
||||
|
||||
#endif /* !CONFIG_MIPS_FP_SUPPORT */
|
||||
|
||||
#define elf_read_implies_exec(ex, stk) mips_elf_read_implies_exec(&(ex), stk)
|
||||
extern int mips_elf_read_implies_exec(void *elf_ex, int exstack);
|
||||
|
||||
|
|
|
@ -16,6 +16,8 @@
|
|||
#include <asm/cpu-features.h>
|
||||
#include <asm/cpu-info.h>
|
||||
|
||||
#ifdef CONFIG_MIPS_FP_SUPPORT
|
||||
|
||||
/* Whether to accept legacy-NaN and 2008-NaN user binaries. */
|
||||
bool mips_use_nan_legacy;
|
||||
bool mips_use_nan_2008;
|
||||
|
@ -326,6 +328,8 @@ void mips_set_personality_nan(struct arch_elf_state *state)
|
|||
}
|
||||
}
|
||||
|
||||
#endif /* CONFIG_MIPS_FP_SUPPORT */
|
||||
|
||||
int mips_elf_read_implies_exec(void *elf_ex, int exstack)
|
||||
{
|
||||
if (exstack != EXSTACK_DISABLE_X) {
|
||||
|
|
Loading…
Reference in New Issue