Binary compatibility report for the pam_ssh library  between 1.98 and 2.0 versions on x86

Test Info


Library Namepam_ssh
Version #11.98
Version #22.0
CPU Typex86
GCC Version4.6.1

Test Results


Total Header Files20
Total Shared Libraries1
Total Symbols / Types88 / 117
VerdictIncompatible
(12.5%)

Problem Summary


SeverityCount
Added Symbols-57
Removed SymbolsHigh9
Problems with
Data Types
High0
Medium0
Low8
Problems with
Symbols
High0
Medium4
Low40
Problems with
Constants
Low2
Other Changes
in Constants
-255

Added Symbols (57)


acss.h, pam_ssh.so
acss ACSS_KEY* p1, unsigned long p2, unsigned char const* p3, unsigned char* p4 )
acss_setkey ACSS_KEY* p1, unsigned char const* p2, int p3, int p4 )
acss_setsubkey ACSS_KEY* p1, unsigned char const* p2 )

atomicio.h, pam_ssh.so
atomicio6 ( ssize_t(*f)(int, void*, size_t), int fd, void* _s, size_t n, int(*cb)(void*, size_t), void* p6 )
atomiciov ( ssize_t(*p1)(int, struct iovec const*, int), int p2, struct iovec const* p3, int p4 )
atomiciov6 ( ssize_t(*f)(int, struct iovec const*, int), int fd, struct iovec const* _iov, int iovcnt, int(*cb)(void*, size_t), void* p6 )

authfd.h, pam_ssh.so
ssh_get_authentication_connection_authsocket char const* authsocket )
ssh_get_authentication_socket_authsocket char const* authsocket )

authfile.h, pam_ssh.so
key_load_file int p1, char const* p2, struct Buffer* p3 )
key_perm_ok int p1, char const* p2 )

buffer.h, pam_ssh.so
buffer_check_alloc ( struct Buffer* p1, u_int p2 )
buffer_consume_end_ret ( struct Buffer* p1, u_int p2 )
buffer_consume_ret ( struct Buffer* p1, u_int p2 )
buffer_get_bignum2 ( struct Buffer* p1, BIGNUM* p2 )
buffer_get_bignum2_ret ( struct Buffer* p1, BIGNUM* p2 )
buffer_get_bignum_ret ( struct Buffer* p1, BIGNUM* p2 )
buffer_get_char_ret char* p1, struct Buffer* p2 )
buffer_get_cstring ( struct Buffer* p1, u_int* p2 )
buffer_get_cstring_ret ( struct Buffer* p1, u_int* p2 )
buffer_get_int64 struct Buffer* p1 )
buffer_get_int64_ret u_int64_t* p1, struct Buffer* p2 )
buffer_get_int_ret u_int* p1, struct Buffer* p2 )
buffer_get_ret ( struct Buffer* p1, void* p2, u_int p3 )
buffer_get_short struct Buffer* p1 )
buffer_get_short_ret u_short* p1, struct Buffer* p2 )
buffer_get_string_ptr ( struct Buffer* p1, u_int* p2 )
buffer_get_string_ptr_ret ( struct Buffer* p1, u_int* p2 )
buffer_get_string_ret ( struct Buffer* p1, u_int* p2 )
buffer_put_bignum2_ret ( struct Buffer* p1, BIGNUM const* p2 )
buffer_put_bignum_ret ( struct Buffer* p1, BIGNUM const* p2 )
buffer_put_int64 ( struct Buffer* p1, u_int64_t p2 )
buffer_put_short ( struct Buffer* p1, u_short p2 )

cipher.h, pam_ssh.so
cipher_get_keyiv ( CipherContext* p1, u_char* p2, u_int p3 )
cipher_get_keyiv_len CipherContext const* p1 )
cipher_is_cbc Cipher const* p1 )
cipher_set_keyiv ( CipherContext* p1, u_char* p2 )

key.h, pam_ssh.so
key_curve_nid_to_bits int p1 )
key_curve_nid_to_name int p1 )
key_is_cert Key const* p1 )

