mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-20 16:17:38 +00:00
LTO: introduce object file-based on-disk module format.
This format is simply a regular object file with the bitcode stored in a section named ".llvmbc", plus any number of other (non-allocated) sections. One immediate use case for this is to accommodate compilation processes which expect the object file to contain metadata in non-allocated sections, such as the ".go_export" section used by some Go compilers [1], although I imagine that in the future we could consider compiling parts of the module (such as large non-inlinable functions) directly into the object file to improve LTO efficiency. [1] http://golang.org/doc/install/gccgo#Imports Differential Revision: http://reviews.llvm.org/D4371 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@218078 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
+16
-2
@@ -28,8 +28,9 @@ Unlike XML, the bitstream format is a binary encoding, and unlike XML it
|
||||
provides a mechanism for the file to self-describe "abbreviations", which are
|
||||
effectively size optimizations for the content.
|
||||
|
||||
LLVM IR files may be optionally embedded into a `wrapper`_ structure that makes
|
||||
it easy to embed extra data along with LLVM IR files.
|
||||
LLVM IR files may be optionally embedded into a `wrapper`_ structure, or in a
|
||||
`native object file`_. Both of these mechanisms make it easy to embed extra
|
||||
data along with LLVM IR files.
|
||||
|
||||
This document first describes the LLVM bitstream format, describes the wrapper
|
||||
format, then describes the record structure used by LLVM IR files.
|
||||
@@ -460,6 +461,19 @@ to the start of the bitcode stream in the file, and the Size field is the size
|
||||
in bytes of the stream. CPUType is a target-specific value that can be used to
|
||||
encode the CPU of the target.
|
||||
|
||||
.. _native object file:
|
||||
|
||||
Native Object File Wrapper Format
|
||||
=================================
|
||||
|
||||
Bitcode files for LLVM IR may also be wrapped in a native object file
|
||||
(i.e. ELF, COFF, Mach-O). The bitcode must be stored in a section of the
|
||||
object file named ``.llvmbc``. This wrapper format is useful for accommodating
|
||||
LTO in compilation pipelines where intermediate objects must be native object
|
||||
files which contain metadata in other sections.
|
||||
|
||||
Not all tools support this format.
|
||||
|
||||
.. _encoding of LLVM IR:
|
||||
|
||||
LLVM IR Encoding
|
||||
|
||||
Reference in New Issue
Block a user