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 15:13:55 +0000 (UTC) [thread overview]
Message-ID: <1420557296.c51a1996485f2836677d1a829e314e2a1fd85327.blueness@gentoo> (raw)
commit: c51a1996485f2836677d1a829e314e2a1fd85327
Author: Anthony G. Basile <blueness <AT> gentoo <DOT> org>
AuthorDate: Tue Jan 6 15:14:56 2015 +0000
Commit: Anthony G. Basile <blueness <AT> gentoo <DOT> org>
CommitDate: Tue Jan 6 15:14:56 2015 +0000
URL: http://sources.gentoo.org/gitweb/?p=proj/elfix.git;a=commit;h=c51a1996
misc/elf-abi: add logic for mips abis
---
misc/elf-abi/elf-abi.c | 147 ++++++++++++++++++++++++++++---------------------
1 file changed, 85 insertions(+), 62 deletions(-)
diff --git a/misc/elf-abi/elf-abi.c b/misc/elf-abi/elf-abi.c
index 0a271ba..fb53391 100644
--- a/misc/elf-abi/elf-abi.c
+++ b/misc/elf-abi/elf-abi.c
@@ -7,25 +7,21 @@
*
* Supported identifiers:
*
- * alpha_{32,64}
- * arm_{32,64}
- * hppa_{32,64}
- * ia_{32,64}
- * m68k_{32,64}
+ * alpha_64
+ * arm_{oabi,eabi}
+ * arm_64
+ * hppa_32
+ * ia_64
+ * m68k_32
* mips_{n32,n64,o32}
* ppc_{32,64}
* s390_{32,64}
- * sh_{32,64}
+ * sh_32
* sparc_{32,64}
* x86_{32,x32,64}
*
* NOTES:
*
- * * The ABIs referenced by some of the above *_32 and *_64 identifiers
- * may be imaginary, but they are listed anyway, since the goal is to
- * establish a naming convention that is as consistent and uniform as
- * possible.
- *
* * The Elf header's e_ident[EI_OSABI] byte is completely ignored,
* since OS-independence is one of the goals. The assumption is that,
* for given installation, we are only interested in tracking multilib
@@ -85,19 +81,13 @@
#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
+#define EM_ALPHA 0x9026 /* Unofficial, but needed in Gentoo */
+#define EM_HPPA 0x0F00 /* Unofficial, but needed in Gentoo */
-#define EF_MIPS_ABI2 32
-#define EF_MIPS_ABI_ON32 64
-/*
-E_MIPS_ABI_O32 = 0x00001000
-E_MIPS_ABI_O64 = 0x00002000
-E_MIPS_ABI_EABI32 = 0x00003000
-E_MIPS_ABI_EABI64 = 0x00004000
-*/
+#define EF_MIPS_ABI 0x0000F000
+#define E_MIPS_ABI_O32 0x00001000
-#define EF_ARM_NEW_ABI 0x80
-#define EF_ARM_OLD_ABI 0x100
+#define EF_ARM_EABIMASK 0XFF000000
int
@@ -117,44 +107,100 @@ get_wordsize(uint8_t ei_class)
char *
get_abi(uint16_t e_machine, int width, uint32_t e_flags)
{
+ /* The following arrives at the abstract ABI name by a process of elimination based on the assumption
+ * that we are only interested in the ABIs supported in Gentoo. If a new ABIs is added, you need to
+ * rethink the logic to avoid false positives/negatives.
+ */
switch(e_machine) {
+
+ /* alpha: We support only one 64-bit ABI. */
case EM_ALPHA:
case EM_FAKE_ALPHA:
- return "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:
- return "amd64";
+ 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:
- return "arm";
+ if (e_flags & EF_ARM_EABIMASK)
+ return "arm_eabi";
+ else
+ return "arm_oabi";
+
+ /* arm64: We support only one 64-bit ABI. */
case EM_AARCH64:
- return "arm64";
+ return "arm_64";
+
+ /* m68k: We support only one 32-bit ABI. */
case EM_68K:
- return "m68k";
+ return "m68k_32";
+
+ /* mips: We support o32, n32 and n64. The first is 32-bits and the
+ * latter two are 64-bit ABIs.
+ */
case EM_MIPS_RS3_LE:
case EM_MIPS:
- return "mips";
+ if (width == 64)
+ return "mips_n64";
+ else
+ if ((e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O32)
+ return "mips_o32";
+ else
+ return "mips_n32";
+
+ /* ia64: We support only one 64-bit ABI. */
case EM_IA_64:
- return "ia64";
+ return "ia_64";
+
+ /* hppa: We support only one 32-bit ABI. */
case EM_PARISC:
- return "hppa";
+ case EM_HPPA:
+ return "hppa_32";
+
+ /* ppc: We support only one 32-bit ABI. */
case EM_PPC:
- return "ppc";
+ return "ppc_32";
+
+ /* ppc64: We support only one 64-bit ABI. */
case EM_PPC64:
- return "ppc64";
+ return "ppc_64";
+
+ /* s390: We support one 32-bit and one 64-bit ABI. */
case EM_S390:
- return "s390";
+ if (width == 64)
+ return "s390_64";
+ else
+ return "s390_32";
+
+ /* sh: We support only one 32-bit ABI. */
case EM_SH:
- return "sh";
+ return "sh_32";
+
+ /* sparc: We support one 32-bit and one 64-bit ABI. */
case EM_SPARC32PLUS:
case EM_SPARCV9:
case EM_SPARC:
- return "sparc";
- case EM_386:
- return "x86";
+ if (width == 64)
+ return "sparc_64";
+ else
+ return "sparc_32";
+
default:
- return "unknown_arch";
+ return "unknown";
}
}
+
int
main(int argc, char* argv[])
{
@@ -218,35 +264,12 @@ main(int argc, char* argv[])
if (lseek(fd, e_flags_offset, SEEK_SET) == -1)
err(1, "lseek() e_flags failed");
- if (read(fd, &e_flags, 2) == -1)
+ if (read(fd, &e_flags, 4) == -1)
err(1, "read() e_flags failed");
abi = get_abi(e_machine, width, e_flags);
-
printf("%s\n", abi);
-
-/*
- if (!strcmp(arch, "mips")) ;
- switch (e_flags & EF_MIPS_ABI) {
- case E_MIPS_ABI_O32:
- abi = "o32";
- break;
-
- if mips_abi == E_MIPS_ABI_O32:
- name = "o32"
- elif mips_abi == E_MIPS_ABI_O64:
- name = "o64"
- elif mips_abi == E_MIPS_ABI_EABI32:
- name = "eabi32"
- elif mips_abi == E_MIPS_ABI_EABI64:
- name = "eabi64"
- elif elf_header.e_flags & EF_MIPS_ABI2:
- name = "n32"
- elif elf_header.ei_class == ELFCLASS64:
- name = "n64"
- }
-*/
close(fd);
exit(EXIT_SUCCESS);
}
next reply other threads:[~2015-01-06 15:14 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-01-06 15:13 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 17:26 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=1420557296.c51a1996485f2836677d1a829e314e2a1fd85327.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