[compiler-rt] r363483 - [compiler-rt] Respect CMAKE_NM

Shoaib Meenai via llvm-commits llvm-commits at lists.llvm.org
Fri Jun 14 21:40:16 PDT 2019


Author: smeenai
Date: Fri Jun 14 21:40:16 2019
New Revision: 363483

URL: http://llvm.org/viewvc/llvm-project?rev=363483&view=rev
Log:
[compiler-rt] Respect CMAKE_NM

The default nm executable may not be able to handle the architecture
we're building the sanitizers for. Respect CMAKE_NM if it's set to
ensure we're using the correct nm tool. Preserve the existing NM
environment variable override to not break its users.

Differential Revision: https://reviews.llvm.org/D63368

Modified:
    compiler-rt/trunk/cmake/Modules/SanitizerUtils.cmake
    compiler-rt/trunk/lib/sanitizer_common/scripts/gen_dynamic_list.py

Modified: compiler-rt/trunk/cmake/Modules/SanitizerUtils.cmake
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/cmake/Modules/SanitizerUtils.cmake?rev=363483&r1=363482&r2=363483&view=diff
==============================================================================
--- compiler-rt/trunk/cmake/Modules/SanitizerUtils.cmake (original)
+++ compiler-rt/trunk/cmake/Modules/SanitizerUtils.cmake Fri Jun 14 21:40:16 2019
@@ -6,6 +6,12 @@ set(SANITIZER_GEN_DYNAMIC_LIST
 set(SANITIZER_LINT_SCRIPT
   ${COMPILER_RT_SOURCE_DIR}/lib/sanitizer_common/scripts/check_lint.sh)
 
+if(CMAKE_NM)
+  set(SANITIZER_NM "${CMAKE_NM}")
+else()
+  set(SANITIZER_NM nm)
+endif()
+
 # Create a target "<name>-<arch>-symbols" that would generate the list of
 # symbols that need to be exported from sanitizer runtime "<name>". Function
 # interceptors are exported automatically, user can also provide files with
@@ -30,7 +36,7 @@ macro(add_sanitizer_rt_symbols name)
     add_custom_command(OUTPUT ${stamp}
       COMMAND ${PYTHON_EXECUTABLE}
         ${SANITIZER_GEN_DYNAMIC_LIST} ${extra_args} $<TARGET_FILE:${target_name}>
-        -o $<TARGET_FILE:${target_name}>.syms
+        --nm-executable "${SANITIZER_NM}" -o $<TARGET_FILE:${target_name}>.syms
       COMMAND ${CMAKE_COMMAND} -E touch ${stamp}
       DEPENDS ${target_name} ${SANITIZER_GEN_DYNAMIC_LIST} ${ARG_EXTRA}
       WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
@@ -80,7 +86,7 @@ macro(add_sanitizer_rt_version_list name
   add_custom_command(OUTPUT ${vers}
     COMMAND ${PYTHON_EXECUTABLE}
       ${SANITIZER_GEN_DYNAMIC_LIST} --version-list ${args}
-      -o ${vers}
+      --nm-executable "${SANITIZER_NM}" -o ${vers}
     DEPENDS ${SANITIZER_GEN_DYNAMIC_LIST} ${ARG_EXTRA} ${ARG_LIBS}
     WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
     COMMENT "Generating version list for ${name}"

Modified: compiler-rt/trunk/lib/sanitizer_common/scripts/gen_dynamic_list.py
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/scripts/gen_dynamic_list.py?rev=363483&r1=363482&r2=363483&view=diff
==============================================================================
--- compiler-rt/trunk/lib/sanitizer_common/scripts/gen_dynamic_list.py (original)
+++ compiler-rt/trunk/lib/sanitizer_common/scripts/gen_dynamic_list.py Fri Jun 14 21:40:16 2019
@@ -61,9 +61,9 @@ versioned_functions = set(['memcpy', 'pt
                            'pthread_cond_wait', 'realpath',
                            'sched_getaffinity'])
 
-def get_global_functions(library):
+def get_global_functions(nm_executable, library):
   functions = []
-  nm = os.environ.get('NM', 'nm')
+  nm = os.environ.get('NM', nm_executable)
   nm_proc = subprocess.Popen([nm, library], stdout=subprocess.PIPE,
                              stderr=subprocess.PIPE)
   nm_out = nm_proc.communicate()[0].decode().split('\n')
@@ -84,6 +84,7 @@ def main(argv):
   parser.add_argument('--version-list', action='store_true')
   parser.add_argument('--extra', default=[], action='append')
   parser.add_argument('libraries', default=[], nargs='+')
+  parser.add_argument('--nm-executable', required=True)
   parser.add_argument('-o', '--output', required=True)
   args = parser.parse_args()
 
@@ -91,7 +92,7 @@ def main(argv):
 
   all_functions = []
   for library in args.libraries:
-    all_functions.extend(get_global_functions(library))
+    all_functions.extend(get_global_functions(args.nm_executable, library))
   function_set = set(all_functions)
   for func in all_functions:
     # Export new/delete operators.




More information about the llvm-commits mailing list