diff --git a/CMakeLists.txt b/CMakeLists.txt index ac41b964c..0e64d0274 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -110,7 +110,7 @@ add_library(wolfssl wolfcrypt/src/cryptocb.c wolfcrypt/src/curve25519.c wolfcrypt/src/curve448.c - wolfcrypt/src/debug.c + wolfcrypt/src/wc_debug.c wolfcrypt/src/des3.c wolfcrypt/src/dh.c wolfcrypt/src/dsa.c diff --git a/configure.ac b/configure.ac index 5ef4d13e0..5d59f4ca8 100644 --- a/configure.ac +++ b/configure.ac @@ -5785,6 +5785,18 @@ AM_CONDITIONAL([BUILD_LINUXKM],[test "$ENABLED_LINUXKM" = "yes"]) AM_CONDITIONAL([BUILD_NO_LIBRARY],[test "$ENABLED_NO_LIBRARY" = "yes"]) AM_CONDITIONAL([BUILD_RC2],[test "x$ENABLED_RC2" = "xyes"]) +if test "$ax_enable_debug" = "yes" || + test "$ENABLED_STACKSIZE" = "yes" || + (test "$ENABLED_LEANTLS" = "no" && + test "$ENABLED_LEANPSK" = "no" && + test "$ENABLED_LOWRESOURCE" = "no") +then + WC_INTROSPECTION=yes +else + WC_INTROSPECTION=no +fi +AM_CONDITIONAL([BUILD_WC_DEBUG],[test "$WC_INTROSPECTION" = "yes"]) + CREATE_HEX_VERSION AC_SUBST([AM_CPPFLAGS]) AC_SUBST([AM_CFLAGS]) @@ -5839,6 +5851,12 @@ echo >> $OPTION_FILE echo "#define LIBWOLFSSL_GLOBAL_CFLAGS \"$CPPFLAGS $AM_CPPFLAGS $CFLAGS $AM_CFLAGS\"" >> $OPTION_FILE echo >> $OPTION_FILE +if test "$WC_INTROSPECTION" = "yes" +then + echo "#define HAVE_WC_INTROSPECTION" >> $OPTION_FILE + echo >> $OPTION_FILE +fi + for option in $CPPFLAGS $AM_CPPFLAGS $CFLAGS $AM_CFLAGS; do defonly=`echo $option | sed 's/^-D//'` if test "$defonly" != "$option" diff --git a/examples/client/client.c b/examples/client/client.c index acbbe732f..2265afbec 100644 --- a/examples/client/client.c +++ b/examples/client/client.c @@ -24,6 +24,9 @@ #include #endif +#ifndef WOLFSSL_USER_SETTINGS + #include +#endif #include #include @@ -2125,16 +2128,36 @@ THREAD_RETURN WOLFSSL_THREAD client_test(void* args) case '@' : { +#ifdef HAVE_WC_INTROSPECTION const char *conf_args = libwolfssl_configure_args(); - printf("%s\n", conf_args ? conf_args : "configure args not compiled in"); - XEXIT_T(EXIT_SUCCESS); + if (conf_args) { + puts(conf_args); + XEXIT_T(EXIT_SUCCESS); + } else { + fputs("configure args not compiled in.\n",stderr); + XEXIT_T(MY_EX_USAGE); + } +#else + fputs("compiled without BUILD_INTROSPECTION.\n",stderr); + XEXIT_T(MY_EX_USAGE); +#endif } case '#' : { +#ifdef HAVE_WC_INTROSPECTION const char *cflags = libwolfssl_global_cflags(); - printf("%s\n", cflags ? cflags : "CFLAGS not compiled in"); - XEXIT_T(EXIT_SUCCESS); + if (cflags) { + puts(cflags); + XEXIT_T(EXIT_SUCCESS); + } else { + fputs("CFLAGS not compiled in.\n",stderr); + XEXIT_T(MY_EX_USAGE); + } +#else + fputs("compiled without BUILD_INTROSPECTION.\n",stderr); + XEXIT_T(MY_EX_USAGE); +#endif } default: diff --git a/examples/server/server.c b/examples/server/server.c index 26162927b..686a210ab 100644 --- a/examples/server/server.c +++ b/examples/server/server.c @@ -23,9 +23,14 @@ #ifdef HAVE_CONFIG_H #include #endif + +#ifndef WOLFSSL_USER_SETTINGS + #include +#endif +#include + #include /* name change portability layer */ -#include #ifdef HAVE_ECC #include /* wc_ecc_fp_free */ #endif @@ -1555,16 +1560,36 @@ THREAD_RETURN WOLFSSL_THREAD server_test(void* args) case '@' : { +#ifdef HAVE_WC_INTROSPECTION const char *conf_args = libwolfssl_configure_args(); - printf("%s\n", conf_args ? conf_args : "configure args not compiled in"); - XEXIT_T(EXIT_SUCCESS); + if (conf_args) { + puts(conf_args); + XEXIT_T(EXIT_SUCCESS); + } else { + fputs("configure args not compiled in.\n",stderr); + XEXIT_T(MY_EX_USAGE); + } +#else + fputs("compiled without BUILD_INTROSPECTION.\n",stderr); + XEXIT_T(MY_EX_USAGE); +#endif } case '#' : { +#ifdef HAVE_WC_INTROSPECTION const char *cflags = libwolfssl_global_cflags(); - printf("%s\n", cflags ? cflags : "CFLAGS not compiled in"); - XEXIT_T(EXIT_SUCCESS); + if (cflags) { + puts(cflags); + XEXIT_T(EXIT_SUCCESS); + } else { + fputs("CFLAGS not compiled in.\n",stderr); + XEXIT_T(MY_EX_USAGE); + } +#else + fputs("compiled without BUILD_INTROSPECTION.\n",stderr); + XEXIT_T(MY_EX_USAGE); +#endif } default: diff --git a/linuxkm/Kbuild b/linuxkm/Kbuild index 5909a1e2a..b5faf6976 100644 --- a/linuxkm/Kbuild +++ b/linuxkm/Kbuild @@ -76,12 +76,12 @@ $(obj)/wolfcrypt/src/aes_asm.o: OBJECT_FILES_NON_STANDARD := y $(obj)/wolfcrypt/src/aes_gcm_asm.o: OBJECT_FILES_NON_STANDARD := y # auto-generate the exported symbol list, leveraging the WOLFSSL_API visibility tags. -# exclude symbols that don't match wc_* or wolf*. +# exclude symbols that don't match wc_*, wolf*, or libwolf*. $(src)/linuxkm/module_exports.c: $(src)/linuxkm/module_exports.c.template $(WOLFSSL_OBJ_TARGETS) @cp $< $@ @readelf --symbols --wide $(WOLFSSL_OBJ_TARGETS) | \ awk '/^ *[0-9]+: / { \ - if ($$8 !~ /^(wc_|wolf)/){next;} \ + if ($$8 !~ /^(wc_|wolf|libwolf)/){next;} \ if (($$4 == "FUNC") && ($$5 == "GLOBAL") && ($$6 == "DEFAULT")) { \ print "EXPORT_SYMBOL_NS(" $$8 ", WOLFSSL);"; \ } \ diff --git a/src/include.am b/src/include.am index fc35cedf4..f97f56aad 100644 --- a/src/include.am +++ b/src/include.am @@ -315,8 +315,12 @@ endif !BUILD_FIPS_RAND src_libwolfssl_la_SOURCES += \ wolfcrypt/src/logging.c \ wolfcrypt/src/wc_port.c \ - wolfcrypt/src/error.c \ - wolfcrypt/src/debug.c + wolfcrypt/src/error.c + +if BUILD_WC_DEBUG +src_libwolfssl_la_SOURCES += \ + wolfcrypt/src/wc_debug.c +endif if !BUILD_FIPS_RAND src_libwolfssl_la_SOURCES += \ diff --git a/wolfcrypt/src/debug.c b/wolfcrypt/src/wc_debug.c similarity index 94% rename from wolfcrypt/src/debug.c rename to wolfcrypt/src/wc_debug.c index d8e113198..a36ac5164 100644 --- a/wolfcrypt/src/debug.c +++ b/wolfcrypt/src/wc_debug.c @@ -1,4 +1,4 @@ -/* debug.c +/* wc_debug.c * * Copyright (C) 2006-2020 wolfSSL Inc. * @@ -24,10 +24,12 @@ #include #endif +#include #include #include #include -#include + +#ifdef HAVE_WC_INTROSPECTION WOLFSSL_API const char *libwolfssl_configure_args(void) { #ifdef LIBWOLFSSL_CONFIGURE_ARGS @@ -47,10 +49,12 @@ WOLFSSL_API const char *libwolfssl_global_cflags(void) { #endif } +#endif /* HAVE_WC_INTROSPECTION */ + #ifdef HAVE_STACK_SIZE_VERBOSE WOLFSSL_API THREAD_LS_T unsigned char *StackSizeCheck_myStack = NULL; WOLFSSL_API THREAD_LS_T size_t StackSizeCheck_stackSize = 0; WOLFSSL_API THREAD_LS_T size_t StackSizeCheck_stackSizeHWM = 0; WOLFSSL_API THREAD_LS_T size_t *StackSizeCheck_stackSizeHWM_ptr = 0; WOLFSSL_API THREAD_LS_T void *StackSizeCheck_stackOffsetPointer = 0; -#endif +#endif /* HAVE_STACK_SIZE_VERBOSE */ diff --git a/wolfssl/wolfcrypt/settings.h b/wolfssl/wolfcrypt/settings.h index 0001c11fb..4bf7aa4ec 100644 --- a/wolfssl/wolfcrypt/settings.h +++ b/wolfssl/wolfcrypt/settings.h @@ -221,9 +221,6 @@ #include -WOLFSSL_API const char *libwolfssl_configure_args(void); -WOLFSSL_API const char *libwolfssl_global_cflags(void); - #ifdef WOLFSSL_USER_SETTINGS #include "user_settings.h" #elif defined(USE_HAL_DRIVER) && !defined(HAVE_CONFIG_H) @@ -231,6 +228,10 @@ WOLFSSL_API const char *libwolfssl_global_cflags(void); #include "wolfSSL.wolfSSL_conf.h" #endif +#ifdef HAVE_WC_INTROSPECTION +WOLFSSL_API const char *libwolfssl_configure_args(void); +WOLFSSL_API const char *libwolfssl_global_cflags(void); +#endif /* make sure old RNG name is used with CTaoCrypt FIPS */ #ifdef HAVE_FIPS