log.h, pam_ssh.so
cleanup_exit int p1 )
do_log2 ( enum LogLevel p1, char const* p2, ... )
log_facility_name enum SyslogFacility p1 )
log_level_name enum LogLevel p1 )
set_log_handler ( void(*p1)(enum LogLevel, char const*, void*), void* p2 )
sigdie char const* p1, ... )
unambigous_log_error char const* p1, ... )

misc.h, pam_ssh.so
get_u16 void const* p1 )
get_u32 void const* p1 )
get_u64 void const* p1 )
put_u16 void* p1, u_int16_t p2 )
put_u32 void* p1, u_int32_t p2 )
put_u64 void* p1, u_int64_t p2 )

pam_get_pass.h, pam_ssh.so
pam_conv_pass ( pam_handle_t* p1, char const* p2, struct options* p3 )

rsa.h, pam_ssh.so
rsa_private_decrypt BIGNUM* p1, BIGNUM* p2, RSA* p3 )
rsa_public_encrypt BIGNUM* p1, BIGNUM* p2, RSA* p3 )

xmalloc.h, pam_ssh.so
xasprintf char** p1, char const* p2, ... )
xcalloc size_t p1, size_t p2 )

to the top

Removed Symbols (9)


authfd.h, pam_ssh.so
ssh_add_identity ( struct AuthenticationConnection* p1, Key* p2, char const* p3 )
ssh_get_authentication_connection char const* p1 )
ssh_get_authentication_socket char const* p1 )

key.h, pam_ssh.so
key_equal Key* p1, Key* p2 )

log.h, pam_ssh.so
error char const* p1, ... )
fatal_add_cleanup ( void(*p1)(void*), void* p2 )
fatal_cleanup ( )
fatal_remove_all_cleanups ( )
fatal_remove_cleanup ( void(*p1)(void*), void* p2 )

to the top

Problems with Symbols, Medium Severity (4)


authfile.h, pam_ssh.so
[+] key_load_private_type int p1, char const* p2, char const* p3, char** p4 ) (1)

key.h, pam_ssh.so
[+] key_ssh_name Key* p1 ) (1)
[+] key_type Key* p1 ) (1)

xmalloc.h, pam_ssh.so
[+] xrealloc void* p1, size_t p2 ) (1)

to the top

Problems with Data Types, Low Severity (8)


buffer.h
[+] struct Buffer (4)

key.h
[+] struct Key (4)

to the top

Problems with Symbols, Low Severity (40)


atomicio.h, pam_ssh.so
[+] atomicio ( ssize_t(*p1)(int, void*, size_t), int p2, void* p3, size_t p4 ) (1)

bufaux.h, pam_ssh.so
[+] buffer_get_int struct Buffer* p1 ) (1)
[+] buffer_get_string ( struct Buffer* p1, u_int* p2 ) (1)
[+] buffer_put_int ( struct Buffer* p1, u_int p2 ) (1)
[+] buffer_put_string ( struct Buffer* p1, void const* p2, u_int p3 ) (1)

buffer.h, pam_ssh.so
[+] buffer_append ( struct Buffer* p1, void const* p2, u_int p3 ) (1)
[+] buffer_append_space ( struct Buffer* p1, u_int p2 ) (1)
[+] buffer_consume ( struct Buffer* p1, u_int p2 ) (1)
[+] buffer_consume_end ( struct Buffer* p1, u_int p2 ) (1)
[+] buffer_dump struct Buffer* p1 ) (1)
[+] buffer_get ( struct Buffer* p1, void* p2, u_int p3 ) (1)
[+] buffer_len struct Buffer* p1 ) (2)
[+] buffer_ptr struct Buffer* p1 ) (1)

cipher.h, pam_ssh.so
[+] cipher_blocksize Cipher* p1 ) (2)
[+] cipher_crypt ( CipherContext* p1, u_char* p2, u_char const* p3, u_int p4 ) (3)
[+] cipher_get_keycontext ( CipherContext* p1, u_char* p2 ) (2)
[+] cipher_get_number Cipher* p1 ) (2)
[+] cipher_init ( CipherContext* p1, Cipher* p2, u_char const* p3, u_int p4, u_char const* p5, u_int p6, int p7 ) (4)
[+] cipher_keylen Cipher* p1 ) (2)
[+] cipher_mask_ssh1 int p1 ) (1)
[+] cipher_set_keycontext ( CipherContext* p1, u_char* p2 ) (1)

