Commit ce258437 authored by Ben Hutchings's avatar Ben Hutchings

compiler: Define OPTIMIZER_HIDE_VAR

Part of upstream commit fe8c8a12 ('crypto: more robust
crypto_memneq'), needed by commit d4c5efdb ('random: add and use
memzero_explicit() for clearing data').
parent 79702f96
...@@ -37,6 +37,9 @@ ...@@ -37,6 +37,9 @@
__asm__ ("" : "=r"(__ptr) : "0"(ptr)); \ __asm__ ("" : "=r"(__ptr) : "0"(ptr)); \
(typeof(ptr)) (__ptr + (off)); }) (typeof(ptr)) (__ptr + (off)); })
/* Make the optimizer believe the variable can be manipulated arbitrarily. */
#define OPTIMIZER_HIDE_VAR(var) __asm__ ("" : "=r" (var) : "0" (var))
#ifdef __CHECKER__ #ifdef __CHECKER__
#define __must_be_array(arr) 0 #define __must_be_array(arr) 0
#else #else
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
*/ */
#undef barrier #undef barrier
#undef RELOC_HIDE #undef RELOC_HIDE
#undef OPTIMIZER_HIDE_VAR
#define barrier() __memory_barrier() #define barrier() __memory_barrier()
...@@ -23,6 +24,12 @@ ...@@ -23,6 +24,12 @@
__ptr = (unsigned long) (ptr); \ __ptr = (unsigned long) (ptr); \
(typeof(ptr)) (__ptr + (off)); }) (typeof(ptr)) (__ptr + (off)); })
/* This should act as an optimization barrier on var.
* Given that this compiler does not have inline assembly, a compiler barrier
* is the best we can do.
*/
#define OPTIMIZER_HIDE_VAR(var) barrier()
/* Intel ECC compiler doesn't support __builtin_types_compatible_p() */ /* Intel ECC compiler doesn't support __builtin_types_compatible_p() */
#define __must_be_array(a) 0 #define __must_be_array(a) 0
......
...@@ -164,6 +164,10 @@ void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect); ...@@ -164,6 +164,10 @@ void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect);
(typeof(ptr)) (__ptr + (off)); }) (typeof(ptr)) (__ptr + (off)); })
#endif #endif
#ifndef OPTIMIZER_HIDE_VAR
#define OPTIMIZER_HIDE_VAR(var) barrier()
#endif
#endif /* __KERNEL__ */ #endif /* __KERNEL__ */
#endif /* __ASSEMBLY__ */ #endif /* __ASSEMBLY__ */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment