From 574f2f43948bb21d6e4187936ba5a5afccba25f6 Mon Sep 17 00:00:00 2001 From: Denis Vlasenko Date: Wed, 27 Feb 2008 18:41:59 +0000 Subject: *: add optimization barrier to all "G trick" locations --- include/libbb.h | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'include') diff --git a/include/libbb.h b/include/libbb.h index 707e8d69b..8305e59fc 100644 --- a/include/libbb.h +++ b/include/libbb.h @@ -1208,10 +1208,14 @@ extern char bb_common_bufsiz1[COMMON_BUFSIZE]; struct globals; /* '*const' ptr makes gcc optimize code much better. * Magic prevents ptr_to_globals from going into rodata. - * If you want to assign a value, use PTR_TO_GLOBALS = xxx */ + * If you want to assign a value, use SET_PTR_TO_GLOBALS(x) */ extern struct globals *const ptr_to_globals; -#define PTR_TO_GLOBALS (*(struct globals**)&ptr_to_globals) - +/* At least gcc 3.4.6 on mipsel system needs optimization barrier */ +#define barrier() asm volatile("":::"memory") +#define SET_PTR_TO_GLOBALS(x) do { \ + (*(struct globals**)&ptr_to_globals) = (x); \ + barrier(); \ +} while (0) /* You can change LIBBB_DEFAULT_LOGIN_SHELL, but don't use it, * use bb_default_login_shell and following defines. -- cgit v1.2.3