summaryrefslogtreecommitdiff
path: root/cipher/blowfish-amd64.S
diff options
context:
space:
mode:
authorJussi Kivilinna <jussi.kivilinna@iki.fi>2019-04-15 19:46:53 +0300
committerJussi Kivilinna <jussi.kivilinna@iki.fi>2019-04-16 23:03:36 +0300
commitd11ae95d05dc39ec6b825d1109afadd964589880 (patch)
tree6a36256a9a816cd8e49fb6be5fcb4a9b6f9d007d /cipher/blowfish-amd64.S
parent0903b215ef5a18332b740a24e6e2bfbed9e1d97b (diff)
downloadlibgcrypt-d11ae95d05dc39ec6b825d1109afadd964589880.tar.gz
Add CFI unwind assembly directives for AMD64 assembly
* configure.ac (gcry_cv_gcc_asm_cfi_directives): New. * cipher/asm-common-amd64.h (ADD_RIP, CFI_STARTPROC, CFI_ENDPROC) (CFI_REMEMBER_STATE, CFI_RESTORE_STATE, CFI_ADJUST_CFA_OFFSET) (CFI_REL_OFFSET, CFI_DEF_CFA_REGISTER, CFI_REGISTER, CFI_RESTORE) (CFI_PUSH, CFI_POP, CFI_POP_TMP_REG, CFI_LEAVE, DW_REGNO) (DW_SLEB128_7BIT, DW_SLEB128_28BIT, CFI_CFA_ON_STACK) (CFI_REG_ON_STACK): New. (ENTER_SYSV_FUNCPARAMS_0_4, EXIT_SYSV_FUNC): Add CFI directives. * cipher/arcfour-amd64.S: Add CFI directives. * cipher/blake2b-amd64-avx2.S: Add CFI directives. * cipher/blake2s-amd64-avx.S: Add CFI directives. * cipher/blowfish-amd64.S: Add CFI directives. * cipher/camellia-aesni-avx-amd64.S: Add CFI directives; Use 'asm-common-amd64.h'. * cipher/camellia-aesni-avx2-amd64.S: Add CFI directives; Use 'asm-common-amd64.h'. * cipher/cast5-amd64.S: Add CFI directives. * cipher/chacha20-amd64-avx2.S: Add CFI directives. * cipher/chacha20-amd64-ssse3.S: Add CFI directives. * cipher/des-amd64.S: Add CFI directives. * cipher/rijndael-amd64.S: Add CFI directives. * cipher/rijndael-ssse3-amd64-asm.S: Add CFI directives. * cipher/salsa20-amd64.S: Add CFI directives; Use 'asm-common-amd64.h'. * cipher/serpent-avx2-amd64.S: Add CFI directives; Use 'asm-common-amd64.h'. * cipher/serpent-sse2-amd64.S: Add CFI directives; Use 'asm-common-amd64.h'. * cipher/sha1-avx-amd64.S: Add CFI directives; Use 'asm-common-amd64.h'. * cipher/sha1-avx-bmi2-amd64.S: Add CFI directives; Use 'asm-common-amd64.h'. * cipher/sha1-avx2-bmi2-amd64.S: Add CFI directives; Use 'asm-common-amd64.h'. * cipher/sha1-ssse3-amd64.S: Add CFI directives; Use 'asm-common-amd64.h'. * cipher/sha256-avx-amd64.S: Add CFI directives; Use 'asm-common-amd64.h'. * cipher/sha256-avx2-bmi2-amd64.S: Add CFI directives; Use 'asm-common-amd64.h'. * cipher/sha256-ssse3-amd64.S: Add CFI directives; Use 'asm-common-amd64.h'. * cipher/sha512-avx-amd64.S: Add CFI directives; Use 'asm-common-amd64.h'. * cipher/sha512-avx2-bmi2-amd64.S: Add CFI directives; Use 'asm-common-amd64.h'. * cipher/sha512-ssse3-amd64.S: Add CFI directives; Use 'asm-common-amd64.h'. * cipher/twofish-amd64.S: Add CFI directives. * cipher/twofish-avx2-amd64.S: Add CFI directives; Use 'asm-common-amd64.h'. * cipher/whirlpool-sse2-amd64.S: Add CFI directives; Use 'asm-common-amd64.h'. * mpi/amd64/func_abi.h: Include 'config.h'. (CFI_STARTPROC, CFI_ENDPROC, CFI_ADJUST_CFA_OFFSET, CFI_REL_OFFSET) (CFI_RESTORE, CFI_PUSH, CFI_POP): New. (FUNC_ENTRY, FUNC_EXIT): Add CFI directives. -- This commit adds CFI directives that add DWARF unwinding information for debugger to backtrace when executing code from AMD64 assembly files. Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
Diffstat (limited to 'cipher/blowfish-amd64.S')
-rw-r--r--cipher/blowfish-amd64.S46
1 files changed, 46 insertions, 0 deletions
diff --git a/cipher/blowfish-amd64.S b/cipher/blowfish-amd64.S
index 02d3b710..bdb361d7 100644
--- a/cipher/blowfish-amd64.S
+++ b/cipher/blowfish-amd64.S
@@ -133,7 +133,9 @@ __blowfish_enc_blk1:
* output:
* RX0: output plaintext block
*/
+ CFI_STARTPROC();
movq %rbp, %r11;
+ CFI_REGISTER(%rbp, %r11);
load_roundkey_enc(0);
round_enc(2);
@@ -147,8 +149,10 @@ __blowfish_enc_blk1:
add_roundkey_enc();
movq %r11, %rbp;
+ CFI_RESTORE(%rbp)
ret;
+ CFI_ENDPROC();
ELF(.size __blowfish_enc_blk1,.-__blowfish_enc_blk1;)
.align 8
@@ -161,6 +165,7 @@ _gcry_blowfish_amd64_do_encrypt:
* %rsi: u32 *ret_xl
* %rdx: u32 *ret_xr
*/
+ CFI_STARTPROC();
ENTER_SYSV_FUNC_PARAMS_0_4
movl (%rdx), RX0d;
@@ -178,6 +183,7 @@ _gcry_blowfish_amd64_do_encrypt:
EXIT_SYSV_FUNC
ret;
+ CFI_ENDPROC();
ELF(.size _gcry_blowfish_amd64_do_encrypt,.-_gcry_blowfish_amd64_do_encrypt;)
.align 8
@@ -190,6 +196,7 @@ _gcry_blowfish_amd64_encrypt_block:
* %rsi: dst
* %rdx: src
*/
+ CFI_STARTPROC();
ENTER_SYSV_FUNC_PARAMS_0_4
movq %rsi, %r10;
@@ -204,6 +211,7 @@ _gcry_blowfish_amd64_encrypt_block:
EXIT_SYSV_FUNC
ret;
+ CFI_ENDPROC();
ELF(.size _gcry_blowfish_amd64_encrypt_block,.-_gcry_blowfish_amd64_encrypt_block;)
.align 8
@@ -216,9 +224,11 @@ _gcry_blowfish_amd64_decrypt_block:
* %rsi: dst
* %rdx: src
*/
+ CFI_STARTPROC();
ENTER_SYSV_FUNC_PARAMS_0_4
movq %rbp, %r11;
+ CFI_REGISTER(%rbp, %r11);
movq %rsi, %r10;
movq %rdx, RIO;
@@ -240,9 +250,11 @@ _gcry_blowfish_amd64_decrypt_block:
write_block();
movq %r11, %rbp;
+ CFI_RESTORE(%rbp);
EXIT_SYSV_FUNC
ret;
+ CFI_ENDPROC();
ELF(.size _gcry_blowfish_amd64_decrypt_block,.-_gcry_blowfish_amd64_decrypt_block;)
/**********************************************************************
@@ -340,6 +352,7 @@ __blowfish_enc_blk4:
* output:
* RX0,RX1,RX2,RX3: four output ciphertext blocks
*/
+ CFI_STARTPROC();
preload_roundkey_enc(0);
round_enc4(0);
@@ -355,6 +368,7 @@ __blowfish_enc_blk4:
outbswap_block4();
ret;
+ CFI_ENDPROC();
ELF(.size __blowfish_enc_blk4,.-__blowfish_enc_blk4;)
.align 8
@@ -367,6 +381,7 @@ __blowfish_dec_blk4:
* output:
* RX0,RX1,RX2,RX3: four output plaintext blocks
*/
+ CFI_STARTPROC();
preload_roundkey_dec(17);
inbswap_block4();
@@ -384,6 +399,7 @@ __blowfish_dec_blk4:
outbswap_block4();
ret;
+ CFI_ENDPROC();
ELF(.size __blowfish_dec_blk4,.-__blowfish_dec_blk4;)
.align 8
@@ -396,12 +412,17 @@ _gcry_blowfish_amd64_ctr_enc:
* %rdx: src (4 blocks)
* %rcx: iv (big endian, 64bit)
*/
+ CFI_STARTPROC();
ENTER_SYSV_FUNC_PARAMS_0_4
pushq %rbp;
+ CFI_PUSH(%rbp);
pushq %rbx;
+ CFI_PUSH(%rbx);
pushq %r12;
+ CFI_PUSH(%r12);
pushq %r13;
+ CFI_PUSH(%r13);
/* %r11-%r13 are not used by __blowfish_enc_blk4 */
movq %rcx, %r13; /*iv*/
@@ -438,12 +459,17 @@ _gcry_blowfish_amd64_ctr_enc:
movq RX3, 3 * 8(%r11);
popq %r13;
+ CFI_POP(%r13);
popq %r12;
+ CFI_POP(%r12);
popq %rbx;
+ CFI_POP(%rbx);
popq %rbp;
+ CFI_POP(%rbp);
EXIT_SYSV_FUNC
ret;
+ CFI_ENDPROC();
ELF(.size _gcry_blowfish_amd64_ctr_enc,.-_gcry_blowfish_amd64_ctr_enc;)
.align 8
@@ -456,12 +482,17 @@ _gcry_blowfish_amd64_cbc_dec:
* %rdx: src (4 blocks)
* %rcx: iv (64bit)
*/
+ CFI_STARTPROC();
ENTER_SYSV_FUNC_PARAMS_0_4
pushq %rbp;
+ CFI_PUSH(%rbp);
pushq %rbx;
+ CFI_PUSH(%rbx);
pushq %r12;
+ CFI_PUSH(%r12);
pushq %r13;
+ CFI_PUSH(%r13);
/* %r11-%r13 are not used by __blowfish_dec_blk4 */
movq %rsi, %r11; /*dst*/
@@ -489,12 +520,17 @@ _gcry_blowfish_amd64_cbc_dec:
movq RX3, 3 * 8(%r11);
popq %r13;
+ CFI_POP(%r13);
popq %r12;
+ CFI_POP(%r12);
popq %rbx;
+ CFI_POP(%rbx);
popq %rbp;
+ CFI_POP(%rbp);
EXIT_SYSV_FUNC
ret;
+ CFI_ENDPROC();
ELF(.size _gcry_blowfish_amd64_cbc_dec,.-_gcry_blowfish_amd64_cbc_dec;)
.align 8
@@ -507,12 +543,17 @@ _gcry_blowfish_amd64_cfb_dec:
* %rdx: src (4 blocks)
* %rcx: iv (64bit)
*/
+ CFI_STARTPROC();
ENTER_SYSV_FUNC_PARAMS_0_4
pushq %rbp;
+ CFI_PUSH(%rbp);
pushq %rbx;
+ CFI_PUSH(%rbx);
pushq %r12;
+ CFI_PUSH(%r12);
pushq %r13;
+ CFI_PUSH(%r13);
/* %r11-%r13 are not used by __blowfish_enc_blk4 */
movq %rcx, %r13; /*iv*/
@@ -543,12 +584,17 @@ _gcry_blowfish_amd64_cfb_dec:
movq RX3, 3 * 8(%r11);
popq %r13;
+ CFI_POP(%r13);
popq %r12;
+ CFI_POP(%r12);
popq %rbx;
+ CFI_POP(%rbx);
popq %rbp;
+ CFI_POP(%rbp);
EXIT_SYSV_FUNC
ret;
+ CFI_ENDPROC();
ELF(.size _gcry_blowfish_amd64_cfb_dec,.-_gcry_blowfish_amd64_cfb_dec;)
#endif /*defined(USE_BLOWFISH)*/