/src/openssl30/include/internal/refcount.h
Line  | Count  | Source (jump to first uncovered line)  | 
1  |  | /*  | 
2  |  |  * Copyright 2016-2023 The OpenSSL Project Authors. All Rights Reserved.  | 
3  |  |  *  | 
4  |  |  * Licensed under the Apache License 2.0 (the "License").  You may not use  | 
5  |  |  * this file except in compliance with the License.  You can obtain a copy  | 
6  |  |  * in the file LICENSE in the source distribution or at  | 
7  |  |  * https://www.openssl.org/source/license.html  | 
8  |  |  */  | 
9  |  | #ifndef OSSL_INTERNAL_REFCOUNT_H  | 
10  |  | # define OSSL_INTERNAL_REFCOUNT_H  | 
11  |  | # pragma once  | 
12  |  |  | 
13  |  | # include <openssl/e_os2.h>  | 
14  |  | # include <openssl/trace.h>  | 
15  |  |  | 
16  |  | # if defined(OPENSSL_THREADS) && !defined(OPENSSL_DEV_NO_ATOMICS)  | 
17  |  | #  if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L \  | 
18  |  |       && !defined(__STDC_NO_ATOMICS__)  | 
19  |  | #   include <stdatomic.h>  | 
20  |  | #   define HAVE_C11_ATOMICS  | 
21  |  | #  endif  | 
22  |  |  | 
23  |  | #  if defined(HAVE_C11_ATOMICS) && defined(ATOMIC_INT_LOCK_FREE) \  | 
24  |  |       && ATOMIC_INT_LOCK_FREE > 0  | 
25  |  |  | 
26  |  | #   define HAVE_ATOMICS 1  | 
27  |  |  | 
28  |  | typedef _Atomic int CRYPTO_REF_COUNT;  | 
29  |  |  | 
30  |  | static inline int CRYPTO_UP_REF(_Atomic int *val, int *ret,  | 
31  |  |                                 ossl_unused void *lock)  | 
32  | 74.6M  | { | 
33  | 74.6M  |     *ret = atomic_fetch_add_explicit(val, 1, memory_order_relaxed) + 1;  | 
34  | 74.6M  |     return 1;  | 
35  | 74.6M  | } Unexecuted instantiation: bf_prefix.c:CRYPTO_UP_REF Unexecuted instantiation: bio_dump.c:CRYPTO_UP_REF Line  | Count  | Source  |  32  | 2.55M  | { |  33  | 2.55M  |     *ret = atomic_fetch_add_explicit(val, 1, memory_order_relaxed) + 1;  |  34  | 2.55M  |     return 1;  |  35  | 2.55M  | }  |  
 Unexecuted instantiation: bio_meth.c:CRYPTO_UP_REF Unexecuted instantiation: bio_sock.c:CRYPTO_UP_REF Unexecuted instantiation: bio_sock2.c:CRYPTO_UP_REF Unexecuted instantiation: bss_null.c:CRYPTO_UP_REF Unexecuted instantiation: bss_sock.c:CRYPTO_UP_REF Unexecuted instantiation: init.c:CRYPTO_UP_REF Unexecuted instantiation: trace.c:CRYPTO_UP_REF Unexecuted instantiation: store_init.c:CRYPTO_UP_REF Unexecuted instantiation: store_register.c:CRYPTO_UP_REF Unexecuted instantiation: tasn_utl.c:CRYPTO_UP_REF Unexecuted instantiation: bio_addr.c:CRYPTO_UP_REF Unexecuted instantiation: cmp_util.c:CRYPTO_UP_REF Unexecuted instantiation: dso_lib.c:CRYPTO_UP_REF Unexecuted instantiation: eng_all.c:CRYPTO_UP_REF Unexecuted instantiation: eng_dyn.c:CRYPTO_UP_REF Unexecuted instantiation: eng_fat.c:CRYPTO_UP_REF Unexecuted instantiation: eng_init.c:CRYPTO_UP_REF Unexecuted instantiation: eng_lib.c:CRYPTO_UP_REF Unexecuted instantiation: eng_list.c:CRYPTO_UP_REF Unexecuted instantiation: eng_pkey.c:CRYPTO_UP_REF Unexecuted instantiation: tb_asnmth.c:CRYPTO_UP_REF Unexecuted instantiation: tb_cipher.c:CRYPTO_UP_REF Unexecuted instantiation: tb_dh.c:CRYPTO_UP_REF Unexecuted instantiation: tb_digest.c:CRYPTO_UP_REF Unexecuted instantiation: tb_dsa.c:CRYPTO_UP_REF Unexecuted instantiation: tb_eckey.c:CRYPTO_UP_REF Unexecuted instantiation: tb_pkmeth.c:CRYPTO_UP_REF Unexecuted instantiation: tb_rand.c:CRYPTO_UP_REF Unexecuted instantiation: tb_rsa.c:CRYPTO_UP_REF Unexecuted instantiation: c_allc.c:CRYPTO_UP_REF Unexecuted instantiation: c_alld.c:CRYPTO_UP_REF Unexecuted instantiation: cmeth_lib.c:CRYPTO_UP_REF Unexecuted instantiation: e_aes.c:CRYPTO_UP_REF Unexecuted instantiation: e_aes_cbc_hmac_sha1.c:CRYPTO_UP_REF Unexecuted instantiation: e_aes_cbc_hmac_sha256.c:CRYPTO_UP_REF Unexecuted instantiation: e_aria.c:CRYPTO_UP_REF Unexecuted instantiation: e_bf.c:CRYPTO_UP_REF Unexecuted instantiation: e_camellia.c:CRYPTO_UP_REF Unexecuted instantiation: e_cast.c:CRYPTO_UP_REF Unexecuted instantiation: e_chacha20_poly1305.c:CRYPTO_UP_REF Unexecuted instantiation: e_des.c:CRYPTO_UP_REF Unexecuted instantiation: e_des3.c:CRYPTO_UP_REF Unexecuted instantiation: e_idea.c:CRYPTO_UP_REF Unexecuted instantiation: e_rc2.c:CRYPTO_UP_REF Unexecuted instantiation: e_rc4.c:CRYPTO_UP_REF Unexecuted instantiation: e_rc4_hmac_md5.c:CRYPTO_UP_REF Unexecuted instantiation: e_rc5.c:CRYPTO_UP_REF Unexecuted instantiation: e_seed.c:CRYPTO_UP_REF Unexecuted instantiation: e_sm4.c:CRYPTO_UP_REF Unexecuted instantiation: e_xcbc_d.c:CRYPTO_UP_REF Line  | Count  | Source  |  32  | 1.78M  | { |  33  | 1.78M  |     *ret = atomic_fetch_add_explicit(val, 1, memory_order_relaxed) + 1;  |  34  | 1.78M  |     return 1;  |  35  | 1.78M  | }  |  
 Unexecuted instantiation: evp_fetch.c:CRYPTO_UP_REF Unexecuted instantiation: evp_lib.c:CRYPTO_UP_REF Line  | Count  | Source  |  32  | 863  | { |  33  | 863  |     *ret = atomic_fetch_add_explicit(val, 1, memory_order_relaxed) + 1;  |  34  | 863  |     return 1;  |  35  | 863  | }  |  
 Unexecuted instantiation: evp_utils.c:CRYPTO_UP_REF Unexecuted instantiation: legacy_blake2.c:CRYPTO_UP_REF Unexecuted instantiation: legacy_md4.c:CRYPTO_UP_REF Unexecuted instantiation: legacy_md5.c:CRYPTO_UP_REF Unexecuted instantiation: legacy_md5_sha1.c:CRYPTO_UP_REF Unexecuted instantiation: legacy_mdc2.c:CRYPTO_UP_REF Unexecuted instantiation: legacy_ripemd.c:CRYPTO_UP_REF Unexecuted instantiation: legacy_sha.c:CRYPTO_UP_REF Unexecuted instantiation: legacy_wp.c:CRYPTO_UP_REF Unexecuted instantiation: names.c:CRYPTO_UP_REF Unexecuted instantiation: pmeth_gn.c:CRYPTO_UP_REF Unexecuted instantiation: pmeth_lib.c:CRYPTO_UP_REF signature.c:CRYPTO_UP_REF Line  | Count  | Source  |  32  | 631k  | { |  33  | 631k  |     *ret = atomic_fetch_add_explicit(val, 1, memory_order_relaxed) + 1;  |  34  | 631k  |     return 1;  |  35  | 631k  | }  |  
 Unexecuted instantiation: provider_child.c:CRYPTO_UP_REF provider_core.c:CRYPTO_UP_REF Line  | Count  | Source  |  32  | 5.56M  | { |  33  | 5.56M  |     *ret = atomic_fetch_add_explicit(val, 1, memory_order_relaxed) + 1;  |  34  | 5.56M  |     return 1;  |  35  | 5.56M  | }  |  
 Unexecuted instantiation: pem_pkey.c:CRYPTO_UP_REF Unexecuted instantiation: rsa_ossl.c:CRYPTO_UP_REF Unexecuted instantiation: rsa_pk1.c:CRYPTO_UP_REF Unexecuted instantiation: rsa_pmeth.c:CRYPTO_UP_REF Unexecuted instantiation: rsa_pss.c:CRYPTO_UP_REF Unexecuted instantiation: rsa_sign.c:CRYPTO_UP_REF Unexecuted instantiation: legacy_sm3.c:CRYPTO_UP_REF Unexecuted instantiation: store_meth.c:CRYPTO_UP_REF Unexecuted instantiation: x509_lu.c:CRYPTO_UP_REF Line  | Count  | Source  |  32  | 239k  | { |  33  | 239k  |     *ret = atomic_fetch_add_explicit(val, 1, memory_order_relaxed) + 1;  |  34  | 239k  |     return 1;  |  35  | 239k  | }  |  
 Unexecuted instantiation: x509_vfy.c:CRYPTO_UP_REF Unexecuted instantiation: x509_vpm.c:CRYPTO_UP_REF Line  | Count  | Source  |  32  | 3.27k  | { |  33  | 3.27k  |     *ret = atomic_fetch_add_explicit(val, 1, memory_order_relaxed) + 1;  |  34  | 3.27k  |     return 1;  |  35  | 3.27k  | }  |  
 Unexecuted instantiation: x509name.c:CRYPTO_UP_REF Unexecuted instantiation: x_all.c:CRYPTO_UP_REF Unexecuted instantiation: x_crl.c:CRYPTO_UP_REF Unexecuted instantiation: x_exten.c:CRYPTO_UP_REF Unexecuted instantiation: x_name.c:CRYPTO_UP_REF Unexecuted instantiation: x_pubkey.c:CRYPTO_UP_REF Unexecuted instantiation: x_req.c:CRYPTO_UP_REF Unexecuted instantiation: x_x509.c:CRYPTO_UP_REF Unexecuted instantiation: x_x509a.c:CRYPTO_UP_REF Unexecuted instantiation: provider_util.c:CRYPTO_UP_REF Unexecuted instantiation: cipher_aes.c:CRYPTO_UP_REF Unexecuted instantiation: cipher_aes_cbc_hmac_sha1_hw.c:CRYPTO_UP_REF Unexecuted instantiation: cipher_aes_cbc_hmac_sha256_hw.c:CRYPTO_UP_REF Unexecuted instantiation: cipher_camellia.c:CRYPTO_UP_REF Unexecuted instantiation: cipher_cts.c:CRYPTO_UP_REF Unexecuted instantiation: cipher_tdes_wrap.c:CRYPTO_UP_REF Unexecuted instantiation: decode_der2key.c:CRYPTO_UP_REF Unexecuted instantiation: decode_spki2typespki.c:CRYPTO_UP_REF Unexecuted instantiation: encode_key2any.c:CRYPTO_UP_REF Unexecuted instantiation: encode_key2text.c:CRYPTO_UP_REF Unexecuted instantiation: ecx_exch.c:CRYPTO_UP_REF Unexecuted instantiation: kdf_exch.c:CRYPTO_UP_REF Unexecuted instantiation: hkdf.c:CRYPTO_UP_REF Unexecuted instantiation: kbkdf.c:CRYPTO_UP_REF Unexecuted instantiation: krb5kdf.c:CRYPTO_UP_REF Unexecuted instantiation: pbkdf2.c:CRYPTO_UP_REF Unexecuted instantiation: pkcs12kdf.c:CRYPTO_UP_REF Unexecuted instantiation: scrypt.c:CRYPTO_UP_REF Unexecuted instantiation: sshkdf.c:CRYPTO_UP_REF Unexecuted instantiation: sskdf.c:CRYPTO_UP_REF Unexecuted instantiation: tls1_prf.c:CRYPTO_UP_REF Unexecuted instantiation: ecx_kmgmt.c:CRYPTO_UP_REF Unexecuted instantiation: kdf_legacy_kmgmt.c:CRYPTO_UP_REF mac_legacy_kmgmt.c:CRYPTO_UP_REF Line  | Count  | Source  |  32  | 358k  | { |  33  | 358k  |     *ret = atomic_fetch_add_explicit(val, 1, memory_order_relaxed) + 1;  |  34  | 358k  |     return 1;  |  35  | 358k  | }  |  
 Unexecuted instantiation: eddsa_sig.c:CRYPTO_UP_REF Unexecuted instantiation: mac_legacy_sig.c:CRYPTO_UP_REF Unexecuted instantiation: der_ecx_key.c:CRYPTO_UP_REF Unexecuted instantiation: a_digest.c:CRYPTO_UP_REF Unexecuted instantiation: a_sign.c:CRYPTO_UP_REF Unexecuted instantiation: a_verify.c:CRYPTO_UP_REF Unexecuted instantiation: ameth_lib.c:CRYPTO_UP_REF Unexecuted instantiation: d2i_pr.c:CRYPTO_UP_REF Unexecuted instantiation: i2d_evp.c:CRYPTO_UP_REF Unexecuted instantiation: p8_pkey.c:CRYPTO_UP_REF Unexecuted instantiation: x_algor.c:CRYPTO_UP_REF Unexecuted instantiation: x_sig.c:CRYPTO_UP_REF Unexecuted instantiation: bf_readbuff.c:CRYPTO_UP_REF Unexecuted instantiation: bss_core.c:CRYPTO_UP_REF Unexecuted instantiation: bss_file.c:CRYPTO_UP_REF Unexecuted instantiation: bss_mem.c:CRYPTO_UP_REF ossl_core_bio.c:CRYPTO_UP_REF Line  | Count  | Source  |  32  | 3.87M  | { |  33  | 3.87M  |     *ret = atomic_fetch_add_explicit(val, 1, memory_order_relaxed) + 1;  |  34  | 3.87M  |     return 1;  |  35  | 3.87M  | }  |  
 Unexecuted instantiation: dh_ameth.c:CRYPTO_UP_REF Unexecuted instantiation: dh_asn1.c:CRYPTO_UP_REF Unexecuted instantiation: dh_backend.c:CRYPTO_UP_REF Unexecuted instantiation: dh_check.c:CRYPTO_UP_REF Unexecuted instantiation: dh_gen.c:CRYPTO_UP_REF Unexecuted instantiation: dh_group_params.c:CRYPTO_UP_REF Unexecuted instantiation: dh_key.c:CRYPTO_UP_REF Line  | Count  | Source  |  32  | 38.3k  | { |  33  | 38.3k  |     *ret = atomic_fetch_add_explicit(val, 1, memory_order_relaxed) + 1;  |  34  | 38.3k  |     return 1;  |  35  | 38.3k  | }  |  
 Unexecuted instantiation: dh_pmeth.c:CRYPTO_UP_REF Unexecuted instantiation: dsa_ameth.c:CRYPTO_UP_REF Unexecuted instantiation: dsa_asn1.c:CRYPTO_UP_REF Unexecuted instantiation: dsa_backend.c:CRYPTO_UP_REF Unexecuted instantiation: dsa_check.c:CRYPTO_UP_REF Unexecuted instantiation: dsa_gen.c:CRYPTO_UP_REF Unexecuted instantiation: dsa_key.c:CRYPTO_UP_REF Line  | Count  | Source  |  32  | 66.2k  | { |  33  | 66.2k  |     *ret = atomic_fetch_add_explicit(val, 1, memory_order_relaxed) + 1;  |  34  | 66.2k  |     return 1;  |  35  | 66.2k  | }  |  
 Unexecuted instantiation: dsa_ossl.c:CRYPTO_UP_REF Unexecuted instantiation: dsa_pmeth.c:CRYPTO_UP_REF Unexecuted instantiation: dsa_sign.c:CRYPTO_UP_REF Unexecuted instantiation: dsa_vrf.c:CRYPTO_UP_REF Unexecuted instantiation: dso_dlfcn.c:CRYPTO_UP_REF Unexecuted instantiation: curve448.c:CRYPTO_UP_REF Unexecuted instantiation: eddsa.c:CRYPTO_UP_REF Unexecuted instantiation: curve25519.c:CRYPTO_UP_REF Unexecuted instantiation: ec_ameth.c:CRYPTO_UP_REF Unexecuted instantiation: ec_asn1.c:CRYPTO_UP_REF Unexecuted instantiation: ec_backend.c:CRYPTO_UP_REF Unexecuted instantiation: ec_check.c:CRYPTO_UP_REF Unexecuted instantiation: ec_curve.c:CRYPTO_UP_REF Unexecuted instantiation: ec_cvt.c:CRYPTO_UP_REF Line  | Count  | Source  |  32  | 269k  | { |  33  | 269k  |     *ret = atomic_fetch_add_explicit(val, 1, memory_order_relaxed) + 1;  |  34  | 269k  |     return 1;  |  35  | 269k  | }  |  
 Unexecuted instantiation: ec_kmeth.c:CRYPTO_UP_REF Unexecuted instantiation: ec_lib.c:CRYPTO_UP_REF Unexecuted instantiation: ec_mult.c:CRYPTO_UP_REF Unexecuted instantiation: ec_oct.c:CRYPTO_UP_REF Unexecuted instantiation: ec_pmeth.c:CRYPTO_UP_REF Unexecuted instantiation: ecdh_kdf.c:CRYPTO_UP_REF Unexecuted instantiation: ecdh_ossl.c:CRYPTO_UP_REF Unexecuted instantiation: ecdsa_ossl.c:CRYPTO_UP_REF Unexecuted instantiation: ecdsa_sign.c:CRYPTO_UP_REF Unexecuted instantiation: ecdsa_vrf.c:CRYPTO_UP_REF Unexecuted instantiation: ecp_mont.c:CRYPTO_UP_REF Unexecuted instantiation: ecp_nistp224.c:CRYPTO_UP_REF Unexecuted instantiation: ecp_nistp256.c:CRYPTO_UP_REF Unexecuted instantiation: ecp_nistp521.c:CRYPTO_UP_REF Unexecuted instantiation: ecp_nistputil.c:CRYPTO_UP_REF Unexecuted instantiation: ecp_nistz256.c:CRYPTO_UP_REF Unexecuted instantiation: ecp_oct.c:CRYPTO_UP_REF Unexecuted instantiation: ecp_smpl.c:CRYPTO_UP_REF Unexecuted instantiation: ecx_backend.c:CRYPTO_UP_REF Line  | Count  | Source  |  32  | 36.3k  | { |  33  | 36.3k  |     *ret = atomic_fetch_add_explicit(val, 1, memory_order_relaxed) + 1;  |  34  | 36.3k  |     return 1;  |  35  | 36.3k  | }  |  
 Unexecuted instantiation: ecx_meth.c:CRYPTO_UP_REF Unexecuted instantiation: decoder_lib.c:CRYPTO_UP_REF decoder_meth.c:CRYPTO_UP_REF Line  | Count  | Source  |  32  | 28.7M  | { |  33  | 28.7M  |     *ret = atomic_fetch_add_explicit(val, 1, memory_order_relaxed) + 1;  |  34  | 28.7M  |     return 1;  |  35  | 28.7M  | }  |  
 Unexecuted instantiation: decoder_pkey.c:CRYPTO_UP_REF Unexecuted instantiation: encoder_lib.c:CRYPTO_UP_REF encoder_meth.c:CRYPTO_UP_REF Line  | Count  | Source  |  32  | 354k  | { |  33  | 354k  |     *ret = atomic_fetch_add_explicit(val, 1, memory_order_relaxed) + 1;  |  34  | 354k  |     return 1;  |  35  | 354k  | }  |  
 Unexecuted instantiation: encoder_pkey.c:CRYPTO_UP_REF Unexecuted instantiation: eng_cnf.c:CRYPTO_UP_REF Unexecuted instantiation: eng_ctrl.c:CRYPTO_UP_REF Unexecuted instantiation: eng_table.c:CRYPTO_UP_REF asymcipher.c:CRYPTO_UP_REF Line  | Count  | Source  |  32  | 7.00k  | { |  33  | 7.00k  |     *ret = atomic_fetch_add_explicit(val, 1, memory_order_relaxed) + 1;  |  34  | 7.00k  |     return 1;  |  35  | 7.00k  | }  |  
 Unexecuted instantiation: ctrl_params_translate.c:CRYPTO_UP_REF Unexecuted instantiation: dh_ctrl.c:CRYPTO_UP_REF Line  | Count  | Source  |  32  | 7.43M  | { |  33  | 7.43M  |     *ret = atomic_fetch_add_explicit(val, 1, memory_order_relaxed) + 1;  |  34  | 7.43M  |     return 1;  |  35  | 7.43M  | }  |  
 Unexecuted instantiation: dsa_ctrl.c:CRYPTO_UP_REF Unexecuted instantiation: ec_ctrl.c:CRYPTO_UP_REF Unexecuted instantiation: evp_cnf.c:CRYPTO_UP_REF Unexecuted instantiation: evp_pbe.c:CRYPTO_UP_REF Unexecuted instantiation: evp_pkey.c:CRYPTO_UP_REF Line  | Count  | Source  |  32  | 180k  | { |  33  | 180k  |     *ret = atomic_fetch_add_explicit(val, 1, memory_order_relaxed) + 1;  |  34  | 180k  |     return 1;  |  35  | 180k  | }  |  
 Unexecuted instantiation: kdf_lib.c:CRYPTO_UP_REF Line  | Count  | Source  |  32  | 1.25M  | { |  33  | 1.25M  |     *ret = atomic_fetch_add_explicit(val, 1, memory_order_relaxed) + 1;  |  34  | 1.25M  |     return 1;  |  35  | 1.25M  | }  |  
 Line  | Count  | Source  |  32  | 217  | { |  33  | 217  |     *ret = atomic_fetch_add_explicit(val, 1, memory_order_relaxed) + 1;  |  34  | 217  |     return 1;  |  35  | 217  | }  |  
 Unexecuted instantiation: keymgmt_lib.c:CRYPTO_UP_REF keymgmt_meth.c:CRYPTO_UP_REF Line  | Count  | Source  |  32  | 16.9M  | { |  33  | 16.9M  |     *ret = atomic_fetch_add_explicit(val, 1, memory_order_relaxed) + 1;  |  34  | 16.9M  |     return 1;  |  35  | 16.9M  | }  |  
 Unexecuted instantiation: m_null.c:CRYPTO_UP_REF Unexecuted instantiation: m_sigver.c:CRYPTO_UP_REF Unexecuted instantiation: mac_lib.c:CRYPTO_UP_REF Line  | Count  | Source  |  32  | 796k  | { |  33  | 796k  |     *ret = atomic_fetch_add_explicit(val, 1, memory_order_relaxed) + 1;  |  34  | 796k  |     return 1;  |  35  | 796k  | }  |  
 Unexecuted instantiation: p5_crpt2.c:CRYPTO_UP_REF Unexecuted instantiation: p_legacy.c:CRYPTO_UP_REF Line  | Count  | Source  |  32  | 3.13M  | { |  33  | 3.13M  |     *ret = atomic_fetch_add_explicit(val, 1, memory_order_relaxed) + 1;  |  34  | 3.13M  |     return 1;  |  35  | 3.13M  | }  |  
 Unexecuted instantiation: p_sign.c:CRYPTO_UP_REF Unexecuted instantiation: p_verify.c:CRYPTO_UP_REF Unexecuted instantiation: pmeth_check.c:CRYPTO_UP_REF Unexecuted instantiation: http_lib.c:CRYPTO_UP_REF Unexecuted instantiation: pvkfmt.c:CRYPTO_UP_REF Unexecuted instantiation: p12_crpt.c:CRYPTO_UP_REF Unexecuted instantiation: p12_p8e.c:CRYPTO_UP_REF Unexecuted instantiation: pk7_lib.c:CRYPTO_UP_REF Unexecuted instantiation: rsa_ameth.c:CRYPTO_UP_REF Unexecuted instantiation: rsa_asn1.c:CRYPTO_UP_REF Unexecuted instantiation: rsa_backend.c:CRYPTO_UP_REF Unexecuted instantiation: rsa_chk.c:CRYPTO_UP_REF Unexecuted instantiation: rsa_crpt.c:CRYPTO_UP_REF Unexecuted instantiation: rsa_gen.c:CRYPTO_UP_REF Line  | Count  | Source  |  32  | 177k  | { |  33  | 177k  |     *ret = atomic_fetch_add_explicit(val, 1, memory_order_relaxed) + 1;  |  34  | 177k  |     return 1;  |  35  | 177k  | }  |  
 Unexecuted instantiation: rsa_mp.c:CRYPTO_UP_REF Unexecuted instantiation: rsa_oaep.c:CRYPTO_UP_REF Unexecuted instantiation: rsa_sp800_56b_check.c:CRYPTO_UP_REF Unexecuted instantiation: rsa_sp800_56b_gen.c:CRYPTO_UP_REF Unexecuted instantiation: pcy_cache.c:CRYPTO_UP_REF Unexecuted instantiation: pcy_map.c:CRYPTO_UP_REF Unexecuted instantiation: t_x509.c:CRYPTO_UP_REF Unexecuted instantiation: v3_addr.c:CRYPTO_UP_REF Unexecuted instantiation: v3_asid.c:CRYPTO_UP_REF Unexecuted instantiation: v3_cpols.c:CRYPTO_UP_REF Unexecuted instantiation: v3_crld.c:CRYPTO_UP_REF Unexecuted instantiation: v3_ncons.c:CRYPTO_UP_REF Unexecuted instantiation: v3_purp.c:CRYPTO_UP_REF Unexecuted instantiation: v3_san.c:CRYPTO_UP_REF Unexecuted instantiation: v3_utl.c:CRYPTO_UP_REF Unexecuted instantiation: x509_att.c:CRYPTO_UP_REF Unexecuted instantiation: x509_cmp.c:CRYPTO_UP_REF Unexecuted instantiation: x509_ext.c:CRYPTO_UP_REF Unexecuted instantiation: x509_obj.c:CRYPTO_UP_REF Unexecuted instantiation: x509_req.c:CRYPTO_UP_REF Unexecuted instantiation: x509_trust.c:CRYPTO_UP_REF Unexecuted instantiation: x509_v3.c:CRYPTO_UP_REF Unexecuted instantiation: x509rset.c:CRYPTO_UP_REF Unexecuted instantiation: x_attrib.c:CRYPTO_UP_REF Unexecuted instantiation: der_ecx_gen.c:CRYPTO_UP_REF Unexecuted instantiation: p5_scrypt.c:CRYPTO_UP_REF Unexecuted instantiation: bf_buff.c:CRYPTO_UP_REF Unexecuted instantiation: bss_conn.c:CRYPTO_UP_REF Unexecuted instantiation: ec2_oct.c:CRYPTO_UP_REF Unexecuted instantiation: ec2_smpl.c:CRYPTO_UP_REF Unexecuted instantiation: ecp_nist.c:CRYPTO_UP_REF Unexecuted instantiation: encode.c:CRYPTO_UP_REF Unexecuted instantiation: v3_bcons.c:CRYPTO_UP_REF Unexecuted instantiation: v3_conf.c:CRYPTO_UP_REF Unexecuted instantiation: v3_skid.c:CRYPTO_UP_REF Unexecuted instantiation: v3_tlsf.c:CRYPTO_UP_REF Unexecuted instantiation: v3_ocsp.c:CRYPTO_UP_REF Unexecuted instantiation: v3_akid.c:CRYPTO_UP_REF Unexecuted instantiation: ocsp_asn.c:CRYPTO_UP_REF Unexecuted instantiation: cms_lib.c:CRYPTO_UP_REF Unexecuted instantiation: cms_sd.c:CRYPTO_UP_REF Unexecuted instantiation: ess_lib.c:CRYPTO_UP_REF Unexecuted instantiation: asn_mime.c:CRYPTO_UP_REF Unexecuted instantiation: cms_att.c:CRYPTO_UP_REF Unexecuted instantiation: cms_ec.c:CRYPTO_UP_REF Unexecuted instantiation: cms_enc.c:CRYPTO_UP_REF Unexecuted instantiation: cms_env.c:CRYPTO_UP_REF Unexecuted instantiation: cms_rsa.c:CRYPTO_UP_REF Unexecuted instantiation: cms_dh.c:CRYPTO_UP_REF Unexecuted instantiation: methods.c:CRYPTO_UP_REF Unexecuted instantiation: s3_lib.c:CRYPTO_UP_REF Unexecuted instantiation: s3_msg.c:CRYPTO_UP_REF Unexecuted instantiation: ssl_cert.c:CRYPTO_UP_REF Unexecuted instantiation: ssl_ciph.c:CRYPTO_UP_REF Unexecuted instantiation: ssl_init.c:CRYPTO_UP_REF Line  | Count  | Source  |  32  | 191k  | { |  33  | 191k  |     *ret = atomic_fetch_add_explicit(val, 1, memory_order_relaxed) + 1;  |  34  | 191k  |     return 1;  |  35  | 191k  | }  |  
 Unexecuted instantiation: ssl_mcnf.c:CRYPTO_UP_REF Unexecuted instantiation: ssl_rsa.c:CRYPTO_UP_REF Line  | Count  | Source  |  32  | 833  | { |  33  | 833  |     *ret = atomic_fetch_add_explicit(val, 1, memory_order_relaxed) + 1;  |  34  | 833  |     return 1;  |  35  | 833  | }  |  
 Unexecuted instantiation: t1_lib.c:CRYPTO_UP_REF Unexecuted instantiation: tls13_enc.c:CRYPTO_UP_REF Unexecuted instantiation: tls_depr.c:CRYPTO_UP_REF Unexecuted instantiation: tls_srp.c:CRYPTO_UP_REF Unexecuted instantiation: rec_layer_d1.c:CRYPTO_UP_REF Unexecuted instantiation: rec_layer_s3.c:CRYPTO_UP_REF Unexecuted instantiation: ssl3_buffer.c:CRYPTO_UP_REF Unexecuted instantiation: ssl3_record.c:CRYPTO_UP_REF Unexecuted instantiation: ssl3_record_tls13.c:CRYPTO_UP_REF Unexecuted instantiation: extensions.c:CRYPTO_UP_REF Unexecuted instantiation: extensions_clnt.c:CRYPTO_UP_REF Unexecuted instantiation: extensions_cust.c:CRYPTO_UP_REF Unexecuted instantiation: extensions_srvr.c:CRYPTO_UP_REF Unexecuted instantiation: statem.c:CRYPTO_UP_REF Unexecuted instantiation: statem_clnt.c:CRYPTO_UP_REF Unexecuted instantiation: statem_dtls.c:CRYPTO_UP_REF Unexecuted instantiation: statem_lib.c:CRYPTO_UP_REF Unexecuted instantiation: statem_srvr.c:CRYPTO_UP_REF Unexecuted instantiation: d1_lib.c:CRYPTO_UP_REF Unexecuted instantiation: d1_msg.c:CRYPTO_UP_REF Unexecuted instantiation: d1_srtp.c:CRYPTO_UP_REF Unexecuted instantiation: pqueue.c:CRYPTO_UP_REF Unexecuted instantiation: s3_enc.c:CRYPTO_UP_REF Unexecuted instantiation: ssl_asn1.c:CRYPTO_UP_REF Unexecuted instantiation: ssl_conf.c:CRYPTO_UP_REF Unexecuted instantiation: t1_enc.c:CRYPTO_UP_REF Unexecuted instantiation: dtls1_bitmap.c:CRYPTO_UP_REF Unexecuted instantiation: ocsp_cl.c:CRYPTO_UP_REF Unexecuted instantiation: ocsp_ext.c:CRYPTO_UP_REF Unexecuted instantiation: ocsp_lib.c:CRYPTO_UP_REF Unexecuted instantiation: srp_vfy.c:CRYPTO_UP_REF Unexecuted instantiation: store_lib.c:CRYPTO_UP_REF Unexecuted instantiation: store_result.c:CRYPTO_UP_REF Unexecuted instantiation: by_dir.c:CRYPTO_UP_REF Unexecuted instantiation: by_file.c:CRYPTO_UP_REF Unexecuted instantiation: by_store.c:CRYPTO_UP_REF Unexecuted instantiation: pem_info.c:CRYPTO_UP_REF Unexecuted instantiation: p12_kiss.c:CRYPTO_UP_REF Unexecuted instantiation: cmp.c:CRYPTO_UP_REF Unexecuted instantiation: cmp_asn.c:CRYPTO_UP_REF Unexecuted instantiation: cmp_client.c:CRYPTO_UP_REF Unexecuted instantiation: cmp_ctx.c:CRYPTO_UP_REF Unexecuted instantiation: cmp_hdr.c:CRYPTO_UP_REF Unexecuted instantiation: cmp_http.c:CRYPTO_UP_REF Unexecuted instantiation: cmp_msg.c:CRYPTO_UP_REF Unexecuted instantiation: cmp_protect.c:CRYPTO_UP_REF Unexecuted instantiation: cmp_server.c:CRYPTO_UP_REF Unexecuted instantiation: cmp_status.c:CRYPTO_UP_REF Unexecuted instantiation: cmp_vfy.c:CRYPTO_UP_REF Unexecuted instantiation: ocsp_vfy.c:CRYPTO_UP_REF Unexecuted instantiation: ssl_txt.c:CRYPTO_UP_REF  | 
