On 2016-12-14 10:15, Michal Marek wrote: > A minimal example would be > > t1.c: > struct s1; > struct s2 { > int i; > } > struct s3 { > struct s1 *ptr1; > struct s2 *ptr2; > } > void foo(struct s3*); > EXPORT_SYMBOL(foo); > > t2.c: > struct s1 { > int j; > } > struct s2; > struct s3 { > struct s1 *ptr1; > struct s2 *ptr2; > } > void foo(struct s3*); > EXPORT_SYMBOL(foo); Note that the above, if passed to genksyms verbatim, would result in genksyms treating all the types as internal. Here is a complete example including linemarkers: $ cat t1.i # 1 "t1.c" # 1 "<built-in>" # 1 "<command-line>" # 1 "t1.c" # 1 "t1.h" 1 # 1 "t.h" 1 struct s1; struct s2; struct s3 { struct s1 *ptr1; struct s2 *ptr2; }; # 2 "t1.h" 2 struct s2 { int i; }; # 2 "t1.c" 2 void foo(struct s3 *s) { } EXPORT_SYMBOL(foo); $ cat t2.i # 1 "t2.c" # 1 "<built-in>" # 1 "<command-line>" # 1 "t2.c" # 1 "t2.h" 1 # 1 "t.h" 1 struct s1; struct s2; struct s3 { struct s1 *ptr1; struct s2 *ptr2; }; # 2 "t2.h" 2 struct s1 { int j; }; # 2 "t2.c" 2 void foo(struct s3 *s) { } EXPORT_SYMBOL(foo); $ ./scripts/genksyms/genksyms -D <t1.i Export foo == <void foo ( struct s3 { struct s1 { UNKNOWN } * ptr1 ; struct s2 { int i ; } * ptr2 ; } * ) > __crc_foo = 0xf731cef8 ; $ ./scripts/genksyms/genksyms -D <t2.i Export foo == <void foo ( struct s3 { struct s1 { int j ; } * ptr1 ; struct s2 { UNKNOWN } * ptr2 ; } * ) > __crc_foo = 0xc925dae5 ; Michal -- To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html