Punt the volatile cast in the non-gcc, non-Windows version of zap.
authorGreg Hudson <ghudson@mit.edu>
Tue, 24 Nov 2009 01:25:10 +0000 (01:25 +0000)
committerGreg Hudson <ghudson@mit.edu>
Tue, 24 Nov 2009 01:25:10 +0000 (01:25 +0000)
Use a function call into libkrb5support instead, since that's hard to
inline.

git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@23339 dc483132-0cff-0310-8789-dd5450dbe970

src/include/k5-int.h
src/include/k5-platform.h
src/util/support/Makefile.in
src/util/support/deps
src/util/support/libkrb5support-fixed.exports
src/util/support/zap.c [new file with mode: 0644]

index 2edf1d511b5f0755f86ea2b0fbb4d7f9c079f0cf..3d5268836db555d8b5ce7b5bb7c5f85868a96b95 100644 (file)
@@ -790,8 +790,9 @@ static inline void zap(void *ptr, size_t len)
     asm volatile ("" : : "g" (ptr), "g" (len));
 }
 #else
-# define zap(ptr, len) memset((void *)(volatile void *)ptr, 0, len)
-#endif /* WIN32 */
+/* Use a function from libkrb5support to defeat inlining. */
+# define zap(ptr, len) krb5int_zap(ptr, len)
+#endif
 
 /* Convenience function: zap and free ptr if it is non-NULL. */
 static inline void
index 7c1c57d7061308a3427587544e136a7f0fe83be3..ee3730ad095bbbf92dac02c3c6fa903fb4e786cc 100644 (file)
@@ -976,6 +976,8 @@ extern int krb5int_mkstemp(char *);
 #define mkstemp krb5int_mkstemp
 #endif
 
+extern void krb5int_zap(void *ptr, size_t len);
+
 /* Fudge for future adoption of gettext or the like.  */
 #ifndef _
 #define _(X) (X)
index ef0b71d5a957c29063b5eb48ded60a6e1dc64cf9..6c2be57bbe560156ba65651950f9c0633671c4cd 100644 (file)
@@ -62,6 +62,7 @@ STLIBOBJS= \
        fake-addrinfo.o \
        utf8.o \
        utf8_conv.o \
+       zap.o \
        $(IPC_ST_OBJ) \
        $(STRLCPY_ST_OBJ) \
        $(PRINTF_ST_OBJ) \
@@ -77,6 +78,7 @@ LIBOBJS= \
        $(OUTPRE)fake-addrinfo.$(OBJEXT) \
        $(OUTPRE)utf8.$(OBJEXT) \
        $(OUTPRE)utf8_conv.$(OBJEXT) \
+       $(OUTPRE)zap.$(OBJEXT) \
        $(IPC_OBJ) \
        $(STRLCPY_OBJ) \
        $(PRINTF_OBJ) \
@@ -101,7 +103,8 @@ SRCS=\
        $(srcdir)/printf.c \
        $(srcdir)/mkstemp.c \
        $(srcdir)/t_k5buf.c \
-       $(srcdir)/t_unal.c 
+       $(srcdir)/t_unal.c \
+       $(srcdir)/zap.c
 
 SHLIB_EXPDEPS =
 # Add -lm if dumping thread stats, for sqrt.
index 140c3fb61ad40f5356f1860017d34f071991acbd..0f2991a0f699f8da61b98b962cfd7ee61bc18b12 100644 (file)
@@ -47,3 +47,6 @@ t_k5buf.so t_k5buf.po $(OUTPRE)t_k5buf.$(OBJEXT): $(BUILDTOP)/include/autoconf.h
 t_unal.so t_unal.po $(OUTPRE)t_unal.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \
   $(top_srcdir)/include/k5-platform.h $(top_srcdir)/include/k5-thread.h \
   t_unal.c
+zap.so zap.po $(OUTPRE)zap.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \
+  $(top_srcdir)/include/k5-platform.h $(top_srcdir)/include/k5-thread.h \
+  zap.c
index 3560ce63a1ef6f7b58c0cd093ad740daea91eb25..40023e709f17ea92b1cf06f165208b6514ff495d 100644 (file)
@@ -48,3 +48,4 @@ krb5int_utf8_to_ucs4
 krb5int_utf8_lentab
 krb5int_utf8_mintab
 krb5int_utf8_next
+krb5int_zap
diff --git a/src/util/support/zap.c b/src/util/support/zap.c
new file mode 100644 (file)
index 0000000..8961687
--- /dev/null
@@ -0,0 +1,38 @@
+/* -*- mode: c; indent-tabs-mode: nil -*- */
+
+/*
+ * zap.c
+ *
+ * Copyright 2008 Massachusetts Institute of Technology.
+ * All Rights Reserved.
+ *
+ * Export of this software from the United States of America may
+ *   require a specific license from the United States Government.
+ *   It is the responsibility of any person or organization contemplating
+ *   export to obtain such a license before exporting.
+ *
+ * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
+ * distribute this software and its documentation for any purpose and
+ * without fee is hereby granted, provided that the above copyright
+ * notice appear in all copies and that both that copyright notice and
+ * this permission notice appear in supporting documentation, and that
+ * the name of M.I.T. not be used in advertising or publicity pertaining
+ * to distribution of the software without specific, written prior
+ * permission.  Furthermore if you modify this software you must label
+ * your software as modified software and not distribute it in such a
+ * fashion that it might be confused with the original M.I.T. software.
+ * M.I.T. makes no representations about the suitability of
+ * this software for any purpose.  It is provided "as is" without express
+ * or implied warranty.
+ *
+ * krb5int_zap() is used by zap() (a static inline function defined in
+ * k5-int.h) on non-Windows, non-gcc compilers, in order to prevent the
+ * compiler from inlining and optimizing out the memset() call.
+ */
+
+#include <k5-platform.h>
+
+void krb5int_zap(void *ptr, size_t len)
+{
+    memset(ptr, 0, len);
+}