36  |  |  | 
37  |  | /*  | 
38  |  |  * Changes to shared structure other than reference counter have to be  | 
39  |  |  * serialized. And any kind of serialization implies a release fence. This  | 
40  |  |  * means that by the time reference counter is decremented all other  | 
41  |  |  * changes are visible on all processors. Hence decrement itself can be  | 
42  |  |  * relaxed. In case it hits zero, object will be destructed. Since it's  | 
43  |  |  * last use of the object, destructor programmer might reason that access  | 
44  |  |  * to mutable members doesn't have to be serialized anymore, which would  | 
45  |  |  * otherwise imply an acquire fence. Hence conditional acquire fence...  | 
46  |  |  */  | 
47  |  | static inline int CRYPTO_DOWN_REF(_Atomic int *val, int *ret,  | 
48  |  |                                   ossl_unused void *lock)  | 
49  | 97.7M  | { | 
50  | 97.7M  |     *ret = atomic_fetch_sub_explicit(val, 1, memory_order_relaxed) - 1;  | 
51  | 97.7M  |     if (*ret == 0)  | 
52  | 23.0M  |         atomic_thread_fence(memory_order_acquire);  | 
53  | 97.7M  |     return 1;  | 
54  | 97.7M  | } Unexecuted instantiation: bf_prefix.c:CRYPTO_DOWN_REF Unexecuted instantiation: bio_dump.c:CRYPTO_DOWN_REF bio_lib.c:CRYPTO_DOWN_REF Line  | Count  | Source  |  49  | 18.9M  | { |  50  | 18.9M  |     *ret = atomic_fetch_sub_explicit(val, 1, memory_order_relaxed) - 1;  |  51  | 18.9M  |     if (*ret == 0)  |  52  | 16.3M  |         atomic_thread_fence(memory_order_acquire);  |  53  | 18.9M  |     return 1;  |  54  | 18.9M  | }  |  
 Unexecuted instantiation: bio_meth.c:CRYPTO_DOWN_REF Unexecuted instantiation: bio_sock.c:CRYPTO_DOWN_REF Unexecuted instantiation: bio_sock2.c:CRYPTO_DOWN_REF Unexecuted instantiation: bss_null.c:CRYPTO_DOWN_REF Unexecuted instantiation: bss_sock.c:CRYPTO_DOWN_REF Unexecuted instantiation: init.c:CRYPTO_DOWN_REF Unexecuted instantiation: trace.c:CRYPTO_DOWN_REF Unexecuted instantiation: store_init.c:CRYPTO_DOWN_REF Unexecuted instantiation: store_register.c:CRYPTO_DOWN_REF tasn_utl.c:CRYPTO_DOWN_REF Line  | Count  | Source  |  49  | 1.22M  | { |  50  | 1.22M  |     *ret = atomic_fetch_sub_explicit(val, 1, memory_order_relaxed) - 1;  |  51  | 1.22M  |     if (*ret == 0)  |  52  | 980k  |         atomic_thread_fence(memory_order_acquire);  |  53  | 1.22M  |     return 1;  |  54  | 1.22M  | }  |  
 Unexecuted instantiation: bio_addr.c:CRYPTO_DOWN_REF Unexecuted instantiation: cmp_util.c:CRYPTO_DOWN_REF Unexecuted instantiation: dso_lib.c:CRYPTO_DOWN_REF Unexecuted instantiation: eng_all.c:CRYPTO_DOWN_REF Unexecuted instantiation: eng_dyn.c:CRYPTO_DOWN_REF Unexecuted instantiation: eng_fat.c:CRYPTO_DOWN_REF Unexecuted instantiation: eng_init.c:CRYPTO_DOWN_REF Unexecuted instantiation: eng_lib.c:CRYPTO_DOWN_REF Unexecuted instantiation: eng_list.c:CRYPTO_DOWN_REF Unexecuted instantiation: eng_pkey.c:CRYPTO_DOWN_REF Unexecuted instantiation: tb_asnmth.c:CRYPTO_DOWN_REF Unexecuted instantiation: tb_cipher.c:CRYPTO_DOWN_REF Unexecuted instantiation: tb_dh.c:CRYPTO_DOWN_REF Unexecuted instantiation: tb_digest.c:CRYPTO_DOWN_REF Unexecuted instantiation: tb_dsa.c:CRYPTO_DOWN_REF Unexecuted instantiation: tb_eckey.c:CRYPTO_DOWN_REF Unexecuted instantiation: tb_pkmeth.c:CRYPTO_DOWN_REF Unexecuted instantiation: tb_rand.c:CRYPTO_DOWN_REF Unexecuted instantiation: tb_rsa.c:CRYPTO_DOWN_REF Unexecuted instantiation: c_allc.c:CRYPTO_DOWN_REF Unexecuted instantiation: c_alld.c:CRYPTO_DOWN_REF Unexecuted instantiation: cmeth_lib.c:CRYPTO_DOWN_REF Unexecuted instantiation: e_aes.c:CRYPTO_DOWN_REF Unexecuted instantiation: e_aes_cbc_hmac_sha1.c:CRYPTO_DOWN_REF Unexecuted instantiation: e_aes_cbc_hmac_sha256.c:CRYPTO_DOWN_REF Unexecuted instantiation: e_aria.c:CRYPTO_DOWN_REF Unexecuted instantiation: e_bf.c:CRYPTO_DOWN_REF Unexecuted instantiation: e_camellia.c:CRYPTO_DOWN_REF Unexecuted instantiation: e_cast.c:CRYPTO_DOWN_REF Unexecuted instantiation: e_chacha20_poly1305.c:CRYPTO_DOWN_REF Unexecuted instantiation: e_des.c:CRYPTO_DOWN_REF Unexecuted instantiation: e_des3.c:CRYPTO_DOWN_REF Unexecuted instantiation: e_idea.c:CRYPTO_DOWN_REF Unexecuted instantiation: e_rc2.c:CRYPTO_DOWN_REF Unexecuted instantiation: e_rc4.c:CRYPTO_DOWN_REF Unexecuted instantiation: e_rc4_hmac_md5.c:CRYPTO_DOWN_REF Unexecuted instantiation: e_rc5.c:CRYPTO_DOWN_REF Unexecuted instantiation: e_seed.c:CRYPTO_DOWN_REF Unexecuted instantiation: e_sm4.c:CRYPTO_DOWN_REF Unexecuted instantiation: e_xcbc_d.c:CRYPTO_DOWN_REF evp_enc.c:CRYPTO_DOWN_REF Line  | Count  | Source  |  49  | 1.79M  | { |  50  | 1.79M  |     *ret = atomic_fetch_sub_explicit(val, 1, memory_order_relaxed) - 1;  |  51  | 1.79M  |     if (*ret == 0)  |  52  | 2.96k  |         atomic_thread_fence(memory_order_acquire);  |  53  | 1.79M  |     return 1;  |  54  | 1.79M  | }  |  
 Unexecuted instantiation: evp_fetch.c:CRYPTO_DOWN_REF Unexecuted instantiation: evp_lib.c:CRYPTO_DOWN_REF evp_rand.c:CRYPTO_DOWN_REF Line  | Count  | Source  |  49  | 1.40k  | { |  50  | 1.40k  |     *ret = atomic_fetch_sub_explicit(val, 1, memory_order_relaxed) - 1;  |  51  | 1.40k  |     if (*ret == 0)  |  52  | 551  |         atomic_thread_fence(memory_order_acquire);  |  53  | 1.40k  |     return 1;  |  54  | 1.40k  | }  |  
 Unexecuted instantiation: evp_utils.c:CRYPTO_DOWN_REF Unexecuted instantiation: legacy_blake2.c:CRYPTO_DOWN_REF Unexecuted instantiation: legacy_md4.c:CRYPTO_DOWN_REF Unexecuted instantiation: legacy_md5.c:CRYPTO_DOWN_REF Unexecuted instantiation: legacy_md5_sha1.c:CRYPTO_DOWN_REF Unexecuted instantiation: legacy_mdc2.c:CRYPTO_DOWN_REF Unexecuted instantiation: legacy_ripemd.c:CRYPTO_DOWN_REF Unexecuted instantiation: legacy_sha.c:CRYPTO_DOWN_REF Unexecuted instantiation: legacy_wp.c:CRYPTO_DOWN_REF Unexecuted instantiation: names.c:CRYPTO_DOWN_REF Unexecuted instantiation: pmeth_gn.c:CRYPTO_DOWN_REF Unexecuted instantiation: pmeth_lib.c:CRYPTO_DOWN_REF signature.c:CRYPTO_DOWN_REF Line  | Count  | Source  |  49  | 632k  | { |  50  | 632k  |     *ret = atomic_fetch_sub_explicit(val, 1, memory_order_relaxed) - 1;  |  51  | 632k  |     if (*ret == 0)  |  52  | 720  |         atomic_thread_fence(memory_order_acquire);  |  53  | 632k  |     return 1;  |  54  | 632k  | }  |  
 Unexecuted instantiation: provider_child.c:CRYPTO_DOWN_REF provider_core.c:CRYPTO_DOWN_REF Line  | Count  | Source  |  49  | 5.56M  | { |  50  | 5.56M  |     *ret = atomic_fetch_sub_explicit(val, 1, memory_order_relaxed) - 1;  |  51  | 5.56M  |     if (*ret == 0)  |  52  | 43  |         atomic_thread_fence(memory_order_acquire);  |  53  | 5.56M  |     return 1;  |  54  | 5.56M  | }  |  
 Unexecuted instantiation: pem_pkey.c:CRYPTO_DOWN_REF Unexecuted instantiation: rsa_ossl.c:CRYPTO_DOWN_REF Unexecuted instantiation: rsa_pk1.c:CRYPTO_DOWN_REF Unexecuted instantiation: rsa_pmeth.c:CRYPTO_DOWN_REF Unexecuted instantiation: rsa_pss.c:CRYPTO_DOWN_REF Unexecuted instantiation: rsa_sign.c:CRYPTO_DOWN_REF Unexecuted instantiation: legacy_sm3.c:CRYPTO_DOWN_REF Unexecuted instantiation: store_meth.c:CRYPTO_DOWN_REF x509_lu.c:CRYPTO_DOWN_REF Line  | Count  | Source  |  49  | 85.9k  | { |  50  | 85.9k  |     *ret = atomic_fetch_sub_explicit(val, 1, memory_order_relaxed) - 1;  |  51  | 85.9k  |     if (*ret == 0)  |  52  | 85.9k  |         atomic_thread_fence(memory_order_acquire);  |  53  | 85.9k  |     return 1;  |  54  | 85.9k  | }  |  
 Unexecuted instantiation: x509_set.c:CRYPTO_DOWN_REF Unexecuted instantiation: x509_vfy.c:CRYPTO_DOWN_REF Unexecuted instantiation: x509_vpm.c:CRYPTO_DOWN_REF Unexecuted instantiation: x509cset.c:CRYPTO_DOWN_REF Unexecuted instantiation: x509name.c:CRYPTO_DOWN_REF Unexecuted instantiation: x_all.c:CRYPTO_DOWN_REF Unexecuted instantiation: x_crl.c:CRYPTO_DOWN_REF Unexecuted instantiation: x_exten.c:CRYPTO_DOWN_REF Unexecuted instantiation: x_name.c:CRYPTO_DOWN_REF Unexecuted instantiation: x_pubkey.c:CRYPTO_DOWN_REF Unexecuted instantiation: x_req.c:CRYPTO_DOWN_REF Unexecuted instantiation: x_x509.c:CRYPTO_DOWN_REF Unexecuted instantiation: x_x509a.c:CRYPTO_DOWN_REF Unexecuted instantiation: provider_util.c:CRYPTO_DOWN_REF Unexecuted instantiation: cipher_aes.c:CRYPTO_DOWN_REF Unexecuted instantiation: cipher_aes_cbc_hmac_sha1_hw.c:CRYPTO_DOWN_REF Unexecuted instantiation: cipher_aes_cbc_hmac_sha256_hw.c:CRYPTO_DOWN_REF Unexecuted instantiation: cipher_camellia.c:CRYPTO_DOWN_REF Unexecuted instantiation: cipher_cts.c:CRYPTO_DOWN_REF Unexecuted instantiation: cipher_tdes_wrap.c:CRYPTO_DOWN_REF Unexecuted instantiation: decode_der2key.c:CRYPTO_DOWN_REF Unexecuted instantiation: decode_spki2typespki.c:CRYPTO_DOWN_REF Unexecuted instantiation: encode_key2any.c:CRYPTO_DOWN_REF Unexecuted instantiation: encode_key2text.c:CRYPTO_DOWN_REF Unexecuted instantiation: ecx_exch.c:CRYPTO_DOWN_REF Unexecuted instantiation: kdf_exch.c:CRYPTO_DOWN_REF Unexecuted instantiation: hkdf.c:CRYPTO_DOWN_REF Unexecuted instantiation: kbkdf.c:CRYPTO_DOWN_REF Unexecuted instantiation: krb5kdf.c:CRYPTO_DOWN_REF Unexecuted instantiation: pbkdf2.c:CRYPTO_DOWN_REF Unexecuted instantiation: pkcs12kdf.c:CRYPTO_DOWN_REF Unexecuted instantiation: scrypt.c:CRYPTO_DOWN_REF Unexecuted instantiation: sshkdf.c:CRYPTO_DOWN_REF Unexecuted instantiation: sskdf.c:CRYPTO_DOWN_REF Unexecuted instantiation: tls1_prf.c:CRYPTO_DOWN_REF Unexecuted instantiation: ecx_kmgmt.c:CRYPTO_DOWN_REF Unexecuted instantiation: kdf_legacy_kmgmt.c:CRYPTO_DOWN_REF mac_legacy_kmgmt.c:CRYPTO_DOWN_REF Line  | Count  | Source  |  49  | 365k  | { |  50  | 365k  |     *ret = atomic_fetch_sub_explicit(val, 1, memory_order_relaxed) - 1;  |  51  | 365k  |     if (*ret == 0)  |  52  | 7.05k  |         atomic_thread_fence(memory_order_acquire);  |  53  | 365k  |     return 1;  |  54  | 365k  | }  |  
 Unexecuted instantiation: eddsa_sig.c:CRYPTO_DOWN_REF Unexecuted instantiation: mac_legacy_sig.c:CRYPTO_DOWN_REF Unexecuted instantiation: der_ecx_key.c:CRYPTO_DOWN_REF Unexecuted instantiation: a_digest.c:CRYPTO_DOWN_REF Unexecuted instantiation: a_sign.c:CRYPTO_DOWN_REF Unexecuted instantiation: a_verify.c:CRYPTO_DOWN_REF Unexecuted instantiation: ameth_lib.c:CRYPTO_DOWN_REF Unexecuted instantiation: d2i_pr.c:CRYPTO_DOWN_REF Unexecuted instantiation: i2d_evp.c:CRYPTO_DOWN_REF Unexecuted instantiation: p8_pkey.c:CRYPTO_DOWN_REF Unexecuted instantiation: x_algor.c:CRYPTO_DOWN_REF Unexecuted instantiation: x_sig.c:CRYPTO_DOWN_REF Unexecuted instantiation: bf_readbuff.c:CRYPTO_DOWN_REF Unexecuted instantiation: bss_core.c:CRYPTO_DOWN_REF Unexecuted instantiation: bss_file.c:CRYPTO_DOWN_REF Unexecuted instantiation: bss_mem.c:CRYPTO_DOWN_REF ossl_core_bio.c:CRYPTO_DOWN_REF Line  | Count  | Source  |  49  | 5.65M  | { |  50  | 5.65M  |     *ret = atomic_fetch_sub_explicit(val, 1, memory_order_relaxed) - 1;  |  51  | 5.65M  |     if (*ret == 0)  |  52  | 1.77M  |         atomic_thread_fence(memory_order_acquire);  |  53  | 5.65M  |     return 1;  |  54  | 5.65M  | }  |  
 Unexecuted instantiation: dh_ameth.c:CRYPTO_DOWN_REF Unexecuted instantiation: dh_asn1.c:CRYPTO_DOWN_REF Unexecuted instantiation: dh_backend.c:CRYPTO_DOWN_REF Unexecuted instantiation: dh_check.c:CRYPTO_DOWN_REF Unexecuted instantiation: dh_gen.c:CRYPTO_DOWN_REF Unexecuted instantiation: dh_group_params.c:CRYPTO_DOWN_REF Unexecuted instantiation: dh_key.c:CRYPTO_DOWN_REF Line  | Count  | Source  |  49  | 283k  | { |  50  | 283k  |     *ret = atomic_fetch_sub_explicit(val, 1, memory_order_relaxed) - 1;  |  51  | 283k  |     if (*ret == 0)  |  52  | 244k  |         atomic_thread_fence(memory_order_acquire);  |  53  | 283k  |     return 1;  |  54  | 283k  | }  |  
 Unexecuted instantiation: dh_pmeth.c:CRYPTO_DOWN_REF Unexecuted instantiation: dsa_ameth.c:CRYPTO_DOWN_REF Unexecuted instantiation: dsa_asn1.c:CRYPTO_DOWN_REF Unexecuted instantiation: dsa_backend.c:CRYPTO_DOWN_REF Unexecuted instantiation: dsa_check.c:CRYPTO_DOWN_REF Unexecuted instantiation: dsa_gen.c:CRYPTO_DOWN_REF Unexecuted instantiation: dsa_key.c:CRYPTO_DOWN_REF dsa_lib.c:CRYPTO_DOWN_REF Line  | Count  | Source  |  49  | 469k  | { |  50  | 469k  |     *ret = atomic_fetch_sub_explicit(val, 1, memory_order_relaxed) - 1;  |  51  | 469k  |     if (*ret == 0)  |  52  | 403k  |         atomic_thread_fence(memory_order_acquire);  |  53  | 469k  |     return 1;  |  54  | 469k  | }  |  
 Unexecuted instantiation: dsa_ossl.c:CRYPTO_DOWN_REF Unexecuted instantiation: dsa_pmeth.c:CRYPTO_DOWN_REF Unexecuted instantiation: dsa_sign.c:CRYPTO_DOWN_REF Unexecuted instantiation: dsa_vrf.c:CRYPTO_DOWN_REF Unexecuted instantiation: dso_dlfcn.c:CRYPTO_DOWN_REF Unexecuted instantiation: curve448.c:CRYPTO_DOWN_REF Unexecuted instantiation: eddsa.c:CRYPTO_DOWN_REF Unexecuted instantiation: curve25519.c:CRYPTO_DOWN_REF Unexecuted instantiation: ec_ameth.c:CRYPTO_DOWN_REF Unexecuted instantiation: ec_asn1.c:CRYPTO_DOWN_REF Unexecuted instantiation: ec_backend.c:CRYPTO_DOWN_REF Unexecuted instantiation: ec_check.c:CRYPTO_DOWN_REF Unexecuted instantiation: ec_curve.c:CRYPTO_DOWN_REF Unexecuted instantiation: ec_cvt.c:CRYPTO_DOWN_REF Line  | Count  | Source  |  49  | 891k  | { |  50  | 891k  |     *ret = atomic_fetch_sub_explicit(val, 1, memory_order_relaxed) - 1;  |  51  | 891k  |     if (*ret == 0)  |  52  | 621k  |         atomic_thread_fence(memory_order_acquire);  |  53  | 891k  |     return 1;  |  54  | 891k  | }  |  
 Unexecuted instantiation: ec_kmeth.c:CRYPTO_DOWN_REF Unexecuted instantiation: ec_lib.c:CRYPTO_DOWN_REF Unexecuted instantiation: ec_mult.c:CRYPTO_DOWN_REF Unexecuted instantiation: ec_oct.c:CRYPTO_DOWN_REF Unexecuted instantiation: ec_pmeth.c:CRYPTO_DOWN_REF Unexecuted instantiation: ecdh_kdf.c:CRYPTO_DOWN_REF Unexecuted instantiation: ecdh_ossl.c:CRYPTO_DOWN_REF Unexecuted instantiation: ecdsa_ossl.c:CRYPTO_DOWN_REF Unexecuted instantiation: ecdsa_sign.c:CRYPTO_DOWN_REF Unexecuted instantiation: ecdsa_vrf.c:CRYPTO_DOWN_REF Unexecuted instantiation: ecp_mont.c:CRYPTO_DOWN_REF Unexecuted instantiation: ecp_nistp224.c:CRYPTO_DOWN_REF Unexecuted instantiation: ecp_nistp256.c:CRYPTO_DOWN_REF Unexecuted instantiation: ecp_nistp521.c:CRYPTO_DOWN_REF Unexecuted instantiation: ecp_nistputil.c:CRYPTO_DOWN_REF Unexecuted instantiation: ecp_nistz256.c:CRYPTO_DOWN_REF Unexecuted instantiation: ecp_oct.c:CRYPTO_DOWN_REF Unexecuted instantiation: ecp_smpl.c:CRYPTO_DOWN_REF Unexecuted instantiation: ecx_backend.c:CRYPTO_DOWN_REF ecx_key.c:CRYPTO_DOWN_REF Line  | Count  | Source  |  49  | 133k  | { |  50  | 133k  |     *ret = atomic_fetch_sub_explicit(val, 1, memory_order_relaxed) - 1;  |  51  | 133k  |     if (*ret == 0)  |  52  | 97.1k  |         atomic_thread_fence(memory_order_acquire);  |  53  | 133k  |     return 1;  |  54  | 133k  | }  |  
 Unexecuted instantiation: ecx_meth.c:CRYPTO_DOWN_REF Unexecuted instantiation: decoder_lib.c:CRYPTO_DOWN_REF decoder_meth.c:CRYPTO_DOWN_REF Line  | Count  | Source  |  49  | 28.7M  | { |  50  | 28.7M  |     *ret = atomic_fetch_sub_explicit(val, 1, memory_order_relaxed) - 1;  |  51  | 28.7M  |     if (*ret == 0)  |  52  | 1.58k  |         atomic_thread_fence(memory_order_acquire);  |  53  | 28.7M  |     return 1;  |  54  | 28.7M  | }  |  
 Unexecuted instantiation: decoder_pkey.c:CRYPTO_DOWN_REF Unexecuted instantiation: encoder_lib.c:CRYPTO_DOWN_REF encoder_meth.c:CRYPTO_DOWN_REF Line  | Count  | Source  |  49  | 355k  | { |  50  | 355k  |     *ret = atomic_fetch_sub_explicit(val, 1, memory_order_relaxed) - 1;  |  51  | 355k  |     if (*ret == 0)  |  52  | 1.52k  |         atomic_thread_fence(memory_order_acquire);  |  53  | 355k  |     return 1;  |  54  | 355k  | }  |  
 Unexecuted instantiation: encoder_pkey.c:CRYPTO_DOWN_REF Unexecuted instantiation: eng_cnf.c:CRYPTO_DOWN_REF Unexecuted instantiation: eng_ctrl.c:CRYPTO_DOWN_REF Unexecuted instantiation: eng_table.c:CRYPTO_DOWN_REF asymcipher.c:CRYPTO_DOWN_REF Line  | Count  | Source  |  49  | 7.01k  | { |  50  | 7.01k  |     *ret = atomic_fetch_sub_explicit(val, 1, memory_order_relaxed) - 1;  |  51  | 7.01k  |     if (*ret == 0)  |  52  | 18  |         atomic_thread_fence(memory_order_acquire);  |  53  | 7.01k  |     return 1;  |  54  | 7.01k  | }  |  
 Unexecuted instantiation: ctrl_params_translate.c:CRYPTO_DOWN_REF Unexecuted instantiation: dh_ctrl.c:CRYPTO_DOWN_REF Line  | Count  | Source  |  49  | 7.44M  | { |  50  | 7.44M  |     *ret = atomic_fetch_sub_explicit(val, 1, memory_order_relaxed) - 1;  |  51  | 7.44M  |     if (*ret == 0)  |  52  | 1.03k  |         atomic_thread_fence(memory_order_acquire);  |  53  | 7.44M  |     return 1;  |  54  | 7.44M  | }  |  
 Unexecuted instantiation: dsa_ctrl.c:CRYPTO_DOWN_REF Unexecuted instantiation: ec_ctrl.c:CRYPTO_DOWN_REF Unexecuted instantiation: evp_cnf.c:CRYPTO_DOWN_REF Unexecuted instantiation: evp_pbe.c:CRYPTO_DOWN_REF Unexecuted instantiation: evp_pkey.c:CRYPTO_DOWN_REF exchange.c:CRYPTO_DOWN_REF Line  | Count  | Source  |  49  | 181k  | { |  50  | 181k  |     *ret = atomic_fetch_sub_explicit(val, 1, memory_order_relaxed) - 1;  |  51  | 181k  |     if (*ret == 0)  |  52  | 98  |         atomic_thread_fence(memory_order_acquire);  |  53  | 181k  |     return 1;  |  54  | 181k  | }  |  
 Unexecuted instantiation: kdf_lib.c:CRYPTO_DOWN_REF kdf_meth.c:CRYPTO_DOWN_REF Line  | Count  | Source  |  49  | 1.25M  | { |  50  | 1.25M  |     *ret = atomic_fetch_sub_explicit(val, 1, memory_order_relaxed) - 1;  |  51  | 1.25M  |     if (*ret == 0)  |  52  | 160  |         atomic_thread_fence(memory_order_acquire);  |  53  | 1.25M  |     return 1;  |  54  | 1.25M  | }  |  
 Line  | Count  | Source  |  49  | 217  | { |  50  | 217  |     *ret = atomic_fetch_sub_explicit(val, 1, memory_order_relaxed) - 1;  |  51  | 217  |     if (*ret == 0)  |  52  | 22  |         atomic_thread_fence(memory_order_acquire);  |  53  | 217  |     return 1;  |  54  | 217  | }  |  
 Unexecuted instantiation: keymgmt_lib.c:CRYPTO_DOWN_REF keymgmt_meth.c:CRYPTO_DOWN_REF Line  | Count  | Source  |  49  | 16.9M  | { |  50  | 16.9M  |     *ret = atomic_fetch_sub_explicit(val, 1, memory_order_relaxed) - 1;  |  51  | 16.9M  |     if (*ret == 0)  |  52  | 978  |         atomic_thread_fence(memory_order_acquire);  |  53  | 16.9M  |     return 1;  |  54  | 16.9M  | }  |  
 Unexecuted instantiation: m_null.c:CRYPTO_DOWN_REF Unexecuted instantiation: m_sigver.c:CRYPTO_DOWN_REF Unexecuted instantiation: mac_lib.c:CRYPTO_DOWN_REF mac_meth.c:CRYPTO_DOWN_REF Line  | Count  | Source  |  49  | 796k  | { |  50  | 796k  |     *ret = atomic_fetch_sub_explicit(val, 1, memory_order_relaxed) - 1;  |  51  | 796k  |     if (*ret == 0)  |  52  | 180  |         atomic_thread_fence(memory_order_acquire);  |  53  | 796k  |     return 1;  |  54  | 796k  | }  |  
 Unexecuted instantiation: p5_crpt2.c:CRYPTO_DOWN_REF Unexecuted instantiation: p_legacy.c:CRYPTO_DOWN_REF Line  | Count  | Source  |  49  | 4.76M  | { |  50  | 4.76M  |     *ret = atomic_fetch_sub_explicit(val, 1, memory_order_relaxed) - 1;  |  51  | 4.76M  |     if (*ret == 0)  |  52  | 1.63M  |         atomic_thread_fence(memory_order_acquire);  |  53  | 4.76M  |     return 1;  |  54  | 4.76M  | }  |  
 Unexecuted instantiation: p_sign.c:CRYPTO_DOWN_REF Unexecuted instantiation: p_verify.c:CRYPTO_DOWN_REF Unexecuted instantiation: pmeth_check.c:CRYPTO_DOWN_REF Unexecuted instantiation: http_lib.c:CRYPTO_DOWN_REF Unexecuted instantiation: pvkfmt.c:CRYPTO_DOWN_REF Unexecuted instantiation: p12_crpt.c:CRYPTO_DOWN_REF Unexecuted instantiation: p12_p8e.c:CRYPTO_DOWN_REF Unexecuted instantiation: pk7_lib.c:CRYPTO_DOWN_REF Unexecuted instantiation: rsa_ameth.c:CRYPTO_DOWN_REF Unexecuted instantiation: rsa_asn1.c:CRYPTO_DOWN_REF Unexecuted instantiation: rsa_backend.c:CRYPTO_DOWN_REF Unexecuted instantiation: rsa_chk.c:CRYPTO_DOWN_REF Unexecuted instantiation: rsa_crpt.c:CRYPTO_DOWN_REF Unexecuted instantiation: rsa_gen.c:CRYPTO_DOWN_REF rsa_lib.c:CRYPTO_DOWN_REF Line  | Count  | Source  |  49  | 582k  | { |  50  | 582k  |     *ret = atomic_fetch_sub_explicit(val, 1, memory_order_relaxed) - 1;  |  51  | 582k  |     if (*ret == 0)  |  52  | 405k  |         atomic_thread_fence(memory_order_acquire);  |  53  | 582k  |     return 1;  |  54  | 582k  | }  |  
 Unexecuted instantiation: rsa_mp.c:CRYPTO_DOWN_REF Unexecuted instantiation: rsa_oaep.c:CRYPTO_DOWN_REF Unexecuted instantiation: rsa_sp800_56b_check.c:CRYPTO_DOWN_REF Unexecuted instantiation: rsa_sp800_56b_gen.c:CRYPTO_DOWN_REF Unexecuted instantiation: pcy_cache.c:CRYPTO_DOWN_REF Unexecuted instantiation: pcy_map.c:CRYPTO_DOWN_REF Unexecuted instantiation: t_x509.c:CRYPTO_DOWN_REF Unexecuted instantiation: v3_addr.c:CRYPTO_DOWN_REF Unexecuted instantiation: v3_asid.c:CRYPTO_DOWN_REF Unexecuted instantiation: v3_cpols.c:CRYPTO_DOWN_REF Unexecuted instantiation: v3_crld.c:CRYPTO_DOWN_REF Unexecuted instantiation: v3_ncons.c:CRYPTO_DOWN_REF Unexecuted instantiation: v3_purp.c:CRYPTO_DOWN_REF Unexecuted instantiation: v3_san.c:CRYPTO_DOWN_REF Unexecuted instantiation: v3_utl.c:CRYPTO_DOWN_REF Unexecuted instantiation: x509_att.c:CRYPTO_DOWN_REF Unexecuted instantiation: x509_cmp.c:CRYPTO_DOWN_REF Unexecuted instantiation: x509_ext.c:CRYPTO_DOWN_REF Unexecuted instantiation: x509_obj.c:CRYPTO_DOWN_REF Unexecuted instantiation: x509_req.c:CRYPTO_DOWN_REF Unexecuted instantiation: x509_trust.c:CRYPTO_DOWN_REF Unexecuted instantiation: x509_v3.c:CRYPTO_DOWN_REF Unexecuted instantiation: x509rset.c:CRYPTO_DOWN_REF Unexecuted instantiation: x_attrib.c:CRYPTO_DOWN_REF Unexecuted instantiation: der_ecx_gen.c:CRYPTO_DOWN_REF Unexecuted instantiation: p5_scrypt.c:CRYPTO_DOWN_REF Unexecuted instantiation: bf_buff.c:CRYPTO_DOWN_REF Unexecuted instantiation: bss_conn.c:CRYPTO_DOWN_REF Unexecuted instantiation: ec2_oct.c:CRYPTO_DOWN_REF Unexecuted instantiation: ec2_smpl.c:CRYPTO_DOWN_REF Unexecuted instantiation: ecp_nist.c:CRYPTO_DOWN_REF Unexecuted instantiation: encode.c:CRYPTO_DOWN_REF Unexecuted instantiation: v3_bcons.c:CRYPTO_DOWN_REF Unexecuted instantiation: v3_conf.c:CRYPTO_DOWN_REF Unexecuted instantiation: v3_skid.c:CRYPTO_DOWN_REF Unexecuted instantiation: v3_tlsf.c:CRYPTO_DOWN_REF Unexecuted instantiation: v3_ocsp.c:CRYPTO_DOWN_REF Unexecuted instantiation: v3_akid.c:CRYPTO_DOWN_REF Unexecuted instantiation: ocsp_asn.c:CRYPTO_DOWN_REF Unexecuted instantiation: cms_lib.c:CRYPTO_DOWN_REF Unexecuted instantiation: cms_sd.c:CRYPTO_DOWN_REF Unexecuted instantiation: ess_lib.c:CRYPTO_DOWN_REF Unexecuted instantiation: asn_mime.c:CRYPTO_DOWN_REF Unexecuted instantiation: cms_att.c:CRYPTO_DOWN_REF Unexecuted instantiation: cms_ec.c:CRYPTO_DOWN_REF Unexecuted instantiation: cms_enc.c:CRYPTO_DOWN_REF Unexecuted instantiation: cms_env.c:CRYPTO_DOWN_REF Unexecuted instantiation: cms_rsa.c:CRYPTO_DOWN_REF Unexecuted instantiation: cms_dh.c:CRYPTO_DOWN_REF Unexecuted instantiation: methods.c:CRYPTO_DOWN_REF Unexecuted instantiation: s3_lib.c:CRYPTO_DOWN_REF Unexecuted instantiation: s3_msg.c:CRYPTO_DOWN_REF ssl_cert.c:CRYPTO_DOWN_REF Line  | Count  | Source  |  49  | 158k  | { |  50  | 158k  |     *ret = atomic_fetch_sub_explicit(val, 1, memory_order_relaxed) - 1;  |  51  | 158k  |     if (*ret == 0)  |  52  | 158k  |         atomic_thread_fence(memory_order_acquire);  |  53  | 158k  |     return 1;  |  54  | 158k  | }  |  
 Unexecuted instantiation: ssl_ciph.c:CRYPTO_DOWN_REF Unexecuted instantiation: ssl_init.c:CRYPTO_DOWN_REF ssl_lib.c:CRYPTO_DOWN_REF Line  | Count  | Source  |  49  | 375k  | { |  50  | 375k  |     *ret = atomic_fetch_sub_explicit(val, 1, memory_order_relaxed) - 1;  |  51  | 375k  |     if (*ret == 0)  |  52  | 186k  |         atomic_thread_fence(memory_order_acquire);  |  53  | 375k  |     return 1;  |  54  | 375k  | }  |  
 Unexecuted instantiation: ssl_mcnf.c:CRYPTO_DOWN_REF Unexecuted instantiation: ssl_rsa.c:CRYPTO_DOWN_REF ssl_sess.c:CRYPTO_DOWN_REF Line  | Count  | Source  |  49  | 80.3k  | { |  50  | 80.3k  |     *ret = atomic_fetch_sub_explicit(val, 1, memory_order_relaxed) - 1;  |  51  | 80.3k  |     if (*ret == 0)  |  52  | 79.5k  |         atomic_thread_fence(memory_order_acquire);  |  53  | 80.3k  |     return 1;  |  54  | 80.3k  | }  |  
 Unexecuted instantiation: t1_lib.c:CRYPTO_DOWN_REF Unexecuted instantiation: tls13_enc.c:CRYPTO_DOWN_REF Unexecuted instantiation: tls_depr.c:CRYPTO_DOWN_REF Unexecuted instantiation: tls_srp.c:CRYPTO_DOWN_REF Unexecuted instantiation: rec_layer_d1.c:CRYPTO_DOWN_REF Unexecuted instantiation: rec_layer_s3.c:CRYPTO_DOWN_REF Unexecuted instantiation: ssl3_buffer.c:CRYPTO_DOWN_REF Unexecuted instantiation: ssl3_record.c:CRYPTO_DOWN_REF Unexecuted instantiation: ssl3_record_tls13.c:CRYPTO_DOWN_REF Unexecuted instantiation: extensions.c:CRYPTO_DOWN_REF Unexecuted instantiation: extensions_clnt.c:CRYPTO_DOWN_REF Unexecuted instantiation: extensions_cust.c:CRYPTO_DOWN_REF Unexecuted instantiation: extensions_srvr.c:CRYPTO_DOWN_REF Unexecuted instantiation: statem.c:CRYPTO_DOWN_REF Unexecuted instantiation: statem_clnt.c:CRYPTO_DOWN_REF Unexecuted instantiation: statem_dtls.c:CRYPTO_DOWN_REF Unexecuted instantiation: statem_lib.c:CRYPTO_DOWN_REF Unexecuted instantiation: statem_srvr.c:CRYPTO_DOWN_REF Unexecuted instantiation: d1_lib.c:CRYPTO_DOWN_REF Unexecuted instantiation: d1_msg.c:CRYPTO_DOWN_REF Unexecuted instantiation: d1_srtp.c:CRYPTO_DOWN_REF Unexecuted instantiation: pqueue.c:CRYPTO_DOWN_REF Unexecuted instantiation: s3_enc.c:CRYPTO_DOWN_REF Unexecuted instantiation: ssl_asn1.c:CRYPTO_DOWN_REF Unexecuted instantiation: ssl_conf.c:CRYPTO_DOWN_REF Unexecuted instantiation: t1_enc.c:CRYPTO_DOWN_REF Unexecuted instantiation: dtls1_bitmap.c:CRYPTO_DOWN_REF Unexecuted instantiation: ocsp_cl.c:CRYPTO_DOWN_REF Unexecuted instantiation: ocsp_ext.c:CRYPTO_DOWN_REF Unexecuted instantiation: ocsp_lib.c:CRYPTO_DOWN_REF Unexecuted instantiation: srp_vfy.c:CRYPTO_DOWN_REF Unexecuted instantiation: store_lib.c:CRYPTO_DOWN_REF Unexecuted instantiation: store_result.c:CRYPTO_DOWN_REF Unexecuted instantiation: by_dir.c:CRYPTO_DOWN_REF Unexecuted instantiation: by_file.c:CRYPTO_DOWN_REF Unexecuted instantiation: by_store.c:CRYPTO_DOWN_REF Unexecuted instantiation: pem_info.c:CRYPTO_DOWN_REF Unexecuted instantiation: p12_kiss.c:CRYPTO_DOWN_REF Unexecuted instantiation: cmp.c:CRYPTO_DOWN_REF Unexecuted instantiation: cmp_asn.c:CRYPTO_DOWN_REF Unexecuted instantiation: cmp_client.c:CRYPTO_DOWN_REF Unexecuted instantiation: cmp_ctx.c:CRYPTO_DOWN_REF Unexecuted instantiation: cmp_hdr.c:CRYPTO_DOWN_REF Unexecuted instantiation: cmp_http.c:CRYPTO_DOWN_REF Unexecuted instantiation: cmp_msg.c:CRYPTO_DOWN_REF Unexecuted instantiation: cmp_protect.c:CRYPTO_DOWN_REF Unexecuted instantiation: cmp_server.c:CRYPTO_DOWN_REF Unexecuted instantiation: cmp_status.c:CRYPTO_DOWN_REF Unexecuted instantiation: cmp_vfy.c:CRYPTO_DOWN_REF Unexecuted instantiation: ocsp_vfy.c:CRYPTO_DOWN_REF Unexecuted instantiation: ssl_txt.c:CRYPTO_DOWN_REF  | 
