[PATCH] D22589: [ELF] - Introduce output section description class for holding section command

Sean Silva via llvm-commits llvm-commits at lists.llvm.org
Wed Jul 20 23:57:22 PDT 2016


On Wed, Jul 20, 2016 at 2:06 PM, Rui Ueyama via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

> ruiu added inline comments.
>
> ================
> Comment at: ELF/LinkerScript.h:49-59
> @@ -48,8 +48,13 @@
>
> +struct OutputSectionDescription {
> +  std::vector<StringRef> Phdrs;
> +  std::vector<uint8_t> Filler;
> +};
> +
>  struct SectionsCommand {
>    SectionsCommandKind Kind;
>    std::vector<StringRef> Expr;
>    StringRef Name;
> -  std::vector<StringRef> Phdrs;
> +  OutputSectionDescription Section;
>  };
>
> ----------------
> I think this is towards the right direction, but it doesn't still reflect
> the structure of SECTIONS linker script command.
>
> As per the linker script manual (#1), SECTIONS command contains one of the
> following sub-commands:
>
>  - an ENTRY command
>  - an overlay description
>  - a symbol assignment
>  - an output section description
>
> Since we do not support the first two, I'll ignore them in this comment.
> So focus on the last two. We can represent the two like this.
>
>   enum SectionsCommandKind { AssignmentKind, DescriptionKind  };
>
>   struct SectionsCommand {
>     SectionsCommandKind Kind;
>     std::vector<StringRef> Expr;  // For AssignmentKind
>     OutputSectionDescription Desc; // For DescriptionKind
>   };
>
> The above struct doesn't have `Name` field because SECTIONS doesn't have a
> name.
>
> Name is instead in output section description as described in #2. To
> reflect that grammar, you want to define a class like this.
>
>   struct OutputSectionDescription {
>     StringRef Name;
>     std::vector<OutputSectionCommand> Commands;
>     std::vector<uint8_t> Filler;
>   };
>
> And then you want to define OutputSectionCommand to reflect
> output-section-command as described in #2.
>
> So the point is to construct an AST whose structure logically matches with
> the grammar.
>

Why don't we just bring back Rafael Auler's parser that was deleted? It was
quite complete IIRC.

-- Sean Silva


>
> #1 https://sourceware.org/binutils/docs/ld/SECTIONS.html#SECTIONS
> #2
> https://sourceware.org/binutils/docs/ld/Output-Section-Description.html#Output-Section-Description
>
>
> https://reviews.llvm.org/D22589
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160720/56611afc/attachment.html>


More information about the llvm-commits mailing list