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

Commit 11f4a795 authored by Yi Kong's avatar Yi Kong Committed by Gerrit Code Review
Browse files

Merge "Do not enable ThinLTO for CFI enabled projects"

parents 96f25347 c702ebd8
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -514,6 +514,7 @@ type ModuleContextIntf interface {
	getVndkExtendsModuleName() string
	isAfdoCompile() bool
	isPgoCompile() bool
	isCfi() bool
	isNDKStubLibrary() bool
	useClangLld(actx ModuleContext) bool
	isForPlatform() bool
@@ -1314,6 +1315,13 @@ func (c *Module) isPgoCompile() bool {
	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 {
	if _, ok := c.compiler.(*stubDecorator); ok {
		return true
@@ -1592,6 +1600,10 @@ func (ctx *moduleContextImpl) isPgoCompile() bool {
	return ctx.mod.isPgoCompile()
}

func (ctx *moduleContextImpl) isCfi() bool {
	return ctx.mod.isCfi()
}

func (ctx *moduleContextImpl) isNDKStubLibrary() bool {
	return ctx.mod.isNDKStubLibrary()
}
+8 −2
Original line number Diff line number Diff line
@@ -136,10 +136,16 @@ func (lto *lto) LTO(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"
	// CFI enables full LTO.
	cfi := ctx.isCfi()
	// Performance and binary size are less important for host binaries.
	host := ctx.Host()
	vndk := ctx.isVndk() // b/169217596
	return GlobalThinLTO(ctx) && !lto.Never() && !lib32 && !host && !vndk
	// FIXME: ThinLTO for VNDK produces different output.
	// b/169217596
	vndk := ctx.isVndk()
	return GlobalThinLTO(ctx) && !lto.Never() && !lib32 && !cfi && !host && !vndk
}

func (lto *lto) FullLTO() bool {