[llvm-commits] [PATCH] Object File Library

Michael Spencer bigcheesegs at gmail.com
Thu Nov 11 18:23:34 PST 2010


Attached are updated patches to be reviewed. I've split them up into
the generic API, the COFF and ELF implementations, tool changes, and
tests.

This does not currently implement the Serialization/Normalization
split that I reference in my talk. I'm going to wait to do that split
until the line is firmly defined, as I still haven't figured out how
exactly to represent relocation data.

A current major blocker that you can see throughout the ELF
implementation (and ignored in COFF (which I knew much better and
didn't need debugging help)) is how invalid object file errors are
handled. I currently just call report_fatal_error, which is really not
how they should be handled. I've been complaining about the same
problem in the System library on IRC recently too while trying to
clean up the Windows impl.

What I would like to do is use an error object based on the concept of
std::error_code to report both system (IO, memory, syscall), and
"parsing" errors from invalid object files. This should also include
at least the address in the file at which the error occurred. I don't
feel that we need detailed (clang style :P) diagnostics because tools
generate object files, not people. At the same time I don't want to
just dump "object file invalid at 0xdeadbeef" to the user. Using
'std::error_category' would allow mixing the two while proving more
detailed info such as "invalid symbol name string index at
0xblahblah". Also, each object file could use a custom error_category
for special errors. It also allows clients that simply don't care to
just check for success and not pay for message formatting.

- Michael Spencer
-------------- next part --------------
A non-text attachment was scrubbed...
Name: object-S0P0-add-LLVMObject.patch
Type: application/octet-stream
Size: 10876 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20101111/b0d528a8/attachment.obj>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: object-S0P1-add-COFF-support.patch
Type: application/octet-stream
Size: 12666 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20101111/b0d528a8/attachment-0001.obj>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: object-S0P2-add-ELF-support.patch
Type: application/octet-stream
Size: 30098 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20101111/b0d528a8/attachment-0002.obj>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: object-S0P3-llvm-nm.patch
Type: application/octet-stream
Size: 10872 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20101111/b0d528a8/attachment-0003.obj>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: object-S0P4-llvm-objdump.patch
Type: application/octet-stream
Size: 10548 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20101111/b0d528a8/attachment-0004.obj>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: object-S0P5-add-tests.patch
Type: application/octet-stream
Size: 10847 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20101111/b0d528a8/attachment-0005.obj>


More information about the llvm-commits mailing list