Merge "Revert "Block CFI on static libraries"" into main

This commit is contained in:
Trevor Radcliffe 2023-09-21 18:15:25 +00:00 committed by Gerrit Code Review
commit 44e4102362
8 changed files with 26 additions and 70 deletions

View file

@ -1296,42 +1296,6 @@ func (sla StringListAttribute) IsEmpty() bool {
return len(sla.Value) == 0 && !sla.HasConfigurableValues()
}
// RemoveFromAllConfigs removes all instances of the specified value from all configurations
// of the givenStringListAttribute
func (sla *StringListAttribute) RemoveFromAllConfigs(toRemove string) {
if removed, removalResult := removeFromList(toRemove, sla.Value); removed {
if len(removalResult) > 0 {
sla.Value = removalResult
} else {
sla.Value = nil
}
}
for axis, slsv := range sla.ConfigurableValues {
for config, sl := range slsv {
if removed, removalResult := removeFromList(toRemove, sl); removed {
if len(removalResult) > 0 {
sla.SetSelectValue(axis, config, removalResult)
} else {
sla.SetSelectValue(axis, config, nil)
}
}
}
}
}
func removeFromList(s string, list []string) (bool, []string) {
result := make([]string, 0, len(list))
var removed bool
for _, item := range list {
if item != s {
result = append(result, item)
} else {
removed = true
}
}
return removed, result
}
type configurableStringLists map[ConfigurationAxis]stringListSelectValues
func (csl configurableStringLists) Append(other configurableStringLists) {

View file

@ -4593,6 +4593,7 @@ cc_library {
}`,
ExpectedBazelTargets: []string{
MakeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{
"features": `["android_cfi"]`,
"local_includes": `["."]`,
}),
MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{
@ -4621,6 +4622,10 @@ cc_library {
}`,
ExpectedBazelTargets: []string{
MakeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{
"features": `select({
"//build/bazel/platforms/os:android": ["android_cfi"],
"//conditions:default": [],
})`,
"local_includes": `["."]`,
}),
MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{
@ -4651,7 +4656,10 @@ cc_library {
}`,
ExpectedBazelTargets: []string{
MakeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{
"features": `["android_cfi_assembly_support"]`,
"features": `[
"android_cfi",
"android_cfi_assembly_support",
]`,
"local_includes": `["."]`,
}),
MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{

View file

@ -1519,7 +1519,7 @@ func TestCcLibrarySharedWithCfiAndCfiAssemblySupport(t *testing.T) {
runCcLibrarySharedTestCase(t, Bp2buildTestCase{
Description: "cc_library_shared has correct features when cfi is enabled with cfi assembly support",
Blueprint: `
cc_library_shared {
cc_library_static {
name: "foo",
sanitize: {
cfi: true,
@ -1529,7 +1529,7 @@ cc_library_shared {
},
}`,
ExpectedBazelTargets: []string{
MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{
MakeBazelTarget("cc_library_static", "foo", AttrNameToString{
"features": `[
"android_cfi",
"android_cfi_assembly_support",

View file

@ -2134,9 +2134,9 @@ cc_library_static {
})
}
func TestCcLibraryStaticNoCfi(t *testing.T) {
func TestCcLibraryStaticWithCfi(t *testing.T) {
runCcLibraryStaticTestCase(t, Bp2buildTestCase{
Description: "cc_library_static never explicitly enables CFI",
Description: "cc_library_static has correct features when cfi is enabled",
Blueprint: `
cc_library_static {
name: "foo",
@ -2146,6 +2146,7 @@ cc_library_static {
}`,
ExpectedBazelTargets: []string{
MakeBazelTarget("cc_library_static", "foo", AttrNameToString{
"features": `["android_cfi"]`,
"local_includes": `["."]`,
}),
},
@ -2154,7 +2155,7 @@ cc_library_static {
func TestCcLibraryStaticWithCfiOsSpecific(t *testing.T) {
runCcLibraryStaticTestCase(t, Bp2buildTestCase{
Description: "cc_library_static never explicitly enables CFI even for specific variants",
Description: "cc_library_static has correct features when cfi is enabled for specific variants",
Blueprint: `
cc_library_static {
name: "foo",
@ -2168,6 +2169,10 @@ cc_library_static {
}`,
ExpectedBazelTargets: []string{
MakeBazelTarget("cc_library_static", "foo", AttrNameToString{
"features": `select({
"//build/bazel/platforms/os:android": ["android_cfi"],
"//conditions:default": [],
})`,
"local_includes": `["."]`,
}),
},
@ -2176,7 +2181,7 @@ cc_library_static {
func TestCcLibraryStaticWithCfiAndCfiAssemblySupport(t *testing.T) {
runCcLibraryStaticTestCase(t, Bp2buildTestCase{
Description: "cc_library_static will specify cfi_assembly_support feature but not cfi feature",
Description: "cc_library_static has correct features when cfi is enabled with cfi_assembly_support",
Blueprint: `
cc_library_static {
name: "foo",
@ -2189,7 +2194,10 @@ cc_library_static {
}`,
ExpectedBazelTargets: []string{
MakeBazelTarget("cc_library_static", "foo", AttrNameToString{
"features": `["android_cfi_assembly_support"]`,
"features": `[
"android_cfi",
"android_cfi_assembly_support",
]`,
"local_includes": `["."]`,
}),
},

View file

@ -30,7 +30,6 @@ bootstrap_go_package {
"cc.go",
"ccdeps.go",
"check.go",
"constants.go",
"coverage.go",
"gen.go",
"generated_cc_library.go",

View file

@ -1987,9 +1987,9 @@ func bp2buildSanitizerFeatures(ctx android.BazelConversionPathContext, m *Module
sanitizerCompilerInputs.SetSelectValue(bazel.SanitizersEnabledAxis, bazel.SanitizersEnabled, bazel.MakeLabelListFromTargetNames([]string{*blocklist}))
}
if sanitizerProps.Sanitize.Cfi != nil && !proptools.Bool(sanitizerProps.Sanitize.Cfi) {
features = append(features, "-"+cfiFeatureName)
features = append(features, "-android_cfi")
} else if proptools.Bool(sanitizerProps.Sanitize.Cfi) {
features = append(features, cfiFeatureName)
features = append(features, "android_cfi")
if proptools.Bool(sanitizerProps.Sanitize.Config.Cfi_assembly_support) {
features = append(features, "android_cfi_assembly_support")
}

View file

@ -1,19 +0,0 @@
// Copyright 2016 Google Inc. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package cc
var (
cfiFeatureName = "android_cfi"
)

View file

@ -331,7 +331,6 @@ func libraryBp2Build(ctx android.Bp2buildMutatorContext, m *Module) {
sharedFeatures.DeduplicateAxesFromBase()
staticFeatures := baseAttributes.features.Clone().Append(staticAttrs.Features)
staticFeatures.DeduplicateAxesFromBase()
staticFeatures.RemoveFromAllConfigs(cfiFeatureName)
staticCommonAttrs := staticOrSharedAttributes{
Srcs: *srcs.Clone().Append(staticAttrs.Srcs),
@ -2948,9 +2947,6 @@ func sharedOrStaticLibraryBp2Build(ctx android.Bp2buildMutatorContext, module *M
features := baseAttributes.features.Clone().Append(libSharedOrStaticAttrs.Features)
features.DeduplicateAxesFromBase()
if isStatic {
features.RemoveFromAllConfigs(cfiFeatureName)
}
commonAttrs := staticOrSharedAttributes{
Srcs: compilerAttrs.srcs,