From dc4b2cf3e0979364f14ff89a07ffafc47435e2e7 Mon Sep 17 00:00:00 2001 From: miod <> Date: Wed, 1 Feb 2023 20:45:04 +0000 Subject: Move all data blocks from .text to .rodata and cleanup up and homogeneize code responsible from getting the proper address of those blocks. ok tb@ jsing@ --- src/lib/libcrypto/sha/asm/sha1-586.pl | 26 ++++++++++++-------------- src/lib/libcrypto/sha/asm/sha256-586.pl | 14 +++++++------- src/lib/libcrypto/sha/asm/sha512-586.pl | 18 ++++++++++-------- 3 files changed, 29 insertions(+), 29 deletions(-) (limited to 'src/lib/libcrypto/sha') diff --git a/src/lib/libcrypto/sha/asm/sha1-586.pl b/src/lib/libcrypto/sha/asm/sha1-586.pl index 1de5e2650e..5928e083c1 100644 --- a/src/lib/libcrypto/sha/asm/sha1-586.pl +++ b/src/lib/libcrypto/sha/asm/sha1-586.pl @@ -295,11 +295,9 @@ if ($xmm) { &static_label("avx_shortcut") if ($ymm); &static_label("K_XX_XX"); - &call (&label("pic_point")); # make it PIC! - &set_label("pic_point"); - &blindpop($tmp1); - &picmeup($T,"OPENSSL_ia32cap_P",$tmp1,&label("pic_point")); - &lea ($tmp1,&DWP(&label("K_XX_XX")."-".&label("pic_point"),$tmp1)); + &picsetup($tmp1); + &picsymbol($T, "OPENSSL_ia32cap_P", $tmp1); + &picsymbol($tmp1, &label("K_XX_XX"), $tmp1); &mov ($A,&DWP(0,$T)); &mov ($D,&DWP(4,$T)); @@ -419,10 +417,9 @@ my $_rol=sub { &rol(@_) }; my $_ror=sub { &ror(@_) }; &function_begin("_sha1_block_data_order_ssse3"); - &call (&label("pic_point")); # make it PIC! - &set_label("pic_point"); - &blindpop($tmp1); - &lea ($tmp1,&DWP(&label("K_XX_XX")."-".&label("pic_point"),$tmp1)); + &picsetup($tmp1); + &picsymbol($tmp1, &label("K_XX_XX"), $tmp1); + &set_label("ssse3_shortcut"); &movdqa (@X[3],&QWP(0,$tmp1)); # K_00_19 @@ -861,10 +858,9 @@ my $_rol=sub { &shld(@_[0],@_) }; my $_ror=sub { &shrd(@_[0],@_) }; &function_begin("_sha1_block_data_order_avx"); - &call (&label("pic_point")); # make it PIC! - &set_label("pic_point"); - &blindpop($tmp1); - &lea ($tmp1,&DWP(&label("K_XX_XX")."-".&label("pic_point"),$tmp1)); + &picsetup($tmp1); + &picsymbol($tmp1, &label("K_XX_XX"), $tmp1); + &set_label("avx_shortcut"); &vzeroall(); @@ -1213,13 +1209,15 @@ sub Xtail_avx() &mov (&DWP(16,@T[1]),$E); &function_end("_sha1_block_data_order_avx"); } + + &rodataseg(); &set_label("K_XX_XX",64); &data_word(0x5a827999,0x5a827999,0x5a827999,0x5a827999); # K_00_19 &data_word(0x6ed9eba1,0x6ed9eba1,0x6ed9eba1,0x6ed9eba1); # K_20_39 &data_word(0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc); # K_40_59 &data_word(0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6); # K_60_79 &data_word(0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f); # pbswap mask + &previous(); } -&asciz("SHA1 block transform for x86, CRYPTOGAMS by "); &asm_finish(); diff --git a/src/lib/libcrypto/sha/asm/sha256-586.pl b/src/lib/libcrypto/sha/asm/sha256-586.pl index 928ec53123..2b05c96063 100644 --- a/src/lib/libcrypto/sha/asm/sha256-586.pl +++ b/src/lib/libcrypto/sha/asm/sha256-586.pl @@ -96,16 +96,15 @@ sub BODY_00_15() { &add ($A,"esi"); # h += K256[i] } +&static_label("K256"); &function_begin("sha256_block_data_order"); &mov ("esi",wparam(0)); # ctx &mov ("edi",wparam(1)); # inp &mov ("eax",wparam(2)); # num &mov ("ebx","esp"); # saved sp - &call (&label("pic_point")); # make it PIC! -&set_label("pic_point"); - &blindpop($K256); - &lea ($K256,&DWP(&label("K256")."-".&label("pic_point"),$K256)); + &picsetup($K256); + &picsymbol($K256, &label("K256"), $K256); &sub ("esp",16); &and ("esp",-64); @@ -225,8 +224,10 @@ sub BODY_00_15() { &mov ("esp",&DWP(12,"esp")); # restore sp &function_end_A(); +&function_end_B("sha256_block_data_order"); -&set_label("K256",64); # Yes! I keep it in the code segment! + &rodataseg(); +&set_label("K256",64); &data_word(0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5); &data_word(0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5); &data_word(0xd807aa98,0x12835b01,0x243185be,0x550c7dc3); @@ -243,7 +244,6 @@ sub BODY_00_15() { &data_word(0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3); &data_word(0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208); &data_word(0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2); -&function_end_B("sha256_block_data_order"); -&asciz("SHA256 block transform for x86, CRYPTOGAMS by "); + &previous(); &asm_finish(); diff --git a/src/lib/libcrypto/sha/asm/sha512-586.pl b/src/lib/libcrypto/sha/asm/sha512-586.pl index 163361ebe9..c1d0684e92 100644 --- a/src/lib/libcrypto/sha/asm/sha512-586.pl +++ b/src/lib/libcrypto/sha/asm/sha512-586.pl @@ -261,16 +261,18 @@ sub BODY_00_15_x86 { } +&static_label("K512"); &function_begin("sha512_block_data_order"); &mov ("esi",wparam(0)); # ctx &mov ("edi",wparam(1)); # inp &mov ("eax",wparam(2)); # num &mov ("ebx","esp"); # saved sp - &call (&label("pic_point")); # make it PIC! -&set_label("pic_point"); - &blindpop($K512); - &lea ($K512,&DWP(&label("K512")."-".&label("pic_point"),$K512)); + &picsetup($K512); +if ($sse2) { + &picsymbol("edx", "OPENSSL_ia32cap_P", $K512); +} + &picsymbol($K512, &label("K512"), $K512); &sub ("esp",16); &and ("esp",-64); @@ -283,7 +285,6 @@ sub BODY_00_15_x86 { &mov (&DWP(12,"esp"),"ebx"); # saved sp if ($sse2) { - &picmeup("edx","OPENSSL_ia32cap_P",$K512,&label("K512")); &bt (&DWP(0,"edx"),"\$IA32CAP_BIT0_SSE2"); &jnc (&label("loop_x86")); @@ -556,8 +557,10 @@ if ($sse2) { &mov ("esp",&DWP(12,"esp")); # restore sp &function_end_A(); +&function_end_B("sha512_block_data_order"); -&set_label("K512",64); # Yes! I keep it in the code segment! + &rodataseg(); +&set_label("K512",64); &data_word(0xd728ae22,0x428a2f98); # u64 &data_word(0x23ef65cd,0x71374491); # u64 &data_word(0xec4d3b2f,0xb5c0fbcf); # u64 @@ -638,7 +641,6 @@ if ($sse2) { &data_word(0xfc657e2a,0x597f299c); # u64 &data_word(0x3ad6faec,0x5fcb6fab); # u64 &data_word(0x4a475817,0x6c44198c); # u64 -&function_end_B("sha512_block_data_order"); -&asciz("SHA512 block transform for x86, CRYPTOGAMS by "); + &previous(); &asm_finish(); -- cgit v1.2.3-55-g6feb