diff options
author | Ken Raeburn <raeburn@mit.edu> | 2005-06-07 06:18:40 +0000 |
---|---|---|
committer | Ken Raeburn <raeburn@mit.edu> | 2005-06-07 06:18:40 +0000 |
commit | cfe4a5ea14da20881824ea8878adc71f9b6991a8 (patch) | |
tree | a64271618eba02102ada281218946251d2332db2 /src | |
parent | c8e3422a682521dbccbfba4133d5a459996b2588 (diff) | |
download | krb5-cfe4a5ea14da20881824ea8878adc71f9b6991a8.tar.gz krb5-cfe4a5ea14da20881824ea8878adc71f9b6991a8.tar.xz krb5-cfe4a5ea14da20881824ea8878adc71f9b6991a8.zip |
don't always require support library when building with sun cc
By default, a non-GCC configuration will not optimize during the build. The
Solaris C compiler will always output functions defined as "inline", at least
when not optimizing, even if they're never used. With recent changes on the
trunk, k5_call_init_function will cause the support library to be required on
Solaris by every program that includes k5-platform.h. This patch should fix
that.
* k5-platform.h (MAYBE_DEFINE_CALLINIT_FUNCTION) [DELAY_INITIALIZER]: New
macro. If not __GNUC__, define k5_call_init_function in the expansion;
otherwise, do nothing.
(MAKE_INIT_FUNCTION) [DELAY_INITIALIZER]: Use it.
(k5_call_init_function): Don't define function form at top level.
ticket: new
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@17230 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src')
-rw-r--r-- | src/include/ChangeLog | 8 | ||||
-rw-r--r-- | src/include/k5-platform.h | 47 |
2 files changed, 33 insertions, 22 deletions
diff --git a/src/include/ChangeLog b/src/include/ChangeLog index 217c6a59c..2551c6536 100644 --- a/src/include/ChangeLog +++ b/src/include/ChangeLog @@ -1,3 +1,11 @@ +2005-06-07 Ken Raeburn <raeburn@mit.edu> + + * k5-platform.h (MAYBE_DEFINE_CALLINIT_FUNCTION) + [DELAY_INITIALIZER]: New macro. If not __GNUC__, define + k5_call_init_function in the expansion; otherwise, do nothing. + (MAKE_INIT_FUNCTION) [DELAY_INITIALIZER]: Use it. + (k5_call_init_function): Don't define function form at top level. + 2005-05-31 Ken Raeburn <raeburn@mit.edu> * k5-thread.h (krb5int_pthread_loaded) [HAVE_PRAGMA_WEAK_REF]: diff --git a/src/include/k5-platform.h b/src/include/k5-platform.h index 8a88cacf3..232e15bea 100644 --- a/src/include/k5-platform.h +++ b/src/include/k5-platform.h @@ -196,6 +196,30 @@ typedef struct { k5_once_t once; int error, did_run; void (*fn)(void); } k5_init # else # define MAYBE_DUMMY_INIT(NAME) # endif +# ifdef __GNUC__ +/* Do it in macro form so we get the file/line of the invocation if + the assertion fails. */ +# define k5_call_init_function(I) \ + (__extension__ ({ \ + k5_init_t *k5int_i = (I); \ + int k5int_err = k5_once(&k5int_i->once, k5int_i->fn); \ + (k5int_err \ + ? k5int_err \ + : (assert(k5int_i->did_run != 0), k5int_i->error)); \ + })) +# define MAYBE_DEFINE_CALLINIT_FUNCTION +# else +# define MAYBE_DEFINE_CALLINIT_FUNCTION \ + static inline int k5_call_init_function(k5_init_t *i) \ + { \ + int err; \ + err = k5_once(&i->once, i->fn); \ + if (err) \ + return err; \ + assert (i->did_run != 0); \ + return i->error; \ + } +# endif # define MAKE_INIT_FUNCTION(NAME) \ static int NAME(void); \ MAYBE_DUMMY_INIT(NAME) \ @@ -203,6 +227,7 @@ typedef struct { k5_once_t once; int error, did_run; void (*fn)(void); } k5_init static void JOIN__2(NAME, aux) (void); \ static k5_init_t JOIN__2(NAME, once) = \ { K5_ONCE_INIT, 0, 0, JOIN__2(NAME, aux) }; \ + MAYBE_DEFINE_CALLINIT_FUNCTION \ static void JOIN__2(NAME, aux) (void) \ { \ JOIN__2(NAME, once).did_run = 1; \ @@ -212,28 +237,6 @@ typedef struct { k5_once_t once; int error, did_run; void (*fn)(void); } k5_init static int NAME(void) # define CALL_INIT_FUNCTION(NAME) \ k5_call_init_function(& JOIN__2(NAME, once)) -# ifdef __GNUC__ -/* Do it in macro form so we get the file/line of the invocation if - the assertion fails. */ -# define k5_call_init_function(I) \ - (__extension__ ({ \ - k5_init_t *k5int_i = (I); \ - int k5int_err = k5_once(&k5int_i->once, k5int_i->fn); \ - (k5int_err \ - ? k5int_err \ - : (assert(k5int_i->did_run != 0), k5int_i->error)); \ - })) -# else -static inline int k5_call_init_function(k5_init_t *i) -{ - int err; - err = k5_once(&i->once, i->fn); - if (err) - return err; - assert (i->did_run != 0); - return i->error; -} -# endif /* This should be called in finalization only, so we shouldn't have multiple active threads mucking around in our library at this point. So ignore the once_t object and just look at the flag. |