MIPS: ELF: Unify ABI classification macros
Remove a duplicate o32 `elf_check_arch' implementation, move all macro variants to <asm/elf.h> and define them unconditionally under indvidual names, substituting alias `elf_check_arch' definitions in variant code. Signed-off-by: Maciej W. Rozycki <macro@imgtec.com> Cc: linux-mips@linux-mips.org Patchwork: https://patchwork.linux-mips.org/patch/13245/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:
		
							parent
							
								
									4a60ad51d6
								
							
						
					
					
						commit
						c9babb1926
					
				| @ -214,25 +214,7 @@ typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG]; | ||||
| /*
 | ||||
|  * This is used to ensure we don't load something for the wrong architecture. | ||||
|  */ | ||||
| #define elf_check_arch(hdr)						\ | ||||
| ({									\ | ||||
| 	int __res = 1;							\ | ||||
| 	struct elfhdr *__h = (hdr);					\ | ||||
| 									\ | ||||
| 	if (!mips_elf_check_machine(__h))				\ | ||||
| 		__res = 0;						\ | ||||
| 	if (__h->e_ident[EI_CLASS] != ELFCLASS32)			\ | ||||
| 		__res = 0;						\ | ||||
| 	if ((__h->e_flags & EF_MIPS_ABI2) != 0)				\ | ||||
| 		__res = 0;						\ | ||||
| 	if (((__h->e_flags & EF_MIPS_ABI) != 0) &&			\ | ||||
| 	    ((__h->e_flags & EF_MIPS_ABI) != EF_MIPS_ABI_O32))		\ | ||||
| 		__res = 0;						\ | ||||
| 	if (__h->e_flags & __MIPS_O32_FP64_MUST_BE_ZERO)		\ | ||||
| 		__res = 0;						\ | ||||
| 									\ | ||||
| 	__res;								\ | ||||
| }) | ||||
| #define elf_check_arch elfo32_check_arch | ||||
| 
 | ||||
| /*
 | ||||
|  * These are used to set parameters in the core dumps. | ||||
| @ -245,18 +227,7 @@ typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG]; | ||||
| /*
 | ||||
|  * This is used to ensure we don't load something for the wrong architecture. | ||||
|  */ | ||||
| #define elf_check_arch(hdr)						\ | ||||
| ({									\ | ||||
| 	int __res = 1;							\ | ||||
| 	struct elfhdr *__h = (hdr);					\ | ||||
| 									\ | ||||
| 	if (!mips_elf_check_machine(__h))				\ | ||||
| 		__res = 0;						\ | ||||
| 	if (__h->e_ident[EI_CLASS] != ELFCLASS64)			\ | ||||
| 		__res = 0;						\ | ||||
| 									\ | ||||
| 	__res;								\ | ||||
| }) | ||||
| #define elf_check_arch elfn64_check_arch | ||||
| 
 | ||||
| /*
 | ||||
|  * These are used to set parameters in the core dumps. | ||||
| @ -294,6 +265,64 @@ typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG]; | ||||
| #define vmcore_elf32_check_arch mips_elf_check_machine | ||||
| #define vmcore_elf64_check_arch mips_elf_check_machine | ||||
| 
 | ||||
| /*
 | ||||
|  * Return non-zero if HDR identifies an o32 ELF binary. | ||||
|  */ | ||||
| #define elfo32_check_arch(hdr)						\ | ||||
| ({									\ | ||||
| 	int __res = 1;							\ | ||||
| 	struct elfhdr *__h = (hdr);					\ | ||||
| 									\ | ||||
| 	if (!mips_elf_check_machine(__h))				\ | ||||
| 		__res = 0;						\ | ||||
| 	if (__h->e_ident[EI_CLASS] != ELFCLASS32)			\ | ||||
| 		__res = 0;						\ | ||||
| 	if ((__h->e_flags & EF_MIPS_ABI2) != 0)				\ | ||||
| 		__res = 0;						\ | ||||
| 	if (((__h->e_flags & EF_MIPS_ABI) != 0) &&			\ | ||||
| 	    ((__h->e_flags & EF_MIPS_ABI) != EF_MIPS_ABI_O32))		\ | ||||
| 		__res = 0;						\ | ||||
| 	if (__h->e_flags & __MIPS_O32_FP64_MUST_BE_ZERO)		\ | ||||
| 		__res = 0;						\ | ||||
| 									\ | ||||
| 	__res;								\ | ||||
| }) | ||||
| 
 | ||||
