From 8baf29fb10a91d8a1da4df6e1875ef63a486987f Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Mon, 29 Jul 2019 16:43:11 -0700 Subject: [PATCH 1/3] Document wokaround for yama ptrace restrictions Fixes: 138580915 Test: m checkbuild Change-Id: Iefee8a914225d465a1feb37690a54423be332841 --- README.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/README.md b/README.md index 60d7d5a86..18422eaad 100644 --- a/README.md +++ b/README.md @@ -355,6 +355,18 @@ and then in another terminal: dlv connect :1234 ``` +If you see an error: +``` +Could not attach to pid 593: this could be caused by a kernel +security setting, try writing "0" to /proc/sys/kernel/yama/ptrace_scope +``` +you can temporarily disable +[Yama's ptrace protection](https://www.kernel.org/doc/Documentation/security/Yama.txt) +using: +```bash +sudo sysctl -w kernel.yama.ptrace_scope=0 +``` + ## Contact Email android-building@googlegroups.com (external) for any questions, or see From 607d8587e491160aed7d39a10ae293acb281a662 Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Mon, 29 Jul 2019 16:44:46 -0700 Subject: [PATCH 2/3] Add InstallBypassMake Allow modules to mark themselves as InstallBypassMake, which will cause android.PathForModuleInstall to return a path in $OUT_DIR instead of $OUT_DIR/soong. This can be used for modules that can handle installation to the final location on their own. The main blocker for most modules is support for the "required" property, which requires adding dependencies on the installed location of other modules. Bug: 122332855 Test: m checkbuild Change-Id: I85238d937ff30335167d4b3fec79bbefc734b5e1 --- android/config.go | 4 ---- android/module.go | 12 +++++++++++- android/paths.go | 15 +++++++++++++++ android/paths_test.go | 4 ++++ 4 files changed, 30 insertions(+), 5 deletions(-) diff --git a/android/config.go b/android/config.go index 074dfc729..61370a0c4 100644 --- a/android/config.go +++ b/android/config.go @@ -689,10 +689,6 @@ func (c *config) DevicePrimaryArchType() ArchType { return c.Targets[Android][0].Arch.ArchType } -func (c *config) SkipDeviceInstall() bool { - return c.EmbeddedInMake() -} - func (c *config) SkipMegaDeviceInstall(path string) bool { return Bool(c.Mega_device) && strings.HasPrefix(path, filepath.Join(c.buildDir, "target", "product")) diff --git a/android/module.go b/android/module.go index 138b9cd6a..990a893a7 100644 --- a/android/module.go +++ b/android/module.go @@ -155,6 +155,7 @@ type ModuleContext interface { InstallInData() bool InstallInSanitizerDir() bool InstallInRecovery() bool + InstallBypassMake() bool RequiredModuleNames() []string HostRequiredModuleNames() []string @@ -192,6 +193,7 @@ type Module interface { InstallInData() bool InstallInSanitizerDir() bool InstallInRecovery() bool + InstallBypassMake() bool SkipInstall() ExportedToMake() bool NoticeFile() OptionalPath @@ -837,6 +839,10 @@ func (m *ModuleBase) InstallInRecovery() bool { return Bool(m.commonProperties.Recovery) } +func (m *ModuleBase) InstallBypassMake() bool { + return false +} + func (m *ModuleBase) Owner() string { return String(m.commonProperties.Owner) } @@ -1493,6 +1499,10 @@ func (m *moduleContext) InstallInRecovery() bool { return m.module.InstallInRecovery() } +func (m *moduleContext) InstallBypassMake() bool { + return m.module.InstallBypassMake() +} + func (m *moduleContext) skipInstall(fullInstallPath OutputPath) bool { if m.module.base().commonProperties.SkipInstall { return true @@ -1506,7 +1516,7 @@ func (m *moduleContext) skipInstall(fullInstallPath OutputPath) bool { } if m.Device() { - if m.Config().SkipDeviceInstall() { + if m.Config().EmbeddedInMake() && !m.InstallBypassMake() { return true } diff --git a/android/paths.go b/android/paths.go index e3f0544d3..0d999185d 100644 --- a/android/paths.go +++ b/android/paths.go @@ -46,6 +46,7 @@ type ModuleInstallPathContext interface { InstallInData() bool InstallInSanitizerDir() bool InstallInRecovery() bool + InstallBypassMake() bool } var _ ModuleInstallPathContext = ModuleContext(nil) @@ -818,6 +819,17 @@ func PathForOutput(ctx PathContext, pathComponents ...string) OutputPath { return OutputPath{basePath{path, ctx.Config(), ""}} } +// pathForInstallInMakeDir is used by PathForModuleInstall when the module returns true +// for InstallBypassMake to produce an OutputPath that installs to $OUT_DIR instead of +// $OUT_DIR/soong. +func pathForInstallInMakeDir(ctx PathContext, pathComponents ...string) OutputPath { + path, err := validatePath(pathComponents...) + if err != nil { + reportPathError(ctx, err) + } + return OutputPath{basePath{"../" + path, ctx.Config(), ""}} +} + // PathsForOutput returns Paths rooted from buildDir func PathsForOutput(ctx PathContext, paths []string) WritablePaths { ret := make(WritablePaths, len(paths)) @@ -1123,6 +1135,9 @@ func PathForModuleInstall(ctx ModuleInstallPathContext, pathComponents ...string outPaths = append([]string{"debug"}, outPaths...) } outPaths = append(outPaths, pathComponents...) + if ctx.InstallBypassMake() && ctx.Config().EmbeddedInMake() { + return pathForInstallInMakeDir(ctx, outPaths...) + } return PathForOutput(ctx, outPaths...) } diff --git a/android/paths_test.go b/android/paths_test.go index 8286e9a35..f2996bff8 100644 --- a/android/paths_test.go +++ b/android/paths_test.go @@ -227,6 +227,10 @@ func (m moduleInstallPathContextImpl) InstallInRecovery() bool { return m.inRecovery } +func (m moduleInstallPathContextImpl) InstallBypassMake() bool { + return false +} + func TestPathForModuleInstall(t *testing.T) { testConfig := TestConfig("", nil) From 2d975b197e136ac1ac9267f76a903855ff2d4619 Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Mon, 29 Jul 2019 16:47:42 -0700 Subject: [PATCH 3/3] Add an output file tag for proguard dictionaries Allow modules to depend on the proguard dictionary of another module using module{.proguard_map}. Bug: 122332855 Test: m checkbuild Change-Id: I918b487872c1a8ef8a51c0b994277efb0512d157 --- java/java.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/java/java.go b/java/java.go index fea38b51f..3b789f689 100644 --- a/java/java.go +++ b/java/java.go @@ -370,6 +370,8 @@ func (j *Module) OutputFiles(tag string) (android.Paths, error) { return append(android.Paths{j.outputFile}, j.extraOutputFiles...), nil case ".jar": return android.Paths{j.implementationAndResourcesJar}, nil + case ".proguard_map": + return android.Paths{j.proguardDictionary}, nil default: return nil, fmt.Errorf("unsupported module reference tag %q", tag) }