diff options
Diffstat (limited to 'scripts/gcc-plugins')
-rw-r--r-- | scripts/gcc-plugins/Makefile | 1 | ||||
-rw-r--r-- | scripts/gcc-plugins/gcc-common.h | 1 | ||||
-rw-r--r-- | scripts/gcc-plugins/gcc-generate-gimple-pass.h | 1 | ||||
-rw-r--r-- | scripts/gcc-plugins/gcc-generate-ipa-pass.h | 1 | ||||
-rw-r--r-- | scripts/gcc-plugins/gcc-generate-rtl-pass.h | 1 | ||||
-rw-r--r-- | scripts/gcc-plugins/gcc-generate-simple_ipa-pass.h | 1 | ||||
-rw-r--r-- | scripts/gcc-plugins/gen-random-seed.sh | 1 | ||||
-rw-r--r-- | scripts/gcc-plugins/randomize_layout_plugin.c | 3 | ||||
-rw-r--r-- | scripts/gcc-plugins/structleak_plugin.c | 13 |
9 files changed, 18 insertions, 5 deletions
diff --git a/scripts/gcc-plugins/Makefile b/scripts/gcc-plugins/Makefile index 214eb2335c31..e2ff425f4c7e 100644 --- a/scripts/gcc-plugins/Makefile +++ b/scripts/gcc-plugins/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0 GCC_PLUGINS_DIR := $(shell $(CC) -print-file-name=plugin) ifeq ($(PLUGINCC),$(HOSTCC)) diff --git a/scripts/gcc-plugins/gcc-common.h b/scripts/gcc-plugins/gcc-common.h index 6948898b3cdf..ffd1dfaa1cc1 100644 --- a/scripts/gcc-plugins/gcc-common.h +++ b/scripts/gcc-plugins/gcc-common.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */ #ifndef GCC_COMMON_H_INCLUDED #define GCC_COMMON_H_INCLUDED diff --git a/scripts/gcc-plugins/gcc-generate-gimple-pass.h b/scripts/gcc-plugins/gcc-generate-gimple-pass.h index 526c3c79b68e..f20797e80b6d 100644 --- a/scripts/gcc-plugins/gcc-generate-gimple-pass.h +++ b/scripts/gcc-plugins/gcc-generate-gimple-pass.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */ /* * Generator for GIMPLE pass related boilerplate code/data * diff --git a/scripts/gcc-plugins/gcc-generate-ipa-pass.h b/scripts/gcc-plugins/gcc-generate-ipa-pass.h index 9bd926e072f0..92bb4f3a87a4 100644 --- a/scripts/gcc-plugins/gcc-generate-ipa-pass.h +++ b/scripts/gcc-plugins/gcc-generate-ipa-pass.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */ /* * Generator for IPA pass related boilerplate code/data * diff --git a/scripts/gcc-plugins/gcc-generate-rtl-pass.h b/scripts/gcc-plugins/gcc-generate-rtl-pass.h index 1dc67a5aeadf..d69cd80b6c10 100644 --- a/scripts/gcc-plugins/gcc-generate-rtl-pass.h +++ b/scripts/gcc-plugins/gcc-generate-rtl-pass.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */ /* * Generator for RTL pass related boilerplate code/data * diff --git a/scripts/gcc-plugins/gcc-generate-simple_ipa-pass.h b/scripts/gcc-plugins/gcc-generate-simple_ipa-pass.h index a27e2b36afaa..06800bc477e0 100644 --- a/scripts/gcc-plugins/gcc-generate-simple_ipa-pass.h +++ b/scripts/gcc-plugins/gcc-generate-simple_ipa-pass.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */ /* * Generator for SIMPLE_IPA pass related boilerplate code/data * diff --git a/scripts/gcc-plugins/gen-random-seed.sh b/scripts/gcc-plugins/gen-random-seed.sh index 7514850f4815..68af5cc20a64 100644 --- a/scripts/gcc-plugins/gen-random-seed.sh +++ b/scripts/gcc-plugins/gen-random-seed.sh @@ -1,4 +1,5 @@ #!/bin/sh +# SPDX-License-Identifier: GPL-2.0 if [ ! -f "$1" ]; then SEED=`od -A n -t x8 -N 32 /dev/urandom | tr -d ' \n'` diff --git a/scripts/gcc-plugins/randomize_layout_plugin.c b/scripts/gcc-plugins/randomize_layout_plugin.c index cdaac8c66734..0073af326449 100644 --- a/scripts/gcc-plugins/randomize_layout_plugin.c +++ b/scripts/gcc-plugins/randomize_layout_plugin.c @@ -436,9 +436,6 @@ static int is_pure_ops_struct(const_tree node) gcc_assert(TREE_CODE(node) == RECORD_TYPE || TREE_CODE(node) == UNION_TYPE); - /* XXX: Do not apply randomization to all-ftpr structs yet. */ - return 0; - for (field = TYPE_FIELDS(node); field; field = TREE_CHAIN(field)) { const_tree fieldtype = get_field_type(field); enum tree_code code = TREE_CODE(fieldtype); diff --git a/scripts/gcc-plugins/structleak_plugin.c b/scripts/gcc-plugins/structleak_plugin.c index fa3d7a4b26f2..3f8dd4868178 100644 --- a/scripts/gcc-plugins/structleak_plugin.c +++ b/scripts/gcc-plugins/structleak_plugin.c @@ -16,6 +16,7 @@ * Options: * -fplugin-arg-structleak_plugin-disable * -fplugin-arg-structleak_plugin-verbose + * -fplugin-arg-structleak_plugin-byref-all * * Usage: * $ # for 4.5/4.6/C based 4.7 @@ -42,6 +43,7 @@ static struct plugin_info structleak_plugin_info = { }; static bool verbose; +static bool byref_all; static tree handle_user_attribute(tree *node, tree name, tree args, int flags, bool *no_add_attrs) { @@ -150,7 +152,9 @@ static void initialize(tree var) /* these aren't the 0days you're looking for */ if (verbose) inform(DECL_SOURCE_LOCATION(var), - "userspace variable will be forcibly initialized"); + "%s variable will be forcibly initialized", + (byref_all && TREE_ADDRESSABLE(var)) ? "byref" + : "userspace"); /* build the initializer expression */ initializer = build_constructor(TREE_TYPE(var), NULL); @@ -190,7 +194,8 @@ static unsigned int structleak_execute(void) continue; /* if the type is of interest, examine the variable */ - if (TYPE_USERSPACE(type)) + if (TYPE_USERSPACE(type) || + (byref_all && TREE_ADDRESSABLE(var))) initialize(var); } @@ -232,6 +237,10 @@ __visible int plugin_init(struct plugin_name_args *plugin_info, struct plugin_gc verbose = true; continue; } + if (!strcmp(argv[i].key, "byref-all")) { + byref_all = true; + continue; + } error(G_("unknown option '-fplugin-arg-%s-%s'"), plugin_name, argv[i].key); } |