Hints on investigating 'invalid ELF header' on ia64-hp-openvms

David SAUVAGE - AdaLabs Ltd david.sauvage@adalabs.com
Thu Jul 30 10:51:00 GMT 2015


I have the following [1] run from Linux readelf on the simple.o created 
from VMS, and the following [2] from analyze/object run from VMS.

[1] $ readelf -a simple.o
ELF Header:
   Magic:   7f 45 4c 46 02 01 01 0d 02 00 00 00 00 00 00 00
   Class:                             ELF64
   Data:                              2's complement, little endian
   Version:                           1 (current)
   OS/ABI:                            VMS - OpenVMS
   ABI Version:                       2
   Type:                              REL (Relocatable file)
   Machine:                           Intel IA-64
   Version:                           0x1
   Entry point address:               0x0
   Start of program headers:          0 (bytes into file)
   Start of section headers:          496 (bytes into file)
   Flags:                             0x1000010, 64-bit
   Size of this header:               72 (bytes)
   Size of program headers:           0 (bytes)
   Number of program headers:         0
   Size of section headers:           64 (bytes)
   Number of section headers:         13
   Section header string table index: 10

[2] $ analyze/object simple.o

[...] skipped

This is an OpenVMS IA64 (Elf format) object file

Elf Header Information, at file address 0.

     Class:                                      ELF-64
     Data:                                       Little-endian byte order
     Elf Header Version:                         1.
     OS ABI:                                     OpenVMS
     OS ABI Version:                             2.
     Type:                                       Object
     Machine Architecture:                       IA_64
     Elf File Version:                           1.
     VMS Completion Code:                        SUCCESS

[...] skipped

On 07/29/2015 07:18 PM, h.becker wrote:
> The vms linker complains about the 'magic number' of your object module
> SIMPLE.O. Use readelf or the vms tool analyze/object to find/compare
> what the magic should be - and keep in mind, that on vms object modules
> can be concatenated: which means, in an object file the first byte after
> an object module is interpreted as the start of the next ELF header:
>
> $ readelf -h shr.obj
> ELF Header:
>    Magic:   7f 45 4c 46 02 01 01 0d 02 00 00 00 00 00 00 00
>    Class:                             ELF64
>    Data:                              2's complement, little endian
>    Version:                           1 (current)
>    OS/ABI:                            VMS - OpenVMS
>    ABI Version:                       2
>    Type:                              REL (Relocatable file)
>    Machine:                           Intel IA-64
>    Version:                           0x1
>    Entry point address:               0x0
>    Start of program headers:          0 (bytes into file)
>    Start of section headers:          1648 (bytes into file)
>    Flags:                             0x1000014, 64-bit, vms_linkages
>    Size of this header:               64 (bytes)
>    Size of program headers:           0 (bytes)
>    Number of program headers:         0
>    Size of section headers:           64 (bytes)
>    Number of section headers:         18
>    Section header string table index: 1
> $
>
>
>
> On 07/29/2015 10:51 AM, David SAUVAGE - AdaLabs Ltd wrote:
>>
>> Hi,
>>
>> Using a crossed native build of binutils running on ia64-hp-openvms,
>> object file built [2] from assembly file [3] is invalid [1]
>>
>> As the cross binutils build produces valid object files on the target,
>> the issue seems to be related to the crossed native build process.
>> I am looking for hints on how to further investigate and solve this issue.
>>
>> Best regards,
>>
>> [1]
>>
>> ||$ MCR DISK$USERS:[ADALABS]ld.exe -v simple.o -o simple.exe
>> $ link /exe=SIMPLE.EXE simple.opt_tmpfile/opt
>> |%ILINK-E-INVLDHDR, invalid ELF header; field 'ehdr$b_ei_mag0' has
>> invalid value
>> %X00
>>          module: <unassigned>
>>          file: DISK$USERS:[ADALABS]SIMPLE.O;6|
>>
>>
>> [2]
>>
>> |$ MCR DISK$USERS:[ADALABS]as.exe  -o simple.o simple.s|
>>
>>
>> [3] simple.s
>>
>> |     .file    "simple.c"
>>      .pred.safe_across_calls p1-p5,p16-p63
>>      .text
>>      .align 16
>>      .global main#
>>      .type    main#, @function
>>      .proc main#
>> main:
>>      .prologue 2, 2
>>      .vframe r2
>>      mov r2 = r12
>>      .body
>>      nop 0
>>      ;;
>>      .restore sp
>>      mov r12 = r2
>>      br.ret.sptk.many b0
>>      ;;
>>      .endp main#
>>      .ident    "GCC: (GNU) "|
>>
>>
>>
>>
>>



More information about the Binutils mailing list