Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1799f9d7 authored by Pirama Arumuga Nainar's avatar Pirama Arumuga Nainar
Browse files

[rust/coverage] Pass -z,nostart-stop-gc to the linker

Bug: http://b/199203503

Upstream LLVM change 6d2d3bd0a6 made -z,start-stop-gc the default.  It
drops metadata sections like __llvm_prf_data unless they are marked
SHF_GNU_RETAIN.  https://reviews.llvm.org/D97448 marks generated
sections, including __llvm_prf_data as SHF_GNU_RETAIN.  However this
change is not in the Rust toolchain.  Since we link Rust libs with new
lld, we should use nostart-stop-gc until the Rust toolchain updates past
D97448.

Test: m unicode-xid_device_test_src_lib and verify that they have the
__llvm_prf_data section.

Change-Id: I55eb3622dae9bd789fbacfe708600316102c365f
parent eee562f9
Loading
Loading
Loading
Loading
+12 −1
Original line number Diff line number Diff line
@@ -57,7 +57,18 @@ func (cov *coverage) flags(ctx ModuleContext, flags Flags, deps PathDeps) (Flags
		flags.RustFlags = append(flags.RustFlags,
			"-Z instrument-coverage", "-g")
		flags.LinkFlags = append(flags.LinkFlags,
			profileInstrFlag, "-g", coverage.OutputFile().Path().String(), "-Wl,--wrap,open")
			profileInstrFlag, "-g", coverage.OutputFile().Path().String(), "-Wl,--wrap,open",
			// Upstream LLVM change 6d2d3bd0a6 made
			// -z,start-stop-gc the default.  It drops metadata
			// sections like __llvm_prf_data unless they are marked
			// SHF_GNU_RETAIN.  https://reviews.llvm.org/D97448
			// marks generated sections, including __llvm_prf_data
			// as SHF_GNU_RETAIN.  However this change is not in
			// the Rust toolchain.  Since we link Rust libs with
			// new lld, we should use nostart-stop-gc until the
			// Rust toolchain updates past D97448.
			"-Wl,-z,nostart-stop-gc",
		)
		deps.StaticLibs = append(deps.StaticLibs, coverage.OutputFile().Path())
	}