diff options
| author | Miguel Ojeda <ojeda@kernel.org> | 2022-05-29 01:10:44 +0200 | 
|---|---|---|
| committer | Miguel Ojeda <ojeda@kernel.org> | 2023-07-21 22:01:50 +0200 | 
| commit | 74b8d324eb77a8f337b35dc68ac91b0c2c06debc (patch) | |
| tree | f16c499a07a18b5ed768bf0a4ec472d01be7a5a2 /compiler/rustc_ty_utils/src/lib.rs | |
| parent | c3c5a5c5f7a0cf9acdfe60440a1e1fa68a1c1278 (diff) | |
| download | rust-74b8d324eb77a8f337b35dc68ac91b0c2c06debc.tar.gz rust-74b8d324eb77a8f337b35dc68ac91b0c2c06debc.zip | |
Support `.comment` section like GCC/Clang (`!llvm.ident`)
Both GCC and Clang write by default a `.comment` section with compiler
information:
```txt
$ gcc -c -xc /dev/null && readelf -p '.comment' null.o
String dump of section '.comment':
  [     1]  GCC: (GNU) 11.2.0
$ clang -c -xc /dev/null && readelf -p '.comment' null.o
String dump of section '.comment':
  [     1]  clang version 14.0.1 (https://github.com/llvm/llvm-project.git c62053979489ccb002efe411c3af059addcb5d7d)
```
They also implement the `-Qn` flag to avoid doing so:
```txt
$ gcc -Qn -c -xc /dev/null && readelf -p '.comment' null.o
readelf: Warning: Section '.comment' was not dumped because it does not exist!
$ clang -Qn -c -xc /dev/null && readelf -p '.comment' null.o
readelf: Warning: Section '.comment' was not dumped because it does not exist!
```
So far, `rustc` only does it for WebAssembly targets and only
when debug info is enabled:
```txt
$ echo 'fn main(){}' | rustc --target=wasm32-unknown-unknown --emit=llvm-ir -Cdebuginfo=2 - && grep llvm.ident rust_out.ll
!llvm.ident = !{!27}
```
In the RFC part of this PR it was decided to always add
the information, which gets us closer to other popular compilers.
An opt-out flag like GCC and Clang may be added later on if deemed
necessary.
Implementation-wise, this covers both `ModuleLlvm::new()` and
`ModuleLlvm::new_metadata()` cases by moving the addition to
`context::create_module` and adds a few test cases.
ThinLTO also sees the `llvm.ident` named metadata duplicated (in
temporary outputs), so this deduplicates it like it is done for
`wasm.custom_sections`. The tests also check this duplication does
not take place.
Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
Diffstat (limited to 'compiler/rustc_ty_utils/src/lib.rs')
0 files changed, 0 insertions, 0 deletions
