diff --git a/cc/binary.go b/cc/binary.go index 4c863712d..d4edc1a16 100644 --- a/cc/binary.go +++ b/cc/binary.go @@ -249,7 +249,11 @@ func (binary *binaryDecorator) linkerFlags(ctx ModuleContext, flags Flags) Flags } else { switch ctx.Os() { case android.Android: - flags.DynamicLinker = "/system/bin/linker" + if ctx.bootstrap() { + flags.DynamicLinker = "/system/bin/bootstrap/linker" + } else { + flags.DynamicLinker = "/system/bin/linker" + } if flags.Toolchain.Is64Bit() { flags.DynamicLinker += "64" } diff --git a/cc/cc.go b/cc/cc.go index 062e6d9ff..58ea5e14e 100644 --- a/cc/cc.go +++ b/cc/cc.go @@ -261,6 +261,7 @@ type ModuleContextIntf interface { apexName() string hasStubsVariants() bool isStubs() bool + bootstrap() bool } type ModuleContext interface { @@ -571,6 +572,10 @@ func (c *Module) HasStubsVariants() bool { return false } +func (c *Module) bootstrap() bool { + return Bool(c.Properties.Bootstrap) +} + type baseModuleContext struct { android.BaseContext moduleContextImpl @@ -741,6 +746,10 @@ func (ctx *moduleContextImpl) isStubs() bool { return ctx.mod.IsStubs() } +func (ctx *moduleContextImpl) bootstrap() bool { + return ctx.mod.bootstrap() +} + func newBaseModule(hod android.HostOrDeviceSupported, multilib android.Multilib) *Module { return &Module{ hod: hod, @@ -1553,7 +1562,7 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps { // If not building for APEX, use stubs only when it is from // an APEX (and not from platform) useThisDep = (depInPlatform != depIsStubs) - if c.inRecovery() || Bool(c.Properties.Bootstrap) { + if c.inRecovery() || c.bootstrap() { // However, for recovery or bootstrap modules, // always link to non-stub variant useThisDep = !depIsStubs