| Index: src/IceELFObjectWriter.h
|
| diff --git a/src/IceELFObjectWriter.h b/src/IceELFObjectWriter.h
|
| index c1bfb746f5cc3db6364071620ccb2878887d2792..60ed60c57163a802ed4124067f362a3c6d94f151 100644
|
| --- a/src/IceELFObjectWriter.h
|
| +++ b/src/IceELFObjectWriter.h
|
| @@ -24,11 +24,11 @@ using namespace llvm::ELF;
|
|
|
| namespace Ice {
|
|
|
| -/// Higher level ELF object writer. Manages section information and writes
|
| -/// the final ELF object. The object writer will write to file the code
|
| -/// and data as it is being defined (rather than keep a copy).
|
| -/// After all definitions are written out, it will finalize the bookkeeping
|
| -/// sections and write them out. Expected usage:
|
| +/// Higher level ELF object writer. Manages section information and writes the
|
| +/// final ELF object. The object writer will write to file the code and data as
|
| +/// it is being defined (rather than keep a copy). After all definitions are
|
| +/// written out, it will finalize the bookkeeping sections and write them out.
|
| +/// Expected usage:
|
| ///
|
| /// (1) writeInitialELFHeader (invoke once)
|
| /// (2) writeDataSection (may be invoked multiple times, as long as
|
| @@ -38,9 +38,9 @@ namespace Ice {
|
| /// (5) setUndefinedSyms (invoke once)
|
| /// (6) writeNonUserSections (invoke once)
|
| ///
|
| -/// The requirement for writeDataSection to be invoked only once can
|
| -/// be relaxed if using -fdata-sections. The requirement to invoke only once
|
| -/// without -fdata-sections is so that variables that belong to each possible
|
| +/// The requirement for writeDataSection to be invoked only once can be relaxed
|
| +/// if using -fdata-sections. The requirement to invoke only once without
|
| +/// -fdata-sections is so that variables that belong to each possible
|
| /// SectionType are contiguous in the file. With -fdata-sections, each global
|
| /// variable is in a separate section and therefore the sections will be
|
| /// trivially contiguous.
|
| @@ -53,27 +53,27 @@ public:
|
| ELFObjectWriter(GlobalContext &Ctx, ELFStreamer &Out);
|
|
|
| /// Write the initial ELF header. This is just to reserve space in the ELF
|
| - /// file. Reserving space allows the other functions to write text
|
| - /// and data directly to the file and get the right file offsets.
|
| + /// file. Reserving space allows the other functions to write text and data
|
| + /// directly to the file and get the right file offsets.
|
| void writeInitialELFHeader();
|
|
|
| - /// Copy initializer data for globals to file and note the offset and size
|
| - /// of each global's definition in the symbol table.
|
| - /// Use the given target's RelocationKind for any relocations.
|
| + /// Copy initializer data for globals to file and note the offset and size of
|
| + /// each global's definition in the symbol table. Use the given target's
|
| + /// RelocationKind for any relocations.
|
| void writeDataSection(const VariableDeclarationList &Vars,
|
| FixupKind RelocationKind,
|
| const IceString &SectionSuffix);
|
|
|
| /// Copy data of a function's text section to file and note the offset of the
|
| - /// symbol's definition in the symbol table.
|
| - /// Copy the text fixups for use after all functions are written.
|
| - /// The text buffer and fixups are extracted from the Assembler object.
|
| + /// symbol's definition in the symbol table. Copy the text fixups for use
|
| + /// after all functions are written. The text buffer and fixups are extracted
|
| + /// from the Assembler object.
|
| void writeFunctionCode(const IceString &FuncName, bool IsInternal,
|
| const Assembler *Asm);
|
|
|
| - /// Queries the GlobalContext for constant pools of the given type
|
| - /// and writes out read-only data sections for those constants. This also
|
| - /// fills the symbol table with labels for each constant pool entry.
|
| + /// Queries the GlobalContext for constant pools of the given type and writes
|
| + /// out read-only data sections for those constants. This also fills the
|
| + /// symbol table with labels for each constant pool entry.
|
| template <typename ConstType> void writeConstantPool(Type Ty);
|
|
|
| /// Write a jump table and register fixups for the target addresses.
|
| @@ -82,12 +82,12 @@ public:
|
| /// Populate the symbol table with a list of external/undefined symbols.
|
| void setUndefinedSyms(const ConstantList &UndefSyms);
|
|
|
| - /// Do final layout and write out the rest of the object file.
|
| - /// Finally, patch up the initial ELF header with the final info.
|
| + /// Do final layout and write out the rest of the object file. Finally, patch
|
| + /// up the initial ELF header with the final info.
|
| void writeNonUserSections();
|
|
|
| - /// Which type of ELF section a global variable initializer belongs to.
|
| - /// This is used as an array index so should start at 0 and be contiguous.
|
| + /// Which type of ELF section a global variable initializer belongs to. This
|
| + /// is used as an array index so should start at 0 and be contiguous.
|
| enum SectionType { ROData = 0, Data, BSS, NumSectionTypes };
|
|
|
| private:
|
| @@ -120,25 +120,25 @@ private:
|
| Elf64_Xword ShFlags, Elf64_Xword ShAddralign,
|
| Elf64_Xword ShEntsize);
|
|
|
| - /// Create a relocation section, given the related section
|
| - /// (e.g., .text, .data., .rodata).
|
| + /// Create a relocation section, given the related section (e.g., .text,
|
| + /// .data., .rodata).
|
| ELFRelocationSection *
|
| createRelocationSection(const ELFSection *RelatedSection);
|
|
|
| - /// Align the file position before writing out a section's data,
|
| - /// and return the position of the file.
|
| + /// Align the file position before writing out a section's data, and return
|
| + /// the position of the file.
|
| Elf64_Off alignFileOffset(Elf64_Xword Align);
|
|
|
| - /// Assign an ordering / section numbers to each section.
|
| - /// Fill in other information that is only known near the end
|
| - /// (such as the size, if it wasn't already incrementally updated).
|
| - /// This then collects all sections in the decided order, into one vector,
|
| - /// for conveniently writing out all of the section headers.
|
| + /// Assign an ordering / section numbers to each section. Fill in other
|
| + /// information that is only known near the end (such as the size, if it
|
| + /// wasn't already incrementally updated). This then collects all sections in
|
| + /// the decided order, into one vector, for conveniently writing out all of
|
| + /// the section headers.
|
| void assignSectionNumbersInfo(SectionList &AllSections);
|
|
|
| - /// This function assigns .foo and .rel.foo consecutive section numbers.
|
| - /// It also sets the relocation section's sh_info field to the related
|
| - /// section's number.
|
| + /// This function assigns .foo and .rel.foo consecutive section numbers. It
|
| + /// also sets the relocation section's sh_info field to the related section's
|
| + /// number.
|
| template <typename UserSectionList>
|
| void assignRelSectionNumInPairs(SizeT &CurSectionNumber,
|
| UserSectionList &UserSections,
|
| @@ -156,9 +156,9 @@ private:
|
| FixupKind RelocationKind,
|
| const IceString &SectionSuffix);
|
|
|
| - /// Write the final relocation sections given the final symbol table.
|
| - /// May also be able to seek around the file and resolve function calls
|
| - /// that are for functions within the same section.
|
| + /// Write the final relocation sections given the final symbol table. May also
|
| + /// be able to seek around the file and resolve function calls that are for
|
| + /// functions within the same section.
|
| void writeAllRelocationSections();
|
| void writeRelocationSections(RelSectionList &RelSections);
|
|
|
|
|