From ab307dc645502d025c2760160062d5032da56bf7 Mon Sep 17 00:00:00 2001 From: David von Oheimb Date: Mon, 8 Jan 2018 14:13:51 +0100 Subject: [PATCH] Various small build improvements on mkdef.pl, progs.pl, crypto/init.c, crypto/mem.c Reviewed-by: Andy Polyakov Reviewed-by: Richard Levitte (Merged from https://github.com/openssl/openssl/pull/4994) --- apps/progs.pl | 2 +- crypto/init.c | 2 +- crypto/mem.c | 13 ++++++++----- util/mkdef.pl | 34 +++++++++++++++++++++------------- 4 files changed, 31 insertions(+), 20 deletions(-) diff --git a/apps/progs.pl b/apps/progs.pl index 65e3453340..921d3d1984 100644 --- a/apps/progs.pl +++ b/apps/progs.pl @@ -26,7 +26,7 @@ my @openssl_source = @{$unified_info{sources}->{$apps_openssl}}; foreach my $filename (@openssl_source) { - open F, $filename or die "Couldn't open $_: $!\n"; + open F, $filename or die "Couldn't open $filename: $!\n"; foreach ( grep /$cmdre/, ) { my @foo = /$cmdre/; $commands{$1} = 1; diff --git a/crypto/init.c b/crypto/init.c index 143e01a44a..a10b48d435 100644 --- a/crypto/init.c +++ b/crypto/init.c @@ -73,7 +73,6 @@ struct ossl_init_stop_st { }; static CRYPTO_RWLOCK *glock_lock = NULL; -static CRYPTO_ONCE glock_once = CRYPTO_ONCE_STATIC_INIT; static OPENSSL_INIT_STOP *stop_handlers = NULL; static CRYPTO_RWLOCK *init_lock = NULL; @@ -726,6 +725,7 @@ DEFINE_RUN_ONCE_STATIC(glock_init) */ CRYPTO_RWLOCK *CRYPTO_THREAD_glock_new(const char *name) { + static CRYPTO_ONCE glock_once = CRYPTO_ONCE_STATIC_INIT; GLOBAL_LOCK *newlock; if (glock_lock == NULL && !RUN_ONCE(&glock_once, glock_init)) diff --git a/crypto/mem.c b/crypto/mem.c index c77584cd5f..920f7999fc 100644 --- a/crypto/mem.c +++ b/crypto/mem.c @@ -136,9 +136,9 @@ static void parseit(void) * Some rand() implementations aren't good, but we're not * dealing with secure randomness here. */ -#ifdef _WIN32 -# define random() rand() -#endif +# ifdef _WIN32 +# define random() rand() +# endif /* * See if the current malloc should fail. */ @@ -146,6 +146,8 @@ static int shouldfail(void) { int roll = (int)(random() % 100); int shoulditfail = roll < md_fail_percent; +# ifndef _WIN32 +/* suppressed on Windows as POSIX-like file descriptors are non-inheritable */ int len; char buff[80]; @@ -156,15 +158,16 @@ static int shouldfail(void) len = strlen(buff); if (write(md_tracefd, buff, len) != len) perror("shouldfail write failed"); -#ifndef OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE +# ifndef OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE if (shoulditfail) { void *addrs[30]; int num = backtrace(addrs, OSSL_NELEM(addrs)); backtrace_symbols_fd(addrs, num, md_tracefd); } -#endif +# endif } +# endif if (md_count) { /* If we used up this one, go to the next. */ diff --git a/util/mkdef.pl b/util/mkdef.pl index 828ddc0f15..16a660f5a5 100755 --- a/util/mkdef.pl +++ b/util/mkdef.pl @@ -106,6 +106,8 @@ use OpenSSL::Glob; (my $SO_VARIANT = qq{\U$target{"shlib_variant"}}) =~ s/\W/_/g; my $debug=0; +my $trace=0; +my $verbose=0; my $crypto_num= catfile($config{sourcedir},"util","libcrypto.num"); my $ssl_num= catfile($config{sourcedir},"util","libssl.num"); @@ -212,6 +214,8 @@ my $zlib; foreach (@ARGV, split(/ /, $config{options})) { $debug=1 if $_ eq "debug"; + $trace=1 if $_ eq "trace"; + $verbose=1 if $_ eq "verbose"; $W32=1 if $_ eq "32"; die "win16 not supported" if $_ eq "16"; if($_ eq "NT") { @@ -389,6 +393,7 @@ sub do_defs { my $fn = catfile($config{sourcedir},$file); print STDERR "DEBUG: starting on $fn:\n" if $debug; + print STDERR "TRACE: start reading $fn\n" if $trace; open(IN,"<$fn") || die "Can't open $fn, $!,"; my $line = "", my $def= ""; my %tag = ( @@ -529,19 +534,19 @@ sub do_defs push(@tag,$1); $tag{$1}=-1; print STDERR "DEBUG: $file: found tag $1 = -1\n" if $debug; - } elsif (/^\#\s*if\s+!defined\(([^\)]+)\)/) { + } elsif (/^\#\s*if\s+!defined\s*\(([^\)]+)\)/) { push(@tag,"-"); - if (/^\#\s*if\s+(!defined\(([^\)]+)\)(\s+\&\&\s+!defined\(([^\)]+)\))*)$/) { + if (/^\#\s*if\s+(!defined\s*\(([^\)]+)\)(\s+\&\&\s+!defined\s*\(([^\)]+)\))*)$/) { my $tmp_1 = $1; my $tmp_; foreach $tmp_ (split '\&\&',$tmp_1) { - $tmp_ =~ /!defined\(([^\)]+)\)/; + $tmp_ =~ /!defined\s*\(([^\)]+)\)/; print STDERR "DEBUG: $file: found tag $1 = -1\n" if $debug; push(@tag,$1); $tag{$1}=-1; } } else { - print STDERR "Warning: $file: complicated expression: $_" if $debug; # because it is O... + print STDERR "Warning: $file: taking only '!defined($1)' of complicated expression: $_" if $verbose; # because it is O... print STDERR "DEBUG: $file: found tag $1 = -1\n" if $debug; push(@tag,$1); $tag{$1}=-1; @@ -551,19 +556,19 @@ sub do_defs push(@tag,$1); $tag{$1}=1; print STDERR "DEBUG: $file: found tag $1 = 1\n" if $debug; - } elsif (/^\#\s*if\s+defined\(([^\)]+)\)/) { + } elsif (/^\#\s*if\s+defined\s*\(([^\)]+)\)/) { push(@tag,"-"); - if (/^\#\s*if\s+(defined\(([^\)]+)\)(\s+\|\|\s+defined\(([^\)]+)\))*)$/) { + if (/^\#\s*if\s+(defined\s*\(([^\)]+)\)(\s+\|\|\s+defined\s*\(([^\)]+)\))*)$/) { my $tmp_1 = $1; my $tmp_; foreach $tmp_ (split '\|\|',$tmp_1) { - $tmp_ =~ /defined\(([^\)]+)\)/; + $tmp_ =~ /defined\s*\(([^\)]+)\)/; print STDERR "DEBUG: $file: found tag $1 = 1\n" if $debug; push(@tag,$1); $tag{$1}=1; } } else { - print STDERR "Warning: $file: complicated expression: $_\n" if $debug; # because it is O... + print STDERR "Warning: $file: taking only 'defined($1)' of complicated expression: $_\n" if $verbose; # because it is O... print STDERR "DEBUG: $file: found tag $1 = 1\n" if $debug; push(@tag,$1); $tag{$1}=1; @@ -628,6 +633,7 @@ sub do_defs } elsif (/^\#\s*if\s+/) { #Some other unrecognized "if" style push(@tag,"-"); + print STDERR "Warning: $file: ignoring unrecognized expression: $_\n" if $verbose; # because it is O... } elsif (/^\#\s*define\s+(\w+)\s+(\w+)/ && $symhacking && $tag{'TRUE'} != -1) { # This is for aliasing. When we find an alias, @@ -921,11 +927,13 @@ sub do_defs next if(/typedef\W/); next if(/\#define/); + print STDERR "TRACE: processing $_\n" if $trace && !/^\#INFO:/; # Reduce argument lists to empty () # fold round brackets recursively: (t(*v)(t),t) -> (t{}{},t) -> {} - while(/\(.*\)/s) { - s/\([^\(\)]+\)/\{\}/gs; - s/\(\s*\*\s*(\w+)\s*\{\}\s*\)/$1/gs; #(*f{}) -> f + my $nsubst = 1; # prevent infinite loop, e.g., on int fn() + while($nsubst && /\(.*\)/s) { + $nsubst = s/\([^\(\)]+\)/\{\}/gs; + $nsubst+= s/\(\s*\*\s*(\w+)\s*\{\}\s*\)/$1/gs; #(*f{}) -> f } # pretend as we didn't use curly braces: {} -> () s/\{\}/\(\)/gs; @@ -1400,9 +1408,9 @@ sub load_numbers $prev=$a[0]; } if ($num_noinfo) { - print STDERR "Warning: $num_noinfo symbols were without info."; + print STDERR "Warning: $num_noinfo symbols were without info." if $verbose || !$do_rewrite; if ($do_rewrite) { - printf STDERR " The rewrite will fix this.\n"; + printf STDERR " The rewrite will fix this.\n" if $verbose; } else { printf STDERR " You should do a rewrite to fix this.\n"; } -- 2.25.1