public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Anthony G. Basile" <blueness@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/elfix:master commit in: misc/elf-abi/
Date: Tue,  6 Jan 2015 17:26:10 +0000 (UTC)	[thread overview]
Message-ID: <1420565232.51e620eef945c3af2c2d8c92fedbacb99ba55d3d.blueness@gentoo> (raw)

commit:     51e620eef945c3af2c2d8c92fedbacb99ba55d3d
Author:     Anthony G. Basile <blueness <AT> gentoo <DOT> org>
AuthorDate: Tue Jan  6 17:27:12 2015 +0000
Commit:     Anthony G. Basile <blueness <AT> gentoo <DOT> org>
CommitDate: Tue Jan  6 17:27:12 2015 +0000
URL:        http://sources.gentoo.org/gitweb/?p=proj/elfix.git;a=commit;h=51e620ee

misc/elf-abi: sort out EM numbers for gentoo -- except mips

---
 misc/elf-abi/elf-abi.c | 116 +++++++++++++++++++++++--------------------------
 1 file changed, 55 insertions(+), 61 deletions(-)

diff --git a/misc/elf-abi/elf-abi.c b/misc/elf-abi/elf-abi.c
index fb53391..13ec542 100644
--- a/misc/elf-abi/elf-abi.c
+++ b/misc/elf-abi/elf-abi.c
@@ -58,50 +58,38 @@
 #include <unistd.h>
 #include <fcntl.h>
 
-/* We steal this from <elf.h> but don't include it so as to not increase our dependancies. */
+/* We reorder the big endian EM_ numbers to avoid also reading endian information from
+ * the Elf file.  For a mapping between common macine names and EM_ see <elf.h>.  For a
+ * more complete mapping, see elfutil's machines[] defined in libebl/eblopenbackend.c.
+ */
 #define	ELFMAG		"\177ELF"
 
 #define ELFCLASS32	1		/* 32-bit objects */
 #define ELFCLASS64	2		/* 64-bit objects */
 
-#define EM_SPARC	 2		/* SUN SPARC */
-#define EM_386		 3		/* Intel 80386 */
-#define EM_68K		 4		/* Motorola m68k family */
+#define EM_ALPHA	0x9026		/* alpha */
+#define EM_ARM		40		/* arm */
+#define EM_AARCH64	183		/* arm64 */
+#define EM_PARISC_BE	0x0F00		/* hppa - big endian reordering of EM_PARISC = 15 */
+#define EM_IA_64	50		/* ia64 */
+#define EM_68K_BE	0x0400		/* m68k - big endian reordering of EM_68K = 4 */
+
 #define EM_MIPS		 8		/* MIPS R3000 big-endian */
 #define EM_MIPS_RS3_LE	10		/* MIPS R3000 little-endian */
-#define EM_PARISC	15		/* HPPA */
-#define EM_SPARC32PLUS	18		/* Sun's "v8plus" */
-#define EM_PPC		20		/* PowerPC */
-#define EM_PPC64	21		/* PowerPC 64-bit */
-#define EM_S390		22		/* IBM S390 */
-#define EM_ARM		40		/* ARM */
-#define EM_FAKE_ALPHA	41		/* Digital Alpha */
-#define EM_SH		42		/* Hitachi SH */
-#define EM_SPARCV9	43		/* SPARC v9 64-bit */
-#define EM_IA_64	50		/* Intel Merced */
-#define EM_X86_64	62		/* AMD x86-64 architecture */
-#define EM_AARCH64	183		/* ARM AARCH64 */
-#define EM_ALPHA	0x9026		/* Unofficial, but needed in Gentoo */
-#define EM_HPPA		0x0F00		/* Unofficial, but needed in Gentoo */
 
-#define EF_MIPS_ABI		0x0000F000
-#define E_MIPS_ABI_O32		0x00001000
+#define EM_PPC_BE	0x1400		/* ppc - big endian reordering of EM_PPC = 20 */
+#define EM_PPC64_BE	0x1500		/* ppc64 - bit endian reordering of EM_PPC64 = 21 */
+#define EM_S390_BE	0x1600		/* s390 - big endian reordering of EM_S390 */
+#define EM_SH		42		/* Hitachi SH */
+#define EM_SPARC32_BE	0x1200		/* sparc - big endian reordering of EM_SPARC32PLUS = 18 */
+#define EM_SPARC64_BE	0x2B00		/* sparc - big endian reordinger of EM_SPARCV9 = 43 */
+#define EM_386		 3		/* x86 */
+#define EM_X86_64	62		/* amd64 */
 
-#define EF_ARM_EABIMASK		0XFF000000
-
-
-int
-get_wordsize(uint8_t ei_class)
-{
-	switch (ei_class) {
-		case ELFCLASS32:
-			return 32;
-		case ELFCLASS64:
-			return 64;
-		default:
-			return 0;
-	}
-}
+/* The arm and mips ABI flags housed in e_flags */
+#define EF_MIPS_ABI		0x0000F000	/* Mask for mips ABI */
+#define E_MIPS_ABI_O32		0x00001000	/* Value for o32                */
+#define EF_ARM_EABIMASK		0XFF000000	/* Mask for arm EABI - we dont' destinguish versions */
 
 
 char *
