From 5922333d5c52226cdae4f3346a0843211040f9bb Mon Sep 17 00:00:00 2001 From: Spandan Das Date: Thu, 15 Aug 2024 21:54:09 +0000 Subject: [PATCH] Skip `-Wl,--version-script` on libclang_rt.* stubs (temp hack) The checked-in libclang_rt.* prebuilts do not contain versioned symbols, but the autogenerated map.txt file for these libraries contain versions e.g. LIBCLANG_RT_ASAN { global: ... } ``` This causes a discrepancy between the symbols in the stubs and impl variants of these libraries. After https://r.android.com/3236596 is submitted and a new set of libclang_rt.* prebuilts are generated, this discrepancy will go away. For now, skip `-Wl,version-script` when generating the stub variants of these libraries to prevent link errors at build time. Test: lunch aosp_panther_hwasan-trunk_staging-userdebug && m crash_dump Bug: 3222365 Change-Id: Ic1e06cb58ec33b761136ac325f191da7ac900151 --- cc/prebuilt.go | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/cc/prebuilt.go b/cc/prebuilt.go index 1c98aed87..299fb5148 100644 --- a/cc/prebuilt.go +++ b/cc/prebuilt.go @@ -16,6 +16,7 @@ package cc import ( "path/filepath" + "strings" "github.com/google/blueprint/proptools" @@ -118,6 +119,22 @@ func (p *prebuiltLibraryLinker) link(ctx ModuleContext, // Stub variants will create a stub .so file from stub .c files if p.buildStubs() && objs.objFiles != nil { // TODO (b/275273834): Make objs.objFiles == nil a hard error when the symbol files have been added to module sdk. + + // The map.txt files of libclang_rt.* contain version information, but the checked in .so files do not. + // e.g. libclang_rt.* libs impl + // $ nm -D prebuilts/../libclang_rt.hwasan-aarch64-android.so + // __hwasan_init + + // stubs generated from .map.txt + // $ nm -D out/soong/.intermediates/..//libclang_rt.hwasan-aarch64-android.so + // __hwasan_init@@LIBCLANG_RT_ASAN + + // Special-case libclang_rt.* libs to account for this discrepancy. + // TODO (spandandas): Remove this special case https://r.android.com/3236596 has been submitted, and a new set of map.txt + // files of libclang_rt.* libs have been generated. + if strings.Contains(ctx.ModuleName(), "libclang_rt.") { + p.versionScriptPath = android.OptionalPathForPath(nil) + } return p.linkShared(ctx, flags, deps, objs) }