[PATCH] D113993: WIP: [clang] customizable build-id style

Konrad Wilhelm Kleine via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Nov 16 06:21:16 PST 2021


kwk created this revision.
kwk added reviewers: tbaeder, tstellar.
kwk added projects: clang, lld.
Herald added a subscriber: mgorny.
kwk requested review of this revision.
Herald added a subscriber: cfe-commits.

**This is work in progress. I'm evaluating the patch now.**

This change introduces the possibility to specify a style of build-id
generation that must be one of "md5", "sha1", "fast", "uuid", or
"0x<hexstring>". To set this style, one can set
`ENABLE_LINKER_BUILD_ID_STYLE`. Setting the style will  automatically
turn `ON` `ENABLE_LINKER_BUILD_ID`.

The effect is that invocations of the compiler will link with
`--build-id=<style>` by default, where `<style>` must be one of the
above.

Background:
===========

Currently you can have clang invoke the linker (e.g. ld or lld)
automatically with `--build-id` when the CMake boolean option
`ENABLE_LINKER_BUILD_ID` is set to `ON`.

There's currently no way to specify what type of build-id generation
algorithm (e.g. md5, sha1, uuuid, fast) to choose by default. In [1]
we can see that the default build-id generation algorithm being
choosen is not large enough to because of overlaps with other build
ids.

An upstream bug for not choosing a different build-id generation
algorithm by default is shown in [2].

[1]: https://bugzilla.redhat.com/show_bug.cgi?id=2023666
[2]: https://bugs.llvm.org/show_bug.cgi?id=44138


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D113993

Files:
  clang/CMakeLists.txt
  clang/include/clang/Config/config.h.cmake
  clang/lib/Driver/ToolChains/Hurd.cpp


Index: clang/lib/Driver/ToolChains/Hurd.cpp
===================================================================
--- clang/lib/Driver/ToolChains/Hurd.cpp
+++ clang/lib/Driver/ToolChains/Hurd.cpp
@@ -82,7 +82,11 @@
   const std::string MultiarchTriple = getMultiarchTriple(D, Triple, SysRoot);
 
 #ifdef ENABLE_LINKER_BUILD_ID
-  ExtraOpts.push_back("--build-id");
+  #ifdef ENABLE_LINKER_BUILD_ID_STYLE
+    ExtraOpts.push_back("--build-id=" ENABLE_LINKER_BUILD_ID_STYLE);
+  #else
+    ExtraOpts.push_back("--build-id");
+  #endif
 #endif
 
   Generic_GCC::AddMultilibPaths(D, SysRoot, OSLibDir, MultiarchTriple, Paths);
Index: clang/include/clang/Config/config.h.cmake
===================================================================
--- clang/include/clang/Config/config.h.cmake
+++ clang/include/clang/Config/config.h.cmake
@@ -69,9 +69,12 @@
 /* Linker version detected at compile time. */
 #cmakedefine HOST_LINK_VERSION "${HOST_LINK_VERSION}"
 
-/* pass --build-id to ld */
+/* Pass --build-id or --build-id=<style> to linker (e.g. ld or ldd) by default */
 #cmakedefine ENABLE_LINKER_BUILD_ID
 
+/* Set --build-id=<style> */
+#cmakedefine ENABLE_LINKER_BUILD_ID_STYLE "${ENABLE_LINKER_BUILD_ID_STYLE}"
+
 /* enable x86 relax relocations by default */
 #cmakedefine01 ENABLE_X86_RELAX_RELOCATIONS
 
Index: clang/CMakeLists.txt
===================================================================
--- clang/CMakeLists.txt
+++ clang/CMakeLists.txt
@@ -219,7 +219,23 @@
 set(DEFAULT_SYSROOT "" CACHE STRING
   "Default <path> to all compiler invocations for --sysroot=<path>." )
 
-set(ENABLE_LINKER_BUILD_ID OFF CACHE BOOL "pass --build-id to ld")
+set(ENABLE_LINKER_BUILD_ID OFF CACHE BOOLEAN
+  "Pass --build-id or --build-id=<style> to linker (e.g. ld or lld). See also ENABLE_LINKER_BUILD_ID_STYLE.")
+
+set(ENABLE_LINKER_BUILD_ID_STYLE "" CACHE STRING
+  "enables ENABLE_LINKER_BUILD_ID (if not already done) and passes the style to --build-id=<style>" 
+
+if (NOT(ENABLE_LINKER_BUILD_ID_STYLE STREQUAL ""))
+  if (NOT(ENABLE_LINKER_BUILD_ID))
+    message(WARNING "Turning on ENABLE_LINKER_BUILD_ID because ENABLE_LINKER_BUILD_ID_STYLE style was specified")
+    set(ENABLE_LINKER_BUILD_ID ON)
+  endif()
+  if (NOT("${ENABLE_LINKER_BUILD_ID_STYLE}" MATCHES "^(fast|md5|sha1|uuid|0x[0-9A-Fa-f]+)$"))
+    message(WARNING "Allowed values for ENABLE_LINKER_BUILD_ID_STYLE are "
+"\"sha1\", \"md5\" or \"uuid\", \"fast\","\"0x<hexstring>\" "
+but the current value is: ${ENABLE_LINKER_BUILD_ID_STYLE}")
+  endif()
+endif()  
 
 set(ENABLE_X86_RELAX_RELOCATIONS ON CACHE BOOL
     "enable x86 relax relocations by default")


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D113993.387600.patch
Type: text/x-patch
Size: 2632 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20211116/542d644a/attachment.bin>


More information about the cfe-commits mailing list