Do not enable ThinLTO for CFI enabled projects
CFI projects already use full LTO. Test: GLOBAL_THINLTO=true m Change-Id: I8a57efc237aed977f57dd4040500cc5f84843c3d
This commit is contained in:
12
cc/cc.go
12
cc/cc.go
@@ -514,6 +514,7 @@ type ModuleContextIntf interface {
|
|||||||
getVndkExtendsModuleName() string
|
getVndkExtendsModuleName() string
|
||||||
isAfdoCompile() bool
|
isAfdoCompile() bool
|
||||||
isPgoCompile() bool
|
isPgoCompile() bool
|
||||||
|
isCfi() bool
|
||||||
isNDKStubLibrary() bool
|
isNDKStubLibrary() bool
|
||||||
useClangLld(actx ModuleContext) bool
|
useClangLld(actx ModuleContext) bool
|
||||||
isForPlatform() bool
|
isForPlatform() bool
|
||||||
@@ -1314,6 +1315,13 @@ func (c *Module) isPgoCompile() bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Module) isCfi() bool {
|
||||||
|
if sanitize := c.sanitize; sanitize != nil {
|
||||||
|
return Bool(sanitize.Properties.Sanitize.Cfi)
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
func (c *Module) isNDKStubLibrary() bool {
|
func (c *Module) isNDKStubLibrary() bool {
|
||||||
if _, ok := c.compiler.(*stubDecorator); ok {
|
if _, ok := c.compiler.(*stubDecorator); ok {
|
||||||
return true
|
return true
|
||||||
@@ -1592,6 +1600,10 @@ func (ctx *moduleContextImpl) isPgoCompile() bool {
|
|||||||
return ctx.mod.isPgoCompile()
|
return ctx.mod.isPgoCompile()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (ctx *moduleContextImpl) isCfi() bool {
|
||||||
|
return ctx.mod.isCfi()
|
||||||
|
}
|
||||||
|
|
||||||
func (ctx *moduleContextImpl) isNDKStubLibrary() bool {
|
func (ctx *moduleContextImpl) isNDKStubLibrary() bool {
|
||||||
return ctx.mod.isNDKStubLibrary()
|
return ctx.mod.isNDKStubLibrary()
|
||||||
}
|
}
|
||||||
|
10
cc/lto.go
10
cc/lto.go
@@ -136,10 +136,16 @@ func (lto *lto) LTO(ctx BaseModuleContext) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (lto *lto) DefaultThinLTO(ctx BaseModuleContext) bool {
|
func (lto *lto) DefaultThinLTO(ctx BaseModuleContext) bool {
|
||||||
|
// LP32 has many subtle issues and less test coverage.
|
||||||
lib32 := ctx.Arch().ArchType.Multilib == "lib32"
|
lib32 := ctx.Arch().ArchType.Multilib == "lib32"
|
||||||
|
// CFI enables full LTO.
|
||||||
|
cfi := ctx.isCfi()
|
||||||
|
// Performance and binary size are less important for host binaries.
|
||||||
host := ctx.Host()
|
host := ctx.Host()
|
||||||
vndk := ctx.isVndk() // b/169217596
|
// FIXME: ThinLTO for VNDK produces different output.
|
||||||
return GlobalThinLTO(ctx) && !lto.Never() && !lib32 && !host && !vndk
|
// b/169217596
|
||||||
|
vndk := ctx.isVndk()
|
||||||
|
return GlobalThinLTO(ctx) && !lto.Never() && !lib32 && !cfi && !host && !vndk
|
||||||
}
|
}
|
||||||
|
|
||||||
func (lto *lto) FullLTO() bool {
|
func (lto *lto) FullLTO() bool {
|
||||||
|
Reference in New Issue
Block a user