55  |  |  | 
56  |  | #  elif defined(__GNUC__) && defined(__ATOMIC_RELAXED) && __GCC_ATOMIC_INT_LOCK_FREE > 0  | 
57  |  |  | 
58  |  | #   define HAVE_ATOMICS 1  | 
59  |  |  | 
60  |  | typedef int CRYPTO_REF_COUNT;  | 
61  |  |  | 
62  |  | static __inline__ int CRYPTO_UP_REF(int *val, int *ret, ossl_unused void *lock)  | 
63  |  | { | 
64  |  |     *ret = __atomic_fetch_add(val, 1, __ATOMIC_RELAXED) + 1;  | 
65  |  |     return 1;  | 
66  |  | }  | 
67  |  |  | 
68  |  | static __inline__ int CRYPTO_DOWN_REF(int *val, int *ret,  | 
69  |  |                                       ossl_unused void *lock)  | 
70  |  | { | 
71  |  |     *ret = __atomic_fetch_sub(val, 1, __ATOMIC_RELAXED) - 1;  | 
72  |  |     if (*ret == 0)  | 
73  |  |         __atomic_thread_fence(__ATOMIC_ACQUIRE);  | 
74  |  |     return 1;  | 
75  |  | }  | 
76  |  | #  elif defined(__ICL) && defined(_WIN32)  | 
77  |  | #   define HAVE_ATOMICS 1  | 
78  |  | typedef volatile int CRYPTO_REF_COUNT;  | 
79  |  |  | 
80  |  | static __inline int CRYPTO_UP_REF(volatile int *val, int *ret,  | 
81  |  |                                   ossl_unused void *lock)  | 
82  |  | { | 
83  |  |     *ret = _InterlockedExchangeAdd((void *)val, 1) + 1;  | 
84  |  |     return 1;  | 
85  |  | }  | 
86  |  |  | 
87  |  | static __inline int CRYPTO_DOWN_REF(volatile int *val, int *ret,  | 
88  |  |                                     ossl_unused void *lock)  | 
89  |  | { | 
90  |  |     *ret = _InterlockedExchangeAdd((void *)val, -1) - 1;  | 
91  |  |     return 1;  | 
92  |  | }  | 
93  |  |  | 
94  |  | #  elif defined(_MSC_VER) && _MSC_VER>=1200  | 
95  |  |  | 
96  |  | #   define HAVE_ATOMICS 1  | 
97  |  |  | 
98  |  | typedef volatile int CRYPTO_REF_COUNT;  | 
99  |  |  | 
100  |  | #   if (defined(_M_ARM) && _M_ARM>=7 && !defined(_WIN32_WCE)) || defined(_M_ARM64)  | 
101  |  | #    include <intrin.h>  | 
102  |  | #    if defined(_M_ARM64) && !defined(_ARM_BARRIER_ISH)  | 
103  |  | #     define _ARM_BARRIER_ISH _ARM64_BARRIER_ISH  | 
104  |  | #    endif  | 
105  |  |  | 
106  |  | static __inline int CRYPTO_UP_REF(volatile int *val, int *ret,  | 
107  |  |                                   ossl_unused void *lock)  | 
108  |  | { | 
109  |  |     *ret = _InterlockedExchangeAdd_nf(val, 1) + 1;  | 
110  |  |     return 1;  | 
111  |  | }  | 
112  |  |  | 
113  |  | static __inline int CRYPTO_DOWN_REF(volatile int *val, int *ret,  | 
114  |  |                                     ossl_unused void *lock)  | 
115  |  | { | 
116  |  |     *ret = _InterlockedExchangeAdd_nf(val, -1) - 1;  | 
117  |  |     if (*ret == 0)  | 
118  |  |         __dmb(_ARM_BARRIER_ISH);  | 
119  |  |     return 1;  | 
120  |  | }  | 
121  |  | #   else  | 
122  |  | #    if !defined(_WIN32_WCE)  | 
123  |  | #     pragma intrinsic(_InterlockedExchangeAdd)  | 
124  |  | #    else  | 
125  |  | #     if _WIN32_WCE >= 0x600  | 
126  |  |        extern long __cdecl _InterlockedExchangeAdd(long volatile*, long);  | 
127  |  | #     else  | 
128  |  |        /* under Windows CE we still have old-style Interlocked* functions */  | 
129  |  |        extern long __cdecl InterlockedExchangeAdd(long volatile*, long);  | 
130  |  | #      define _InterlockedExchangeAdd InterlockedExchangeAdd  | 
131  |  | #     endif  | 
132  |  | #    endif  | 
133  |  |  | 
134  |  | static __inline int CRYPTO_UP_REF(volatile int *val, int *ret,  | 
135  |  |                                   ossl_unused void *lock)  | 
136  |  | { | 
137  |  |     *ret = _InterlockedExchangeAdd((long volatile *)val, 1) + 1;  | 
138  |  |     return 1;  | 
139  |  | }  | 
140  |  |  | 
141  |  | static __inline int CRYPTO_DOWN_REF(volatile int *val, int *ret,  | 
142  |  |                                     ossl_unused void *lock)  | 
143  |  | { | 
144  |  |     *ret = _InterlockedExchangeAdd((long volatile *)val, -1) - 1;  | 
145  |  |     return 1;  | 
146  |  | }  | 
147  |  | #   endif  | 
148  |  |  | 
149  |  | #  endif  | 
150  |  | # endif  /* !OPENSSL_DEV_NO_ATOMICS */  | 
151  |  |  | 
152  |  | /*  | 
153  |  |  * All the refcounting implementations above define HAVE_ATOMICS, so if it's  | 
154  |  |  * still undefined here (such as when OPENSSL_DEV_NO_ATOMICS is defined), it  | 
155  |  |  * means we need to implement a fallback.  This fallback uses locks.  | 
156  |  |  */  | 
157  |  | # ifndef HAVE_ATOMICS  | 
158  |  |  | 
159  |  | typedef int CRYPTO_REF_COUNT;  | 
160  |  |  | 
161  |  | # define CRYPTO_UP_REF(val, ret, lock) CRYPTO_atomic_add(val, 1, ret, lock)  | 
162  |  | # define CRYPTO_DOWN_REF(val, ret, lock) CRYPTO_atomic_add(val, -1, ret, lock)  | 
163  |  |  | 
164  |  | # endif  | 
165  |  |  | 
166  |  | # if !defined(NDEBUG) && !defined(OPENSSL_NO_STDIO)  | 
167  |  | #  define REF_ASSERT_ISNT(test) \  | 
168  | 27.3M  |     (void)((test) ? (OPENSSL_die("refcount error", __FILE__, __LINE__), 1) : 0) | 
169  |  | # else  | 
170  |  | #  define REF_ASSERT_ISNT(i)  | 
171  |  | # endif  | 
172  |  |  | 
173  |  | # define REF_PRINT_EX(text, count, object) \  | 
174  | 33.6M  |     OSSL_TRACE3(REF_COUNT, "%p:%4d:%s\n", (object), (count), (text));  | 
175  |  | # define REF_PRINT_COUNT(text, object) \  | 
176  | 33.0M  |     REF_PRINT_EX(text, object->references, (void *)object)  | 
177  |  |  | 
178  |  | #endif  |