GNU objcopy documents that -B is only useful with architecture-less
input (i.e. "binary" or "ihex"). After D67144, -O defaults to -I, and
-B is essentially a NOP.
- If -O is binary/ihex, GNU objcopy ignores -B.
- If -O is elf*, -B provides the e_machine field in GNU objcopy.
So to convert a blob to an ELF, -I binary -B i386:x86-64 -O elf64-x86-64 has to be specified.
-I binary -B i386:x86-64 -O elf64-x86-64 creates an ELF with its
e_machine field set to EM_NONE in GNU objcopy, but a regular x86_64 ELF
in elftoolchain elfcopy. Follow the elftoolchain approach (ignoring -B)
to simplify code. Users that expect their command line portable should
specify -B.