| /*
 | ||||
|  * Return non-zero if HDR identifies an n64 ELF binary. | ||||
|  */ | ||||
| #define elfn64_check_arch(hdr)						\ | ||||
| ({									\ | ||||
| 	int __res = 1;							\ | ||||
| 	struct elfhdr *__h = (hdr);					\ | ||||
| 									\ | ||||
| 	if (!mips_elf_check_machine(__h))				\ | ||||
| 		__res = 0;						\ | ||||
| 	if (__h->e_ident[EI_CLASS] != ELFCLASS64)			\ | ||||
| 		__res = 0;						\ | ||||
| 									\ | ||||
| 	__res;								\ | ||||
| }) | ||||
| 
 | ||||
| /*
 | ||||
|  * Return non-zero if HDR identifies an n32 ELF binary. | ||||
|  */ | ||||
| #define elfn32_check_arch(hdr)						\ | ||||
| ({									\ | ||||
| 	int __res = 1;							\ | ||||
| 	struct elfhdr *__h = (hdr);					\ | ||||
| 									\ | ||||
| 	if (!mips_elf_check_machine(__h))				\ | ||||
| 		__res = 0;						\ | ||||
| 	if (__h->e_ident[EI_CLASS] != ELFCLASS32)			\ | ||||
| 		__res = 0;						\ | ||||
| 	if (((__h->e_flags & EF_MIPS_ABI2) == 0) ||			\ | ||||
| 	    ((__h->e_flags & EF_MIPS_ABI) != 0))			\ | ||||
| 		__res = 0;						\ | ||||
| 									\ | ||||
| 	__res;								\ | ||||
| }) | ||||
| 
 | ||||
| struct mips_abi; | ||||
| 
 | ||||
| extern struct mips_abi mips_abi; | ||||
|  | ||||
| @ -30,21 +30,7 @@ typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG]; | ||||
| /*
 | ||||
|  * This is used to ensure we don't load something for the wrong architecture. | ||||
|  */ | ||||
| #define elf_check_arch(hdr)						\ | ||||
| ({									\ | ||||
| 	int __res = 1;							\ | ||||
| 	struct elfhdr *__h = (hdr);					\ | ||||
| 									\ | ||||
| 	if (!mips_elf_check_machine(__h))				\ | ||||
| 		__res = 0;						\ | ||||
| 	if (__h->e_ident[EI_CLASS] != ELFCLASS32)			\ | ||||
| 		__res = 0;						\ | ||||
| 	if (((__h->e_flags & EF_MIPS_ABI2) == 0) ||			\ | ||||
| 	    ((__h->e_flags & EF_MIPS_ABI) != 0))			\ | ||||
| 		__res = 0;						\ | ||||
| 									\ | ||||
| 	__res;								\ | ||||
| }) | ||||
| #define elf_check_arch elfn32_check_arch | ||||
| 
 | ||||
| #define TASK32_SIZE		0x7fff8000UL | ||||
| #undef ELF_ET_DYN_BASE | ||||
|  | ||||
| @ -30,25 +30,7 @@ typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG]; | ||||
| /*
 | ||||
|  * This is used to ensure we don't load something for the wrong architecture. | ||||
|  */ | ||||
| #define elf_check_arch(hdr)						\ | ||||
| ({									\ | ||||
| 	int __res = 1;							\ | ||||
| 	struct elfhdr *__h = (hdr);					\ | ||||
| 									\ | ||||
| 	if (!mips_elf_check_machine(__h))				\ | ||||
| 		__res = 0;						\ | ||||
| 	if (__h->e_ident[EI_CLASS] != ELFCLASS32)			\ | ||||
| 		__res = 0;						\ | ||||
| 	if ((__h->e_flags & EF_MIPS_ABI2) != 0)				\ | ||||
| 		__res = 0;						\ | ||||
| 	if (((__h->e_flags & EF_MIPS_ABI) != 0) &&			\ | ||||
| 	    ((__h->e_flags & EF_MIPS_ABI) != EF_MIPS_ABI_O32))		\ | ||||
| 		__res = 0;						\ | ||||
| 	if (__h->e_flags & __MIPS_O32_FP64_MUST_BE_ZERO)		\ | ||||
| 		__res = 0;						\ | ||||
| 									\ | ||||
| 	__res;								\ | ||||
| }) | ||||
| #define elf_check_arch elfo32_check_arch | ||||
| 
 | ||||
| #ifdef CONFIG_KVM_GUEST | ||||
| #define TASK32_SIZE		0x3fff8000UL | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user