Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[RFC] Support .comment section like GCC/Clang (!llvm.ident) #97550

Merged
merged 1 commit into from
Jul 21, 2023

Commits on Jul 21, 2023

  1. 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>
    ojeda committed Jul 21, 2023
    Configuration menu
    Copy the full SHA
    74b8d32 View commit details
    Browse the repository at this point in the history