scott.linder added inline comments.

================
Comment at: docs/ClangCommandLineReference.rst:797
+
+Generate a section .LLVM.command.line containing the clang driver command line.
+
----------------
rjmccall wrote:
> 1. Is this section always called `.LLVM.command.line`, or does it differ by 
> target object-file format?
> 2. For that matter, is this actually supported by all object-file formats?
> 3. Please describe the format of the section.  Is it just a flat C string?  
> Is it nul-terminated?  Are different options combined with spaces, and if so, 
> does that mean that interior spaces in command line arguments are impossible 
> to distinguish?  If the latter, I assume that this is required behavior for 
> backward compatibility; please at least apologize for that in the 
> documentation. :)
For (1) I think the answer should be that we emit `.LLVM.command.line` (or 
whatever name we land on) for every object-file format with the concept of 
names for sections.

For (2), I have only implemented this for ELF so far in LLVM. I don't know how 
reasonable that is, and if it isn't I can look at adding it to other common 
object-file formats that LLVM supports.

For (3), my current proposal for the format is the same as the `.comment` 
section for idents: null-surrounded strings. Interior spaces are escaped, in 
the same manner as for the -g variant. There may still be more thought to put 
into the format, as the GCC version null-terminates each individual option; the 
reason I avoided this is that during object linking the options of many 
command-lines simply get mixed together, which seems less than useful.

As an example, for ELF `clang -frecord-command-line -S "foo .c"` produces the 
ASM:

```
.section        .LLVM.command.line,"MS",@progbits,1
.zero   1
.ascii  "/usr/local/bin/clang-8 -frecord-command-line -S foo\\ .c"
.zero   1
```

And for multiple command-lines in a single object (e.g. linking three objects 
with recorded command-lines) this would be:

```
.section        .LLVM.command.line,"MS",@progbits,1
.zero   1
.ascii  "/usr/local/bin/clang-8 -frecord-command-line -c foo\\ .c"
.zero   1
.ascii  "/usr/local/bin/clang-8 -frecord-command-line -some -unique -options -c 
bar.c"
.zero   1
.ascii  "/usr/local/bin/clang-8 -frecord-command-line -something -else -c baz.c"
.zero   1
```

I will try to capture more of this in the documentation.


https://reviews.llvm.org/D54489



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to