key.h, pam_ssh.so
[+] key_ssh_name Key* p1 ) (2)
[+] key_type Key* p1 ) (2)

rijndael.h, pam_ssh.so
[+] rijndael_decrypt ( struct rijndael_ctx* p1, u_char* p2, u_char* p3 ) (2)
[+] rijndael_encrypt ( struct rijndael_ctx* p1, u_char* p2, u_char* p3 ) (2)
[+] rijndael_set_key ( struct rijndael_ctx* p1, u_char* p2, int p3, int p4 ) (1)

to the top

Problems with Constants, Low Severity (2)


cipher.h
[+] SSH_CIPHER_ILLEGAL

kex.h
[+] KEX_DHGEX

to the top

Other Changes in Constants (255)


acss.h
[+] ACSS_AUTHENTICATE
[+] ACSS_DATA
[+] ACSS_KEYSIZE
[+] ACSS_SESSIONKEY
[+] ACSS_TITLEKEY

cipher.h
[+] SSH_CIPHER_INVALID

config.h
[+] OPENSSL_HAS_ECC

defines.h
[+] _NSIG
[+] BROKEN_REALPATH
[+] IOV_MAX
[+] IPTOS_DSCP_CS0
[+] IPTOS_DSCP_CS1
[+] IPTOS_DSCP_CS2
[+] IPTOS_DSCP_CS3
[+] IPTOS_DSCP_CS4
[+] IPTOS_DSCP_CS5
[+] IPTOS_DSCP_CS6
[+] IPTOS_DSCP_CS7
[+] MAXPATHLEN
[+] NGROUPS_MAX
[+] SSH_IOBUFSZ
[+] SSH_SYSFDMAX
[+] STDERR_FILENO
[+] STDIN_FILENO
[+] STDOUT_FILENO
[+] UT_LINESIZE

kex.h
[+] COMP_DELAYED
[+] COMP_NONE
[+] COMP_ZLIB
[+] KEX_COOKIE_LEN
[+] KEX_DH14
[+] KEX_DHGEX_SHA1
[+] KEX_DHGEX_SHA256
[+] KEX_ECDH_SHA2_STEM
[+] KEX_RESUME

key.h
[+] CERT_MAX_PRINCIPALS

openpam_cred.h
[+] PAM_SAVED_CRED

