1import("//compiler-rt/target.gni") 2 3if (current_cpu == "x64") { 4 hwasan_name = "hwasan_aliases" 5} else { 6 hwasan_name = "hwasan" 7} 8 9action("version_script") { 10 script = "//compiler-rt/lib/sanitizer_common/scripts/gen_dynamic_list.py" 11 sources = [ "hwasan.syms.extra" ] 12 deps = [ 13 ":hwasan", 14 ":hwasan_cxx", 15 ] 16 outputs = [ "$target_gen_dir/hwasan.vers" ] 17 args = [ 18 "--version-list", 19 "--extra", 20 rebase_path(sources[0], root_build_dir), 21 rebase_path( 22 "$crt_current_out_dir/libclang_rt.$hwasan_name$crt_current_target_suffix.a", 23 root_build_dir), 24 rebase_path( 25 "$crt_current_out_dir/libclang_rt.${hwasan_name}_cxx$crt_current_target_suffix.a", 26 root_build_dir), 27 "--nm-executable", 28 "nm", 29 "-o", 30 rebase_path(outputs[0], root_build_dir), 31 ] 32} 33 34source_set("sources") { 35 configs -= [ "//llvm/utils/gn/build:llvm_code" ] 36 configs += [ "//llvm/utils/gn/build:crt_code" ] 37 defines = [ "HWASAN_WITH_INTERCEPTORS=1" ] 38 if (current_cpu == "x64") { 39 defines += [ "HWASAN_ALIASING_MODE" ] 40 } 41 deps = [ 42 "//compiler-rt/lib/interception:sources", 43 "//compiler-rt/lib/sanitizer_common:sources", 44 "//compiler-rt/lib/ubsan:sources", 45 ] 46 sources = [ 47 "hwasan.cpp", 48 "hwasan.h", 49 "hwasan_allocator.cpp", 50 "hwasan_allocator.h", 51 "hwasan_dynamic_shadow.cpp", 52 "hwasan_dynamic_shadow.h", 53 "hwasan_exceptions.cpp", 54 "hwasan_flags.h", 55 "hwasan_globals.cpp", 56 "hwasan_globals.h", 57 "hwasan_interceptors.cpp", 58 "hwasan_interceptors_vfork.S", 59 "hwasan_interface_internal.h", 60 "hwasan_linux.cpp", 61 "hwasan_malloc_bisect.h", 62 "hwasan_mapping.h", 63 "hwasan_memintrinsics.cpp", 64 "hwasan_poisoning.cpp", 65 "hwasan_poisoning.h", 66 "hwasan_report.cpp", 67 "hwasan_report.h", 68 "hwasan_setjmp.S", 69 "hwasan_tag_mismatch_aarch64.S", 70 "hwasan_thread.cpp", 71 "hwasan_thread.h", 72 "hwasan_thread_list.cpp", 73 "hwasan_thread_list.h", 74 "hwasan_type_test.cpp", 75 ] 76} 77 78source_set("cxx_sources") { 79 configs -= [ "//llvm/utils/gn/build:llvm_code" ] 80 configs += [ "//llvm/utils/gn/build:crt_code" ] 81 defines = [ "HWASAN_WITH_INTERCEPTORS=1" ] 82 deps = [ "//compiler-rt/lib/ubsan:cxx_sources" ] 83 sources = [ "hwasan_new_delete.cpp" ] 84} 85 86static_library("hwasan") { 87 output_dir = crt_current_out_dir 88 output_name = "clang_rt.$hwasan_name$crt_current_target_suffix" 89 complete_static_lib = true 90 configs -= [ 91 "//llvm/utils/gn/build:llvm_code", 92 "//llvm/utils/gn/build:thin_archive", 93 ] 94 configs += [ "//llvm/utils/gn/build:crt_code" ] 95 deps = [ ":sources" ] 96} 97 98static_library("hwasan_cxx") { 99 output_dir = crt_current_out_dir 100 output_name = "clang_rt.${hwasan_name}_cxx$crt_current_target_suffix" 101 complete_static_lib = true 102 configs -= [ 103 "//llvm/utils/gn/build:llvm_code", 104 "//llvm/utils/gn/build:thin_archive", 105 ] 106 configs += [ "//llvm/utils/gn/build:crt_code" ] 107 deps = [ ":cxx_sources" ] 108} 109 110shared_library("hwasan_shared") { 111 output_dir = crt_current_out_dir 112 output_name = "clang_rt.$hwasan_name$crt_current_target_suffix" 113 configs -= [ "//llvm/utils/gn/build:llvm_code" ] 114 configs += [ "//llvm/utils/gn/build:crt_code" ] 115 deps = [ 116 ":cxx_sources", 117 ":sources", 118 ":version_script", 119 ] 120 inputs = [ "$target_gen_dir/hwasan.vers" ] 121 ldflags = [ 122 "-Wl,--version-script," + rebase_path(inputs[0], root_build_dir), 123 "-Wl,-z,global", 124 ] 125} 126