Commit ef8ca6bd authored by Richard Levitte's avatar Richard Levitte
Browse files

Make the use of mdebug backtrace a separate option



To force it on anyone using --strict-warnings was the wrong move, as
this is an option best left to those who know what they're doing.

Use with care!

Reviewed-by: default avatarAndy Polyakov <appro@openssl.org>
parent dda71111
Loading
Loading
Loading
Loading
+16 −12
Original line number Diff line number Diff line
@@ -109,9 +109,9 @@ my $clang_devteam_warn = ""
        . " -Wmissing-variable-declarations"
        ;

# These are used in addition to $gcc_devteam_warn unless this is a mingw build.
# This adds backtrace information to the memory leak info.
my $memleak_devteam_backtrace = "-rdynamic -DCRYPTO_MDEBUG_BACKTRACE";
# This adds backtrace information to the memory leak info.  Is only used
# when crypto-mdebug-backtrace is enabled.
my $memleak_devteam_backtrace = "-rdynamic";

my $strict_warnings = 0;

@@ -252,6 +252,7 @@ my @disablables = (
    "cms",
    "comp",
    "crypto-mdebug",
    "crypto-mdebug-backtrace",
    "ct",
    "deprecated",
    "des",
@@ -377,6 +378,8 @@ my @disable_cascades = (

    # SRP and HEARTBEATS require TLSEXT
    "tlsext"		=> [ "srp", "heartbeats" ],

    "crypto-mdebug"     => [ "crypto-mdebug-backtrace" ],
    );

# Avoid protocol support holes.  Also disable all versions below N, if version
@@ -1162,9 +1165,11 @@ if ($strict_warnings)
			$config{cflags} .= " $wopt" unless ($config{cflags} =~ /(^|\s)$wopt(\s|$)/)
			}
		}
	if ($target !~ /^mingw/)
	}

unless ($disabled{"crypto-mdebug-backtrace"})
	{
		foreach $wopt (split /\s+/, $memleak_devteam_backtrace)
	foreach my $wopt (split /\s+/, $memleak_devteam_backtrace)
		{
		$config{cflags} .= " $wopt" unless ($config{cflags} =~ /(^|\s)$wopt(\s|$)/)
		}
@@ -1173,7 +1178,6 @@ if ($strict_warnings)
		$config{ex_libs} .= " -lexecinfo";
		}
	}
	}

if ($user_cflags ne "") { $config{cflags}="$config{cflags}$user_cflags"; }
else                    { $no_user_cflags=1;  }
+6 −5
Original line number Diff line number Diff line
@@ -116,7 +116,8 @@
#include <openssl/buffer.h>
#include <openssl/bio.h>
#include <openssl/lhash.h>
#if defined(CRYPTO_MDEBUG_BACKTRACE) && defined(__GNUC__)

#ifndef OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE
# include <execinfo.h>
#endif

@@ -171,7 +172,7 @@ struct mem_st {
    unsigned long order;
    time_t time;
    APP_INFO *app_info;
#if defined(CRYPTO_MDEBUG_BACKTRACE) && defined(__GNUC__)
#ifndef OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE
    void *array[30];
    size_t array_siz;
#endif
@@ -445,7 +446,7 @@ void CRYPTO_mem_debug_malloc(void *addr, size_t num, int before_p,
                m->order = order;
            }
            m->order = order++;
# if defined(CRYPTO_MDEBUG_BACKTRACE) && defined(__GNUC__)
# ifndef OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE
            m->array_siz = backtrace(m->array, OSSL_NELEM(m->array));
# endif
            m->time = time(NULL);
@@ -525,7 +526,7 @@ void CRYPTO_mem_debug_realloc(void *addr1, void *addr2, size_t num,
            if (mp != NULL) {
                mp->addr = addr2;
                mp->num = num;
#if defined(CRYPTO_MDEBUG_BACKTRACE) && defined(__GNUC__)
#ifndef OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE
                mp->array_siz = backtrace(mp->array, OSSL_NELEM(mp->array));
#endif
                (void)lh_MEM_insert(mh, mp);
@@ -618,7 +619,7 @@ static void print_leak(const MEM *m, MEM_LEAK *l)
        while (amip && !CRYPTO_THREADID_cmp(&amip->threadid, &ti));
    }

#if defined(CRYPTO_MDEBUG_BACKTRACE) && defined(__GNUC__)
#ifndef OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE
    {
        size_t i;
        char **strings = backtrace_symbols(m->array, m->array_siz);