Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit ea6a3737 authored by Paul Burton's avatar Paul Burton
Browse files

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: default avatarPaul Burton <paul.burton@mips.com>
Patchwork: https://patchwork.linux-mips.org/patch/21011/
Cc: linux-mips@linux-mips.org
parent 4eec81d7
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -2,7 +2,7 @@
config MIPS
config MIPS
	bool
	bool
	default y
	default y
	select ARCH_BINFMT_ELF_STATE
	select ARCH_BINFMT_ELF_STATE if MIPS_FP_SUPPORT
	select ARCH_CLOCKSOURCE_DATA
	select ARCH_CLOCKSOURCE_DATA
	select ARCH_DISCARD_MEMBLOCK
	select ARCH_DISCARD_MEMBLOCK
	select ARCH_HAS_ELF_RANDOMIZE
	select ARCH_HAS_ELF_RANDOMIZE
+22 −4
Original line number Original line Diff line number Diff line
@@ -481,6 +481,8 @@ struct linux_binprm;
extern int arch_setup_additional_pages(struct linux_binprm *bprm,
extern int arch_setup_additional_pages(struct linux_binprm *bprm,
				       int uses_interp);
				       int uses_interp);


#ifdef CONFIG_MIPS_FP_SUPPORT

struct arch_elf_state {
struct arch_elf_state {
	int nan_2008;
	int nan_2008;
	int fp_abi;
	int fp_abi;
@@ -497,19 +499,35 @@ struct arch_elf_state {
	.overall_fp_mode = -1,			\
	.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,
extern int arch_elf_pt_proc(void *ehdr, void *phdr, struct file *elf,
			    bool is_interp, struct arch_elf_state *state);
			    bool is_interp, struct arch_elf_state *state);


extern int arch_check_elf(void *ehdr, bool has_interpreter, void *interp_ehdr,
extern int arch_check_elf(void *ehdr, bool has_interpreter, void *interp_ehdr,
			  struct arch_elf_state *state);
			  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_nan(struct arch_elf_state *state);
extern void mips_set_personality_fp(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)
#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);
extern int mips_elf_read_implies_exec(void *elf_ex, int exstack);


+4 −0
Original line number Original line Diff line number Diff line
@@ -16,6 +16,8 @@
#include <asm/cpu-features.h>
#include <asm/cpu-features.h>
#include <asm/cpu-info.h>
#include <asm/cpu-info.h>


#ifdef CONFIG_MIPS_FP_SUPPORT

/* Whether to accept legacy-NaN and 2008-NaN user binaries.  */
/* Whether to accept legacy-NaN and 2008-NaN user binaries.  */
bool mips_use_nan_legacy;
bool mips_use_nan_legacy;
bool mips_use_nan_2008;
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)
int mips_elf_read_implies_exec(void *elf_ex, int exstack)
{
{
	if (exstack != EXSTACK_DISABLE_X) {
	if (exstack != EXSTACK_DISABLE_X) {