aboutsummaryrefslogtreecommitdiff
path: root/include/coff
diff options
context:
space:
mode:
authorOmar Majid <omajid@redhat.com>2019-07-23 09:44:57 +0100
committerNick Clifton <nickc@redhat.com>2019-07-23 09:44:57 +0100
commit1dd1bc4daf99ec7ad1f9a6feea8cf4ebe715a92d (patch)
tree968e6d80c069a68fcb0bc8630dd2b67ab14362e3 /include/coff
parent5ba29434765feed692b6342a8b0f853050be2402 (diff)
downloadbinutils-1dd1bc4daf99ec7ad1f9a6feea8cf4ebe715a92d.zip
binutils-1dd1bc4daf99ec7ad1f9a6feea8cf4ebe715a92d.tar.gz
binutils-1dd1bc4daf99ec7ad1f9a6feea8cf4ebe715a92d.tar.bz2
Allow objdump to recognise the System.Runtime.dll files that get shipped with .NET Core 2.1.
include * coff/i386.h (IMAGE_FILE_MACHINE_NATIVE_APPLE_OVERRIDE): Define. (IMAGE_FILE_MACHINE_NATIVE_FREEBSD_OVERRIDE): Define. (IMAGE_FILE_MACHINE_NATIVE_LINUX_OVERRIDE): Define. (IMAGE_FILE_MACHINE_NATIVE_NETBSD_OVERRIDE): Define. (I386_APPLE_MAGIC): Define. (I386_FREEBSD_MAGIC): Define. (I386_LINUX_MAGIC): Define. (I386_NETBSD_MAGIC): Define. (I386BADMAG): Extend macro to allow new magic numbers. * coff/x86_64.h (IMAGE_FILE_MACHINE_NATIVE_APPLE_OVERRIDE): Define. (IMAGE_FILE_MACHINE_NATIVE_FREEBSD_OVERRIDE): Define. (IMAGE_FILE_MACHINE_NATIVE_LINUX_OVERRIDE): Define. (IMAGE_FILE_MACHINE_NATIVE_NETBSD_OVERRIDE): Define. (AMD64_APPLE_MAGIC): Define. (AMD64_FREEBSD_MAGIC): Define. (AMD64_LINUX_MAGIC): Define. (AMD64_NETBSD_MAGIC): Define. (AMD64BADMAG): Extend macro to allow new magic numbers. bfd * coffcode.h (coff_set_arch_mach_hook): Handle I386_APPLE_MAGIC, I386_FREEBSD_MAGIC, I386_LINUX_MAGIC, I386_NETBSD_MAGIC, AMD64_APPLE_MAGIC, AMD64_FREEBSD_MAGIC, AMD64_LINUX_MAGIC, AMD64_NETBSD_MAGIC. * peXXigen.c: Add comment about source of .NET magic numbers. binutils* Makefile.am (AUTOMAKE_OPTIONS): Add subdir-objects (GENTESTDLLSPROG): Define. (TEST_PROGS): Add GENTESTDLLSPROG. * Makefile.in: Regenerate. * testsuite/binutils-all/objdump.exp (test_objdump_dotnet_assemblies): New proc. Run the new proc. * testsuite/gentestdlls.c: New source file.
Diffstat (limited to 'include/coff')
-rw-r--r--include/coff/i386.h19
-rw-r--r--include/coff/x86_64.h22
2 files changed, 40 insertions, 1 deletions
diff --git a/include/coff/i386.h b/include/coff/i386.h
index 1d2ccff..8fd2b8d 100644
--- a/include/coff/i386.h
+++ b/include/coff/i386.h
@@ -43,7 +43,26 @@
#define LYNXCOFFMAGIC 0415
+/* .NET DLLs XOR the Machine number (above) with an override to
+ indicate that the DLL contains OS-specific machine code rather
+ than just IL or bytecode. See
+ https://github.com/dotnet/coreclr/blob/6f7aa7967c607b8c667518314ab937c0d7547025/src/inc/pedecoder.h#L94-L107. */
+#define IMAGE_FILE_MACHINE_NATIVE_APPLE_OVERRIDE 0x4644
+#define IMAGE_FILE_MACHINE_NATIVE_FREEBSD_OVERRIDE 0xadc4
+#define IMAGE_FILE_MACHINE_NATIVE_LINUX_OVERRIDE 0x7b79
+#define IMAGE_FILE_MACHINE_NATIVE_NETBSD_OVERRIDE 0x1993
+
+/* Used in some .NET DLLs that target a specific OS. */
+#define I386_APPLE_MAGIC (I386MAGIC ^ IMAGE_FILE_MACHINE_NATIVE_APPLE_OVERRIDE)
+#define I386_FREEBSD_MAGIC (I386MAGIC ^ IMAGE_FILE_MACHINE_NATIVE_FREEBSD_OVERRIDE)
+#define I386_LINUX_MAGIC (I386MAGIC ^ IMAGE_FILE_MACHINE_NATIVE_LINUX_OVERRIDE)
+#define I386_NETBSD_MAGIC (I386MAGIC ^ IMAGE_FILE_MACHINE_NATIVE_NETBSD_OVERRIDE)
+
#define I386BADMAG(x) ( ((x).f_magic != I386MAGIC) \
+ && (x).f_magic != I386_APPLE_MAGIC \
+ && (x).f_magic != I386_FREEBSD_MAGIC \
+ && (x).f_magic != I386_LINUX_MAGIC \
+ && (x).f_magic != I386_NETBSD_MAGIC \
&& (x).f_magic != I386AIXMAGIC \
&& (x).f_magic != I386PTXMAGIC \
&& (x).f_magic != LYNXCOFFMAGIC)
diff --git a/include/coff/x86_64.h b/include/coff/x86_64.h
index 3d0e6f0..c0e6de3 100644
--- a/include/coff/x86_64.h
+++ b/include/coff/x86_64.h
@@ -29,7 +29,27 @@
#define AMD64MAGIC 0x8664
-#define AMD64BADMAG(x) ((x).f_magic != AMD64MAGIC)
+/* .NET DLLs XOR the Machine number (above) with an override to
+ indicate that the DLL contains OS-specific machine code rather
+ than just IL or bytecode. See
+ https://github.com/dotnet/coreclr/blob/6f7aa7967c607b8c667518314ab937c0d7547025/src/inc/pedecoder.h#L94-L107. */
+#define IMAGE_FILE_MACHINE_NATIVE_APPLE_OVERRIDE 0x4644
+#define IMAGE_FILE_MACHINE_NATIVE_FREEBSD_OVERRIDE 0xadc4
+#define IMAGE_FILE_MACHINE_NATIVE_LINUX_OVERRIDE 0x7b79
+#define IMAGE_FILE_MACHINE_NATIVE_NETBSD_OVERRIDE 0x1993
+
+/* Used in some .NET DLLs that target a specific OS. */
+#define AMD64_APPLE_MAGIC (AMD64MAGIC ^ IMAGE_FILE_MACHINE_NATIVE_APPLE_OVERRIDE)
+#define AMD64_FREEBSD_MAGIC (AMD64MAGIC ^ IMAGE_FILE_MACHINE_NATIVE_FREEBSD_OVERRIDE)
+#define AMD64_LINUX_MAGIC (AMD64MAGIC ^ IMAGE_FILE_MACHINE_NATIVE_LINUX_OVERRIDE)
+#define AMD64_NETBSD_MAGIC (AMD64MAGIC ^ IMAGE_FILE_MACHINE_NATIVE_NETBSD_OVERRIDE)
+
+#define AMD64BADMAG(x) ( ((x).f_magic != AMD64MAGIC) \
+ && ((x).f_magic != AMD64_APPLE_MAGIC) \
+ && ((x).f_magic != AMD64_FREEBSD_MAGIC) \
+ && ((x).f_magic != AMD64_LINUX_MAGIC) \
+ && ((x).f_magic != AMD64_NETBSD_MAGIC))
+
#define IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x20b
#define OMAGIC 0404 /* Object files, eg as output. */