xref: /linux/tools/objtool/include/objtool/checksum.h (revision 7fc2cd2e4b398c57c9cf961cfea05eadbf34c05c)
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 
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 
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 
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 
35 static inline void checksum_init(struct symbol *func) {}
36 static inline void checksum_update(struct symbol *func,
37 				   struct instruction *insn,
38 				   const void *data, size_t size) {}
39 static inline void checksum_finish(struct symbol *func) {}
40 
41 #endif /* !BUILD_KLP */
42 
43 #endif /* _OBJTOOL_CHECKSUM_H */
44