1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 #ifndef _OBJTOOL_CHECKSUM_H
3 #define _OBJTOOL_CHECKSUM_H
4
5 #include <objtool/elf.h>
6
7 #ifdef BUILD_KLP
8
checksum_init(struct symbol * func)9 static inline void checksum_init(struct symbol *func)
10 {
11 if (func && !func->csum.state) {
12 func->csum.state = XXH3_createState();
13 XXH3_64bits_reset(func->csum.state);
14 }
15 }
16
checksum_update(struct symbol * func,struct instruction * insn,const void * data,size_t size)17 static inline void checksum_update(struct symbol *func,
18 struct instruction *insn,
19 const void *data, size_t size)
20 {
21 XXH3_64bits_update(func->csum.state, data, size);
22 dbg_checksum(func, insn, XXH3_64bits_digest(func->csum.state));
23 }
24
checksum_finish(struct symbol * func)25 static inline void checksum_finish(struct symbol *func)
26 {
27 if (func && func->csum.state) {
28 func->csum.checksum = XXH3_64bits_digest(func->csum.state);
29 func->csum.state = NULL;
30 }
31 }
32
33 #else /* !BUILD_KLP */
34
checksum_init(struct symbol * func)35 static inline void checksum_init(struct symbol *func) {}
checksum_update(struct symbol * func,struct instruction * insn,const void * data,size_t size)36 static inline void checksum_update(struct symbol *func,
37 struct instruction *insn,
38 const void *data, size_t size) {}
checksum_finish(struct symbol * func)39 static inline void checksum_finish(struct symbol *func) {}
40
41 #endif /* !BUILD_KLP */
42
43 #endif /* _OBJTOOL_CHECKSUM_H */
44