[llvm-dev] llvm-objcopy proposal

James Y Knight via llvm-dev llvm-dev at lists.llvm.org
Fri Jun 2 15:52:08 PDT 2017


On Fri, Jun 2, 2017 at 2:34 PM, Ed Maste via llvm-dev <
llvm-dev at lists.llvm.org> wrote:

> One additional use case for you: converting from a binary to an ELF object
> file
> ```
> objcopy -I binary -O elf64-x86-64 foo.bin foo.o
> ```
> This is sometimes used for embedding binary files for use by drivers and
> such.
>

Yea, unfortunately the command-line you actually end up needing is more
like:
  objcopy -I binary -Bi386:x86-64 -Oelf64-x86-64 --rename-section
.data=.rodata,alloc,load,readonly,data,contents --add-section
.note.GNU-stack=/dev/null

Having to manually invoke objcopy and know what to specify for the -B and
-O options, and to know you need the .note.GNU-stack section, and how to
move it into rodata...it's really all quite terrible. Nobody should have to
do that. :(

There's also the "-b binary" flag to GNU ld (both bfd and gold). But, you
typically need to do a dedicated "link" for that. You do:
  ld -r -b binary picture.jpg -o foo.o
How does ld know what output format to use here? It's gotta just choose the
default, which is kinda poor...or the user needs to know how to spell an
"emulation" and output format...

You could imagine trying to use -Wl to put it with the compile command, but
what do you use to switch back to the normal object format?
  gcc main.c -Wl,-b -Wl,binary -Wl,picture.jpg -Wl,-b -Wl,<<something to
undo binary mode?>>

So, anyways, while this is _possible_ with objcopy, it'd sure be nice if
you never needed to use it for that...

(BTW, Apple ld actually has an option "-sectcreate SEGNAME SECTNAME
INPUT_FILE", and the clang driver will pass it through to the linker.)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170602/2a354042/attachment.html>


More information about the llvm-dev mailing list