arm-pe objdump -P

Message ID ZHV6WtRazoQ6jCEo@squeak.grove.modra.org
State Unresolved
Headers
Series arm-pe objdump -P |

Checks

Context Check Description
snail/binutils-gdb-check warning Git am fail log

Commit Message

Alan Modra May 30, 2023, 4:23 a.m. UTC
  arm-pe looks to be a very old PE implementation, incompatible with
current arm-wince-pe.  arm-pe has different relocations and uses
ARMMAGIC which has this comment: "I just made this up".  Well, OK, I
don't know the history but it was probably before Microsoft "just made
up" their constants for ARM windows CE.

This patch supports objdump -P for arm-pe, and another magic constant
that may appear in object files.  (I don't think binutils generates
files using ARMV7PEMAGIC aka IMAGE_FILE_MACHINE_ARMNT.)

	* od-pe.c (is_pe_object_magic): Handle IMAGE_FILE_MACHINE_ARMNT
	and ARMMAGIC.
  

Comments

Pedro Alves May 30, 2023, 12:53 p.m. UTC | #1
On 2023-05-30 5:23 a.m., Alan Modra via Binutils wrote:
> arm-pe looks to be a very old PE implementation, incompatible with
> current arm-wince-pe.  arm-pe has different relocations and uses
> ARMMAGIC which has this comment: "I just made this up".  Well, OK, I
> don't know the history but it was probably before Microsoft "just made
> up" their constants for ARM windows CE.
> 
> This patch supports objdump -P for arm-pe, and another magic constant
> that may appear in object files.  (I don't think binutils generates
> files using ARMV7PEMAGIC aka IMAGE_FILE_MACHINE_ARMNT.)
> 
> 	* od-pe.c (is_pe_object_magic): Handle IMAGE_FILE_MACHINE_ARMNT
> 	and ARMMAGIC.


IIRC, there used to be an arm-epoc-pe target for Symbian OS (which has since
been eliminated), and arm-pe ended up this weird thing that nobody really knew
what it was for.

/me googles

I found some more info in this old discussion:

  https://binutils.sourceware.narkive.com/nzAvx0GG/patch-correct-arm-rva32-value-in-pe-images-generation-for-arm-windows-ce

Note Nick's remark back then:

 "The arm-epoc-pe target was for the SymbianOS. The epoc qualifier was added
 to distinguish it from the WinCE targeted PE format version. Ideally arm-pe
 should have been dropped, but it never was."

(I haven't done anything with ARM Windows CE in over a decade, and
note GCC has dropped support for it some time ago.  GDBserver support has been
dropped too, only cross debugging support remains in GDB proper, at least, until
someone stumbles on it.)
  
Alan Modra May 31, 2023, 2:02 a.m. UTC | #2
On Tue, May 30, 2023 at 01:53:02PM +0100, Pedro Alves wrote:
> IIRC, there used to be an arm-epoc-pe target for Symbian OS (which has since
> been eliminated), and arm-pe ended up this weird thing that nobody really knew
> what it was for.

Yes, arm-pe probably should be obsoleted.  It's older than
arm-epoc-pe.  When both targets existed, arm-epoc-pe was the same as
arm-pe except that the former defined ARM_COFF_BUGFIX.
  

Patch

diff --git a/binutils/od-pe.c b/binutils/od-pe.c
index 5f03bd8c3da..5a57a6e7486 100644
--- a/binutils/od-pe.c
+++ b/binutils/od-pe.c
@@ -450,6 +450,7 @@  is_pe_object_magic (unsigned short magic)
     case IMAGE_FILE_MACHINE_ALPHA:
     case IMAGE_FILE_MACHINE_ARM:
     case IMAGE_FILE_MACHINE_ARM64:
+    case IMAGE_FILE_MACHINE_ARMNT:
     case IMAGE_FILE_MACHINE_I386:
     case IMAGE_FILE_MACHINE_IA64:
     case IMAGE_FILE_MACHINE_POWERPC:
@@ -457,6 +458,7 @@  is_pe_object_magic (unsigned short magic)
     case IMAGE_FILE_MACHINE_AMD64:
       // FIXME: Add more machine numbers.
       return true;
+    case 0x0a00: /* ARMMAGIC */
     case 0x0500: /* SH_ARCH_MAGIC_BIG */
     case 0x0550: /* SH_ARCH_MAGIC_LITTLE */
     case 0x0b00: /* MCore */