rsa.h
[+] OPENSSL_RSA_MAX_MODULUS_BITS
[+] OPENSSL_RSA_MAX_PUBEXP_BITS
[+] OPENSSL_RSA_SMALL_MODULUS_BITS
[+] RSA_3
[+] RSA_F4
[+] RSA_F_CHECK_PADDING_MD
[+] RSA_F_DO_RSA_PRINT
[+] RSA_F_INT_RSA_VERIFY
[+] RSA_F_MEMORY_LOCK
[+] RSA_F_OLD_RSA_PRIV_DECODE
[+] RSA_F_PKEY_RSA_CTRL
[+] RSA_F_PKEY_RSA_CTRL_STR
[+] RSA_F_PKEY_RSA_SIGN
[+] RSA_F_PKEY_RSA_VERIFYRECOVER
[+] RSA_F_RSA_BUILTIN_KEYGEN
[+] RSA_F_RSA_CHECK_KEY
[+] RSA_F_RSA_EAY_PRIVATE_DECRYPT
[+] RSA_F_RSA_EAY_PRIVATE_ENCRYPT
[+] RSA_F_RSA_EAY_PUBLIC_DECRYPT
[+] RSA_F_RSA_EAY_PUBLIC_ENCRYPT
[+] RSA_F_RSA_GENERATE_KEY
[+] RSA_F_RSA_MEMORY_LOCK
[+] RSA_F_RSA_NEW_METHOD
[+] RSA_F_RSA_NULL
[+] RSA_F_RSA_NULL_MOD_EXP
[+] RSA_F_RSA_NULL_PRIVATE_DECRYPT
[+] RSA_F_RSA_NULL_PRIVATE_ENCRYPT
[+] RSA_F_RSA_NULL_PUBLIC_DECRYPT
[+] RSA_F_RSA_NULL_PUBLIC_ENCRYPT
[+] RSA_F_RSA_PADDING_ADD_NONE
[+] RSA_F_RSA_PADDING_ADD_PKCS1_OAEP
[+] RSA_F_RSA_PADDING_ADD_PKCS1_PSS
[+] RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_1
[+] RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_2
[+] RSA_F_RSA_PADDING_ADD_SSLV23
[+] RSA_F_RSA_PADDING_ADD_X931
[+] RSA_F_RSA_PADDING_CHECK_NONE
[+] RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP
[+] RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_1
[+] RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_2
[+] RSA_F_RSA_PADDING_CHECK_SSLV23
[+] RSA_F_RSA_PADDING_CHECK_X931
[+] RSA_F_RSA_PRINT
[+] RSA_F_RSA_PRINT_FP
[+] RSA_F_RSA_PRIV_DECODE
[+] RSA_F_RSA_PRIV_ENCODE
[+] RSA_F_RSA_PUB_DECODE
[+] RSA_F_RSA_SETUP_BLINDING
[+] RSA_F_RSA_SIGN
[+] RSA_F_RSA_SIGN_ASN1_OCTET_STRING
[+] RSA_F_RSA_VERIFY
[+] RSA_F_RSA_VERIFY_ASN1_OCTET_STRING
[+] RSA_F_RSA_VERIFY_PKCS1_PSS
[+] RSA_FLAG_BLINDING
[+] RSA_FLAG_CACHE_PRIVATE
[+] RSA_FLAG_CACHE_PUBLIC
[+] RSA_FLAG_EXT_PKEY
[+] RSA_FLAG_NO_BLINDING
[+] RSA_FLAG_NO_CONSTTIME
[+] RSA_FLAG_NO_EXP_CONSTTIME
[+] RSA_FLAG_THREAD_SAFE
[+] RSA_METHOD_FLAG_NO_CHECK
[+] RSA_NO_PADDING
[+] RSA_PKCS1_OAEP_PADDING
[+] RSA_PKCS1_PADDING
[+] RSA_PKCS1_PADDING_SIZE
[+] RSA_PKCS1_PSS_PADDING
[+] RSA_R_ALGORITHM_MISMATCH
[+] RSA_R_BAD_E_VALUE
[+] RSA_R_BAD_FIXED_HEADER_DECRYPT
[+] RSA_R_BAD_PAD_BYTE_COUNT
[+] RSA_R_BAD_SIGNATURE
[+] RSA_R_BLOCK_TYPE_IS_NOT_01
[+] RSA_R_BLOCK_TYPE_IS_NOT_02
[+] RSA_R_D_E_NOT_CONGRUENT_TO_1
[+] RSA_R_DATA_GREATER_THAN_MOD_LEN
[+] RSA_R_DATA_TOO_LARGE
[+] RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE
[+] RSA_R_DATA_TOO_LARGE_FOR_MODULUS
[+] RSA_R_DATA_TOO_SMALL
[+] RSA_R_DATA_TOO_SMALL_FOR_KEY_SIZE
[+] RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY
[+] RSA_R_DMP1_NOT_CONGRUENT_TO_D
[+] RSA_R_DMQ1_NOT_CONGRUENT_TO_D
[+] RSA_R_FIRST_OCTET_INVALID
[+] RSA_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE
[+] RSA_R_INVALID_DIGEST_LENGTH
[+] RSA_R_INVALID_HEADER
[+] RSA_R_INVALID_KEYBITS
[+] RSA_R_INVALID_MESSAGE_LENGTH
[+] RSA_R_INVALID_PADDING
[+] RSA_R_INVALID_PADDING_MODE
[+] RSA_R_INVALID_PSS_SALTLEN
[+] RSA_R_INVALID_TRAILER
[+] RSA_R_INVALID_X931_DIGEST
[+] RSA_R_IQMP_NOT_INVERSE_OF_Q
[+] RSA_R_KEY_SIZE_TOO_SMALL
[+] RSA_R_LAST_OCTET_INVALID
[+] RSA_R_MODULUS_TOO_LARGE
[+] RSA_R_N_DOES_NOT_EQUAL_P_Q
[+] RSA_R_NO_PUBLIC_EXPONENT
[+] RSA_R_NULL_BEFORE_BLOCK_MISSING
[+] RSA_R_OAEP_DECODING_ERROR
[+] RSA_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE
[+] RSA_R_P_NOT_PRIME
[+] RSA_R_PADDING_CHECK_FAILED
[+] RSA_R_Q_NOT_PRIME
[+] RSA_R_RSA_OPERATIONS_NOT_SUPPORTED
[+] RSA_R_SLEN_CHECK_FAILED
[+] RSA_R_SLEN_RECOVERY_FAILED
[+] RSA_R_SSLV3_ROLLBACK_ATTACK
[+] RSA_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD
[+] RSA_R_UNKNOWN_ALGORITHM_TYPE
[+] RSA_R_UNKNOWN_PADDING_TYPE
[+] RSA_R_VALUE_MISSING
[+] RSA_R_WRONG_SIGNATURE_LENGTH
[+] RSA_SSLV23_PADDING
[+] RSA_X931_PADDING

