xref: /linux/tools/objtool/include/objtool/checksum.h (revision 63e6995005be8ceb8a1d56a18df1a1a40c28356d)
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