Moves more than 10k from .data to .rodata .
Reduces RAM usage when openssl is used in multiple process instances:
http://code.google.com/p/chromium/issues/detail?id=249746
Also might help compiler optimizer.


commit b3c85c9c1607a7ddb9f50d99900eafd3bf3c442c
Author: Viatcheslav Ostapenko <sl.ostape...@samsung.com>
Date:   Tue Jan 14 11:40:20 2014 -0500

    Constify tables in openssl
    
    Moves more than 10k from .data to .rodata .
    Reduces RAM usage when openssl is used in multiple process
    instances: http://code.google.com/p/chromium/issues/detail?id=249746
    Also might help compiler optimizer.

diff --git a/crypto/bn/bn_add.c b/crypto/bn/bn_add.c
index f8e6729..257c2ea 100644
--- a/crypto/bn/bn_add.c
+++ b/crypto/bn/bn_add.c
@@ -107,7 +107,8 @@ int BN_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b)
 int BN_uadd(BIGNUM *r, const BIGNUM *a, const BIGNUM *b)
 	{
 	int max,min,dif;
-	BN_ULONG *ap,*bp,*rp,carry,t1,t2;
+	const BN_ULONG *ap,*bp;
+	BN_ULONG *rp,carry,t1,t2;
 	const BIGNUM *tmp;
 
 	bn_check_top(a);
@@ -168,7 +169,8 @@ int BN_uadd(BIGNUM *r, const BIGNUM *a, const BIGNUM *b)
 int BN_usub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b)
 	{
 	int max,min,dif;
-	register BN_ULONG t1,t2,*ap,*bp,*rp;
+	register BN_ULONG t1,t2,*rp;
+	register const BN_ULONG *ap,*bp;
 	int i,carry;
 #if defined(IRIX_CC_BUG) && !defined(LINT)
 	int dummy;
diff --git a/crypto/srp/srp.h b/crypto/srp/srp.h
index 7ec7825..c4017b3 100644
--- a/crypto/srp/srp.h
+++ b/crypto/srp/srp.h
@@ -120,7 +120,7 @@ int SRP_VBASE_init(SRP_VBASE *vb, char * verifier_file);
 SRP_user_pwd *SRP_VBASE_get_by_user(SRP_VBASE *vb, char *username);
 char *SRP_create_verifier(const char *user, const char *pass, char **salt,
 			  char **verifier, const char *N, const char *g);
-int SRP_create_verifier_BN(const char *user, const char *pass, BIGNUM **salt, BIGNUM **verifier, BIGNUM *N, BIGNUM *g);
+int SRP_create_verifier_BN(const char *user, const char *pass, BIGNUM **salt, BIGNUM **verifier, const BIGNUM *N, const BIGNUM *g);
 
 
 #define SRP_NO_ERROR 0
diff --git a/crypto/srp/srp_grps.h b/crypto/srp/srp_grps.h
index 8e3c35e..f4c13c8 100644
--- a/crypto/srp/srp_grps.h
+++ b/crypto/srp/srp_grps.h
@@ -1,6 +1,6 @@
 /* start of generated data */
 
-static BN_ULONG bn_group_1024_value[] = {
+static const BN_ULONG bn_group_1024_value[] = {
 	bn_pack4(0x9FC6,0x1D2F,0xC0EB,0x06E3),
 	bn_pack4(0xFD51,0x38FE,0x8376,0x435B),
 	bn_pack4(0x2FD4,0xCBF4,0x976E,0xAA9A),
@@ -18,15 +18,15 @@ static BN_ULONG bn_group_1024_value[] = {
 	bn_pack4(0x9C33,0xF80A,0xFA8F,0xC5E8),
 	bn_pack4(0xEEAF,0x0AB9,0xADB3,0x8DD6)
 };
-static BIGNUM bn_group_1024 = {
-	bn_group_1024_value,
+static const BIGNUM bn_group_1024 = {
+	(BN_ULONG*)bn_group_1024_value,
 	(sizeof bn_group_1024_value)/sizeof(BN_ULONG),
 	(sizeof bn_group_1024_value)/sizeof(BN_ULONG),
 	0,
 	BN_FLG_STATIC_DATA
 };
 
-static BN_ULONG bn_group_1536_value[] = {
+static const BN_ULONG bn_group_1536_value[] = {
 	bn_pack4(0xCF76,0xE3FE,0xD135,0xF9BB),
 	bn_pack4(0x1518,0x0F93,0x499A,0x234D),
 	bn_pack4(0x8CE7,0xA28C,0x2442,0xC6F3),
@@ -52,15 +52,15 @@ static BN_ULONG bn_group_1536_value[] = {
 	bn_pack4(0xB1F1,0x2A86,0x17A4,0x7BBB),
 	bn_pack4(0x9DEF,0x3CAF,0xB939,0x277A)
 };
-static BIGNUM bn_group_1536 = {
-	bn_group_1536_value,
+static const BIGNUM bn_group_1536 = {
+	(BN_ULONG*)bn_group_1536_value,
 	(sizeof bn_group_1536_value)/sizeof(BN_ULONG),
 	(sizeof bn_group_1536_value)/sizeof(BN_ULONG),
 	0,
 	BN_FLG_STATIC_DATA
 };
 
-static BN_ULONG bn_group_2048_value[] = {
+static const BN_ULONG bn_group_2048_value[] = {
 	bn_pack4(0x0FA7,0x111F,0x9E4A,0xFF73),
 	bn_pack4(0x9B65,0xE372,0xFCD6,0x8EF2),
 	bn_pack4(0x35DE,0x236D,0x525F,0x5475),
@@ -94,15 +94,15 @@ static BN_ULONG bn_group_2048_value[] = {
 	bn_pack4(0xF166,0xDE5E,0x1389,0x582F),
 	bn_pack4(0xAC6B,0xDB41,0x324A,0x9A9B)
 };
-static BIGNUM bn_group_2048 = {
-	bn_group_2048_value,
+static const BIGNUM bn_group_2048 = {
+	(BN_ULONG*)bn_group_2048_value,
 	(sizeof bn_group_2048_value)/sizeof(BN_ULONG),
 	(sizeof bn_group_2048_value)/sizeof(BN_ULONG),
 	0,
 	BN_FLG_STATIC_DATA
 };
 
-static BN_ULONG bn_group_3072_value[] = {
+static const BN_ULONG bn_group_3072_value[] = {
 	bn_pack4(0xFFFF,0xFFFF,0xFFFF,0xFFFF),
 	bn_pack4(0x4B82,0xD120,0xA93A,0xD2CA),
 	bn_pack4(0x43DB,0x5BFC,0xE0FD,0x108E),
@@ -152,15 +152,15 @@ static BN_ULONG bn_group_3072_value[] = {
 	bn_pack4(0xC90F,0xDAA2,0x2168,0xC234),
 	bn_pack4(0xFFFF,0xFFFF,0xFFFF,0xFFFF)
 };
-static BIGNUM bn_group_3072 = {
-	bn_group_3072_value,
+static const BIGNUM bn_group_3072 = {
+	(BN_ULONG*)bn_group_3072_value,
 	(sizeof bn_group_3072_value)/sizeof(BN_ULONG),
 	(sizeof bn_group_3072_value)/sizeof(BN_ULONG),
 	0,
 	BN_FLG_STATIC_DATA
 };
 
-static BN_ULONG bn_group_4096_value[] = {
+static const BN_ULONG bn_group_4096_value[] = {
 	bn_pack4(0xFFFF,0xFFFF,0xFFFF,0xFFFF),
 	bn_pack4(0x4DF4,0x35C9,0x3406,0x3199),
 	bn_pack4(0x86FF,0xB7DC,0x90A6,0xC08F),
@@ -226,15 +226,15 @@ static BN_ULONG bn_group_4096_value[] = {
 	bn_pack4(0xC90F,0xDAA2,0x2168,0xC234),
 	bn_pack4(0xFFFF,0xFFFF,0xFFFF,0xFFFF)
 };
-static BIGNUM bn_group_4096 = {
-	bn_group_4096_value,
+static const BIGNUM bn_group_4096 = {
+	(BN_ULONG*)bn_group_4096_value,
 	(sizeof bn_group_4096_value)/sizeof(BN_ULONG),
 	(sizeof bn_group_4096_value)/sizeof(BN_ULONG),
 	0,
 	BN_FLG_STATIC_DATA
 };
 
-static BN_ULONG bn_group_6144_value[] = {
+static const BN_ULONG bn_group_6144_value[] = {
 	bn_pack4(0xFFFF,0xFFFF,0xFFFF,0xFFFF),
 	bn_pack4(0xE694,0xF91E,0x6DCC,0x4024),
 	bn_pack4(0x12BF,0x2D5B,0x0B74,0x74D6),
@@ -332,15 +332,15 @@ static BN_ULONG bn_group_6144_value[] = {
 	bn_pack4(0xC90F,0xDAA2,0x2168,0xC234),
 	bn_pack4(0xFFFF,0xFFFF,0xFFFF,0xFFFF)
 };
-static BIGNUM bn_group_6144 = {
-	bn_group_6144_value,
+static const BIGNUM bn_group_6144 = {
+	(BN_ULONG*)bn_group_6144_value,
 	(sizeof bn_group_6144_value)/sizeof(BN_ULONG),
 	(sizeof bn_group_6144_value)/sizeof(BN_ULONG),
 	0,
 	BN_FLG_STATIC_DATA
 };
 
-static BN_ULONG bn_group_8192_value[] = {
+static const BN_ULONG bn_group_8192_value[] = {
 	bn_pack4(0xFFFF,0xFFFF,0xFFFF,0xFFFF),
 	bn_pack4(0x60C9,0x80DD,0x98ED,0xD3DF),
 	bn_pack4(0xC81F,0x56E8,0x80B9,0x6E71),
@@ -470,47 +470,47 @@ static BN_ULONG bn_group_8192_value[] = {
 	bn_pack4(0xC90F,0xDAA2,0x2168,0xC234),
 	bn_pack4(0xFFFF,0xFFFF,0xFFFF,0xFFFF)
 };
-static BIGNUM bn_group_8192 = {
-	bn_group_8192_value,
+static const BIGNUM bn_group_8192 = {
+	(BN_ULONG*)bn_group_8192_value,
 	(sizeof bn_group_8192_value)/sizeof(BN_ULONG),
 	(sizeof bn_group_8192_value)/sizeof(BN_ULONG),
 	0,
 	BN_FLG_STATIC_DATA
 };
 
-static BN_ULONG bn_generator_19_value[] = {19} ;
-static BIGNUM bn_generator_19 = {
-	bn_generator_19_value,
+static const BN_ULONG bn_generator_19_value[] = {19} ;
+static const BIGNUM bn_generator_19 = {
+	(BN_ULONG*)bn_generator_19_value,
 	1,
 	1,
 	0,
 	BN_FLG_STATIC_DATA
 };
-static BN_ULONG bn_generator_5_value[] = {5} ;
-static BIGNUM bn_generator_5 = {
-	bn_generator_5_value,
+static const BN_ULONG bn_generator_5_value[] = {5} ;
+static const BIGNUM bn_generator_5 = {
+	(BN_ULONG*)bn_generator_5_value,
 	1,
 	1,
 	0,
 	BN_FLG_STATIC_DATA
 };
-static BN_ULONG bn_generator_2_value[] = {2} ;
-static BIGNUM bn_generator_2 = {
-	bn_generator_2_value,
+static const BN_ULONG bn_generator_2_value[] = {2} ;
+static const BIGNUM bn_generator_2 = {
+	(BN_ULONG*)bn_generator_2_value,
 	1,
 	1,
 	0,
 	BN_FLG_STATIC_DATA
 };
 
-static SRP_gN knowngN[] = {
-	{"8192",&bn_generator_19 , &bn_group_8192},
-	{"6144",&bn_generator_5 , &bn_group_6144},
-	{"4096",&bn_generator_5 , &bn_group_4096},
-	{"3072",&bn_generator_5 , &bn_group_3072},
-	{"2048",&bn_generator_2 , &bn_group_2048},
-	{"1536",&bn_generator_2 , &bn_group_1536},
-	{"1024",&bn_generator_2 , &bn_group_1024},
+static const SRP_gN knowngN[] = {
+	{"8192",(BIGNUM*)&bn_generator_19 , (BIGNUM*)&bn_group_8192},
+	{"6144",(BIGNUM*)&bn_generator_5 , (BIGNUM*)&bn_group_6144},
+	{"4096",(BIGNUM*)&bn_generator_5 , (BIGNUM*)&bn_group_4096},
+	{"3072",(BIGNUM*)&bn_generator_5 , (BIGNUM*)&bn_group_3072},
+	{"2048",(BIGNUM*)&bn_generator_2 , (BIGNUM*)&bn_group_2048},
+	{"1536",(BIGNUM*)&bn_generator_2 , (BIGNUM*)&bn_group_1536},
+	{"1024",(BIGNUM*)&bn_generator_2 , (BIGNUM*)&bn_group_1024},
 };
 #define KNOWN_GN_NUMBER sizeof(knowngN) / sizeof(SRP_gN)
 
diff --git a/crypto/srp/srp_vfy.c b/crypto/srp/srp_vfy.c
index 6889a6b..080606d 100644
--- a/crypto/srp/srp_vfy.c
+++ b/crypto/srp/srp_vfy.c
@@ -605,7 +605,7 @@ err:
 /*
    create a verifier (*salt,*verifier,g and N are BIGNUMs)
 */
-int SRP_create_verifier_BN(const char *user, const char *pass, BIGNUM **salt, BIGNUM **verifier, BIGNUM *N, BIGNUM *g)
+int SRP_create_verifier_BN(const char *user, const char *pass, BIGNUM **salt, BIGNUM **verifier, const BIGNUM *N, const BIGNUM *g)
 	{
 	int result=0;
 	BIGNUM *x = NULL;
diff --git a/ssl/d1_lib.c b/ssl/d1_lib.c
index 2b066e0..df29da5 100644
--- a/ssl/d1_lib.c
+++ b/ssl/d1_lib.c
@@ -72,7 +72,7 @@ static int dtls1_handshake_write(SSL *s);
 const char dtls1_version_str[]="DTLSv1" OPENSSL_VERSION_PTEXT;
 int dtls1_listen(SSL *s, struct sockaddr *client);
 
-SSL3_ENC_METHOD DTLSv1_enc_data={
+const SSL3_ENC_METHOD DTLSv1_enc_data={
     	tls1_enc,
 	tls1_mac,
 	tls1_setup_key_block,
@@ -91,7 +91,7 @@ SSL3_ENC_METHOD DTLSv1_enc_data={
 	dtls1_handshake_write	
 	};
 
-SSL3_ENC_METHOD DTLSv1_2_enc_data={
+const SSL3_ENC_METHOD DTLSv1_2_enc_data={
     	tls1_enc,
 	tls1_mac,
 	tls1_setup_key_block,
diff --git a/ssl/s3_lib.c b/ssl/s3_lib.c
index 5c8aa13..d738b2d 100644
--- a/ssl/s3_lib.c
+++ b/ssl/s3_lib.c
@@ -162,7 +162,7 @@ const char ssl3_version_str[]="SSLv3" OPENSSL_VERSION_PTEXT;
 #define SSL3_NUM_CIPHERS	(sizeof(ssl3_ciphers)/sizeof(SSL_CIPHER))
 
 /* list of available SSLv3 ciphers (sorted by id) */
-OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={
+OPENSSL_GLOBAL const SSL_CIPHER ssl3_ciphers[]={
 
 /* The RSA ciphers */
 /* Cipher 01 */
@@ -2903,7 +2903,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={
 /* end of list */
 	};
 
-SSL3_ENC_METHOD SSLv3_enc_data={
+const SSL3_ENC_METHOD SSLv3_enc_data={
 	ssl3_enc,
 	n_ssl3_mac,
 	ssl3_setup_key_block,
diff --git a/ssl/ssl.h b/ssl/ssl.h
index 3c49a38..c2269e1 100644
--- a/ssl/ssl.h
+++ b/ssl/ssl.h
@@ -544,7 +544,7 @@ struct ssl_method_st
 	const SSL_CIPHER *(*get_cipher)(unsigned ncipher);
 	const struct ssl_method_st *(*get_ssl_method)(int version);
 	long (*get_timeout)(void);
-	struct ssl3_enc_method *ssl3_enc; /* Extra SSLv3/TLS stuff */
+	const struct ssl3_enc_method *ssl3_enc; /* Extra SSLv3/TLS stuff */
 	int (*ssl_version)(void);
 	long (*ssl_callback_ctrl)(SSL *s, int cb_id, void (*fp)(void));
 	long (*ssl_ctx_callback_ctrl)(SSL_CTX *s, int cb_id, void (*fp)(void));
diff --git a/ssl/ssl_lib.c b/ssl/ssl_lib.c
index 3c7d54d..bcaafb7 100644
--- a/ssl/ssl_lib.c
+++ b/ssl/ssl_lib.c
@@ -162,7 +162,7 @@
 
 const char *SSL_version_str=OPENSSL_VERSION_TEXT;
 
-SSL3_ENC_METHOD ssl3_undef_enc_method={
+const SSL3_ENC_METHOD ssl3_undef_enc_method={
 	/* evil casts, but these functions are only called if there's a library bug */
 	(int (*)(SSL *,int))ssl_undefined_function,
 	(int (*)(SSL *, unsigned char *, int))ssl_undefined_function,
diff --git a/ssl/ssl_locl.h b/ssl/ssl_locl.h
index c493f7e..aef92a6 100644
--- a/ssl/ssl_locl.h
+++ b/ssl/ssl_locl.h
@@ -761,19 +761,19 @@ typedef struct ssl3_buf_freelist_entry_st
 	} SSL3_BUF_FREELIST_ENTRY;
 #endif
 
-extern SSL3_ENC_METHOD ssl3_undef_enc_method;
+extern const SSL3_ENC_METHOD ssl3_undef_enc_method;
 OPENSSL_EXTERN const SSL_CIPHER ssl2_ciphers[];
-OPENSSL_EXTERN SSL_CIPHER ssl3_ciphers[];
+OPENSSL_EXTERN const SSL_CIPHER ssl3_ciphers[];
 
 
 SSL_METHOD *ssl_bad_method(int ver);
 
-extern SSL3_ENC_METHOD TLSv1_enc_data;
-extern SSL3_ENC_METHOD TLSv1_1_enc_data;
-extern SSL3_ENC_METHOD TLSv1_2_enc_data;
-extern SSL3_ENC_METHOD SSLv3_enc_data;
-extern SSL3_ENC_METHOD DTLSv1_enc_data;
-extern SSL3_ENC_METHOD DTLSv1_2_enc_data;
+extern const SSL3_ENC_METHOD TLSv1_enc_data;
+extern const SSL3_ENC_METHOD TLSv1_1_enc_data;
+extern const SSL3_ENC_METHOD TLSv1_2_enc_data;
+extern const SSL3_ENC_METHOD SSLv3_enc_data;
+extern const SSL3_ENC_METHOD DTLSv1_enc_data;
+extern const SSL3_ENC_METHOD DTLSv1_2_enc_data;
 
 #define IMPLEMENT_tls_meth_func(version, func_name, s_accept, s_connect, \
 				s_get_meth, enc_data) \
diff --git a/ssl/t1_lib.c b/ssl/t1_lib.c
index 628aee2..d720f9b 100644
--- a/ssl/t1_lib.c
+++ b/ssl/t1_lib.c
@@ -127,7 +127,7 @@ static int ssl_check_clienthello_tlsext_early(SSL *s);
 int ssl_check_serverhello_tlsext(SSL *s);
 #endif
 
-SSL3_ENC_METHOD TLSv1_enc_data={
+const SSL3_ENC_METHOD TLSv1_enc_data={
 	tls1_enc,
 	tls1_mac,
 	tls1_setup_key_block,
@@ -146,7 +146,7 @@ SSL3_ENC_METHOD TLSv1_enc_data={
 	ssl3_handshake_write
 	};
 
-SSL3_ENC_METHOD TLSv1_1_enc_data={
+const SSL3_ENC_METHOD TLSv1_1_enc_data={
 	tls1_enc,
 	tls1_mac,
 	tls1_setup_key_block,
@@ -165,7 +165,7 @@ SSL3_ENC_METHOD TLSv1_1_enc_data={
 	ssl3_handshake_write
 	};
 
-SSL3_ENC_METHOD TLSv1_2_enc_data={
+const SSL3_ENC_METHOD TLSv1_2_enc_data={
 	tls1_enc,
 	tls1_mac,
 	tls1_setup_key_block,
@@ -218,7 +218,7 @@ void tls1_clear(SSL *s)
 
 #ifndef OPENSSL_NO_EC
 
-static int nid_list[] =
+static const int nid_list[] =
 	{
 		NID_sect163k1, /* sect163k1 (1) */
 		NID_sect163r1, /* sect163r1 (2) */
@@ -864,7 +864,7 @@ static int tls1_check_cert_param(SSL *s, X509 *x, int set_ee_md)
 		tlsext_sigalg_dsa(md) \
 		tlsext_sigalg_ecdsa(md)
 
-static unsigned char tls12_sigalgs[] = {
+static const unsigned char tls12_sigalgs[] = {
 #ifndef OPENSSL_NO_SHA512
 	tlsext_sigalg(TLSEXT_hash_sha512)
 	tlsext_sigalg(TLSEXT_hash_sha384)
@@ -878,7 +878,7 @@ static unsigned char tls12_sigalgs[] = {
 #endif
 };
 #ifndef OPENSSL_NO_ECDSA
-static unsigned char suiteb_sigalgs[] = {
+static const unsigned char suiteb_sigalgs[] = {
 	tlsext_sigalg_ecdsa(TLSEXT_hash_sha256)
 	tlsext_sigalg_ecdsa(TLSEXT_hash_sha384)
 };

Reply via email to