objdump: Fix PE import table for 64-bit architectures
Corrects objdump's display of PE import tables on 64-bit architectures like aarch64.
GNU objdump has been fixed to correctly display the entire import table for Portable Executable (PE) files on 64-bit architectures. Previously, the output was truncated after the first import entry on architectures other than x86_64. The fix ensures that the import lookup table, which contains 64-bit entries on PE32+ formats, is parsed and displayed correctly.
In Details
The pe_print_idata function in bfd/peXXigen.c incorrectly distinguished between PE32 and PE32+ formats. It used a conditional COFF_WITH_pex64 that only covered x86_64, leading to the import lookup table (idata) being processed with 8-byte entries for other 64-bit architectures (like aarch64, loongarch64, riscv64) even though the PE32+ format specifies 64-bit entries. This commit expands the condition to include COFF_WITH_peAArch64, COFF_WITH_peLoongArch64, and COFF_WITH_peRiscV64.
- objdump
- A standard Unix utility that displays information from object files. It can show symbol tables, sections, relocation entries, and more.
- PE file format
- Portable Executable is a file format for executables, object code, dynamic libraries, and core dumps used in 32-bit and 64-bit versions of Windows operating systems. It's also used by some other systems.
- Import table (idata)
- A section within a PE executable that lists the functions and variables imported from dynamic-link libraries (DLLs). The loader uses this table to resolve external references.
- PE32 vs PE32+
- PE32 refers to the 32-bit version of the PE file format, while PE32+ is the 64-bit version. The 'plus' signifies support for 64-bit addresses and structures.
- aarch64
- The 64-bit ARM architecture.