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

Commit f77d3804 authored by Colin Cross's avatar Colin Cross Committed by Gerrit Code Review
Browse files

Merge changes from topic "host_bionic_no_inject"

* changes:
  Give extracted linker sections pretty names
  Stop injecting symbols into host bionic binaries
parents d51502d2 009f3df3
Loading
Loading
Loading
Loading
+13 −11
Original line number Diff line number Diff line
@@ -401,16 +401,18 @@ func (binary *binaryDecorator) link(ctx ModuleContext,
		}
	}

	var validations android.WritablePaths

	// Handle host bionic linker symbols.
	if ctx.Os() == android.LinuxBionic && !binary.static() {
		injectedOutputFile := outputFile
		outputFile = android.PathForModuleOut(ctx, "prelinker", fileName)
		verifyFile := android.PathForModuleOut(ctx, "host_bionic_verify.stamp")

		if !deps.DynamicLinker.Valid() {
			panic("Non-static host bionic modules must have a dynamic linker")
		}

		binary.injectHostBionicLinkerSymbols(ctx, outputFile, deps.DynamicLinker.Path(), injectedOutputFile)
		binary.verifyHostBionicLinker(ctx, outputFile, deps.DynamicLinker.Path(), verifyFile)
		validations = append(validations, verifyFile)
	}

	var sharedLibs android.Paths
@@ -430,7 +432,7 @@ func (binary *binaryDecorator) link(ctx ModuleContext,
	// Register link action.
	transformObjToDynamicBinary(ctx, objs.objFiles, sharedLibs, deps.StaticLibs,
		deps.LateStaticLibs, deps.WholeStaticLibs, linkerDeps, deps.CrtBegin, deps.CrtEnd, true,
		builderFlags, outputFile, nil)
		builderFlags, outputFile, nil, validations)

	objs.coverageFiles = append(objs.coverageFiles, deps.StaticLibObjs.coverageFiles...)
	objs.coverageFiles = append(objs.coverageFiles, deps.WholeStaticLibObjs.coverageFiles...)
@@ -532,19 +534,19 @@ func (binary *binaryDecorator) hostToolPath() android.OptionalPath {
}

func init() {
	pctx.HostBinToolVariable("hostBionicSymbolsInjectCmd", "host_bionic_inject")
	pctx.HostBinToolVariable("verifyHostBionicCmd", "host_bionic_verify")
}

var injectHostBionicSymbols = pctx.AndroidStaticRule("injectHostBionicSymbols",
var verifyHostBionic = pctx.AndroidStaticRule("verifyHostBionic",
	blueprint.RuleParams{
		Command:     "$hostBionicSymbolsInjectCmd -i $in -l $linker -o $out",
		CommandDeps: []string{"$hostBionicSymbolsInjectCmd"},
		Command:     "$verifyHostBionicCmd -i $in -l $linker && touch $out",
		CommandDeps: []string{"$verifyHostBionicCmd"},
	}, "linker")

func (binary *binaryDecorator) injectHostBionicLinkerSymbols(ctx ModuleContext, in, linker android.Path, out android.WritablePath) {
func (binary *binaryDecorator) verifyHostBionicLinker(ctx ModuleContext, in, linker android.Path, out android.WritablePath) {
	ctx.Build(pctx, android.BuildParams{
		Rule:        injectHostBionicSymbols,
		Description: "inject host bionic symbols",
		Rule:        verifyHostBionic,
		Description: "verify host bionic",
		Input:       in,
		Implicit:    linker,
		Output:      out,
+3 −1
Original line number Diff line number Diff line
@@ -731,7 +731,8 @@ func transformObjToStaticLib(ctx android.ModuleContext,
// and shared libraries, to a shared library (.so) or dynamic executable
func transformObjToDynamicBinary(ctx android.ModuleContext,
	objFiles, sharedLibs, staticLibs, lateStaticLibs, wholeStaticLibs, deps android.Paths,
	crtBegin, crtEnd android.OptionalPath, groupLate bool, flags builderFlags, outputFile android.WritablePath, implicitOutputs android.WritablePaths) {
	crtBegin, crtEnd android.OptionalPath, groupLate bool, flags builderFlags,
	outputFile android.WritablePath, implicitOutputs android.WritablePaths, validations android.WritablePaths) {

	ldCmd := "${config.ClangBin}/clang++"

@@ -805,6 +806,7 @@ func transformObjToDynamicBinary(ctx android.ModuleContext,
		Inputs:          objFiles,
		Implicits:       deps,
		OrderOnly:       sharedLibs,
		Validations:     validations.Paths(),
		Args:            args,
	})
}
+1 −1
Original line number Diff line number Diff line
@@ -1406,7 +1406,7 @@ func (library *libraryDecorator) linkShared(ctx ModuleContext,
	linkerDeps = append(linkerDeps, objs.tidyFiles...)
	transformObjToDynamicBinary(ctx, objs.objFiles, sharedLibs,
		deps.StaticLibs, deps.LateStaticLibs, deps.WholeStaticLibs,
		linkerDeps, deps.CrtBegin, deps.CrtEnd, false, builderFlags, outputFile, implicitOutputs)
		linkerDeps, deps.CrtBegin, deps.CrtEnd, false, builderFlags, outputFile, implicitOutputs, nil)

	objs.coverageFiles = append(objs.coverageFiles, deps.StaticLibObjs.coverageFiles...)
	objs.coverageFiles = append(objs.coverageFiles, deps.WholeStaticLibObjs.coverageFiles...)
+18 −2
Original line number Diff line number Diff line
@@ -61,8 +61,15 @@ func main() {
			continue
		}

		sectionName := fmt.Sprintf(".linker.sect%d", load)
		symName := fmt.Sprintf("__dlwrap_linker_sect%d", load)
		var progName string
		progSection := progToFirstSection(prog, ef.Sections)
		if progSection != nil {
			progName = progSection.Name
		} else {
			progName = fmt.Sprintf(".sect%d", load)
		}
		sectionName := ".linker" + progName
		symName := "__dlwrap_linker" + strings.ReplaceAll(progName, ".", "_")

		flags := ""
		if prog.Flags&elf.PF_W != 0 {
@@ -125,3 +132,12 @@ func bytesToAsm(asm io.Writer, buf []byte) {
	}
	fmt.Fprintln(asm)
}

func progToFirstSection(prog *elf.Prog, sections []*elf.Section) *elf.Section {
	for _, section := range sections {
		if section.Addr == prog.Vaddr {
			return section
		}
	}
	return nil
}
+3 −4
Original line number Diff line number Diff line
@@ -17,8 +17,7 @@ package {
}

blueprint_go_binary {
    name: "host_bionic_inject",
    deps: ["soong-symbol_inject"],
    srcs: ["host_bionic_inject.go"],
    testSrcs: ["host_bionic_inject_test.go"],
    name: "host_bionic_verify",
    srcs: ["host_bionic_verify.go"],
    testSrcs: ["host_bionic_verify_test.go"],
}
Loading