@@ -115,21 +103,8 @@ get_abi(uint16_t e_machine, int width, uint32_t e_flags)
 
 		/* alpha: We support only one 64-bit ABI. */
 		case EM_ALPHA:
-		case EM_FAKE_ALPHA:
 			return "alpha_64";
 
-		/* amd64 + x86: We support X86-64, X86-X32, and X86-32 ABI. The first
-		 * two are 64-bit ABIs and the third is 32-bit.  All three will run on
-		 * amd64 architecture, but only the 32-bit will run on the x86 family.
-		 */
-		case EM_X86_64:
-			if (width == 64)
-				return "x86_64";
-			else
-				return "x86_x32";
-		case EM_386:
-			return "x86_32";
-
 		/* arm: We support two 32-bit ABIs, eabi and oabi. */
 		case EM_ARM:
 			if (e_flags & EF_ARM_EABIMASK)
@@ -142,7 +117,7 @@ get_abi(uint16_t e_machine, int width, uint32_t e_flags)
 			return "arm_64";
 
 		/* m68k: We support only one 32-bit ABI. */
-		case EM_68K:
+		case EM_68K_BE:
 			return "m68k_32";
 
 		/* mips: We support o32, n32 and n64.  The first is 32-bits and the
@@ -163,20 +138,19 @@ get_abi(uint16_t e_machine, int width, uint32_t e_flags)
 			return "ia_64";
 
 		/* hppa: We support only one 32-bit ABI. */
-		case EM_PARISC:
-		case EM_HPPA:
+		case EM_PARISC_BE:
 			return "hppa_32";
 
 		/* ppc: We support only one 32-bit ABI. */
-		case EM_PPC:
+		case EM_PPC_BE:
 			return "ppc_32";
 
 		/* ppc64: We support only one 64-bit ABI. */
-		case EM_PPC64:
+		case EM_PPC64_BE:
 			return "ppc_64";
 
 		/* s390: We support one 32-bit and one 64-bit ABI. */
-		case EM_S390:
+		case EM_S390_BE:
 			if (width == 64)
 				return "s390_64";
 			else
@@ -187,13 +161,22 @@ get_abi(uint16_t e_machine, int width, uint32_t e_flags)
 			return "sh_32";
 
 		/* sparc: We support one 32-bit and one 64-bit ABI. */
-		case EM_SPARC32PLUS:
-		case EM_SPARCV9:
-		case EM_SPARC:
+		case EM_SPARC32_BE:
+			return "sparc_32";
+		case EM_SPARC64_BE:
+			return "sparc_64";
+
+		/* amd64 + x86: We support X86-64, X86-X32, and X86-32 ABI. The first
+		 * two are 64-bit ABIs and the third is 32-bit.  All three will run on
+		 * amd64 architecture, but only the 32-bit will run on the x86 family.
+		 */
+		case EM_386:
+			return "x86_32";
+		case EM_X86_64:
 			if (width == 64)
-				return "sparc_64";
+				return "x86_64";
 			else
-				return "sparc_32";
+				return "x86_x32";
 
 		default:
 			return "unknown";
@@ -231,10 +214,19 @@ main(int argc, char* argv[])
 	if (strncmp(magic, ELFMAG, 4) != 0)
 		errx(1, "%s is not an ELF object", argv[1]);
 
-	/* 32 or 64 bits? */
+	/* 32 or 64 bits machine word size? */
 	if (read(fd, &ei_class, 1) == -1)
 		err(1, "read() ei_class failed");
-	width = get_wordsize(ei_class);
+	switch (ei_class) {
+		case ELFCLASS32:
+			width = 32;
+			break;
+		case ELFCLASS64:
+			width = 64;
+			break;
+		default:
+			errx(1, "Unknown machine word size.");
+	}
 
 	/*
 	All Elf files begin with the following Elf header:
@@ -261,6 +253,8 @@ main(int argc, char* argv[])
 		err(1, "lseek() e_machine failed");
 	if (read(fd, &e_machine, 2) == -1)
 		err(1, "read() e_machine failed");
+	printf("%x\n", e_machine);
+	printf("%d\n", e_machine);
 
 	if (lseek(fd, e_flags_offset, SEEK_SET) == -1)
 		err(1, "lseek() e_flags failed");


             reply	other threads:[~2015-01-06 17:26 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-01-06 17:26 Anthony G. Basile [this message]
  -- strict thread matches above, loose matches on Subject: below --
2015-01-06 21:43 [gentoo-commits] proj/elfix:master commit in: misc/elf-abi/ Anthony G. Basile
2015-01-06 21:34 Anthony G. Basile
2015-01-06 20:47 Anthony G. Basile
2015-01-06 18:22 Anthony G. Basile
2015-01-06 15:13 Anthony G. Basile
2015-01-05 16:26 Anthony G. Basile
2015-01-05 16:23 Anthony G. Basile
2015-01-03 23:53 Anthony G. Basile
2015-01-03 23:49 Anthony G. Basile
2015-01-03 23:19 Anthony G. Basile

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1420565232.51e620eef945c3af2c2d8c92fedbacb99ba55d3d.blueness@gentoo \
    --to=blueness@gentoo.org \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox