Hi Joe, Thank you for the patch! Yet something to improve:
[auto build test ERROR on v4.16] [also build test ERROR on next-20180410] [cannot apply to linus/master jikos-livepatching/for-next] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Joe-Lawrence/selftests-livepatch-introduce-tests/20180411-093112 config: x86_64-allmodconfig (attached as .config) compiler: gcc-7 (Debian 7.3.0-1) 7.3.0 reproduce: # save the attached .config to linux build tree make ARCH=x86_64 All error/warnings (new ones prefixed by >>): lib/livepatch/test_klp_shadow_vars.c:76:9: sparse: Expected ) in function declarator lib/livepatch/test_klp_shadow_vars.c:76:9: sparse: got "\001" lib/livepatch/test_klp_shadow_vars.c:79:9: sparse: Trying to use reserved word 'return' as identifier lib/livepatch/test_klp_shadow_vars.c:79:16: sparse: Expected ; at end of declaration lib/livepatch/test_klp_shadow_vars.c:79:16: sparse: got ret lib/livepatch/test_klp_shadow_vars.c:80:1: sparse: Expected ; at the end of type declaration lib/livepatch/test_klp_shadow_vars.c:80:1: sparse: got } lib/livepatch/test_klp_shadow_vars.c:88:9: sparse: Expected ) in function declarator lib/livepatch/test_klp_shadow_vars.c:88:9: sparse: got "\001" lib/livepatch/test_klp_shadow_vars.c:91:9: sparse: Trying to use reserved word 'return' as identifier lib/livepatch/test_klp_shadow_vars.c:91:16: sparse: Expected ; at end of declaration lib/livepatch/test_klp_shadow_vars.c:91:16: sparse: got ret lib/livepatch/test_klp_shadow_vars.c:92:1: sparse: Expected ; at the end of type declaration lib/livepatch/test_klp_shadow_vars.c:92:1: sparse: got } lib/livepatch/test_klp_shadow_vars.c:97:9: sparse: Expected ) in function declarator lib/livepatch/test_klp_shadow_vars.c:97:9: sparse: got "\001" lib/livepatch/test_klp_shadow_vars.c:99:1: sparse: Expected ; at the end of type declaration lib/livepatch/test_klp_shadow_vars.c:99:1: sparse: got } lib/livepatch/test_klp_shadow_vars.c:104:9: sparse: Expected ) in function declarator lib/livepatch/test_klp_shadow_vars.c:104:9: sparse: got "\001" lib/livepatch/test_klp_shadow_vars.c:106:1: sparse: Expected ; at the end of type declaration lib/livepatch/test_klp_shadow_vars.c:106:1: sparse: got } lib/livepatch/test_klp_shadow_vars.c:114:9: sparse: Expected ) in function declarator lib/livepatch/test_klp_shadow_vars.c:114:9: sparse: got "\001" lib/livepatch/test_klp_shadow_vars.c:117:9: sparse: Trying to use reserved word 'return' as identifier lib/livepatch/test_klp_shadow_vars.c:117:16: sparse: Expected ; at end of declaration lib/livepatch/test_klp_shadow_vars.c:117:16: sparse: got 0 lib/livepatch/test_klp_shadow_vars.c:118:1: sparse: Expected ; at the end of type declaration lib/livepatch/test_klp_shadow_vars.c:118:1: sparse: got } lib/livepatch/test_klp_shadow_vars.c:124:1: sparse: Expected ; at the end of type declaration lib/livepatch/test_klp_shadow_vars.c:124:1: sparse: got } lib/livepatch/test_klp_shadow_vars.c:138:16: sparse: Expected ) in function declarator lib/livepatch/test_klp_shadow_vars.c:138:16: sparse: got 0 lib/livepatch/test_klp_shadow_vars.c:139:16: sparse: Expected ) in function declarator lib/livepatch/test_klp_shadow_vars.c:139:16: sparse: got & lib/livepatch/test_klp_shadow_vars.c:140:16: sparse: Expected ) in function declarator lib/livepatch/test_klp_shadow_vars.c:140:16: sparse: got & lib/livepatch/test_klp_shadow_vars.c:141:16: sparse: Expected ) in function declarator lib/livepatch/test_klp_shadow_vars.c:141:16: sparse: got & lib/livepatch/test_klp_shadow_vars.c:142:16: sparse: Expected ) in function declarator lib/livepatch/test_klp_shadow_vars.c:142:16: sparse: got & lib/livepatch/test_klp_shadow_vars.c:149:13: sparse: Expected ) in function declarator lib/livepatch/test_klp_shadow_vars.c:149:13: sparse: got ! lib/livepatch/test_klp_shadow_vars.c:149:9: sparse: Trying to use reserved word 'if' as identifier lib/livepatch/test_klp_shadow_vars.c:164:17: sparse: Expected ) in function declarator lib/livepatch/test_klp_shadow_vars.c:164:17: sparse: got == lib/livepatch/test_klp_shadow_vars.c:164:9: sparse: Trying to use reserved word 'if' as identifier lib/livepatch/test_klp_shadow_vars.c:168:17: sparse: Expected ) in function declarator lib/livepatch/test_klp_shadow_vars.c:168:17: sparse: got == lib/livepatch/test_klp_shadow_vars.c:168:9: sparse: Trying to use reserved word 'if' as identifier lib/livepatch/test_klp_shadow_vars.c:172:17: sparse: Expected ) in function declarator lib/livepatch/test_klp_shadow_vars.c:172:17: sparse: got == lib/livepatch/test_klp_shadow_vars.c:172:9: sparse: Trying to use reserved word 'if' as identifier lib/livepatch/test_klp_shadow_vars.c:182:17: sparse: Expected ) in function declarator lib/livepatch/test_klp_shadow_vars.c:182:17: sparse: got == lib/livepatch/test_klp_shadow_vars.c:182:9: sparse: Trying to use reserved word 'if' as identifier lib/livepatch/test_klp_shadow_vars.c:192:13: sparse: Expected ) in function declarator lib/livepatch/test_klp_shadow_vars.c:192:13: sparse: got ! lib/livepatch/test_klp_shadow_vars.c:192:9: sparse: Trying to use reserved word 'if' as identifier lib/livepatch/test_klp_shadow_vars.c:195:25: sparse: Expected ) in function declarator lib/livepatch/test_klp_shadow_vars.c:195:25: sparse: got + lib/livepatch/test_klp_shadow_vars.c:197:13: sparse: Expected ) in function declarator lib/livepatch/test_klp_shadow_vars.c:197:13: sparse: got ! lib/livepatch/test_klp_shadow_vars.c:197:9: sparse: Trying to use reserved word 'if' as identifier lib/livepatch/test_klp_shadow_vars.c:200:25: sparse: Expected ) in function declarator lib/livepatch/test_klp_shadow_vars.c:200:25: sparse: got + lib/livepatch/test_klp_shadow_vars.c:202:13: sparse: Expected ) in function declarator lib/livepatch/test_klp_shadow_vars.c:202:13: sparse: got ! lib/livepatch/test_klp_shadow_vars.c:202:9: sparse: Trying to use reserved word 'if' as identifier lib/livepatch/test_klp_shadow_vars.c:209:17: sparse: Expected ) in function declarator lib/livepatch/test_klp_shadow_vars.c:209:17: sparse: got == lib/livepatch/test_klp_shadow_vars.c:209:9: sparse: Trying to use reserved word 'if' as identifier lib/livepatch/test_klp_shadow_vars.c:216:28: sparse: Expected ) in function declarator lib/livepatch/test_klp_shadow_vars.c:216:28: sparse: got + lib/livepatch/test_klp_shadow_vars.c:218:13: sparse: Expected ) in function declarator lib/livepatch/test_klp_shadow_vars.c:218:13: sparse: got ! lib/livepatch/test_klp_shadow_vars.c:218:9: sparse: Trying to use reserved word 'if' as identifier lib/livepatch/test_klp_shadow_vars.c:224:9: sparse: Trying to use reserved word 'return' as identifier lib/livepatch/test_klp_shadow_vars.c:224:16: sparse: Expected ; at end of declaration lib/livepatch/test_klp_shadow_vars.c:224:16: sparse: got 0 lib/livepatch/test_klp_shadow_vars.c:225:1: sparse: Expected ; at the end of type declaration lib/livepatch/test_klp_shadow_vars.c:225:1: sparse: got } lib/livepatch/test_klp_shadow_vars.c:231:1: sparse: Expected ; at the end of type declaration lib/livepatch/test_klp_shadow_vars.c:231:1: sparse: got } lib/livepatch/test_klp_shadow_vars.c:113:23: sparse: undefined identifier 'ctor_data' lib/livepatch/test_klp_shadow_vars.c:148:26: sparse: undefined identifier 'obj' lib/livepatch/test_klp_shadow_vars.c:148:9: sparse: symbol 'ret' redeclared with different type (originally declared at lib/livepatch/test_klp_shadow_vars.c:136) - different base types lib/livepatch/test_klp_shadow_vars.c:155:28: sparse: undefined identifier 'obj' lib/livepatch/test_klp_shadow_vars.c:155:9: sparse: symbol 'sv1' redeclared with different type (originally declared at lib/livepatch/test_klp_shadow_vars.c:134) - different base types lib/livepatch/test_klp_shadow_vars.c:156:28: sparse: undefined identifier 'obj' lib/livepatch/test_klp_shadow_vars.c:156:9: sparse: symbol 'sv2' redeclared with different type (originally declared at lib/livepatch/test_klp_shadow_vars.c:134) - different base types lib/livepatch/test_klp_shadow_vars.c:157:28: sparse: undefined identifier 'obj' lib/livepatch/test_klp_shadow_vars.c:157:9: sparse: symbol 'sv3' redeclared with different type (originally declared at lib/livepatch/test_klp_shadow_vars.c:134) - different base types lib/livepatch/test_klp_shadow_vars.c:163:26: sparse: undefined identifier 'obj' lib/livepatch/test_klp_shadow_vars.c:163:9: sparse: symbol 'ret' has multiple initializers (originally initialized at lib/livepatch/test_klp_shadow_vars.c:148) lib/livepatch/test_klp_shadow_vars.c:163:9: sparse: symbol 'ret' redeclared with different type (originally declared at lib/livepatch/test_klp_shadow_vars.c:136) - different base types lib/livepatch/test_klp_shadow_vars.c:167:26: sparse: undefined identifier 'obj' lib/livepatch/test_klp_shadow_vars.c:167:9: sparse: symbol 'ret' has multiple initializers (originally initialized at lib/livepatch/test_klp_shadow_vars.c:163) lib/livepatch/test_klp_shadow_vars.c:167:9: sparse: symbol 'ret' redeclared with different type (originally declared at lib/livepatch/test_klp_shadow_vars.c:136) - different base types lib/livepatch/test_klp_shadow_vars.c:171:26: sparse: too many errors >> lib/livepatch/test_klp_shadow_vars.c:72:6: error: unknown type name >> 'klp_shadow_ctor_t' klp_shadow_ctor_t ctor, void *ctor_data) ^~~~~~~~~~~~~~~~~ lib/livepatch/test_klp_shadow_vars.c:83:23: error: unknown type name 'klp_shadow_ctor_t' gfp_t gfp_flags, klp_shadow_ctor_t ctor, ^~~~~~~~~~~~~~~~~ >> lib/livepatch/test_klp_shadow_vars.c:94:47: error: unknown type name >> 'klp_shadow_dtor_t' void shadow_free(void *obj, unsigned long id, klp_shadow_dtor_t dtor) ^~~~~~~~~~~~~~~~~ lib/livepatch/test_klp_shadow_vars.c:101:40: error: unknown type name 'klp_shadow_dtor_t' void shadow_free_all(unsigned long id, klp_shadow_dtor_t dtor) ^~~~~~~~~~~~~~~~~ lib/livepatch/test_klp_shadow_vars.c: In function 'test_klp_shadow_vars_init': >> lib/livepatch/test_klp_shadow_vars.c:155:8: error: implicit declaration of >> function 'shadow_alloc'; did you mean 'shadow_dtor'? >> [-Werror=implicit-function-declaration] sv1 = shadow_alloc(obj, id, size, gfp_flags, shadow_ctor, &var1); ^~~~~~~~~~~~ shadow_dtor >> lib/livepatch/test_klp_shadow_vars.c:155:6: warning: assignment makes >> pointer from integer without a cast [-Wint-conversion] sv1 = shadow_alloc(obj, id, size, gfp_flags, shadow_ctor, &var1); ^ lib/livepatch/test_klp_shadow_vars.c:156:6: warning: assignment makes pointer from integer without a cast [-Wint-conversion] sv2 = shadow_alloc(obj + 1, id, size, gfp_flags, shadow_ctor, &var2); ^ lib/livepatch/test_klp_shadow_vars.c:157:6: warning: assignment makes pointer from integer without a cast [-Wint-conversion] sv3 = shadow_alloc(obj, id + 1, size, gfp_flags, shadow_ctor, &var3); ^ >> lib/livepatch/test_klp_shadow_vars.c:180:8: error: implicit declaration of >> function 'shadow_get_or_alloc'; did you mean 'klp_shadow_get_or_alloc'? >> [-Werror=implicit-function-declaration] sv4 = shadow_get_or_alloc(obj + 2, id, size, gfp_flags, shadow_ctor, &var4); ^~~~~~~~~~~~~~~~~~~ klp_shadow_get_or_alloc lib/livepatch/test_klp_shadow_vars.c:180:6: warning: assignment makes pointer from integer without a cast [-Wint-conversion] sv4 = shadow_get_or_alloc(obj + 2, id, size, gfp_flags, shadow_ctor, &var4); ^ lib/livepatch/test_klp_shadow_vars.c:181:6: warning: assignment makes pointer from integer without a cast [-Wint-conversion] ret = shadow_get_or_alloc(obj + 2, id, size, gfp_flags, shadow_ctor, &var4); ^ >> lib/livepatch/test_klp_shadow_vars.c:190:2: error: implicit declaration of >> function 'shadow_free'; did you mean 'shadow_get'? >> [-Werror=implicit-function-declaration] shadow_free(obj, id, shadow_dtor); /* sv1 */ ^~~~~~~~~~~ shadow_get >> lib/livepatch/test_klp_shadow_vars.c:216:2: error: implicit declaration of >> function 'shadow_free_all'; did you mean 'klp_shadow_free_all'? >> [-Werror=implicit-function-declaration] shadow_free_all(id + 1, shadow_dtor); /* sv3 */ ^~~~~~~~~~~~~~~ klp_shadow_free_all In file included from lib/livepatch/test_klp_shadow_vars.c:6:0: lib/livepatch/test_klp_shadow_vars.c: At top level: include/linux/module.h:130:42: error: redefinition of '__inittest' static inline initcall_t __maybe_unused __inittest(void) \ ^ >> lib/livepatch/test_klp_shadow_vars.c:232:1: note: in expansion of macro >> 'module_init' module_init(test_klp_shadow_vars_exit); ^~~~~~~~~~~ include/linux/module.h:130:42: note: previous definition of '__inittest' was here static inline initcall_t __maybe_unused __inittest(void) \ ^ lib/livepatch/test_klp_shadow_vars.c:231:1: note: in expansion of macro 'module_init' module_init(test_klp_shadow_vars_init); ^~~~~~~~~~~ lib/livepatch/test_klp_shadow_vars.c: In function '__inittest': >> lib/livepatch/test_klp_shadow_vars.c:232:13: error: return from incompatible >> pointer type [-Werror=incompatible-pointer-types] module_init(test_klp_shadow_vars_exit); ^ include/linux/module.h:131:11: note: in definition of macro 'module_init' { return initfn; } \ ^~~~~~ lib/livepatch/test_klp_shadow_vars.c: At top level: include/linux/module.h:132:6: error: redefinition of 'init_module' int init_module(void) __attribute__((alias(#initfn))); ^ >> lib/livepatch/test_klp_shadow_vars.c:232:1: note: in expansion of macro >> 'module_init' module_init(test_klp_shadow_vars_exit); ^~~~~~~~~~~ include/linux/module.h:132:6: note: previous definition of 'init_module' was here int init_module(void) __attribute__((alias(#initfn))); ^ lib/livepatch/test_klp_shadow_vars.c:231:1: note: in expansion of macro 'module_init' module_init(test_klp_shadow_vars_init); ^~~~~~~~~~~ cc1: some warnings being treated as errors sparse warnings: (new ones prefixed by >>) lib/livepatch/test_klp_atomic_replace.c:46:14: sparse: no member 'replace' in struct klp_patch >> lib/livepatch/test_klp_atomic_replace.c:46:14: sparse: generating address of >> non-lvalue (8) lib/livepatch/test_klp_atomic_replace.c: In function 'test_klp_atomic_replace_init': lib/livepatch/test_klp_atomic_replace.c:46:7: error: 'struct klp_patch' has no member named 'replace' patch.replace = replace; ^ -- lib/livepatch/test_klp_callbacks_demo2.c:81:14: sparse: no member 'replace' in struct klp_patch >> lib/livepatch/test_klp_callbacks_demo2.c:81:14: sparse: generating address >> of non-lvalue (8) lib/livepatch/test_klp_callbacks_demo2.c: In function 'test_klp_callbacks_demo2_init': lib/livepatch/test_klp_callbacks_demo2.c:81:7: error: 'struct klp_patch' has no member named 'replace' patch.replace = replace; ^ -- lib/livepatch/test_klp_shadow_vars.c:72:38: sparse: Expected ) in function declarator lib/livepatch/test_klp_shadow_vars.c:72:38: sparse: got ctor lib/livepatch/test_klp_shadow_vars.c:76:9: sparse: Expected ) in function declarator lib/livepatch/test_klp_shadow_vars.c:76:9: sparse: got "001" >> lib/livepatch/test_klp_shadow_vars.c:79:9: sparse: Trying to use reserved >> word 'return' as identifier lib/livepatch/test_klp_shadow_vars.c:79:16: sparse: Expected ; at end of declaration lib/livepatch/test_klp_shadow_vars.c:79:16: sparse: got ret lib/livepatch/test_klp_shadow_vars.c:80:1: sparse: Expected ; at the end of type declaration lib/livepatch/test_klp_shadow_vars.c:80:1: sparse: got } lib/livepatch/test_klp_shadow_vars.c:88:9: sparse: Expected ) in function declarator lib/livepatch/test_klp_shadow_vars.c:88:9: sparse: got "001" lib/livepatch/test_klp_shadow_vars.c:91:9: sparse: Trying to use reserved word 'return' as identifier lib/livepatch/test_klp_shadow_vars.c:91:16: sparse: Expected ; at end of declaration lib/livepatch/test_klp_shadow_vars.c:91:16: sparse: got ret lib/livepatch/test_klp_shadow_vars.c:92:1: sparse: Expected ; at the end of type declaration lib/livepatch/test_klp_shadow_vars.c:92:1: sparse: got } lib/livepatch/test_klp_shadow_vars.c:97:9: sparse: Expected ) in function declarator lib/livepatch/test_klp_shadow_vars.c:97:9: sparse: got "001" lib/livepatch/test_klp_shadow_vars.c:99:1: sparse: Expected ; at the end of type declaration lib/livepatch/test_klp_shadow_vars.c:99:1: sparse: got } lib/livepatch/test_klp_shadow_vars.c:104:9: sparse: Expected ) in function declarator lib/livepatch/test_klp_shadow_vars.c:104:9: sparse: got "001" lib/livepatch/test_klp_shadow_vars.c:106:1: sparse: Expected ; at the end of type declaration lib/livepatch/test_klp_shadow_vars.c:106:1: sparse: got } lib/livepatch/test_klp_shadow_vars.c:114:9: sparse: Expected ) in function declarator lib/livepatch/test_klp_shadow_vars.c:114:9: sparse: got "001" lib/livepatch/test_klp_shadow_vars.c:117:9: sparse: Trying to use reserved word 'return' as identifier lib/livepatch/test_klp_shadow_vars.c:117:16: sparse: Expected ; at end of declaration lib/livepatch/test_klp_shadow_vars.c:117:16: sparse: got 0 lib/livepatch/test_klp_shadow_vars.c:118:1: sparse: Expected ; at the end of type declaration lib/livepatch/test_klp_shadow_vars.c:118:1: sparse: got } lib/livepatch/test_klp_shadow_vars.c:124:1: sparse: Expected ; at the end of type declaration lib/livepatch/test_klp_shadow_vars.c:124:1: sparse: got } lib/livepatch/test_klp_shadow_vars.c:138:16: sparse: Expected ) in function declarator lib/livepatch/test_klp_shadow_vars.c:138:16: sparse: got 0 lib/livepatch/test_klp_shadow_vars.c:139:16: sparse: Expected ) in function declarator lib/livepatch/test_klp_shadow_vars.c:139:16: sparse: got & lib/livepatch/test_klp_shadow_vars.c:140:16: sparse: Expected ) in function declarator lib/livepatch/test_klp_shadow_vars.c:140:16: sparse: got & lib/livepatch/test_klp_shadow_vars.c:141:16: sparse: Expected ) in function declarator lib/livepatch/test_klp_shadow_vars.c:141:16: sparse: got & lib/livepatch/test_klp_shadow_vars.c:142:16: sparse: Expected ) in function declarator lib/livepatch/test_klp_shadow_vars.c:142:16: sparse: got & lib/livepatch/test_klp_shadow_vars.c:149:13: sparse: Expected ) in function declarator lib/livepatch/test_klp_shadow_vars.c:149:13: sparse: got ! >> lib/livepatch/test_klp_shadow_vars.c:149:9: sparse: Trying to use reserved >> word 'if' as identifier lib/livepatch/test_klp_shadow_vars.c:164:17: sparse: Expected ) in function declarator lib/livepatch/test_klp_shadow_vars.c:164:17: sparse: got == lib/livepatch/test_klp_shadow_vars.c:164:9: sparse: Trying to use reserved word 'if' as identifier lib/livepatch/test_klp_shadow_vars.c:168:17: sparse: Expected ) in function declarator lib/livepatch/test_klp_shadow_vars.c:168:17: sparse: got == lib/livepatch/test_klp_shadow_vars.c:168:9: sparse: Trying to use reserved word 'if' as identifier lib/livepatch/test_klp_shadow_vars.c:172:17: sparse: Expected ) in function declarator lib/livepatch/test_klp_shadow_vars.c:172:17: sparse: got == lib/livepatch/test_klp_shadow_vars.c:172:9: sparse: Trying to use reserved word 'if' as identifier lib/livepatch/test_klp_shadow_vars.c:182:17: sparse: Expected ) in function declarator lib/livepatch/test_klp_shadow_vars.c:182:17: sparse: got == lib/livepatch/test_klp_shadow_vars.c:182:9: sparse: Trying to use reserved word 'if' as identifier lib/livepatch/test_klp_shadow_vars.c:192:13: sparse: Expected ) in function declarator lib/livepatch/test_klp_shadow_vars.c:192:13: sparse: got ! lib/livepatch/test_klp_shadow_vars.c:192:9: sparse: Trying to use reserved word 'if' as identifier lib/livepatch/test_klp_shadow_vars.c:195:25: sparse: Expected ) in function declarator lib/livepatch/test_klp_shadow_vars.c:195:25: sparse: got + lib/livepatch/test_klp_shadow_vars.c:197:13: sparse: Expected ) in function declarator lib/livepatch/test_klp_shadow_vars.c:197:13: sparse: got ! lib/livepatch/test_klp_shadow_vars.c:197:9: sparse: Trying to use reserved word 'if' as identifier lib/livepatch/test_klp_shadow_vars.c:200:25: sparse: Expected ) in function declarator lib/livepatch/test_klp_shadow_vars.c:200:25: sparse: got + lib/livepatch/test_klp_shadow_vars.c:202:13: sparse: Expected ) in function declarator lib/livepatch/test_klp_shadow_vars.c:202:13: sparse: got ! lib/livepatch/test_klp_shadow_vars.c:202:9: sparse: Trying to use reserved word 'if' as identifier lib/livepatch/test_klp_shadow_vars.c:209:17: sparse: Expected ) in function declarator lib/livepatch/test_klp_shadow_vars.c:209:17: sparse: got == lib/livepatch/test_klp_shadow_vars.c:209:9: sparse: Trying to use reserved word 'if' as identifier lib/livepatch/test_klp_shadow_vars.c:216:28: sparse: Expected ) in function declarator lib/livepatch/test_klp_shadow_vars.c:216:28: sparse: got + lib/livepatch/test_klp_shadow_vars.c:218:13: sparse: Expected ) in function declarator lib/livepatch/test_klp_shadow_vars.c:218:13: sparse: got ! lib/livepatch/test_klp_shadow_vars.c:218:9: sparse: Trying to use reserved word 'if' as identifier lib/livepatch/test_klp_shadow_vars.c:224:9: sparse: Trying to use reserved word 'return' as identifier lib/livepatch/test_klp_shadow_vars.c:224:16: sparse: Expected ; at end of declaration lib/livepatch/test_klp_shadow_vars.c:224:16: sparse: got 0 lib/livepatch/test_klp_shadow_vars.c:225:1: sparse: Expected ; at the end of type declaration lib/livepatch/test_klp_shadow_vars.c:225:1: sparse: got } lib/livepatch/test_klp_shadow_vars.c:231:1: sparse: Expected ; at the end of type declaration lib/livepatch/test_klp_shadow_vars.c:231:1: sparse: got } lib/livepatch/test_klp_shadow_vars.c:113:23: sparse: undefined identifier 'ctor_data' lib/livepatch/test_klp_shadow_vars.c:148:26: sparse: undefined identifier 'obj' lib/livepatch/test_klp_shadow_vars.c:148:9: sparse: symbol 'ret' redeclared with different type (originally declared at lib/livepatch/test_klp_shadow_vars.c:136) - different base types lib/livepatch/test_klp_shadow_vars.c:155:28: sparse: undefined identifier 'obj' lib/livepatch/test_klp_shadow_vars.c:155:9: sparse: symbol 'sv1' redeclared with different type (originally declared at lib/livepatch/test_klp_shadow_vars.c:134) - different base types lib/livepatch/test_klp_shadow_vars.c:156:28: sparse: undefined identifier 'obj' lib/livepatch/test_klp_shadow_vars.c:156:9: sparse: symbol 'sv2' redeclared with different type (originally declared at lib/livepatch/test_klp_shadow_vars.c:134) - different base types lib/livepatch/test_klp_shadow_vars.c:157:28: sparse: undefined identifier 'obj' lib/livepatch/test_klp_shadow_vars.c:157:9: sparse: symbol 'sv3' redeclared with different type (originally declared at lib/livepatch/test_klp_shadow_vars.c:134) - different base types lib/livepatch/test_klp_shadow_vars.c:163:26: sparse: undefined identifier 'obj' lib/livepatch/test_klp_shadow_vars.c:163:9: sparse: symbol 'ret' has multiple initializers (originally initialized at lib/livepatch/test_klp_shadow_vars.c:148) lib/livepatch/test_klp_shadow_vars.c:163:9: sparse: symbol 'ret' redeclared with different type (originally declared at lib/livepatch/test_klp_shadow_vars.c:136) - different base types lib/livepatch/test_klp_shadow_vars.c:167:26: sparse: undefined identifier 'obj' lib/livepatch/test_klp_shadow_vars.c:167:9: sparse: symbol 'ret' has multiple initializers (originally initialized at lib/livepatch/test_klp_shadow_vars.c:163) lib/livepatch/test_klp_shadow_vars.c:167:9: sparse: symbol 'ret' redeclared with different type (originally declared at lib/livepatch/test_klp_shadow_vars.c:136) - different base types >> lib/livepatch/test_klp_shadow_vars.c:171:26: sparse: too many errors lib/livepatch/test_klp_shadow_vars.c:72:6: error: unknown type name 'klp_shadow_ctor_t' klp_shadow_ctor_t ctor, void *ctor_data) ^~~~~~~~~~~~~~~~~ lib/livepatch/test_klp_shadow_vars.c:83:23: error: unknown type name 'klp_shadow_ctor_t' gfp_t gfp_flags, klp_shadow_ctor_t ctor, ^~~~~~~~~~~~~~~~~ lib/livepatch/test_klp_shadow_vars.c:94:47: error: unknown type name 'klp_shadow_dtor_t' void shadow_free(void *obj, unsigned long id, klp_shadow_dtor_t dtor) ^~~~~~~~~~~~~~~~~ lib/livepatch/test_klp_shadow_vars.c:101:40: error: unknown type name 'klp_shadow_dtor_t' void shadow_free_all(unsigned long id, klp_shadow_dtor_t dtor) ^~~~~~~~~~~~~~~~~ lib/livepatch/test_klp_shadow_vars.c: In function 'test_klp_shadow_vars_init': lib/livepatch/test_klp_shadow_vars.c:155:8: error: implicit declaration of function 'shadow_alloc'; did you mean 'shadow_dtor'? [-Werror=implicit-function-declaration] sv1 = shadow_alloc(obj, id, size, gfp_flags, shadow_ctor, &var1); ^~~~~~~~~~~~ shadow_dtor lib/livepatch/test_klp_shadow_vars.c:155:6: warning: assignment makes pointer from integer without a cast [-Wint-conversion] sv1 = shadow_alloc(obj, id, size, gfp_flags, shadow_ctor, &var1); ^ lib/livepatch/test_klp_shadow_vars.c:156:6: warning: assignment makes pointer from integer without a cast [-Wint-conversion] sv2 = shadow_alloc(obj + 1, id, size, gfp_flags, shadow_ctor, &var2); ^ lib/livepatch/test_klp_shadow_vars.c:157:6: warning: assignment makes pointer from integer without a cast [-Wint-conversion] sv3 = shadow_alloc(obj, id + 1, size, gfp_flags, shadow_ctor, &var3); ^ lib/livepatch/test_klp_shadow_vars.c:180:8: error: implicit declaration of function 'shadow_get_or_alloc'; did you mean 'klp_shadow_get_or_alloc'? [-Werror=implicit-function-declaration] sv4 = shadow_get_or_alloc(obj + 2, id, size, gfp_flags, shadow_ctor, &var4); ^~~~~~~~~~~~~~~~~~~ klp_shadow_get_or_alloc lib/livepatch/test_klp_shadow_vars.c:180:6: warning: assignment makes pointer from integer without a cast [-Wint-conversion] sv4 = shadow_get_or_alloc(obj + 2, id, size, gfp_flags, shadow_ctor, &var4); ^ lib/livepatch/test_klp_shadow_vars.c:181:6: warning: assignment makes pointer from integer without a cast [-Wint-conversion] ret = shadow_get_or_alloc(obj + 2, id, size, gfp_flags, shadow_ctor, &var4); ^ lib/livepatch/test_klp_shadow_vars.c:190:2: error: implicit declaration of function 'shadow_free'; did you mean 'shadow_get'? [-Werror=implicit-function-declaration] shadow_free(obj, id, shadow_dtor); /* sv1 */ ^~~~~~~~~~~ shadow_get lib/livepatch/test_klp_shadow_vars.c:216:2: error: implicit declaration of function 'shadow_free_all'; did you mean 'klp_shadow_free_all'? [-Werror=implicit-function-declaration] shadow_free_all(id + 1, shadow_dtor); /* sv3 */ ^~~~~~~~~~~~~~~ klp_shadow_free_all In file included from lib/livepatch/test_klp_shadow_vars.c:6:0: lib/livepatch/test_klp_shadow_vars.c: At top level: include/linux/module.h:130:42: error: redefinition of '__inittest' static inline initcall_t __maybe_unused __inittest(void) 151- ^ lib/livepatch/test_klp_shadow_vars.c:232:1: note: in expansion of macro 'module_init' module_init(test_klp_shadow_vars_exit); ^~~~~~~~~~~ include/linux/module.h:130:42: note: previous definition of '__inittest' was here static inline initcall_t __maybe_unused __inittest(void) 157- ^ lib/livepatch/test_klp_shadow_vars.c:231:1: note: in expansion of macro 'module_init' module_init(test_klp_shadow_vars_init); ^~~~~~~~~~~ lib/livepatch/test_klp_shadow_vars.c: In function '__inittest': lib/livepatch/test_klp_shadow_vars.c:232:13: error: return from incompatible pointer type [-Werror=incompatible-pointer-types] module_init(test_klp_shadow_vars_exit); ^ include/linux/module.h:131:11: note: in definition of macro 'module_init' { return initfn; } 167- ^~~~~~ lib/livepatch/test_klp_shadow_vars.c: At top level: include/linux/module.h:132:6: error: redefinition of 'init_module' int init_module(void) __attribute__((alias(#initfn))); ^ lib/livepatch/test_klp_shadow_vars.c:232:1: note: in expansion of macro 'module_init' module_init(test_klp_shadow_vars_exit); ^~~~~~~~~~~ include/linux/module.h:132:6: note: previous definition of 'init_module' was here int init_module(void) __attribute__((alias(#initfn))); ^ lib/livepatch/test_klp_shadow_vars.c:231:1: note: in expansion of macro 'module_init' module_init(test_klp_shadow_vars_init); ^~~~~~~~~~~ cc1: some warnings being treated as errors vim +/klp_shadow_ctor_t +72 lib/livepatch/test_klp_shadow_vars.c 70 71 void *shadow_alloc(void *obj, unsigned long id, size_t size, gfp_t gfp_flags, > 72 klp_shadow_ctor_t ctor, void *ctor_data) 73 { 74 void *ret = klp_shadow_alloc(obj, id, size, gfp_flags, ctor, 75 ctor_data); 76 pr_info("klp_%s(obj=PTR%d, id=0x%lx, size=%zx, gfp_flags=%pGg), ctor=PTR%d, ctor_data=PTR%d = PTR%d\n", 77 __func__, ptr_id(obj), id, size, &gfp_flags, ptr_id(ctor), 78 ptr_id(ctor_data), ptr_id(ret)); > 79 return ret; 80 } 81 82 void *shadow_get_or_alloc(void *obj, unsigned long id, size_t size, 83 gfp_t gfp_flags, klp_shadow_ctor_t ctor, 84 void *ctor_data) 85 { 86 void *ret = klp_shadow_get_or_alloc(obj, id, size, gfp_flags, ctor, 87 ctor_data); 88 pr_info("klp_%s(obj=PTR%d, id=0x%lx, size=%zx, gfp_flags=%pGg), ctor=PTR%d, ctor_data=PTR%d = PTR%d\n", 89 __func__, ptr_id(obj), id, size, &gfp_flags, ptr_id(ctor), 90 ptr_id(ctor_data), ptr_id(ret)); 91 return ret; 92 } 93 > 94 void shadow_free(void *obj, unsigned long id, klp_shadow_dtor_t dtor) 95 { 96 klp_shadow_free(obj, id, dtor); 97 pr_info("klp_%s(obj=PTR%d, id=0x%lx, dtor=PTR%d)\n", 98 __func__, ptr_id(obj), id, ptr_id(dtor)); 99 } 100 > 101 void shadow_free_all(unsigned long id, klp_shadow_dtor_t dtor) 102 { 103 klp_shadow_free_all(id, dtor); 104 pr_info("klp_%s(id=0x%lx, dtor=PTR%d)\n", 105 __func__, id, ptr_id(dtor)); 106 } 107 108 109 /* Shadow variable constructor - remember simple pointer data */ 110 static int shadow_ctor(void *obj, void *shadow_data, void *ctor_data) 111 { 112 int **shadow_int = shadow_data; 113 *shadow_int = ctor_data; 114 pr_info("%s: PTR%d -> PTR%d\n", 115 __func__, ptr_id(shadow_int), ptr_id(ctor_data)); 116 117 return 0; 118 } 119 120 static void shadow_dtor(void *obj, void *shadow_data) 121 { 122 pr_info("%s(obj=PTR%d, shadow_data=PTR%d)\n", 123 __func__, ptr_id(obj), ptr_id(shadow_data)); 124 } 125 126 static int test_klp_shadow_vars_init(void) 127 { 128 void *obj = THIS_MODULE; 129 int id = 0x1234; 130 size_t size = sizeof(int *); 131 gfp_t gfp_flags = GFP_KERNEL; 132 133 int var1, var2, var3, var4; 134 int **sv1, **sv2, **sv3, **sv4; 135 136 void *ret; 137 138 ptr_id(0); > 139 ptr_id(&var1); 140 ptr_id(&var2); 141 ptr_id(&var3); 142 ptr_id(&var4); 143 144 /* 145 * With an empty shadow variable hash table, expect not to find 146 * any matches. 147 */ 148 ret = shadow_get(obj, id); > 149 if (!ret) 150 pr_info(" got expected NULL result\n"); 151 152 /* 153 * Allocate a few shadow variables with different <obj> and <id>. 154 */ > 155 sv1 = shadow_alloc(obj, id, size, gfp_flags, shadow_ctor, > &var1); > 156 sv2 = shadow_alloc(obj + 1, id, size, gfp_flags, shadow_ctor, > &var2); > 157 sv3 = shadow_alloc(obj, id + 1, size, gfp_flags, shadow_ctor, > &var3); 158 159 /* 160 * Verify we can find our new shadow variables and that they point 161 * to expected data. 162 */ 163 ret = shadow_get(obj, id); 164 if (ret == sv1 && *sv1 == &var1) 165 pr_info(" got expected PTR%d -> PTR%d result\n", 166 ptr_id(sv1), ptr_id(*sv1)); > 167 ret = shadow_get(obj + 1, id); 168 if (ret == sv2 && *sv2 == &var2) 169 pr_info(" got expected PTR%d -> PTR%d result\n", 170 ptr_id(sv2), ptr_id(*sv2)); > 171 ret = shadow_get(obj, id + 1); 172 if (ret == sv3 && *sv3 == &var3) 173 pr_info(" got expected PTR%d -> PTR%d result\n", 174 ptr_id(sv3), ptr_id(*sv3)); 175 176 /* 177 * Allocate or get a few more, this time with the same <obj>, <id>. 178 * The second invocation should return the same shadow var. 179 */ > 180 sv4 = shadow_get_or_alloc(obj + 2, id, size, gfp_flags, > shadow_ctor, &var4); > 181 ret = shadow_get_or_alloc(obj + 2, id, size, gfp_flags, > shadow_ctor, &var4); 182 if (ret == sv4 && *sv4 == &var4) 183 pr_info(" got expected PTR%d -> PTR%d result\n", 184 ptr_id(sv4), ptr_id(*sv4)); 185 186 /* 187 * Free the <obj=*, id> shadow variables and check that we can no 188 * longer find them. 189 */ > 190 shadow_free(obj, id, shadow_dtor); /* sv1 > */ 191 ret = shadow_get(obj, id); 192 if (!ret) 193 pr_info(" got expected NULL result\n"); 194 195 shadow_free(obj + 1, id, shadow_dtor); /* sv2 */ 196 ret = shadow_get(obj + 1, id); 197 if (!ret) 198 pr_info(" got expected NULL result\n"); 199 200 shadow_free(obj + 2, id, shadow_dtor); /* sv4 */ 201 ret = shadow_get(obj + 2, id); 202 if (!ret) 203 pr_info(" got expected NULL result\n"); 204 205 /* 206 * We should still find an <id+1> variable. 207 */ 208 ret = shadow_get(obj, id + 1); 209 if (ret == sv3 && *sv3 == &var3) 210 pr_info(" got expected PTR%d -> PTR%d result\n", 211 ptr_id(sv3), ptr_id(*sv3)); 212 213 /* 214 * Free all the <id+1> variables, too. 215 */ > 216 shadow_free_all(id + 1, shadow_dtor); /* sv3 > */ 217 ret = shadow_get(obj, id); 218 if (!ret) 219 pr_info(" shadow_get() got expected NULL result\n"); 220 221 222 free_ptr_list(); 223 224 return 0; 225 } 226 227 static void test_klp_shadow_vars_exit(void) 228 { 229 } 230 > 231 module_init(test_klp_shadow_vars_init); > 232 module_init(test_klp_shadow_vars_exit); --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
.config.gz
Description: application/gzip