aboutsummaryrefslogtreecommitdiffstats
path: root/androidmk
diff options
context:
space:
mode:
authorColin Cross <ccross@android.com>2017-05-07 21:57:58 -0700
committerColin Cross <ccross@android.com>2017-05-08 16:03:17 -0700
commit254514eb73f935e65ca40dd96550ac105635ce92 (patch)
tree62b73ecb9f356f316c3afc8d7bc8f2b1c0bc7f46 /androidmk
parent8ff9ef4c30cbdfebeeb2d753de6c94f343a9cdb1 (diff)
downloadbuild_soong-254514eb73f935e65ca40dd96550ac105635ce92.tar.gz
build_soong-254514eb73f935e65ca40dd96550ac105635ce92.tar.bz2
build_soong-254514eb73f935e65ca40dd96550ac105635ce92.zip
androidmk: support cfi, diag, and misc_undefined properties
Support more sanitize related properties. Also remove integer, since it isn't a supported property, and rewrite it to be deterministic by not going through splitBpList. This reapplies Ie8fba06c36fc121912c65a77ee495ceef4962df0. Bug: 37547301 Test: androidmk_test.go Change-Id: Id637ffdb7d36bed8a2c2fe76bd6f54662709e3b3
Diffstat (limited to 'androidmk')
-rw-r--r--androidmk/cmd/androidmk/android.go83
-rw-r--r--androidmk/cmd/androidmk/androidmk_test.go29
2 files changed, 46 insertions, 66 deletions
diff --git a/androidmk/cmd/androidmk/android.go b/androidmk/cmd/androidmk/android.go
index 3c3e2a1b..8801b34b 100644
--- a/androidmk/cmd/androidmk/android.go
+++ b/androidmk/cmd/androidmk/android.go
@@ -33,7 +33,8 @@ var rewriteProperties = map[string](func(variableAssignmentContext) error){
"LOCAL_MODULE_STEM": stem,
"LOCAL_MODULE_HOST_OS": hostOs,
"LOCAL_SRC_FILES": srcFiles,
- "LOCAL_SANITIZE": sanitize,
+ "LOCAL_SANITIZE": sanitize(""),
+ "LOCAL_SANITIZE_DIAG": sanitize("diag."),
// composite functions
"LOCAL_MODULE_TAGS": includeVariableIf(bpVariable{"tags", bpparser.ListType}, not(valueDumpEquals("optional"))),
@@ -413,60 +414,50 @@ func srcFiles(ctx variableAssignmentContext) error {
return nil
}
-func sanitize(ctx variableAssignmentContext) error {
- val, err := makeVariableToBlueprint(ctx.file, ctx.mkvalue, bpparser.ListType)
- if err != nil {
- return err
- }
+func sanitize(sub string) func(ctx variableAssignmentContext) error {
+ return func(ctx variableAssignmentContext) error {
+ val, err := makeVariableToBlueprint(ctx.file, ctx.mkvalue, bpparser.ListType)
+ if err != nil {
+ return err
+ }
- lists, err := splitBpList(val, func(value bpparser.Expression) (string, bpparser.Expression, error) {
- switch v := value.(type) {
- case *bpparser.Variable:
- return "vars", value, nil
- case *bpparser.Operator:
- ctx.file.errorf(ctx.mkvalue, "unknown sanitize expression")
- return "unknown", value, nil
- case *bpparser.String:
- switch v.Value {
- case "never", "address", "coverage", "integer", "thread", "undefined":
- bpTrue := &bpparser.Bool{
- Value: true,
+ if _, ok := val.(*bpparser.List); !ok {
+ return fmt.Errorf("unsupported sanitize expression")
+ }
+
+ misc := &bpparser.List{}
+
+ for _, v := range val.(*bpparser.List).Values {
+ switch v := v.(type) {
+ case *bpparser.Variable, *bpparser.Operator:
+ ctx.file.errorf(ctx.mkvalue, "unsupported sanitize expression")
+ case *bpparser.String:
+ switch v.Value {
+ case "never", "address", "coverage", "thread", "undefined", "cfi":
+ bpTrue := &bpparser.Bool{
+ Value: true,
+ }
+ err = setVariable(ctx.file, false, ctx.prefix, "sanitize."+sub+v.Value, bpTrue, true)
+ if err != nil {
+ return err
+ }
+ default:
+ misc.Values = append(misc.Values, v)
}
- return v.Value, bpTrue, nil
default:
- ctx.file.errorf(ctx.mkvalue, "unknown sanitize argument: %s", v.Value)
- return "unknown", value, nil
+ return fmt.Errorf("sanitize expected a string, got %s", v.Type())
}
- default:
- return "", nil, fmt.Errorf("sanitize expected a string, got %s", value.Type())
}
- })
- if err != nil {
- return err
- }
- for k, v := range lists {
- if emptyList(v) {
- continue
- }
-
- switch k {
- case "never", "address", "coverage", "integer", "thread", "undefined":
- err = setVariable(ctx.file, false, ctx.prefix, "sanitize."+k, lists[k].(*bpparser.List).Values[0], true)
- case "unknown":
- // Nothing, we already added the error above
- case "vars":
- fallthrough
- default:
- err = setVariable(ctx.file, true, ctx.prefix, "sanitize", v, true)
+ if len(misc.Values) > 0 {
+ err = setVariable(ctx.file, false, ctx.prefix, "sanitize."+sub+"misc_undefined", misc, true)
+ if err != nil {
+ return err
+ }
}
- if err != nil {
- return err
- }
+ return err
}
-
- return err
}
func prebuiltClass(ctx variableAssignmentContext) error {
diff --git a/androidmk/cmd/androidmk/androidmk_test.go b/androidmk/cmd/androidmk/androidmk_test.go
index 0c44ea72..5fbc951f 100644
--- a/androidmk/cmd/androidmk/androidmk_test.go
+++ b/androidmk/cmd/androidmk/androidmk_test.go
@@ -285,37 +285,26 @@ cc_library_shared {
desc: "LOCAL_SANITIZE unknown parameter",
in: `
include $(CLEAR_VARS)
-LOCAL_SANITIZE := integer asdf
+LOCAL_SANITIZE := thread cfi asdf
+LOCAL_SANITIZE_DIAG := cfi
LOCAL_SANITIZE_RECOVER := qwert
include $(BUILD_SHARED_LIBRARY)
`,
expected: `
cc_library_shared {
- // ANDROIDMK TRANSLATION ERROR: unknown sanitize argument: asdf
- // integer asdf
sanitize: {
- integer: true,
- recover: ["qwert"],
+ thread: true,
+ cfi: true,
+ misc_undefined: ["asdf"],
+ diag: {
+ cfi: true,
+ },
+ recover: ["qwert"],
},
}
`,
},
{
- desc: "LOCAL_SANITIZE using variable",
- in: `
-sanitize_var := never
-include $(CLEAR_VARS)
-LOCAL_SANITIZE := $(sanitize_var)
-include $(BUILD_SHARED_LIBRARY)
-`,
- expected: `
-sanitize_var = ["never"]
-cc_library_shared {
- sanitize: sanitize_var,
-}
-`,
- },
- {
desc: "LOCAL_SANITIZE_RECOVER",
in: `
include $(CLEAR_VARS)