Skip to contentSkip to conversation

ELF32 problem in mips64 kernel

PATCH Kip Walker 2 participants 3 messages Sep 18, 2002 – Sep 20, 2002 MIPS

lore
Share & tools
lore

Kip Walker

author
#0 lore raw

There is a faulty check in include/asm-mips64/elf.h:

in elf_check_arch, the following access to the "e_flags" field is non-sensical if the binary is ELFCLASS32, because "__h" is typed as an elf64_hdr (through the elfhdr #define), whose e_flags is in a different location from an elf32_hdr.

        if ((__h->e_ident[EI_CLASS] == ELFCLASS32) &&     \
            ((__h->e_flags & EF_MIPS_ABI2) == 0))         \
                __res = 0;                                \

Should the n32 check (is this what the EF_MIPS_ABI2 check is about?) be punted to another binary format handler? The attached patch removed the ABI2 check.

Kip

Index: include/asm-mips64/elf.h
===================================================================
RCS file: /cvs/linux/include/asm-mips64/elf.h,v
retrieving revision 1.10.2.2

asm-mips64/elf.h +3 -3
diff -u -r1.10.2.2 elf.h
@@ -43,8 +43,7 @@
 									\
 	if (__h->e_machine != EM_MIPS)					\
 		__res = 0;						\
-	if ((__h->e_ident[EI_CLASS] == ELFCLASS32) &&			\
-	    ((__h->e_flags & EF_MIPS_ABI2) == 0))			\
+	if (__h->e_ident[EI_CLASS] == ELFCLASS32) 			\
 		__res = 0;						\
 									\
 	__res;								\
@@ -53,7 +52,8 @@
 /*
  * These are used to set parameters in the core dumps.
  */
-#define ELF_CLASS	ELFCLASS64
+//#define ELF_CLASS	ELFCLASS64
+#define ELF_CLASS	ELFCLASS32
 #ifdef __MIPSEB__
 #define ELF_DATA	ELFDATA2MSB
 #elif __MIPSEL__
author
#1 lore raw

OK, so I didn't mean to include the debugging garbage in that patch :-)

Take 2.

Kip

Index: include/asm-mips64/elf.h
===================================================================
RCS file: /cvs/linux/include/asm-mips64/elf.h,v
retrieving revision 1.10.2.2

asm-mips64/elf.h +1 -2
diff -u -r1.10.2.2 elf.h
@@ -43,8 +43,7 @@
 									\
 	if (__h->e_machine != EM_MIPS)					\
 		__res = 0;						\
-	if ((__h->e_ident[EI_CLASS] == ELFCLASS32) &&			\
-	    ((__h->e_flags & EF_MIPS_ABI2) == 0))			\
+	if (__h->e_ident[EI_CLASS] == ELFCLASS32) 			\
 		__res = 0;						\
 									\
 	__res;								\
#2 lore raw
In reply to Kip Walker
Quoted 4 lines · Kip Walker

in elf_check_arch, the following access to the "e_flags" field is non-sensical if the binary is ELFCLASS32, because "__h" is typed as an elf64_hdr (through the elfhdr #define), whose e_flags is in a different location from an elf32_hdr.

Thanks for pointing it out.

Quoted 7 lines
        if ((__h->e_ident[EI_CLASS] == ELFCLASS32) &&     \
            ((__h->e_flags & EF_MIPS_ABI2) == 0))         \
                __res = 0;                                \

Should the n32 check (is this what the EF_MIPS_ABI2 check is about?) be punted to another binary format handler? The attached patch removed the ABI2 check.

Since the layout of the ELF32 header much differs from the ELF64 one it
doesn't really make sense to handle both formats together. The change looks OK.

Signature · 3 lines
+  Maciej W. Rozycki, Technical University of Gdansk, Poland   +
+--------------------------------------------------------------+
+        e-mail: [email protected], PGP key available        +