@@ -672,10 +672,21 @@ region::symbolic_for_unknown_ptr_p () const
bool
region::untrusted_p () const
{
- addr_space_t as = get_addr_space ();
- /* FIXME: treat all non-generic address spaces as untrusted for now. */
- if (!ADDR_SPACE_GENERIC_P (as))
- return true;
+ const region *iter = this;
+ while (iter)
+ {
+ if (iter->get_type ())
+ return TYPE_UNTRUSTED (iter->get_type ());
+ switch (iter->get_kind ())
+ {
+ default:
+ iter = iter->get_parent_region ();
+ continue;
+ case RK_CAST:
+ iter = iter->dyn_cast_cast_region ()->get_original_region ();
+ continue;
+ }
+ }
return false;
}
@@ -2,7 +2,7 @@
/* Adapted from include/linux/compiler.h */
-#pragma GCC custom_address_space(__user)
+#define __user __attribute__((untrusted))
/* Adapted from include/asm-generic/uaccess.h */
gcc/analyzer/ChangeLog: * region.cc (region::untrusted_p): Implement in terms of __attribute__((untrusted)). gcc/testsuite/ChangeLog: * gcc.dg/analyzer/test-uaccess.h: Change from custom_address_space pragma to __attribute__((untrusted)). Signed-off-by: David Malcolm <dmalcolm@redhat.com> --- gcc/analyzer/region.cc | 19 +++++++++++++++---- gcc/testsuite/gcc.dg/analyzer/test-uaccess.h | 2 +- 2 files changed, 16 insertions(+), 5 deletions(-)