ssh.h
[+] SSH_AGENTPID_ENV_NAME
[+] SSH_ASKPASS_ENV
[+] SSH_AUTHFILE_CIPHER
[+] SSH_AUTHSOCKET_ENV_NAME
[+] SSH_DEFAULT_PORT
[+] SSH_ESCAPECHAR_NONE
[+] SSH_KEY_BITS_RESERVED
[+] SSH_LISTEN_BACKLOG
[+] SSH_MAX_IDENTITY_FILES
[+] SSH_MAX_PUBKEY_BYTES
[+] SSH_PRIVSEP_USER
[+] SSH_RSA_MINIMUM_MODULUS_SIZE
[+] SSH_SERVICE_NAME
[+] SSH_SESSION_KEY_LENGTH

ssh2.h
[+] SSH2_CERT_TYPE_HOST
[+] SSH2_CERT_TYPE_USER
[+] SSH2_DISCONNECT_AUTH_CANCELLED_BY_USER
[+] SSH2_DISCONNECT_BY_APPLICATION
[+] SSH2_DISCONNECT_COMPRESSION_ERROR
[+] SSH2_DISCONNECT_CONNECTION_LOST
[+] SSH2_DISCONNECT_HOST_AUTHENTICATION_FAILED
[+] SSH2_DISCONNECT_HOST_KEY_NOT_VERIFIABLE
[+] SSH2_DISCONNECT_HOST_NOT_ALLOWED_TO_CONNECT
[+] SSH2_DISCONNECT_ILLEGAL_USER_NAME
[+] SSH2_DISCONNECT_KEY_EXCHANGE_FAILED
[+] SSH2_DISCONNECT_MAC_ERROR
[+] SSH2_DISCONNECT_NO_MORE_AUTH_METHODS_AVAILABLE
[+] SSH2_DISCONNECT_PROTOCOL_ERROR
[+] SSH2_DISCONNECT_RESERVED
[+] SSH2_DISCONNECT_SERVICE_NOT_AVAILABLE
[+] SSH2_DISCONNECT_TOO_MANY_CONNECTIONS
[+] SSH2_EXTENDED_DATA_STDERR
[+] SSH2_MSG_CHANNEL_CLOSE
[+] SSH2_MSG_CHANNEL_DATA
[+] SSH2_MSG_CHANNEL_EOF
[+] SSH2_MSG_CHANNEL_EXTENDED_DATA
[+] SSH2_MSG_CHANNEL_FAILURE
[+] SSH2_MSG_CHANNEL_OPEN
[+] SSH2_MSG_CHANNEL_OPEN_CONFIRMATION
[+] SSH2_MSG_CHANNEL_OPEN_FAILURE
[+] SSH2_MSG_CHANNEL_REQUEST
[+] SSH2_MSG_CHANNEL_SUCCESS
[+] SSH2_MSG_CHANNEL_WINDOW_ADJUST
[+] SSH2_MSG_CONNECTION_MAX
[+] SSH2_MSG_CONNECTION_MIN
[+] SSH2_MSG_DEBUG
[+] SSH2_MSG_DISCONNECT
[+] SSH2_MSG_GLOBAL_REQUEST
[+] SSH2_MSG_IGNORE
[+] SSH2_MSG_KEX_DH_GEX_GROUP
[+] SSH2_MSG_KEX_DH_GEX_INIT
[+] SSH2_MSG_KEX_DH_GEX_REPLY
[+] SSH2_MSG_KEX_DH_GEX_REQUEST
[+] SSH2_MSG_KEX_DH_GEX_REQUEST_OLD
[+] SSH2_MSG_KEX_ECDH_INIT
[+] SSH2_MSG_KEX_ECDH_REPLY
[+] SSH2_MSG_KEX_ROAMING_AUTH
[+] SSH2_MSG_KEX_ROAMING_AUTH_FAIL
[+] SSH2_MSG_KEX_ROAMING_AUTH_OK
[+] SSH2_MSG_KEX_ROAMING_AUTH_REQUIRED
[+] SSH2_MSG_KEX_ROAMING_RESUME
[+] SSH2_MSG_KEXDH_INIT
[+] SSH2_MSG_KEXDH_REPLY
[+] SSH2_MSG_KEXINIT
[+] SSH2_MSG_LOCAL_MAX
[+] SSH2_MSG_LOCAL_MIN
[+] SSH2_MSG_MAX
[+] SSH2_MSG_MIN
[+] SSH2_MSG_NEWKEYS
[+] SSH2_MSG_REQUEST_FAILURE
[+] SSH2_MSG_REQUEST_SUCCESS
[+] SSH2_MSG_RESERVED_MAX
[+] SSH2_MSG_RESERVED_MIN
[+] SSH2_MSG_SERVICE_ACCEPT
[+] SSH2_MSG_SERVICE_REQUEST
[+] SSH2_MSG_TRANSPORT_MAX
[+] SSH2_MSG_TRANSPORT_MIN
[+] SSH2_MSG_UNIMPLEMENTED
[+] SSH2_MSG_USERAUTH_BANNER
[+] SSH2_MSG_USERAUTH_FAILURE
[+] SSH2_MSG_USERAUTH_INFO_REQUEST
[+] SSH2_MSG_USERAUTH_INFO_RESPONSE
[+] SSH2_MSG_USERAUTH_JPAKE_CLIENT_CONFIRM
[+] SSH2_MSG_USERAUTH_JPAKE_CLIENT_STEP1
[+] SSH2_MSG_USERAUTH_JPAKE_CLIENT_STEP2
[+] SSH2_MSG_USERAUTH_JPAKE_SERVER_CONFIRM
[+] SSH2_MSG_USERAUTH_JPAKE_SERVER_STEP1
[+] SSH2_MSG_USERAUTH_JPAKE_SERVER_STEP2
[+] SSH2_MSG_USERAUTH_MAX
[+] SSH2_MSG_USERAUTH_MIN
[+] SSH2_MSG_USERAUTH_PASSWD_CHANGEREQ
[+] SSH2_MSG_USERAUTH_PER_METHOD_MAX
[+] SSH2_MSG_USERAUTH_PER_METHOD_MIN
[+] SSH2_MSG_USERAUTH_PK_OK
[+] SSH2_MSG_USERAUTH_REQUEST
[+] SSH2_MSG_USERAUTH_SUCCESS
[+] SSH2_OPEN_ADMINISTRATIVELY_PROHIBITED
[+] SSH2_OPEN_CONNECT_FAILED
[+] SSH2_OPEN_RESOURCE_SHORTAGE
[+] SSH2_OPEN_UNKNOWN_CHANNEL_TYPE

to the top

Header Files (20)


atomicio.h
authfd.h
authfile.h
bufaux.h
buffer.h
cipher.h
config.h
getput.h
kex.h
key.h
log.h
openpam_cred.h
pam_get_pass.h
pam_option.h
pam_opttab.h
pam_ssh_log.h
rijndael.h
strlcpy.h
strnvis.h
xmalloc.h

to the top

Shared Libraries (1)


pam_ssh.so

to the top




Generated on Wed Nov 20 07:26:22 2013 for pam_ssh by ABI Compliance Checker 1.99.8.4  
A tool for checking backward compatibility of a C/C++ library API