#!/bin/bash # SPDX-License-Identifier: GPL-2.0 # # The per-function checksums klp checksum records are what klp diff uses to # decide which functions changed. A checksum covering too little misses a real # change and the patch silently omits the function; one covering too much, or # unstable across identical input, clones functions nobody patched and drags # their dependencies in with them. # # test-basic covers which functions got cloned, which is downstream of this and # passes for either kind of wrong checksum as long as the two errors do not # happen to cancel. This checks the checksums themselves. . "$(dirname "$0")/../lib.sh" setup build_pair basic.c assert_input_symbol changed assert_input_symbol untouched run_checksum # The edited function's checksum has to move, the untouched one's must not. assert_checksum_differs changed assert_checksum_matches untouched # And it has to be a function of the code, not of the build: checksumming the # same input twice has to give the same answer, or every rebuild reports # spurious changes. first="$(checksum_of orig.o changed)" build_pair basic.c run_checksum [ "$(checksum_of orig.o changed)" = "$first" ] || fail "checksum for 'changed' differs between builds of identical source" pass "checksums track the changed function and are stable across rebuilds"