Commit e41c8d6a authored by Geoff Thorpe's avatar Geoff Thorpe
Browse files

This change will cause builds (by default) to not use different STACK

structures and functions for each stack type. The previous behaviour
can be enabled by configuring with the "-DDEBUG_SAFESTACK" option.
This will also cause "make update" (mkdef.pl in particular) to
update the libeay.num and ssleay.num symbol tables with the number of
extra functions DEBUG_SAFESTACK creates.

The way this change works is to accompany each DECLARE_STACK_OF()
macro with a set of "#define"d versions of the sk_##type##_***
functions that ensures all the existing "type-safe" stack calls are
precompiled into the underlying stack calls. The presence or abscence
of the DEBUG_SAFESTACK symbol controls whether this block of
"#define"s or the DECLARE_STACK_OF() macro is taking effect. The
block of "#define"s is in turn generated and maintained by a perl
script (util/mkstack.pl) that encompasses the block with delimiting
C comments. This works in a similar way to the auto-generated error
codes and, like the other such maintenance utilities, is invoked
by the "make update" target.

A long (but mundane) commit will follow this with the results of
"make update" - this will include all the "#define" blocks for
each DECLARE_STACK_OF() statement, along with stripped down
libeay.num and ssleay.num files.
parent ccd86b68
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -4,6 +4,14 @@

 Changes between 0.9.5a and 0.9.6  [xx XXX 2000]

  *) The type-safe stack code has been rejigged. It is now only compiled
     in when OpenSSL is configured with the DEBUG_SAFESTACK option and
     by default all type-specific stack functions are "#define"d back to
     standard stack functions. This results in more streamlined output
     but retains the type-safety checking possibilities of the original
     approach.
     [Geoff Thorpe]

  *) The STACK code has been cleaned up, and certain type declarations
     that didn't make a lot of sense have been brought in line. This has
     also involved a cleanup of sorts in safestack.h to more correctly
+4 −1
Original line number Diff line number Diff line
@@ -34,6 +34,9 @@ my $usage="Usage: Configure [no-<cipher> ...] [-Dxxx] [-lxxx] [-Lxxx] [-fxxx] [-
# no-<cipher>   build without specified algorithm (rsa, idea, rc5, ...)
# -<xxx> +<xxx> compiler options are passed through 
#
# DEBUG_SAFESTACK use type-safe stacks to enforce type-safety on stack items
#		provided to stack calls. Generates unique stack functions for
#		each possible stack type.
# DES_PTR	use pointer lookup vs arrays in the DES in crypto/des/des_locl.h
# DES_RISC1	use different DES_ENCRYPT macro that helps reduce register
#		dependancies but needs to more registers, good for RISC CPU's
+4 −1
Original line number Diff line number Diff line
@@ -299,6 +299,9 @@ tags:
errors:
	perl util/mkerr.pl -recurse -write

stacks:
	perl util/mkstack.pl -recurse

util/libeay.num::
	perl util/mkdef.pl crypto update

@@ -312,7 +315,7 @@ TABLE: Configure
	(echo 'Output of `Configure TABLE'"':"; \
	perl Configure TABLE) > TABLE

update: depend errors util/libeay.num util/ssleay.num crypto/objects/obj_dat.h TABLE
update: depend errors stacks util/libeay.num util/ssleay.num crypto/objects/obj_dat.h TABLE

tar:
	@$(TAR) $(TARFLAGS) -cvf - \
+11 −0
Original line number Diff line number Diff line
@@ -57,6 +57,8 @@

#include <openssl/stack.h>

#ifdef DEBUG_SAFESTACK

#define STACK_OF(type) struct stack_st_##type
#define PREDECLARE_STACK_OF(type) STACK_OF(type);

@@ -133,4 +135,13 @@ type *sk_##type##_pop(STACK_OF(type) *sk) \
void sk_##type##_sort(STACK_OF(type) *sk) \
    { sk_sort((STACK *)sk); }

#else

#define STACK_OF(type) STACK
#define PREDECLARE_STACK_OF(type) /* nada */
#define DECLARE_STACK_OF(type)    /* nada */
#define IMPLEMENT_STACK_OF(type)  /* nada */

#endif

#endif /* ndef HEADER_SAFESTACK_H */
+3 −1
Original line number Diff line number Diff line
@@ -18,7 +18,7 @@ my $rsaref = 0;
my $W32=1;
my $NT=0;
# Set this to make typesafe STACK definitions appear in DEF
my $safe_stack_def = 1;
my $safe_stack_def = 0;

my $options="";
open(IN,"<Makefile.ssl") || die "unable to open Makefile.ssl!\n";
@@ -49,6 +49,7 @@ foreach (@ARGV, split(/ /, $options))
	$do_update=1 if $_ eq "update";
	$do_ctest=1 if $_ eq "ctest";
	$rsaref=1 if $_ eq "rsaref";
	$safe_stack_def=1 if $_ eq "-DDEBUG_SAFESTACK";

	if    (/^no-rc2$/)      { $no_rc2=1; }
	elsif (/^no-rc4$/)      { $no_rc4=1; }
@@ -363,6 +364,7 @@ sub do_defs
		foreach (split /;/, $def) {
			s/^[\n\s]*//g;
			s/[\n\s]*$//g;
			next if(/#define/);
			next if(/typedef\W/);
			next if(/EVP_bf/ and $no_bf);
			next if(/EVP_cast/ and $no_cast);
Loading