[cfe-dev] [PATCH/DRAFT] Embed metadata into object file

Christian Dietrich via cfe-dev cfe-dev at lists.llvm.org
Wed Mar 30 06:47:34 PDT 2016


Hi,

so this is my first contribution to LLVM/clang, so I hope I come close
to the required coding standards and guidelines.

First, I will describe the scenario I want to solve: For a few days, the
clang plugin interface allows to execute the a plugin just before the
actual main action (e.g., compiling an translation unit). In my case,
the plugin we're developing will analyze the AST and generate some
information. This information should be available in the generated
object file. So, I had to solve the question: how do I smuggle some
metadata on the module level, from the frontend to the generated object
file (in an hopefully sane and reusable manner).

So, the solution I thought about was the following. The gathered
information is but into a NamedMetadataStringAttr and attached to the
TranslationUnitDecl. This would be, as far as I can see, the first
annotation on the TranslationUnit level. Attributes seem to me the best
solution at that point, since there is already a good infrastructure in
clang.

   TranslationUnitDecl
   | NamedMetadataAttr implicit llvm.extra_section clang.analysis "Information"

The clang CodeGen then generates a named metadata node on the
llvm::Module level:

   !llvm.extra_sections = {!0}
   !0 = !{!"clang.analysis", !"Information"}

The attached patch, then takes all key-value pairs from the named
llvm.extra_sections named metadata, and appends them as zero-terminated
strings to the desired section.

I'm not sure, wheter this is the best solution to the problem, and
wheter it is general enough. I was also thinking about the possibility
to attach LLVM passes from the plugin interface to the clang/CodeGen
backend, but I could not figure out how to do this without breaking all
the used abstraction.

I post this to llvm-dev, as well as, to cfe-dev, since both changes,
although idependend of each other, relate to one another.

chris
-- 
Christian Dietrich, M.Sc. (Wissenschaftlicher Mitarbeiter)
Lehrstuhl für Informatik 4 (Verteilte Systeme und Betriebssysteme)
Friedrich-Alexander-Universität Erlangen-Nürnberg
Martensstr. 1
91058 Erlangen

Tel:    (09131) 85-27280
Fax:    (09131) 85-28732
eMail:  christian.dietrich at fau.de
WWW:    http://www4.cs.fau.de/~dietrich
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-Attach-LLVM-metadata-with-NamedMetadataStringAttr.patch
Type: text/x-diff
Size: 3422 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20160330/e860a8fb/attachment.patch>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-Use-llvm.extra_section-to-smuggle-data-into-object-s.patch
Type: text/x-diff
Size: 9411 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20160330/e860a8fb/attachment-0001.patch>


More information about the cfe-dev mailing list