summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Dearman <chris@mips.com>2012-08-01 16:59:41 -0700
committerDuane Sand <duanes@mips.com>2012-08-15 10:31:19 -0700
commit2178392bec7b69d0f469bce29f653c9fbd09b614 (patch)
tree045e26757a2326c56326890e543ed0d87fb2b1f6
parent2a9ba31461c7a3bd16f382baa2033d0141d08a8d (diff)
downloadreplicant_openssl-2178392bec7b69d0f469bce29f653c9fbd09b614.zip
replicant_openssl-2178392bec7b69d0f469bce29f653c9fbd09b614.tar.gz
replicant_openssl-2178392bec7b69d0f469bce29f653c9fbd09b614.tar.bz2
[MIPS] Append private_ to AES_set_encrypt_key and AES_set_decrypt_key for MIPS.
Update import script to generate o32 .s files for MIPS. Release 1.0.1 of openssl renamed the C and assembler routines for AES_set_encrypt_key() and AES_set_decrypt_key(), but forgot to do this in the Mips assembler version. The following mips_private.patch fixes that problem in the upstream source, until such time as it is fixed upstream. The upstream version of openssl builds for a "n32" Mips abi used on SGI workstations. Android's import_openssl.sh script is now modified to build for the "o32" abi used throughout Mips Android. That change is permanent, and will not be upstreamed. Signed-off-by: Raghu Gandham <raghu@mips.com> Change-Id: Iec5ce7f11a74a3674e96057f2ce97d8ba9238464
-rw-r--r--crypto/aes/asm/aes-mips.pl20
-rw-r--r--crypto/aes/asm/aes-mips.s28
-rw-r--r--crypto/bn/asm/mips-mont.s2
-rw-r--r--crypto/sha/asm/sha256-mips.s3
-rwxr-xr-ximport_openssl.sh13
-rw-r--r--openssl.config5
-rw-r--r--patches/README7
-rw-r--r--patches/mips_private.patch64
8 files changed, 109 insertions, 33 deletions
diff --git a/crypto/aes/asm/aes-mips.pl b/crypto/aes/asm/aes-mips.pl
index 2ce6def..e523954 100644
--- a/crypto/aes/asm/aes-mips.pl
+++ b/crypto/aes/asm/aes-mips.pl
@@ -1036,9 +1036,9 @@ _mips_AES_set_encrypt_key:
nop
.end _mips_AES_set_encrypt_key
-.globl AES_set_encrypt_key
-.ent AES_set_encrypt_key
-AES_set_encrypt_key:
+.globl private_AES_set_encrypt_key
+.ent private_AES_set_encrypt_key
+private_AES_set_encrypt_key:
.frame $sp,$FRAMESIZE,$ra
.mask $SAVED_REGS_MASK,-$SZREG
.set noreorder
@@ -1060,7 +1060,7 @@ $code.=<<___ if ($flavour =~ /nubi/i); # optimize non-nubi prologue
___
$code.=<<___ if ($flavour !~ /o32/i); # non-o32 PIC-ification
.cplocal $Tbl
- .cpsetup $pf,$zero,AES_set_encrypt_key
+ .cpsetup $pf,$zero,private_AES_set_encrypt_key
___
$code.=<<___;
.set reorder
@@ -1083,7 +1083,7 @@ ___
$code.=<<___;
jr $ra
$PTR_ADD $sp,$FRAMESIZE
-.end AES_set_encrypt_key
+.end private_AES_set_encrypt_key
___
my ($head,$tail)=($inp,$bits);
@@ -1091,9 +1091,9 @@ my ($tp1,$tp2,$tp4,$tp8,$tp9,$tpb,$tpd,$tpe)=($a4,$a5,$a6,$a7,$s0,$s1,$s2,$s3);
my ($m,$x80808080,$x7f7f7f7f,$x1b1b1b1b)=($at,$t0,$t1,$t2);
$code.=<<___;
.align 5
-.globl AES_set_decrypt_key
-.ent AES_set_decrypt_key
-AES_set_decrypt_key:
+.globl private_AES_set_decrypt_key
+.ent private_AES_set_decrypt_key
+private_AES_set_decrypt_key:
.frame $sp,$FRAMESIZE,$ra
.mask $SAVED_REGS_MASK,-$SZREG
.set noreorder
@@ -1115,7 +1115,7 @@ $code.=<<___ if ($flavour =~ /nubi/i); # optimize non-nubi prologue
___
$code.=<<___ if ($flavour !~ /o32/i); # non-o32 PIC-ification
.cplocal $Tbl
- .cpsetup $pf,$zero,AES_set_decrypt_key
+ .cpsetup $pf,$zero,private_AES_set_decrypt_key
___
$code.=<<___;
.set reorder
@@ -1226,7 +1226,7 @@ ___
$code.=<<___;
jr $ra
$PTR_ADD $sp,$FRAMESIZE
-.end AES_set_decrypt_key
+.end private_AES_set_decrypt_key
___
}}}
diff --git a/crypto/aes/asm/aes-mips.s b/crypto/aes/asm/aes-mips.s
index 0c1d85a..f5750bf 100644
--- a/crypto/aes/asm/aes-mips.s
+++ b/crypto/aes/asm/aes-mips.s
@@ -259,6 +259,7 @@ AES_encrypt:
.frame $29,64,$31
.mask 3237937152,-4
.set noreorder
+ .cpload $25
sub $29,64
sw $31,64-1*4($29)
sw $30,64-2*4($29)
@@ -270,8 +271,6 @@ AES_encrypt:
sw $18,64-8*4($29)
sw $17,64-9*4($29)
sw $16,64-10*4($29)
- .cplocal $7
- .cpsetup $25,$0,AES_encrypt
.set reorder
la $7,AES_Te # PIC-ified 'load address'
@@ -567,6 +566,7 @@ AES_decrypt:
.frame $29,64,$31
.mask 3237937152,-4
.set noreorder
+ .cpload $25
sub $29,64
sw $31,64-1*4($29)
sw $30,64-2*4($29)
@@ -578,8 +578,6 @@ AES_decrypt:
sw $18,64-8*4($29)
sw $17,64-9*4($29)
sw $16,64-10*4($29)
- .cplocal $7
- .cpsetup $25,$0,AES_decrypt
.set reorder
la $7,AES_Td # PIC-ified 'load address'
@@ -870,17 +868,16 @@ _mips_AES_set_encrypt_key:
nop
.end _mips_AES_set_encrypt_key
-.globl AES_set_encrypt_key
-.ent AES_set_encrypt_key
-AES_set_encrypt_key:
+.globl private_AES_set_encrypt_key
+.ent private_AES_set_encrypt_key
+private_AES_set_encrypt_key:
.frame $29,32,$31
.mask 3221225472,-4
.set noreorder
+ .cpload $25
sub $29,32
sw $31,32-1*4($29)
sw $30,32-2*4($29)
- .cplocal $7
- .cpsetup $25,$0,AES_set_encrypt_key
.set reorder
la $7,AES_Te # PIC-ified 'load address'
@@ -892,19 +889,18 @@ AES_set_encrypt_key:
lw $30,32-2*4($29)
jr $31
add $29,32
-.end AES_set_encrypt_key
+.end private_AES_set_encrypt_key
.align 5
-.globl AES_set_decrypt_key
-.ent AES_set_decrypt_key
-AES_set_decrypt_key:
+.globl private_AES_set_decrypt_key
+.ent private_AES_set_decrypt_key
+private_AES_set_decrypt_key:
.frame $29,32,$31
.mask 3221225472,-4
.set noreorder
+ .cpload $25
sub $29,32
sw $31,32-1*4($29)
sw $30,32-2*4($29)
- .cplocal $7
- .cpsetup $25,$0,AES_set_decrypt_key
.set reorder
la $7,AES_Te # PIC-ified 'load address'
@@ -1004,7 +1000,7 @@ AES_set_decrypt_key:
lw $30,32-2*4($29)
jr $31
add $29,32
-.end AES_set_decrypt_key
+.end private_AES_set_decrypt_key
.rdata
.align 6
AES_Te:
diff --git a/crypto/bn/asm/mips-mont.s b/crypto/bn/asm/mips-mont.s
index 867de6f..32ecee5 100644
--- a/crypto/bn/asm/mips-mont.s
+++ b/crypto/bn/asm/mips-mont.s
@@ -7,6 +7,8 @@
.globl bn_mul_mont
.ent bn_mul_mont
bn_mul_mont:
+ lw $8,16($29)
+ lw $9,20($29)
slt $1,$9,4
bnez $1,1f
li $2,0
diff --git a/crypto/sha/asm/sha256-mips.s b/crypto/sha/asm/sha256-mips.s
index 83876d9..5fc697f 100644
--- a/crypto/sha/asm/sha256-mips.s
+++ b/crypto/sha/asm/sha256-mips.s
@@ -15,6 +15,7 @@ sha256_block_data_order:
.frame $29,128,$31
.mask 3237937152,-4
.set noreorder
+ .cpload $25
sub $29,128
sw $31,128-1*4($29)
sw $30,128-2*4($29)
@@ -27,8 +28,6 @@ sha256_block_data_order:
sw $17,128-9*4($29)
sw $16,128-10*4($29)
sll $23,$6,6
- .cplocal $6
- .cpsetup $25,$0,sha256_block_data_order
.set reorder
la $6,K256 # PIC-ified 'load address'
diff --git a/import_openssl.sh b/import_openssl.sh
index 59952e1..e4e46c7 100755
--- a/import_openssl.sh
+++ b/import_openssl.sh
@@ -139,11 +139,14 @@ function import() {
perl crypto/sha/asm/sha512-armv4.pl > crypto/sha/asm/sha512-armv4.s
# Generate mips asm
- perl crypto/aes/asm/aes-mips.pl > crypto/aes/asm/aes-mips.s
- perl crypto/bn/asm/mips.pl > crypto/bn/asm/bn-mips.s
- perl crypto/bn/asm/mips-mont.pl > crypto/bn/asm/mips-mont.s
- perl crypto/sha/asm/sha1-mips.pl > crypto/sha/asm/sha1-mips.s
- perl crypto/sha/asm/sha512-mips.pl > crypto/sha/asm/sha256-mips.s
+ # The perl scripts expect to run the target compiler as $CC to determine
+ # the endianess of the target. Setting CC to true is a hack that forces the scripts
+ # to generate little endian output
+ CC=true perl crypto/aes/asm/aes-mips.pl o32 > crypto/aes/asm/aes-mips.s
+ CC=true perl crypto/bn/asm/mips.pl o32 > crypto/bn/asm/bn-mips.s
+ CC=true perl crypto/bn/asm/mips-mont.pl o32 > crypto/bn/asm/mips-mont.s
+ CC=true perl crypto/sha/asm/sha1-mips.pl o32 > crypto/sha/asm/sha1-mips.s
+ CC=true perl crypto/sha/asm/sha512-mips.pl o32 > crypto/sha/asm/sha256-mips.s
# Setup android.testssl directory
mkdir android.testssl
diff --git a/openssl.config b/openssl.config
index 7109f03..bf7489a 100644
--- a/openssl.config
+++ b/openssl.config
@@ -203,6 +203,7 @@ small_records.patch \
handshake_cutthrough.patch \
jsse.patch \
sha1_armv4_large.patch \
+mips_private.patch \
"
OPENSSL_PATCHES_progs_SOURCES="\
@@ -248,3 +249,7 @@ ssl/ssl_locl.h
ssl/ssl_rsa.c \
ssl/ssl_sess.c \
"
+
+OPENSSL_PATCHES_mips_private_SOURCES="\
+crypto/aes/asm/aes-mips.pl \
+"
diff --git a/patches/README b/patches/README
index 7fd8093..d9f1b30 100644
--- a/patches/README
+++ b/patches/README
@@ -29,3 +29,10 @@ Support for JSSE implementation based on OpenSSL.
sha1_armv4_large.patch
This patch eliminates memory stores to addresses below SP.
+
+
+mips_private.patch:
+
+Fix duplicate defines of labels AES_set_encrypt_key and AES_set_decrypt_key
+by prefixing Mips version with private_ .
+Revise import script to generate o32-abi .s files for Mips.
diff --git a/patches/mips_private.patch b/patches/mips_private.patch
new file mode 100644
index 0000000..97c076a
--- /dev/null
+++ b/patches/mips_private.patch
@@ -0,0 +1,64 @@
+--- openssl-1.0.1c.orig/crypto/aes/asm/aes-mips.pl 2011-11-14 20:55:23.000000000 +0000
++++ openssl-1.0.1c/crypto/aes/asm/aes-mips.pl 2012-08-14 22:13:55.250604273 +0000
+@@ -1036,9 +1036,9 @@ _mips_AES_set_encrypt_key:
+ nop
+ .end _mips_AES_set_encrypt_key
+
+-.globl AES_set_encrypt_key
+-.ent AES_set_encrypt_key
+-AES_set_encrypt_key:
++.globl private_AES_set_encrypt_key
++.ent private_AES_set_encrypt_key
++private_AES_set_encrypt_key:
+ .frame $sp,$FRAMESIZE,$ra
+ .mask $SAVED_REGS_MASK,-$SZREG
+ .set noreorder
+@@ -1060,7 +1060,7 @@ $code.=<<___ if ($flavour =~ /nubi/i); #
+ ___
+ $code.=<<___ if ($flavour !~ /o32/i); # non-o32 PIC-ification
+ .cplocal $Tbl
+- .cpsetup $pf,$zero,AES_set_encrypt_key
++ .cpsetup $pf,$zero,private_AES_set_encrypt_key
+ ___
+ $code.=<<___;
+ .set reorder
+@@ -1083,7 +1083,7 @@ ___
+ $code.=<<___;
+ jr $ra
+ $PTR_ADD $sp,$FRAMESIZE
+-.end AES_set_encrypt_key
++.end private_AES_set_encrypt_key
+ ___
+
+ my ($head,$tail)=($inp,$bits);
+@@ -1091,9 +1091,9 @@ my ($tp1,$tp2,$tp4,$tp8,$tp9,$tpb,$tpd,$
+ my ($m,$x80808080,$x7f7f7f7f,$x1b1b1b1b)=($at,$t0,$t1,$t2);
+ $code.=<<___;
+ .align 5
+-.globl AES_set_decrypt_key
+-.ent AES_set_decrypt_key
+-AES_set_decrypt_key:
++.globl private_AES_set_decrypt_key
++.ent private_AES_set_decrypt_key
++private_AES_set_decrypt_key:
+ .frame $sp,$FRAMESIZE,$ra
+ .mask $SAVED_REGS_MASK,-$SZREG
+ .set noreorder
+@@ -1115,7 +1115,7 @@ $code.=<<___ if ($flavour =~ /nubi/i); #
+ ___
+ $code.=<<___ if ($flavour !~ /o32/i); # non-o32 PIC-ification
+ .cplocal $Tbl
+- .cpsetup $pf,$zero,AES_set_decrypt_key
++ .cpsetup $pf,$zero,private_AES_set_decrypt_key
+ ___
+ $code.=<<___;
+ .set reorder
+@@ -1226,7 +1226,7 @@ ___
+ $code.=<<___;
+ jr $ra
+ $PTR_ADD $sp,$FRAMESIZE
+-.end AES_set_decrypt_key
++.end private_AES_set_decrypt_key
+ ___
+ }}}
+