public inbox for libabigail@sourceware.org
 help / color / mirror / Atom feed
* [PATCH 1/2] tests: Add symtab test suite
@ 2020-05-18 11:50 Matthias Maennich
  2020-05-18 11:50 ` [PATCH 2/2] tests: Add kernel " Matthias Maennich
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Matthias Maennich @ 2020-05-18 11:50 UTC (permalink / raw)
  To: libabigail; +Cc: dodji, gprocida, kernel-team, maennich

Add (Catch based) test suite to test symbol table reading through the
result persisted in abigail::corpus.

The test cases are created through simple C source files targeting the
desired properties (having an undefined/export function or both). The
Makefile that comes with them recreates the test cases from the sources.

This covers reading sorted_(undefined_)var|fun_symbols as well as the
corresponding symbols maps accessible through the accessors of
abigail::corpus.

	* tests/Makefile.am: add new test runtestsymtab
	* tests/data/Makefile.am: add new test data for runtestsymtab
	* tests/data/test-symtab/basic/empty.c: New test case source.
	* tests/data/test-symtab/basic/link_against_me.c: Likewise.
	* tests/data/test-symtab/basic/no_debug_info.c: Likewise.
	* tests/data/test-symtab/basic/one_function_one_variable.c: Likewise.
	* tests/data/test-symtab/basic/one_function_one_variable_undefined.c: Likewise.
	* tests/data/test-symtab/basic/single_function.c: Likewise.
	* tests/data/test-symtab/basic/single_undefined_function.c: Likewise.
	* tests/data/test-symtab/basic/single_undefined_variable.c: Likewise.
	* tests/data/test-symtab/basic/single_variable.c: Likewise.
	* tests/data/test-symtab/basic/empty.so: New test data.
	* tests/data/test-symtab/basic/link_against_me.so: Likewise.
	* tests/data/test-symtab/basic/no_debug_info.so: Likewise.
	* tests/data/test-symtab/basic/one_function_one_variable.so: Likewise.
	* tests/data/test-symtab/basic/one_function_one_variable_undefined.so: Likewise.
	* tests/data/test-symtab/basic/single_function.so: Likewise.
	* tests/data/test-symtab/basic/single_undefined_function.so: Likewise.
	* tests/data/test-symtab/basic/single_undefined_variable.so: Likewise.
	* tests/data/test-symtab/basic/single_variable.so: Likewise.
	* tests/test-symtab.cc: New test driver.

Signed-off-by: Matthias Maennich <maennich@google.com>
---
 tests/Makefile.am                             |   4 +
 tests/data/Makefile.am                        |  22 +-
 tests/data/test-symtab/basic/Makefile         |  19 ++
 tests/data/test-symtab/basic/empty.c          |   1 +
 tests/data/test-symtab/basic/empty.so         | Bin 0 -> 15608 bytes
 .../data/test-symtab/basic/link_against_me.c  |   2 +
 .../data/test-symtab/basic/link_against_me.so | Bin 0 -> 15600 bytes
 tests/data/test-symtab/basic/no_debug_info.c  |   1 +
 tests/data/test-symtab/basic/no_debug_info.so | Bin 0 -> 15360 bytes
 .../basic/one_function_one_variable.c         |   3 +
 .../basic/one_function_one_variable.so        | Bin 0 -> 16624 bytes
 .../one_function_one_variable_undefined.c     |   7 +
 .../one_function_one_variable_undefined.so    | Bin 0 -> 16792 bytes
 .../data/test-symtab/basic/single_function.c  |   1 +
 .../data/test-symtab/basic/single_function.so | Bin 0 -> 16472 bytes
 .../basic/single_undefined_function.c         |   5 +
 .../basic/single_undefined_function.so        | Bin 0 -> 16648 bytes
 .../basic/single_undefined_variable.c         |   7 +
 .../basic/single_undefined_variable.so        | Bin 0 -> 16728 bytes
 .../data/test-symtab/basic/single_variable.c  |   1 +
 .../data/test-symtab/basic/single_variable.so | Bin 0 -> 16280 bytes
 tests/test-symtab.cc                          | 205 ++++++++++++++++++
 22 files changed, 277 insertions(+), 1 deletion(-)
 create mode 100644 tests/data/test-symtab/basic/Makefile
 create mode 100644 tests/data/test-symtab/basic/empty.c
 create mode 100755 tests/data/test-symtab/basic/empty.so
 create mode 100644 tests/data/test-symtab/basic/link_against_me.c
 create mode 100755 tests/data/test-symtab/basic/link_against_me.so
 create mode 100644 tests/data/test-symtab/basic/no_debug_info.c
 create mode 100755 tests/data/test-symtab/basic/no_debug_info.so
 create mode 100644 tests/data/test-symtab/basic/one_function_one_variable.c
 create mode 100755 tests/data/test-symtab/basic/one_function_one_variable.so
 create mode 100644 tests/data/test-symtab/basic/one_function_one_variable_undefined.c
 create mode 100755 tests/data/test-symtab/basic/one_function_one_variable_undefined.so
 create mode 100644 tests/data/test-symtab/basic/single_function.c
 create mode 100755 tests/data/test-symtab/basic/single_function.so
 create mode 100644 tests/data/test-symtab/basic/single_undefined_function.c
 create mode 100755 tests/data/test-symtab/basic/single_undefined_function.so
 create mode 100644 tests/data/test-symtab/basic/single_undefined_variable.c
 create mode 100755 tests/data/test-symtab/basic/single_undefined_variable.so
 create mode 100644 tests/data/test-symtab/basic/single_variable.c
 create mode 100755 tests/data/test-symtab/basic/single_variable.so
 create mode 100644 tests/test-symtab.cc

diff --git a/tests/Makefile.am b/tests/Makefile.am
index 2d8ab9e794a4..c2d4d1dc5d35 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -49,6 +49,7 @@ runtestini			\
 runtestkmiwhitelist		\
 runtestlookupsyms		\
 runtestreadwrite		\
+runtestsymtab			\
 runtesttoolsutils		\
 $(FEDABIPKGDIFF_TEST) 		\
 $(ZIP_ARCHIVE_TESTS)		\
@@ -154,6 +155,9 @@ runtestelfhelpers_LDADD = libcatch.la $(top_builddir)/src/libabigail.la
 runtestcxxcompat_SOURCES = test-cxx-compat.cc
 runtestcxxcompat_LDADD = libcatch.la $(top_builddir)/src/libabigail.la
 
+runtestsymtab_SOURCES = test-symtab.cc
+runtestsymtab_LDADD = libtestutils.la libcatch.la $(top_builddir)/src/libabigail.la
+
 runtestsvg_SOURCES=test-svg.cc
 runtestsvg_LDADD=$(top_builddir)/src/libabigail.la
 
diff --git a/tests/data/Makefile.am b/tests/data/Makefile.am
index 7e91f52c44fe..6505de594ab2 100644
--- a/tests/data/Makefile.am
+++ b/tests/data/Makefile.am
@@ -1700,4 +1700,24 @@ test-ini/test01-equal-in-property-string.abignore \
 test-kmi-whitelist/whitelist-with-single-entry \
 test-kmi-whitelist/whitelist-with-another-single-entry \
 test-kmi-whitelist/whitelist-with-duplicate-entry \
-test-kmi-whitelist/whitelist-with-two-sections
+test-kmi-whitelist/whitelist-with-two-sections \
+\
+test-symtab/basic/Makefile \
+test-symtab/basic/empty.c \
+test-symtab/basic/empty.so \
+test-symtab/basic/link_against_me.c \
+test-symtab/basic/link_against_me.so \
+test-symtab/basic/no_debug_info.c \
+test-symtab/basic/no_debug_info.so \
+test-symtab/basic/one_function_one_variable.c \
+test-symtab/basic/one_function_one_variable.so \
+test-symtab/basic/one_function_one_variable_undefined.c \
+test-symtab/basic/one_function_one_variable_undefined.so \
+test-symtab/basic/single_function.c \
+test-symtab/basic/single_function.so \
+test-symtab/basic/single_undefined_function.c \
+test-symtab/basic/single_undefined_function.so \
+test-symtab/basic/single_undefined_variable.c \
+test-symtab/basic/single_undefined_variable.so \
+test-symtab/basic/single_variable.c \
+test-symtab/basic/single_variable.so
diff --git a/tests/data/test-symtab/basic/Makefile b/tests/data/test-symtab/basic/Makefile
new file mode 100644
index 000000000000..c84d128a4e28
--- /dev/null
+++ b/tests/data/test-symtab/basic/Makefile
@@ -0,0 +1,19 @@
+srcs = $(wildcard *.c)
+libs = $(srcs:.c=.so)
+
+flags = -fPIC
+
+all:	$(libs)
+
+clean:
+	rm $(libs)
+
+no_debug_info.so: no_debug_info.c Makefile
+	$(CC) $< -shared $(flags) -o $@
+
+link_against_me.so: link_against_me.c
+	$(CC) $< -shared $(flags) -o $@
+
+%.so: %.c Makefile link_against_me.so
+	$(CC) $< -shared $(flags) -g -o $@ link_against_me.so
+
diff --git a/tests/data/test-symtab/basic/empty.c b/tests/data/test-symtab/basic/empty.c
new file mode 100644
index 000000000000..5bb380ba0db8
--- /dev/null
+++ b/tests/data/test-symtab/basic/empty.c
@@ -0,0 +1 @@
+// empty!
diff --git a/tests/data/test-symtab/basic/empty.so b/tests/data/test-symtab/basic/empty.so
new file mode 100755
index 0000000000000000000000000000000000000000..28a54747116d9aa30b02192080e09300835c6716
GIT binary patch
literal 15608
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

literal 0
HcmV?d00001

diff --git a/tests/data/test-symtab/basic/link_against_me.c b/tests/data/test-symtab/basic/link_against_me.c
new file mode 100644
index 000000000000..42d6a46bd23d
--- /dev/null
+++ b/tests/data/test-symtab/basic/link_against_me.c
@@ -0,0 +1,2 @@
+int undefined_variable =1;
+void undefined_function() { }
diff --git a/tests/data/test-symtab/basic/link_against_me.so b/tests/data/test-symtab/basic/link_against_me.so
new file mode 100755
index 0000000000000000000000000000000000000000..33c8b5d62cd639f4cb96ff2b363326fbf1818668
GIT binary patch
literal 15600
zcmeHOU1%It6uz5H>{inxt$)#qT_u)O>~xLQrb_Il`ROQ4jWK}=mgyur$*%5C*_~)o
z1p}qhQiSM(_@eYdMD)QQ5Jh~jM0`@vHz^2FEL89(B9#i-^_-dW?aodnB0h-7y=3Ox
z^WF2Ed+)h-ckX8HeR^pBa8oR%kmBlI#ag<<N77QTa+hRCq*bq4PxnrBt!LX@FIts5
zD20$p{Bj*FY%O|Nwn&p8QO>aEGRb60N$*~huZRj6<XuK(3x;p7aBri0Me2J^BzR3^
z#=J%0Eea2ERO}%WzFV)2+|FKh5FxvKSV6Kar_pn6#>*!?wbn266ZVkcJxDxm=if~T
z`<T?XR$LaOe~<_d*LxLRak};$m{2M8&KoaZZEk)3```aK{$A>_lh@g&xGmg$9%trB
z`#MxYje28G*oQklEq?XrmAfe$nT82XMwHyP2G0G8vgi7v@GRk*Xf|JvfUF~((*#``
zsU(?ZP39bDENiAvDq0oSF1wbctoz1Ctc+83W^xtRDUXi~<V!_o+@8!kepz&hH8p2j
z)48IZ&mDEtY%$}I;$*DH?Q+iJ)}iUy;*^^!6}fVnzcT+Y&sL<}CqnpJf_J7p8im|X
z(3ki4I*$p*2I+hNm#OO&tpso$bEJy_9CHz6TIvYs2<Qmt2<Qmt2<Qmt2<Qmt2>iDq
zU>^HEVV-LFVTV%Y@sHf5>gVRMj}uF^Mpp0qhKj1Ud`tKCEosWVPPyqt7?{uYea+lw
zTh6lBebK#|+`Yhga<{&^+`eUjZI?un{o9`Xo$SZlcF8=sVxIYNk9p=|+>Cu<esRgY
ziX4oHgG6<Cx_!%FoxjjmpdvN9W5PVvcOz%bljq!4^Hkscq?|ugtya%x>Gny>5b3c)
zs2B3PC#i6PIE#mtyuLT|mRqWmj)0DUj)0DUj)0DUj)0DUj)0DUj)0DUj==vf0<q2U
zd%CDw{7x^qQmv**rbzO8(F-IONOIzLy_{l4$5d>tBeuD9U1E`595VL?y1x9WTJ>Hz
zwsj1*b>828#S@7IwdeYKZoQ-HX67-Ue#Wbh$PVu!8E5VzbQP#B@7-&ETgNj^0~;>e
zOBJwzPC5cQ0y+XZ0y+XZ0y+XZ0y+XZ0y+XZ0{@E$VE-!itG1$7vVV1h=)a48o#@yH
zyIFMnR=i$x?1$ywmz+?3;Zn84`eE7Jihal_+0=?X)F-6;ayF*)q%YJJB0ELa_QIxp
z0Q-mEk^<EGn%J)w3I1<YzdbcSQvPoV>|+nthke4lH+bK`z}?C2L1!{&7n8e<9^>}y
zJ-yrfT(T$ClcK*n!VV(zIPEmXe)wQ<oOX$0JR0%1!Z<YI%?jhyh_@)jy%DETmHE?%
zuT#lLJfTvNIGuWk#4lHvpN;-$wj_gypO33n)g6g%sO|3#vf`>uVLmtF?J8>g;?!B}
z?{2i;s8l+L`1v^PbH{iGOXKQF)fH)v{|42qd7d<@pR0Am&++HEiBF4!;?^ekkq~~9
z;P^i9y(qPdGO<8=xIRw9bj2d#Qy`q{T?zT0_v}~4`9;E`+P_x6UibX8s?$lzgi@5B
z_sJ%vR*%;i58tG^(~V9(6FfXFX9;iOlN6zTEqnCU^X(VUe)atPjqn(qa0t(bcIt4_
z^VN8}aSgn84SbyNsB;xFgh!pLIJ$-(HC1*i?(FomF{SFqEG)NRP4PjC3Z2Kul&qP2
zY0}PH8MjofSoZ9knkp5J<Q><^7`t}v+!bxa=Pz=WT`t@6mQ!@g^J=<m7aS`yTPVyE
zC7@Yk={A_=bH&Fjd&bTcE3Q>=sCAY#Jk~!lWDOk{<Z~f|4<G0sxo?1AIuioW%2Y~L
z)-GoFbO`&TVmduz4VgkV2gj7xE@kc8|G?h<{ni7+!w(IOTjTwE_YaZV#)Bi?>67Ra
zCVz1*CE{#J9jcu`2_1A%MrFR>+LI*RvM;m96-%yT%oJyh$=O^!vpttlo|d&MS!HDA
zi^TM$TUJKd$=eJn!wZ0MB<~tCC07})Ge>tG6lFMB34b<26lgxh9|zwOdGco$a#K`q
z$z_jJo$cDnn5<NkL6f0C1Kc>F|Dnd~4SvSU@}TxS!*h-QA0AB2L51>sjO<r>=7WD&
zGLYS3kM#i74{*~<8D4{ckLM#K))`zceWYsZ9;`Rggt2e%@f?N3I)_ZW#6E(_B!zv0
zkLN8U>JPUc^^XykebP6WpYS~<@><{`!}0UKckBG5@F3w1ZlFURq=I1mc+NwH;|(3s
z4)O6^gZvN`i$uMEXF`0e8z8YhgnhXG{9NPqBmOEWmLj`Eg$VO`e1m+fLm;05Q6%~e
z_&8<w*^TkVIvnQ*!}ic2pCfL2fRA;}3I1SEf}O9`b>J^i0nZ)OkM$4EXW|?t`VAh&
zf!{T8|G~#PX_<D5a!Pvl`VD-@SE(q-S81_L`4aP7&{}`Mf0GJ=d_3Pfg<t#qBM!iW
zzjrCa7~0>J_Di~ikAC~8Ul;N$KcI{27juTZ1pZb4BH5NxP}b(2U*z3K#o?$l;2J`^
n=|cMv7oOi}yGNAU>79P&Bq|a-r1FX-lD|#PCoc&PBFz62zM2mb

literal 0
HcmV?d00001

diff --git a/tests/data/test-symtab/basic/no_debug_info.c b/tests/data/test-symtab/basic/no_debug_info.c
new file mode 100644
index 000000000000..5bb380ba0db8
--- /dev/null
+++ b/tests/data/test-symtab/basic/no_debug_info.c
@@ -0,0 +1 @@
+// empty!
diff --git a/tests/data/test-symtab/basic/no_debug_info.so b/tests/data/test-symtab/basic/no_debug_info.so
new file mode 100755
index 0000000000000000000000000000000000000000..827c1eee3e4e8f326af7e360ea444627ee59bee6
GIT binary patch
literal 15360
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
F{{nUkt>yp#

literal 0
HcmV?d00001

diff --git a/tests/data/test-symtab/basic/one_function_one_variable.c b/tests/data/test-symtab/basic/one_function_one_variable.c
new file mode 100644
index 000000000000..f31122a88fb8
--- /dev/null
+++ b/tests/data/test-symtab/basic/one_function_one_variable.c
@@ -0,0 +1,3 @@
+void exported_function(){}
+
+int exported_variable;
diff --git a/tests/data/test-symtab/basic/one_function_one_variable.so b/tests/data/test-symtab/basic/one_function_one_variable.so
new file mode 100755
index 0000000000000000000000000000000000000000..51d918c7ec9be6e5a900bcccc5f0964486d76cb4
GIT binary patch
literal 16624
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

literal 0
HcmV?d00001

diff --git a/tests/data/test-symtab/basic/one_function_one_variable_undefined.c b/tests/data/test-symtab/basic/one_function_one_variable_undefined.c
new file mode 100644
index 000000000000..53ff5d82c5f8
--- /dev/null
+++ b/tests/data/test-symtab/basic/one_function_one_variable_undefined.c
@@ -0,0 +1,7 @@
+extern int undefined_variable;
+void undefined_function(int);
+
+
+static void local_function(){
+	undefined_function(undefined_variable);
+}
diff --git a/tests/data/test-symtab/basic/one_function_one_variable_undefined.so b/tests/data/test-symtab/basic/one_function_one_variable_undefined.so
new file mode 100755
index 0000000000000000000000000000000000000000..fc2356c2aa0af88bad9f3c0f88837bebd5a53575
GIT binary patch
literal 16792
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
MQHRj!BluMDPaKW4n*aa+

literal 0
HcmV?d00001

diff --git a/tests/data/test-symtab/basic/single_function.c b/tests/data/test-symtab/basic/single_function.c
new file mode 100644
index 000000000000..8ac09016eb4d
--- /dev/null
+++ b/tests/data/test-symtab/basic/single_function.c
@@ -0,0 +1 @@
+void exported_function(){}
diff --git a/tests/data/test-symtab/basic/single_function.so b/tests/data/test-symtab/basic/single_function.so
new file mode 100755
index 0000000000000000000000000000000000000000..9b7e45d6ab0f03d602ff2ac50be3539bf909ace6
GIT binary patch
literal 16472
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

literal 0
HcmV?d00001

diff --git a/tests/data/test-symtab/basic/single_undefined_function.c b/tests/data/test-symtab/basic/single_undefined_function.c
new file mode 100644
index 000000000000..484d6a5c6943
--- /dev/null
+++ b/tests/data/test-symtab/basic/single_undefined_function.c
@@ -0,0 +1,5 @@
+void undefined_function();
+
+static void local_function() {
+  undefined_function();
+}
diff --git a/tests/data/test-symtab/basic/single_undefined_function.so b/tests/data/test-symtab/basic/single_undefined_function.so
new file mode 100755
index 0000000000000000000000000000000000000000..96d19e3ed7e37160315025ad081ba54f4be03c12
GIT binary patch
literal 16648
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

literal 0
HcmV?d00001

diff --git a/tests/data/test-symtab/basic/single_undefined_variable.c b/tests/data/test-symtab/basic/single_undefined_variable.c
new file mode 100644
index 000000000000..b0602c2d4e6a
--- /dev/null
+++ b/tests/data/test-symtab/basic/single_undefined_variable.c
@@ -0,0 +1,7 @@
+extern int undefined_variable;
+
+static void other_local_function(int variable) { (void)variable; }
+
+static void local_function(){
+	other_local_function(undefined_variable);
+}
diff --git a/tests/data/test-symtab/basic/single_undefined_variable.so b/tests/data/test-symtab/basic/single_undefined_variable.so
new file mode 100755
index 0000000000000000000000000000000000000000..7188667cc6d6495bd7712e0f31ec5ed3f75b8737
GIT binary patch
literal 16728
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
Hh5bJPU|+b4

literal 0
HcmV?d00001

diff --git a/tests/data/test-symtab/basic/single_variable.c b/tests/data/test-symtab/basic/single_variable.c
new file mode 100644
index 000000000000..620e156dccbc
--- /dev/null
+++ b/tests/data/test-symtab/basic/single_variable.c
@@ -0,0 +1 @@
+int exported_variable;
diff --git a/tests/data/test-symtab/basic/single_variable.so b/tests/data/test-symtab/basic/single_variable.so
new file mode 100755
index 0000000000000000000000000000000000000000..6ba3f4343c69b87a8ec280b6cc59b3db7fd33d8d
GIT binary patch
literal 16280
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

literal 0
HcmV?d00001

diff --git a/tests/test-symtab.cc b/tests/test-symtab.cc
new file mode 100644
index 000000000000..62f8998af5d0
--- /dev/null
+++ b/tests/test-symtab.cc
@@ -0,0 +1,205 @@
+// -*- Mode: C++ -*-
+//
+// Copyright (C) 2020 Google, Inc.
+//
+// This file is part of the GNU Application Binary Interface Generic
+// Analysis and Instrumentation Library (libabigail).  This library is
+// free software; you can redistribute it and/or modify it under the
+// terms of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option) any
+// later version.
+
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Lesser Public License for more details.
+
+// You should have received a copy of the GNU Lesser General Public
+// License along with this program; see the file COPYING-LGPLV3.  If
+// not, see <http://www.gnu.org/licenses/>.
+
+// Author: Matthias Maennich
+
+/// @file
+///
+/// This program tests symtab invariants through abg-corpus.
+
+#include <iostream>
+#include <limits>
+#include <vector>
+
+#include "abg-corpus.h"
+#include "abg-dwarf-reader.h"
+#include "abg-ir.h"
+#include "lib/catch.hpp"
+#include "test-utils.h"
+
+using namespace abigail;
+
+using dwarf_reader::create_read_context;
+using dwarf_reader::read_context_sptr;
+using dwarf_reader::read_corpus_from_elf;
+using ir::environment;
+using ir::environment_sptr;
+
+static const std::string test_data_dir =
+    std::string(abigail::tests::get_src_dir()) + "/tests/data/test-symtab/";
+
+dwarf_reader::status
+read_corpus(const std::string path, corpus_sptr& result)
+{
+  const std::string& absolute_path = test_data_dir + path;
+
+  environment_sptr	    env(new environment);
+  const std::vector<char**> debug_info_root_paths;
+  read_context_sptr	    ctxt =
+      create_read_context(absolute_path, debug_info_root_paths, env.get());
+
+  dwarf_reader::status status = dwarf_reader::STATUS_UNKNOWN;
+  result = read_corpus_from_elf(*ctxt, status);
+
+  REQUIRE(status != dwarf_reader::STATUS_UNKNOWN);
+  return status;
+}
+
+TEST_CASE("Symtab::Empty", "[symtab, basic]")
+{
+  const std::string	     binary = "basic/empty.so";
+  corpus_sptr		     corpus_ptr;
+  const dwarf_reader::status status = read_corpus(binary, corpus_ptr);
+  REQUIRE(corpus_ptr);
+
+  REQUIRE((status & dwarf_reader::STATUS_OK));
+
+  // TODO: Those two assertions are currently not met. Empty symtabs are
+  //       currently treated like the error case.
+  // REQUIRE((status & dwarf_reader::STATUS_OK));
+  // REQUIRE((status & dwarf_reader::STATUS_NO_SYMBOLS_FOUND));
+}
+
+TEST_CASE("Symtab::NoDebugInfo", "[symtab, basic]")
+{
+  const std::string	     binary = "basic/no_debug_info.so";
+  corpus_sptr		     corpus_ptr;
+  const dwarf_reader::status status = read_corpus(binary, corpus_ptr);
+  REQUIRE(corpus_ptr);
+
+  REQUIRE(status
+	  == (dwarf_reader::STATUS_OK
+	      | dwarf_reader::STATUS_DEBUG_INFO_NOT_FOUND));
+}
+
+// this value indicates in the following helper method, that we do not want to
+// assert for this particular value. In other words, N is a placeholder for an
+// arbitrary value.
+#define N std::numeric_limits<size_t>::max()
+
+corpus_sptr
+assert_symbol_count(const std::string& path,
+		    size_t	       function_symbols = 0,
+		    size_t	       variable_symbols = 0,
+		    size_t	       undefined_function_symbols = 0,
+		    size_t	       undefined_variable_symbols = 0)
+{
+  corpus_sptr		     corpus_ptr;
+  const dwarf_reader::status status = read_corpus(path, corpus_ptr);
+  REQUIRE(corpus_ptr);
+
+  REQUIRE(status == dwarf_reader::STATUS_OK);
+  const corpus& corpus = *corpus_ptr;
+
+  if (function_symbols != N)
+    {
+      CHECK(corpus.get_sorted_fun_symbols().size() == function_symbols);
+      CHECK(corpus.get_fun_symbol_map().size() == function_symbols);
+      CHECK(corpus.get_fun_symbol_map_sptr()->size() == function_symbols);
+    }
+  if (variable_symbols != N)
+    {
+      CHECK(corpus.get_sorted_var_symbols().size() == variable_symbols);
+      CHECK(corpus.get_var_symbol_map().size() == variable_symbols);
+      CHECK(corpus.get_var_symbol_map_sptr()->size() == variable_symbols);
+    }
+  if (undefined_variable_symbols != N)
+    {
+      CHECK(corpus.get_sorted_undefined_fun_symbols().size()
+	    == undefined_function_symbols);
+      CHECK(corpus.get_undefined_fun_symbol_map().size()
+	    == undefined_function_symbols);
+      CHECK(corpus.get_undefined_fun_symbol_map_sptr()->size()
+	    == undefined_function_symbols);
+    }
+  if (undefined_function_symbols != N)
+    {
+      CHECK(corpus.get_sorted_undefined_var_symbols().size()
+	    == undefined_variable_symbols);
+      CHECK(corpus.get_undefined_var_symbol_map().size()
+	    == undefined_variable_symbols);
+      CHECK(corpus.get_undefined_var_symbol_map_sptr()->size()
+	    == undefined_variable_symbols);
+    }
+
+  return corpus_ptr;
+}
+
+TEST_CASE("Symtab::SimpleSymtabs", "[symtab, basic]")
+{
+  GIVEN("a binary with no exported symbols")
+  {
+    // TODO: should pass, but does currently not as empty tables are treated
+    //       like the error case, but this is an edge case anyway.
+    // assert_symbol_count("empty.so");
+  }
+
+  GIVEN("a binary with a single exported function")
+  {
+    const std::string	   binary = "basic/single_function.so";
+    const corpus_sptr&	   corpus = assert_symbol_count(binary, 1, 0);
+    const elf_symbol_sptr& symbol =
+	corpus->lookup_function_symbol("exported_function");
+    REQUIRE(symbol);
+    CHECK(!corpus->lookup_variable_symbol("exported_function"));
+    CHECK(symbol == corpus->lookup_function_symbol(*symbol));
+    CHECK(symbol != corpus->lookup_variable_symbol(*symbol));
+  }
+
+  GIVEN("a binary with a single exported variable")
+  {
+    const std::string	   binary = "basic/single_variable.so";
+    const corpus_sptr&	   corpus = assert_symbol_count(binary, 0, 1);
+    const elf_symbol_sptr& symbol =
+	corpus->lookup_variable_symbol("exported_variable");
+    REQUIRE(symbol);
+    CHECK(!corpus->lookup_function_symbol("exported_variable"));
+    CHECK(symbol == corpus->lookup_variable_symbol(*symbol));
+    CHECK(symbol != corpus->lookup_function_symbol(*symbol));
+  }
+
+  GIVEN("a binary with one function and one variable exported")
+  {
+    const std::string  binary = "basic/one_function_one_variable.so";
+    const corpus_sptr& corpus = assert_symbol_count(binary, 1, 1);
+    CHECK(corpus->lookup_function_symbol("exported_function"));
+    CHECK(!corpus->lookup_variable_symbol("exported_function"));
+    CHECK(corpus->lookup_variable_symbol("exported_variable"));
+    CHECK(!corpus->lookup_function_symbol("exported_variable"));
+  }
+
+  GIVEN("a binary with a single undefined function")
+  {
+    const std::string  binary = "basic/single_undefined_function.so";
+    const corpus_sptr& corpus = assert_symbol_count(binary, 0, 0, 1, 0);
+  }
+
+  GIVEN("a binary with a single undefined variable")
+  {
+    const std::string  binary = "basic/single_undefined_variable.so";
+    const corpus_sptr& corpus = assert_symbol_count(binary, 0, 0, 0, 1);
+  }
+
+  GIVEN("a binary with one function and one variable undefined")
+  {
+    const std::string  binary = "basic/one_function_one_variable_undefined.so";
+    const corpus_sptr& corpus = assert_symbol_count(binary, 0, 0, 1, 1);
+  }
+}
-- 
2.26.2.761.g0e0b3e54be-goog


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH 2/2] tests: Add kernel symtab test suite
  2020-05-18 11:50 [PATCH 1/2] tests: Add symtab test suite Matthias Maennich
@ 2020-05-18 11:50 ` Matthias Maennich
  2020-05-27  9:15   ` Dodji Seketeli
  2020-05-26 14:00 ` [PATCH 1/2] tests: Add " Dodji Seketeli
  2020-05-27  9:06 ` Dodji Seketeli
  2 siblings, 1 reply; 6+ messages in thread
From: Matthias Maennich @ 2020-05-18 11:50 UTC (permalink / raw)
  To: libabigail; +Cc: dodji, gprocida, kernel-team, maennich

Add (Catch based) test suite to test kernel symbol table (ksymtab)
reading through the result persisted in abigail::corpus.

The test cases are created through simple kernel module C source files
targeting the desired properties ((gpl) exported / local functions /
variables). The kernel binaries are built without debug information to
keep them reasonably small and reproducible. That is just enough
sufficient to analyze ksymtabs. The Makefile that comes with them
recreates the test cases from the sources, given a kernel source tree
with the appropriate version, e.g.

   make KDIR=/path/to/4.14

This covers ksymtab reading and ensuring we detect the kernel binary
correctly. The kernel versions are selected based on features introduced
into the Linux kernel that affect the ksymtab representation.

 - Linux v4.14 - reasonably old kernel to start with (actually v4.14.180)
 - Linux v4.19 - first version having position relative relocations
		 (PREL) in ksymtab entries on some platforms
		 (actually v4.19.123)
 - Linux v5.4  - first version having symbol namespaces (actually v5.4.41)
 - Linux v5.6  - latest released stable kernel as of writing (actually v5.6.13)

	* tests/data/Makefile.am: add new test data for runtestsymtab
	* tests/data/test-symtab/kernel-4.14/Makefile: New test case makefile.
	* tests/data/test-symtab/kernel-4.14/empty.c: Likewise.
	* tests/data/test-symtab/kernel-4.14/one_of_each.c: Likewise.
	* tests/data/test-symtab/kernel-4.14/single_function.c: Likewise.
	* tests/data/test-symtab/kernel-4.14/single_function_gpl.c: Likewise.
	* tests/data/test-symtab/kernel-4.14/single_variable.c: Likewise.
	* tests/data/test-symtab/kernel-4.14/single_variable_gpl.c: Likewise.
	* tests/data/test-symtab/kernel-4.14/empty.ko: New test data.
	* tests/data/test-symtab/kernel-4.14/one_of_each.ko: Likewise.
	* tests/data/test-symtab/kernel-4.14/single_function.ko: Likewise.
	* tests/data/test-symtab/kernel-4.14/single_function_gpl.ko: Likewise.
	* tests/data/test-symtab/kernel-4.14/single_variable.ko: Likewise.
	* tests/data/test-symtab/kernel-4.14/single_variable_gpl.ko: Likewise.
	* tests/data/test-symtab/kernel-4.19/Makefile: New test case makefile.
	* tests/data/test-symtab/kernel-4.19/empty.c: Likewise.
	* tests/data/test-symtab/kernel-4.19/one_of_each.c: Likewise.
	* tests/data/test-symtab/kernel-4.19/single_function.c: Likewise.
	* tests/data/test-symtab/kernel-4.19/single_function_gpl.c: Likewise.
	* tests/data/test-symtab/kernel-4.19/single_variable.c: Likewise.
	* tests/data/test-symtab/kernel-4.19/single_variable_gpl.c: Likewise.
	* tests/data/test-symtab/kernel-4.19/empty.ko: New test data.
	* tests/data/test-symtab/kernel-4.19/one_of_each.ko: Likewise.
	* tests/data/test-symtab/kernel-4.19/single_function.ko: Likewise.
	* tests/data/test-symtab/kernel-4.19/single_function_gpl.ko: Likewise.
	* tests/data/test-symtab/kernel-4.19/single_variable.ko: Likewise.
	* tests/data/test-symtab/kernel-4.19/single_variable_gpl.ko: Likewise.
	* tests/data/test-symtab/kernel-5.4/Makefile: New test case makefile.
	* tests/data/test-symtab/kernel-5.4/empty.c: Likewise.
	* tests/data/test-symtab/kernel-5.4/one_of_each.c: Likewise.
	* tests/data/test-symtab/kernel-5.4/single_function.c: Likewise.
	* tests/data/test-symtab/kernel-5.4/single_function_gpl.c: Likewise.
	* tests/data/test-symtab/kernel-5.4/single_variable.c: Likewise.
	* tests/data/test-symtab/kernel-5.4/single_variable_gpl.c: Likewise.
	* tests/data/test-symtab/kernel-5.4/empty.ko: New test data.
	* tests/data/test-symtab/kernel-5.4/one_of_each.ko: Likewise.
	* tests/data/test-symtab/kernel-5.4/single_function.ko: Likewise.
	* tests/data/test-symtab/kernel-5.4/single_function_gpl.ko: Likewise.
	* tests/data/test-symtab/kernel-5.4/single_variable.ko: Likewise.
	* tests/data/test-symtab/kernel-5.4/single_variable_gpl.ko: Likewise.
	* tests/data/test-symtab/kernel-5.6/Makefile: New test case makefile.
	* tests/data/test-symtab/kernel-5.6/empty.c: Likewise.
	* tests/data/test-symtab/kernel-5.6/one_of_each.c: Likewise.
	* tests/data/test-symtab/kernel-5.6/single_function.c: Likewise.
	* tests/data/test-symtab/kernel-5.6/single_function_gpl.c: Likewise.
	* tests/data/test-symtab/kernel-5.6/single_variable.c: Likewise.
	* tests/data/test-symtab/kernel-5.6/single_variable_gpl.c: Likewise.
	* tests/data/test-symtab/kernel-5.6/empty.ko: New test data.
	* tests/data/test-symtab/kernel-5.6/one_of_each.ko: Likewise.
	* tests/data/test-symtab/kernel-5.6/single_function.ko: Likewise.
	* tests/data/test-symtab/kernel-5.6/single_function_gpl.ko: Likewise.
	* tests/data/test-symtab/kernel-5.6/single_variable.ko: Likewise.
	* tests/data/test-symtab/kernel-5.6/single_variable_gpl.ko: Likewise.
	* tests/data/test-symtab/kernel/Makefile: New test case source file.
	* tests/data/test-symtab/kernel/empty.c: Likewise.
	* tests/data/test-symtab/kernel/one_of_each.c: Likewise.
	* tests/data/test-symtab/kernel/single_function.c: Likewise.
	* tests/data/test-symtab/kernel/single_function_gpl.c: Likewise.
	* tests/data/test-symtab/kernel/single_variable.c: Likewise.
	* tests/data/test-symtab/kernel/single_variable_gpl.c: Likewise.
	* tests/test-symtab.cc: New test case to test kernel symtabs.

Signed-off-by: Matthias Maennich <maennich@google.com>
---
 tests/data/Makefile.am                        |  75 +++++++++++++-
 tests/data/test-symtab/kernel-4.14/Makefile   |   1 +
 tests/data/test-symtab/kernel-4.14/empty.c    |   1 +
 tests/data/test-symtab/kernel-4.14/empty.ko   | Bin 0 -> 2136 bytes
 .../test-symtab/kernel-4.14/one_of_each.c     |   1 +
 .../test-symtab/kernel-4.14/one_of_each.ko    | Bin 0 -> 3512 bytes
 .../test-symtab/kernel-4.14/single_function.c |   1 +
 .../kernel-4.14/single_function.ko            | Bin 0 -> 2744 bytes
 .../kernel-4.14/single_function_gpl.c         |   1 +
 .../kernel-4.14/single_function_gpl.ko        | Bin 0 -> 2760 bytes
 .../test-symtab/kernel-4.14/single_variable.c |   1 +
 .../kernel-4.14/single_variable.ko            | Bin 0 -> 2744 bytes
 .../kernel-4.14/single_variable_gpl.c         |   1 +
 .../kernel-4.14/single_variable_gpl.ko        | Bin 0 -> 2760 bytes
 tests/data/test-symtab/kernel-4.19/Makefile   |   1 +
 tests/data/test-symtab/kernel-4.19/empty.c    |   1 +
 tests/data/test-symtab/kernel-4.19/empty.ko   | Bin 0 -> 2264 bytes
 .../test-symtab/kernel-4.19/one_of_each.c     |   1 +
 .../test-symtab/kernel-4.19/one_of_each.ko    | Bin 0 -> 3648 bytes
 .../test-symtab/kernel-4.19/single_function.c |   1 +
 .../kernel-4.19/single_function.ko            | Bin 0 -> 2872 bytes
 .../kernel-4.19/single_function_gpl.c         |   1 +
 .../kernel-4.19/single_function_gpl.ko        | Bin 0 -> 2896 bytes
 .../test-symtab/kernel-4.19/single_variable.c |   1 +
 .../kernel-4.19/single_variable.ko            | Bin 0 -> 2872 bytes
 .../kernel-4.19/single_variable_gpl.c         |   1 +
 .../kernel-4.19/single_variable_gpl.ko        | Bin 0 -> 2896 bytes
 tests/data/test-symtab/kernel-5.4/Makefile    |   1 +
 tests/data/test-symtab/kernel-5.4/empty.c     |   1 +
 tests/data/test-symtab/kernel-5.4/empty.ko    | Bin 0 -> 2336 bytes
 .../data/test-symtab/kernel-5.4/one_of_each.c |   1 +
 .../test-symtab/kernel-5.4/one_of_each.ko     | Bin 0 -> 3720 bytes
 .../test-symtab/kernel-5.4/single_function.c  |   1 +
 .../test-symtab/kernel-5.4/single_function.ko | Bin 0 -> 2944 bytes
 .../kernel-5.4/single_function_gpl.c          |   1 +
 .../kernel-5.4/single_function_gpl.ko         | Bin 0 -> 2968 bytes
 .../test-symtab/kernel-5.4/single_variable.c  |   1 +
 .../test-symtab/kernel-5.4/single_variable.ko | Bin 0 -> 2944 bytes
 .../kernel-5.4/single_variable_gpl.c          |   1 +
 .../kernel-5.4/single_variable_gpl.ko         | Bin 0 -> 2968 bytes
 tests/data/test-symtab/kernel-5.6/Makefile    |   1 +
 tests/data/test-symtab/kernel-5.6/empty.c     |   1 +
 tests/data/test-symtab/kernel-5.6/empty.ko    | Bin 0 -> 2336 bytes
 .../data/test-symtab/kernel-5.6/one_of_each.c |   1 +
 .../test-symtab/kernel-5.6/one_of_each.ko     | Bin 0 -> 4040 bytes
 .../test-symtab/kernel-5.6/single_function.c  |   1 +
 .../test-symtab/kernel-5.6/single_function.ko | Bin 0 -> 3024 bytes
 .../kernel-5.6/single_function_gpl.c          |   1 +
 .../kernel-5.6/single_function_gpl.ko         | Bin 0 -> 3048 bytes
 .../test-symtab/kernel-5.6/single_variable.c  |   1 +
 .../test-symtab/kernel-5.6/single_variable.ko | Bin 0 -> 3024 bytes
 .../kernel-5.6/single_variable_gpl.c          |   1 +
 .../kernel-5.6/single_variable_gpl.ko         | Bin 0 -> 3048 bytes
 tests/data/test-symtab/kernel/Makefile        |  19 ++++
 tests/data/test-symtab/kernel/empty.c         |   0
 tests/data/test-symtab/kernel/one_of_each.c   |  16 +++
 .../data/test-symtab/kernel/single_function.c |   7 ++
 .../test-symtab/kernel/single_function_gpl.c  |   7 ++
 .../data/test-symtab/kernel/single_variable.c |   7 ++
 .../test-symtab/kernel/single_variable_gpl.c  |   7 ++
 tests/test-symtab.cc                          |  94 +++++++++++++++++-
 61 files changed, 256 insertions(+), 4 deletions(-)
 create mode 120000 tests/data/test-symtab/kernel-4.14/Makefile
 create mode 120000 tests/data/test-symtab/kernel-4.14/empty.c
 create mode 100644 tests/data/test-symtab/kernel-4.14/empty.ko
 create mode 120000 tests/data/test-symtab/kernel-4.14/one_of_each.c
 create mode 100644 tests/data/test-symtab/kernel-4.14/one_of_each.ko
 create mode 120000 tests/data/test-symtab/kernel-4.14/single_function.c
 create mode 100644 tests/data/test-symtab/kernel-4.14/single_function.ko
 create mode 120000 tests/data/test-symtab/kernel-4.14/single_function_gpl.c
 create mode 100644 tests/data/test-symtab/kernel-4.14/single_function_gpl.ko
 create mode 120000 tests/data/test-symtab/kernel-4.14/single_variable.c
 create mode 100644 tests/data/test-symtab/kernel-4.14/single_variable.ko
 create mode 120000 tests/data/test-symtab/kernel-4.14/single_variable_gpl.c
 create mode 100644 tests/data/test-symtab/kernel-4.14/single_variable_gpl.ko
 create mode 120000 tests/data/test-symtab/kernel-4.19/Makefile
 create mode 120000 tests/data/test-symtab/kernel-4.19/empty.c
 create mode 100644 tests/data/test-symtab/kernel-4.19/empty.ko
 create mode 120000 tests/data/test-symtab/kernel-4.19/one_of_each.c
 create mode 100644 tests/data/test-symtab/kernel-4.19/one_of_each.ko
 create mode 120000 tests/data/test-symtab/kernel-4.19/single_function.c
 create mode 100644 tests/data/test-symtab/kernel-4.19/single_function.ko
 create mode 120000 tests/data/test-symtab/kernel-4.19/single_function_gpl.c
 create mode 100644 tests/data/test-symtab/kernel-4.19/single_function_gpl.ko
 create mode 120000 tests/data/test-symtab/kernel-4.19/single_variable.c
 create mode 100644 tests/data/test-symtab/kernel-4.19/single_variable.ko
 create mode 120000 tests/data/test-symtab/kernel-4.19/single_variable_gpl.c
 create mode 100644 tests/data/test-symtab/kernel-4.19/single_variable_gpl.ko
 create mode 120000 tests/data/test-symtab/kernel-5.4/Makefile
 create mode 120000 tests/data/test-symtab/kernel-5.4/empty.c
 create mode 100644 tests/data/test-symtab/kernel-5.4/empty.ko
 create mode 120000 tests/data/test-symtab/kernel-5.4/one_of_each.c
 create mode 100644 tests/data/test-symtab/kernel-5.4/one_of_each.ko
 create mode 120000 tests/data/test-symtab/kernel-5.4/single_function.c
 create mode 100644 tests/data/test-symtab/kernel-5.4/single_function.ko
 create mode 120000 tests/data/test-symtab/kernel-5.4/single_function_gpl.c
 create mode 100644 tests/data/test-symtab/kernel-5.4/single_function_gpl.ko
 create mode 120000 tests/data/test-symtab/kernel-5.4/single_variable.c
 create mode 100644 tests/data/test-symtab/kernel-5.4/single_variable.ko
 create mode 120000 tests/data/test-symtab/kernel-5.4/single_variable_gpl.c
 create mode 100644 tests/data/test-symtab/kernel-5.4/single_variable_gpl.ko
 create mode 120000 tests/data/test-symtab/kernel-5.6/Makefile
 create mode 120000 tests/data/test-symtab/kernel-5.6/empty.c
 create mode 100644 tests/data/test-symtab/kernel-5.6/empty.ko
 create mode 120000 tests/data/test-symtab/kernel-5.6/one_of_each.c
 create mode 100644 tests/data/test-symtab/kernel-5.6/one_of_each.ko
 create mode 120000 tests/data/test-symtab/kernel-5.6/single_function.c
 create mode 100644 tests/data/test-symtab/kernel-5.6/single_function.ko
 create mode 120000 tests/data/test-symtab/kernel-5.6/single_function_gpl.c
 create mode 100644 tests/data/test-symtab/kernel-5.6/single_function_gpl.ko
 create mode 120000 tests/data/test-symtab/kernel-5.6/single_variable.c
 create mode 100644 tests/data/test-symtab/kernel-5.6/single_variable.ko
 create mode 120000 tests/data/test-symtab/kernel-5.6/single_variable_gpl.c
 create mode 100644 tests/data/test-symtab/kernel-5.6/single_variable_gpl.ko
 create mode 100644 tests/data/test-symtab/kernel/Makefile
 create mode 100644 tests/data/test-symtab/kernel/empty.c
 create mode 100644 tests/data/test-symtab/kernel/one_of_each.c
 create mode 100644 tests/data/test-symtab/kernel/single_function.c
 create mode 100644 tests/data/test-symtab/kernel/single_function_gpl.c
 create mode 100644 tests/data/test-symtab/kernel/single_variable.c
 create mode 100644 tests/data/test-symtab/kernel/single_variable_gpl.c

diff --git a/tests/data/Makefile.am b/tests/data/Makefile.am
index 6505de594ab2..af31d33ae219 100644
--- a/tests/data/Makefile.am
+++ b/tests/data/Makefile.am
@@ -1720,4 +1720,77 @@ test-symtab/basic/single_undefined_function.so \
 test-symtab/basic/single_undefined_variable.c \
 test-symtab/basic/single_undefined_variable.so \
 test-symtab/basic/single_variable.c \
-test-symtab/basic/single_variable.so
+test-symtab/basic/single_variable.so \
+\
+test-symtab/kernel/Makefile \
+test-symtab/kernel/empty.c \
+test-symtab/kernel/one_of_each.c \
+test-symtab/kernel/single_function.c \
+test-symtab/kernel/single_function_gpl.c \
+test-symtab/kernel/single_variable.c \
+test-symtab/kernel/single_variable_gpl.c \
+test-symtab/kernel-4.14/Makefile \
+test-symtab/kernel-4.14/empty.c \
+test-symtab/kernel-4.14/empty.ko \
+test-symtab/kernel-4.14/one_of_each.c \
+test-symtab/kernel-4.14/one_of_each.ko \
+test-symtab/kernel-4.14/single_function.c \
+test-symtab/kernel-4.14/single_function.ko \
+test-symtab/kernel-4.14/single_function_gpl.c \
+test-symtab/kernel-4.14/single_function_gpl.ko \
+test-symtab/kernel-4.14/single_variable.c \
+test-symtab/kernel-4.14/single_variable.ko \
+test-symtab/kernel-4.14/single_variable_gpl.c \
+test-symtab/kernel-4.14/single_variable_gpl.ko \
+test-symtab/kernel-4.19/Makefile \
+test-symtab/kernel-4.19/empty.c \
+test-symtab/kernel-4.19/empty.ko \
+test-symtab/kernel-4.19/one_of_each.c \
+test-symtab/kernel-4.19/one_of_each.ko \
+test-symtab/kernel-4.19/single_function.c \
+test-symtab/kernel-4.19/single_function.ko \
+test-symtab/kernel-4.19/single_function_gpl.c \
+test-symtab/kernel-4.19/single_function_gpl.ko \
+test-symtab/kernel-4.19/single_variable.c \
+test-symtab/kernel-4.19/single_variable.ko \
+test-symtab/kernel-4.19/single_variable_gpl.c \
+test-symtab/kernel-4.19/single_variable_gpl.ko \
+test-symtab/kernel-5.3/Makefile \
+test-symtab/kernel-5.3/empty.c \
+test-symtab/kernel-5.3/empty.ko \
+test-symtab/kernel-5.3/one_of_each.c \
+test-symtab/kernel-5.3/one_of_each.ko \
+test-symtab/kernel-5.3/single_function.c \
+test-symtab/kernel-5.3/single_function.ko \
+test-symtab/kernel-5.3/single_function_gpl.c \
+test-symtab/kernel-5.3/single_function_gpl.ko \
+test-symtab/kernel-5.3/single_variable.c \
+test-symtab/kernel-5.3/single_variable.ko \
+test-symtab/kernel-5.3/single_variable_gpl.c \
+test-symtab/kernel-5.3/single_variable_gpl.ko \
+test-symtab/kernel-5.4/Makefile \
+test-symtab/kernel-5.4/empty.c \
+test-symtab/kernel-5.4/empty.ko \
+test-symtab/kernel-5.4/one_of_each.c \
+test-symtab/kernel-5.4/one_of_each.ko \
+test-symtab/kernel-5.4/single_function.c \
+test-symtab/kernel-5.4/single_function.ko \
+test-symtab/kernel-5.4/single_function_gpl.c \
+test-symtab/kernel-5.4/single_function_gpl.ko \
+test-symtab/kernel-5.4/single_variable.c \
+test-symtab/kernel-5.4/single_variable.ko \
+test-symtab/kernel-5.4/single_variable_gpl.c \
+test-symtab/kernel-5.4/single_variable_gpl.ko \
+test-symtab/kernel-5.6/Makefile \
+test-symtab/kernel-5.6/empty.c \
+test-symtab/kernel-5.6/empty.ko \
+test-symtab/kernel-5.6/one_of_each.c \
+test-symtab/kernel-5.6/one_of_each.ko \
+test-symtab/kernel-5.6/single_function.c \
+test-symtab/kernel-5.6/single_function.ko \
+test-symtab/kernel-5.6/single_function_gpl.c \
+test-symtab/kernel-5.6/single_function_gpl.ko \
+test-symtab/kernel-5.6/single_variable.c \
+test-symtab/kernel-5.6/single_variable.ko \
+test-symtab/kernel-5.6/single_variable_gpl.c \
+test-symtab/kernel-5.6/single_variable_gpl.ko
diff --git a/tests/data/test-symtab/kernel-4.14/Makefile b/tests/data/test-symtab/kernel-4.14/Makefile
new file mode 120000
index 000000000000..c7e68bddd8d2
--- /dev/null
+++ b/tests/data/test-symtab/kernel-4.14/Makefile
@@ -0,0 +1 @@
+../kernel/Makefile
\ No newline at end of file
diff --git a/tests/data/test-symtab/kernel-4.14/empty.c b/tests/data/test-symtab/kernel-4.14/empty.c
new file mode 120000
index 000000000000..ac07d5e725cc
--- /dev/null
+++ b/tests/data/test-symtab/kernel-4.14/empty.c
@@ -0,0 +1 @@
+../kernel/empty.c
\ No newline at end of file
diff --git a/tests/data/test-symtab/kernel-4.14/empty.ko b/tests/data/test-symtab/kernel-4.14/empty.ko
new file mode 100644
index 0000000000000000000000000000000000000000..03f62bb9e71b61efaa410688cb75eac8a4a07ecd
GIT binary patch
literal 2136
zcmeHI&1w`u5U$;czmZ^2K@edN;?H55-8JAwSXtS`5HO1#7DUluemdD9J3TSeD+wNa
z1YaTGF?Y{7c=PVrSMUk6YNm^A+ldI~;K62^s`|RVs-B*%ns=*@AJuC$;8BAIFtZp1
zcy?;0_Y1WT7hoRdP``}R!?`vb!RF`W#n;yl^Xs2Bo*y0_9DMj#-yru`?no8qJy1a^
zdotb8`|w8YromPc^_D~%pKhx`o+mTP3?~!of0Tdt1l9(F`;FTxGE4&1SQZ`8Zg#qN
zO0Cgpbz1n`#k=`uZohp|ud*`e?$;}MUQrdlE_p@ORN+>US<4=rwyc@z!I_z1X&#)l
ztWu?#o`Y}S-Gy_<;8zf@S^FnH8aHtg&h~tP0xTPxdI60~rGO_W7r}ZjKB}TXMFgcx
zvlw;XM>(BH-*gKEM#J@|qg8)>#iz#6?*0UE18LtwSdWw3@Bu`=pXwk)sdq~`W=&;U
ziY+x2;WU}V%_Ih)<(>wCxf8XSfrtYgK;be;)OMyKDeT}P%ySS?mZnl6t%!%MubJy0
z+BUEK*WwyRps&lv#R2<9xxs*u)Q9aM(4cSb-kjKWvUIoSFB!g@e{49nEH0_;jq4#s
zG3mcxkN37=>2Cf3u2u1mnB#1$&$y8<QPQ5={6`LtX>R@y7YJ*ygOSW1Iym!L(nVn1
zc3p5cWENdtva7aw(eTHHa31{@aPs+IHSwrEt5WTmi}K3&v2gP*9>f1)_-~nLq|5&S
D`b36g

literal 0
HcmV?d00001

diff --git a/tests/data/test-symtab/kernel-4.14/one_of_each.c b/tests/data/test-symtab/kernel-4.14/one_of_each.c
new file mode 120000
index 000000000000..27c87e5758cb
--- /dev/null
+++ b/tests/data/test-symtab/kernel-4.14/one_of_each.c
@@ -0,0 +1 @@
+../kernel/one_of_each.c
\ No newline at end of file
diff --git a/tests/data/test-symtab/kernel-4.14/one_of_each.ko b/tests/data/test-symtab/kernel-4.14/one_of_each.ko
new file mode 100644
index 0000000000000000000000000000000000000000..6c5fe2b5fe93b8b8712a1a1cba18ec1f4ca44c96
GIT binary patch
literal 3512
zcmeHJ%}*0i5TCN3;CGQ2zta#+@W9$uj9>z30*E98^?-?9)@{4c4ec(r3t~K&c=2ZN
z;?+bC9`)j1fQerD3pC*`(6fooyq(!yUbloqPsW$-&dl%4$J=@H=Jo0H+>NeG24rMl
z0%A!}fc3tZFDbSJSvUsW$PeIS;4?G70MDLm_q_S~b8Fzo$G6`GKN;oTi-Vh+o66#E
zyqxtFzZp1HYt3%DcDe3YODlC~Lt|ud)vE-q@9oqR6spdO<5gSZ;Moml-1i*IU$h*%
zQiC<8*|3+~%J_&`z~5*-N9*sxhw_t_Bbt|y^d#7S`VVGcW^(d+ZfMFWySA4bGmB<n
zxHx(#<Z{J)F^|71csBN?wrhfn4pnEUs%$qk)TvCvd)h%n4A|cR@9lsmnnFUufCC9B
zW(_zP3klAELkTHn4LBSN%+a~)hVQ@hiK7T)pa(lrID}qSc>G-_c>b2cjW+#d))&2g
z)_<<>IB(+r9qSLVp4fd>ICaHvi2gQ;8O-wp<Kmw_DDAtl_`w;7^Dh}6WL)Gd`@72c
zX_k*OokKjE+!tzOI8Nb{g+A5CNv3{I<38&5V_mUYRC)Jsj`U?kqQ8YW>B~TKHD2PI
zaFK<&$dDfy;s+9q)2x7HEw>&w0=sOrwRqLgX+CJ~KHtG!`R-tw7FVu}PI24jwYV~$
z7B`wpetpBQsth1q#e0r#Dl}i1pS`m%ZOu+ubZHevcR+G&6|Ny1)ZCU8+C$y1*mWz4
z6pC_-$~LHdIu}V0?KABgRln4&)HC5{6Z$8a7kxPoqC)t25s*q9iN2hpq<^VpGSmG>
zuFSAbzzpjFX-zoK4;*vJTQ$q8ZoN9}R>2IM^#IJKQ@5iE)5K_-!)-)guD8?z6SL`h
zi$0iDJFr2yt-Ic`?^PT#nQpV(LhXv*XgD5*Qft6JNW-nbu27Tt!*K@fsjI~&E_7H5
z30z<*BsyOVm`Ew-`$U0hm1*3$LV$FWV+;kt^!O{Rlw&GH_EY2$WN1w#0hso3K|Emj
z2vS;$)QRl>O~lgTZ?IjCsSrK>Bu=EoucgGNy4U01MJz4;2M&0fsSrJXwGQ^mDb5Xx
zAybJj@Iz$Cr@l{l4y50x`u;!aU|*7jY8zWZ{p6s&PHWQRmvn%Q#I5*vg$!YN0ho&Y
zyoQUt(APLGd{Xtr9^;d(_KC{PhS)Qu{}pscO8%w(=;jhtWyr4$K2Yo0;xrNOzI6L9
M9O!-0De}7gZx<*+kN^Mx

literal 0
HcmV?d00001

diff --git a/tests/data/test-symtab/kernel-4.14/single_function.c b/tests/data/test-symtab/kernel-4.14/single_function.c
new file mode 120000
index 000000000000..a0055533bd8e
--- /dev/null
+++ b/tests/data/test-symtab/kernel-4.14/single_function.c
@@ -0,0 +1 @@
+../kernel/single_function.c
\ No newline at end of file
diff --git a/tests/data/test-symtab/kernel-4.14/single_function.ko b/tests/data/test-symtab/kernel-4.14/single_function.ko
new file mode 100644
index 0000000000000000000000000000000000000000..bfa2e2c31d1eafae7cf428d124be98b756475eba
GIT binary patch
literal 2744
zcmeHIOKTKC5boWH?^hBP6fx|<Lp)^MT>~aUWFd(mD2pBz1R>+>OlLD>b|&o1hUDM_
z#G60BgZ==$c=6&f<l?~}A%Z`^o8UpKda8Chy`u=`;K62ltLm#qS66q}JYKwgvs@|(
z9wl)@<PxJod^?!)4aGLZDREMa0DlIi1#_v{5<3&G?ytOiyL0~G_wws_`^)U-@~7Qh
z<xu!1w>IKlDt%|QA9-mIM`Y#84H@~#oQT}6oJ)eJ6Uy9XQ}()UC-CN`?Hc@MsugrA
zlka{IbH)9L`9H=#Sb?Sa`RkR*1=$YVs4{EU?b=j*=5oeW>eYG`eplgc|C!luH)s{U
zEPOk~H`h|HYB;1N4h(~USVDWGnuR3}X;RKw;&3i#oF$HEQqEf9Xf9}+C5~xQ#$pc{
z5nq3piqim;w0(_|!4-w)`x+<w7SN(NuCmYf%Nh3wXZb9}c}DmI$(RR@moUflI?z$P
z0el?Jg?k~>i-ZGFgYowujcIkpzNm)LNNi6y&U&)lP2ILL-270N_KJ08q;Bl1Xh8eW
z9I0bM_*QfIZfnt5UU0B^)@JrV+&XL508ZC}#L4_c7<+D*x7bYFbbEo@4khnK)dTxI
z557TIhrymvX=i%`s`dkPjkzdJrQM18cDo;h{#4)#JC$3huzNCe2i4K)1di|lNQ4ck
z2GMFPY~M{?p<;wVv>r#EwDrB%?F6j7xZ9Nx#8nHz*J&zAU2mOJ|0{X{yzy0;FSkKa
zFA-(3r#1lEFtKL&4bCk6j10x)dq!$83k+iB`Ws}x?~3hBc^VX$Q-ckNPEtZul8*z$
zZ#$p!Il||G7Onq;^!$EFRJP0`ZNV(^e?dkyqD**wmREp5f6PrEA4xFlZOT~ZBL6|6
zMqwNJBEUa_i8-0;4+EJauBDHsARxwd9_T1wa{y!v`!jtGF!Q=;b10#`{%niB#uk<8
s4*8Fg@&urGmRx^6f9$VCOFf_#{y{~{|IA#+e&K(Q?jQDLeVG0~0VR#qV*mgE

literal 0
HcmV?d00001

diff --git a/tests/data/test-symtab/kernel-4.14/single_function_gpl.c b/tests/data/test-symtab/kernel-4.14/single_function_gpl.c
new file mode 120000
index 000000000000..3f9b47f8514e
--- /dev/null
+++ b/tests/data/test-symtab/kernel-4.14/single_function_gpl.c
@@ -0,0 +1 @@
+../kernel/single_function_gpl.c
\ No newline at end of file
diff --git a/tests/data/test-symtab/kernel-4.14/single_function_gpl.ko b/tests/data/test-symtab/kernel-4.14/single_function_gpl.ko
new file mode 100644
index 0000000000000000000000000000000000000000..b05ec4d551e1d8b8e60af0d50f910c7ab72aa9a4
GIT binary patch
literal 2760
zcmeHIy>HV%6u;C3%6D531;G#y0}MGOX;D+8prE!y6)1wCLQJk>UlS{i9b%^{VgPkP
zEQkdOiG@D^iH(7gPHeECF8mSv1@P|tUe0w~gir?tPPX5BzxR1x&rg=`+#1W}7>yje
z!L&puV-troUsG(2on$B2IPj<8HQ=o`R@wU<_j%{d*PGwJ%|4zfe0cHc_J!^3ZRL>p
z5u3fB9|^}?ANY3U2EN(qd0^>?p75Qp%6zLUs-f$*Jh9tmL-e~=%eAX>yaZ3Bn3oC0
z<Yym7R>pk@`#;3LwgUCV#q0SiOQPvoetv<Md8tsYT#dPWxmYg3GYe<?&&+;1J0tUE
z$-9$%Y7KR(Mnf9xz$gfa!4B?$CoXTo!eA2#NwWq!tc3(;up<dcvj#h=1>|H88D~F!
zrWG>)<P!6mM1y&S>v^3){65gEI1iP*o-b9rg*eIQFwQH)FQI%2={ulP$#uZ3_z3tk
z><jfmq8AZI_o4o?ilf(A_C+-^8VR?VX?DU#-N<U1*$q(YqyFCdtf<|<QIUZTpjl!E
zg;cAJm3ynp=E{;On`x=C3!*k!ng=*)yP+BTGcT|$Z`g8C+_3tt)$|0-PR(ETe;Rb6
z;{7KSD39k0RLu)$n>as+1aJ8R-W<4|Q*a%|Be5AV-WQ&wS4#dEv;@xZQwSM{a$SEt
zVBE1Hi>WxC>vsa*7Cbp0-VDLo4!T|8Lu{24{#b=Dvg}Tx(7$8PgPYv_^i8f|xXVb1
z49^Dw9H?9~eWGK9gZgw_I*+Jk3&2P$ZP!Bsx@TmcmghhrYpRg}(h3$-MEMv{`LCya
zK8tuAXjcBGsHgjkqOv7k(g*Nn`M*Y^Ye<Puev+HONPk&da(qD{z20fL4R%@n!$MOF
zTT3PZehXe%Q#$`B5If3T$?*&XiP1U_br`TQ1Y(B#iM|Aw_@rrLq@dmYWGj7BQ&g(E
r=s$_d<A6@XOY2YjFZ*p)sx@rsJ1Uy~q-&kp!@rH^@2z%KT-yH^v@+sv

literal 0
HcmV?d00001

diff --git a/tests/data/test-symtab/kernel-4.14/single_variable.c b/tests/data/test-symtab/kernel-4.14/single_variable.c
new file mode 120000
index 000000000000..196fb4c0ba58
--- /dev/null
+++ b/tests/data/test-symtab/kernel-4.14/single_variable.c
@@ -0,0 +1 @@
+../kernel/single_variable.c
\ No newline at end of file
diff --git a/tests/data/test-symtab/kernel-4.14/single_variable.ko b/tests/data/test-symtab/kernel-4.14/single_variable.ko
new file mode 100644
index 0000000000000000000000000000000000000000..73ba479fa7933d8126ff0eba9b4f224050245789
GIT binary patch
literal 2744
zcmeHIPixdr5PxgxzxuDO3W_L;h}1*l?pm-FDhq8bMOpN)(1RGW$!i;$O-hn2^`e4!
z5kG*3o;~;t#G@AvUOnlTC|K~OGs#Ty`jU$ECivL5GxM97H}mGbH+eRH@6Lf*P4K9R
z+oF&d72?OCf^Vm6TbvRn#SrjkU>YzNI$aT-|F#r;x%%+y_Yd*b<+nS-+pl&$ruNl;
za&tY566snScI4STUy_+C*Ja?wGa|72awhhI6<-!M8#3zKE1okmX*S_E)u^M}0hm>}
zqi(-LkGNm||Mve#1r}y!Z`H@=WY4pM`n1_Hn-i_6YZ+H>HChe$-GICOXJ)_Mw6VwS
zG}4<}b~VyhRfQicgMb)9d8CSkAr322!5ZR7At;<7jw({Y8e+H*6wVOG6e(lz9S(`@
zpSt2S05xS_BV=$r#fyE75q=kF)jD=+U+kANjtFP@EUojB@Jl3P9yqpOj;eLQCIaIf
z%rWI$xUXCUd=%=5eGdoI_rN30gK?oX64McuwH80=Cw9*&H$T)RQMFEAsUN!OYCs3j
z9I0c%^4-qjgYLYwIA>w=Y)<WhxOFyf0-UURv6cA?KXh#0S{?*W;)MZ;T362cEB1RH
ze1o#{W)!HI?Gb3YAE2wu1z{r1m0)1@2A=Ouc&;!LxtRzvlD?f+N2wDy!UrH0CZy^G
z%b_q`JF!K&hVKPyVc<wp-HX|a!P*J?eHp;IX+ZcoO~i@qtSL$UJ$nIM@wDl><O{Wl
zyOJXrlivrzO`uq_;s$35m-Kw!NGx@ZX;7ez9)F!2_+7ETE>D62b852z(Q!(sLGp2+
z_-*HNK1cX0(5m>)Nzd<>#8Up<J^bI0Lz5kea(sp#0fX@|H+6g_LATfIk9Dr{&lA-O
z+g5`B{}d+1(BqeZ%n@U$;{^zaah-D=E!fF{jA4JKuK{LWHSLrV+U?J_=&NlpRoy55
p5mKH26wi|D$>)##wJOwOYT=*K)rvno*U>%vm+1asUsi|i{|ht+)WiS)

literal 0
HcmV?d00001

diff --git a/tests/data/test-symtab/kernel-4.14/single_variable_gpl.c b/tests/data/test-symtab/kernel-4.14/single_variable_gpl.c
new file mode 120000
index 000000000000..dc09c0d27870
--- /dev/null
+++ b/tests/data/test-symtab/kernel-4.14/single_variable_gpl.c
@@ -0,0 +1 @@
+../kernel/single_variable_gpl.c
\ No newline at end of file
diff --git a/tests/data/test-symtab/kernel-4.14/single_variable_gpl.ko b/tests/data/test-symtab/kernel-4.14/single_variable_gpl.ko
new file mode 100644
index 0000000000000000000000000000000000000000..30f9a082c6506752ca89cb95c24eae601e55eb6e
GIT binary patch
literal 2760
zcmeHIJ8u&~5MJj32?>w~5f9NAL;*!swh4-Z2(pxyA|VTk2vJ?mcN_c2`Of&xQK&#^
zkf<m?K!=3r_ytH*RCJV-Nc;jMYG8J6=5BL7BSMG7%Ilf=W@cx0cXsZ<%8k{bLV?jJ
zu<I<92xV+^B;{+0t+5GqoDBm%1Ji)HR^MQ+CssG_zW;LV<>NPB$De;UXMT)5{h;jg
z|HN)5=tjaZcdV{!H9TQ9J06%iq9c4KTx7o07K@?lH$k<}W=C|}R@1c?=Xe=@)lyML
z7=oFXztkOM<V8G)|9{(m<OJ51maY~rE{le1`NaiZ;pN#%^-|0gE2T;aewU%P|IF;S
zn>GeirlG2~-_=mBDi1%@4+3Ja!vk>b@oE+Z8`Y$gHQ13<&^UvQX;R7>Y&;c^lW%aC
zefybJoC2Vr?Q0SZ<`tgq>m=g0f#$7qPuZvYrHuCwC;1Gn^9=FxD4#(37U-0I4zhv3
zI0tizji~-6W!dNCcn5P@yD#cB9|4#4G{~OiG!kwz)7%d4w<D`z<~Km8kGg~Pd8@Vq
zN39IB2h9>YD1_Rmuix5OG1r$(*-XpTeGs+L@;ty%%MH!gpLv08dFEEnw<9<3QKSw`
z+f)@zXDLCdsQCU9GsbwlU!ZDVKwHH5K_qz7@9{>@^_*GPVLTGM5#wFqS?Nj14?`+}
zGkg?6#vxtT-wGIatjJ<&9nbZ*1K$>0-w$tuU~LEOw(wzX6%@W$vteY}+ghT3$DRc@
zdHYyC$s#r6E+k0IB=vzf2P)4jt>{?cpq}as#lB9m019c7jo(2BdS~RHmFGYqbE=U6
z(kdoYLis3A`K_mWK8^Sq(7gB$QBUs~#lHOS4Df$}4p+z#Da9wa0gQ|<bJNEs6tec&
z^KXG&o_~^P=3r}j5a9P<${5-B{Xpy}W9j1&2oj@nPIS0nJpp2d{E0pRn0Vc^-j~pR
zf3lUnnJp^SP4u5c<uO2~VbXch{mXuv7itq*`e(IT`j^dhYJh(W>+e<Ss<^EGFPz5U
AUH||9

literal 0
HcmV?d00001

diff --git a/tests/data/test-symtab/kernel-4.19/Makefile b/tests/data/test-symtab/kernel-4.19/Makefile
new file mode 120000
index 000000000000..c7e68bddd8d2
--- /dev/null
+++ b/tests/data/test-symtab/kernel-4.19/Makefile
@@ -0,0 +1 @@
+../kernel/Makefile
\ No newline at end of file
diff --git a/tests/data/test-symtab/kernel-4.19/empty.c b/tests/data/test-symtab/kernel-4.19/empty.c
new file mode 120000
index 000000000000..ac07d5e725cc
--- /dev/null
+++ b/tests/data/test-symtab/kernel-4.19/empty.c
@@ -0,0 +1 @@
+../kernel/empty.c
\ No newline at end of file
diff --git a/tests/data/test-symtab/kernel-4.19/empty.ko b/tests/data/test-symtab/kernel-4.19/empty.ko
new file mode 100644
index 0000000000000000000000000000000000000000..e76515434c12185b2d312a5d78b94369b64d9ec5
GIT binary patch
literal 2264
zcmeHIPiqrV5TEVVe`rgK9t1&h5Y$5+$+n0sMpoKb110Jqpm<m|+1GS!_NDD^v;{#C
z#H+{N1TPAH1TXzCUOo5;>dfvN`+Qj?;7M@E?#%nm{N8(+%uHT3*Y8d_4zM_I8;)0u
z0vwz;w*B1nVFu2@G};&Naq(GecVMU4KMFtG+IjN$&b#-opMLxD`RkjL=*#!S*Lti*
zd$?wa<hE2%+5i<MvLTc0Y#*M<-6ZVCy~d)bFNwOhP~qswb+Oar@&6<L(G0AutSncq
zt;%j3s>+h^M7`?Wyk1xpujbY8vw*cZS=b+w;Ffj<)&5i|&&|7H+~ww7Q-&K&X1HCT
z4jLC1PK|?zxN!P6_?a=B`f?h+AK8u>1RUd@%)G2|UZ2&(y2fc1ken|R+(Ydc`MId^
z2dK-=eT4YD`F%OHc|(h27>OPP0qW5}26}oR&}p|GcA7zJHK0M_)qjC_pm;S1)G(95
z4Jfvwt+LHH)%yX6bU(?$F6wNz(3@-#QS{YFbVu<Zs>TtB94aQ7$mCuIbiY__3_(O;
z7D66Ah}G6m^`tNl65TWf(Hka-R7lG=!tq&6v#__NQ}kEr60)f}IDNdCuZ=4VXian6
z6oHE}ex!r=cVv#uUq%PjmR-3om|*Gr|G~g~v<b8C{|YgZtA+acwky7c9^%vgk|`g}
zg<;$0-$!2=|ByM>#eBxKj#1N{?DG#T9@Fge6*>s3ae&s$Z(BI?SwBZV+h*vjeIf0%
xV`*J>)j7>S&;;uLIea+(To*JS%8vS^3uOcSrr77tqqB@Zt4HKplZ>{_{{bw_k_7+&

literal 0
HcmV?d00001

diff --git a/tests/data/test-symtab/kernel-4.19/one_of_each.c b/tests/data/test-symtab/kernel-4.19/one_of_each.c
new file mode 120000
index 000000000000..27c87e5758cb
--- /dev/null
+++ b/tests/data/test-symtab/kernel-4.19/one_of_each.c
@@ -0,0 +1 @@
+../kernel/one_of_each.c
\ No newline at end of file
diff --git a/tests/data/test-symtab/kernel-4.19/one_of_each.ko b/tests/data/test-symtab/kernel-4.19/one_of_each.ko
new file mode 100644
index 0000000000000000000000000000000000000000..293d07eb038666fb2debde483584dce42553851e
GIT binary patch
literal 3648
zcmeHJ&1)1{5U;U=U+b#TAj>N596V$XdCZKWiI~t3vq6yffpL#*&vYkgGSeMrdO`$c
z1AAY>o>vgTy$JpTdJuB)k8lrO_N+HAqE)Y}dR|`lM8TU_Oixw)>g#pAul{51>Ti20
z6%eYx3=A|u0bU*$$gUP$I0mCIg7O$X4nFe>i|}{l>4#_Y|J83^dhurR)$cQR-i$xl
zi#DAT|E@-He*<-*?d|PM*yTUmSWCKT7<lV`H}ae9&|6+>LjfHiOZ~W&MoGNWPf!TL
zwJ;8P(-8Zea5{-YFIn<JzqJDEVYlNiN3H2|sy?Oajk8r6)*gIl>}5S6`!F&y5A*qs
ze*+zupPju}9lsnlBR{TAsfMagG$wz|q-vwqsNwG{?u{>V+qEIikX7jDRay*n^sX$!
zY1bCX0otiWa$tWEM8pB(P%u0kIA~}C(SaWZiXl00$j}C&13wNFLvrA-p=BcN&k=a{
z(KZ}Mpkj<uMtp{G(MLJ(0^>ikPVqzw_*9HO|D;iX+sMo62HIZi^CsdI?B|TO1D>H7
z{i9j2|1S_H|8e#^!Th!6BZZlH&;H^k`N#ADwzuGa4spsaByqP8A2sKT4nm~U8b7Gd
zebVI(n}{F76~S(pGo$~JjpBNc3gRClPX0pT|1aaB3%`p3<q?uRU>vlnlLV>-o`<}T
zHwB;d2rMpKxv@CsUAgShvEQigfaKtB)WD0AH1y8zNJ<G;d-po2-}Lf(C%;d~mUf5R
zhQ#UHX_wgCZpF(jsK;d0-C-LNm**W4%l337>TwsLowWS6m%nhP=Cx!#Xx@Jj1-Z-*
z;k2q{y~{cv{4_p7asr6ItV6LAUKItoonQ8cng5jGZ|BcVDw|qR*)$?w5s4OqT8{gw
z*^k=6L==G1Q1%U@(r_aM)eYNzzCbKB?{+pDm^X@-dqC?nikA{lfuH)IOSGeSHHllH
zGFz{jJ@jrRolY2IDP0^tvL<?|-&)Pz;H!j_7`+c4>aR&ID`!j)W$C-X3Wc)xfF0zV
z6n{JZA{uCq+b7?B4j7ye86f8Yn_&(G!tC*Hvcpm4!eo7j?xH|rB5sn)j&~S5f}H#$
zUf$~#VrBKWIPP=xuW??N{e?X$sZTw!>o*ZAtN(}-U1u)L?q7<AviP?gFd>1=rM|!q
zP@s5wo~m3(_MQ0K^Z)0Ncvl8$O{^=4m_I~LW3ubJHo*RpmQ{F+0%0`)m`gm}`zA@e
z@TX`L+4TGC3+q#?^@=*p7RT3^(>kKPD*c!BN8c}HrC#!e+O!5|sd%TB$IB<vbF`ae
G$A1Djo=!pl

literal 0
HcmV?d00001

diff --git a/tests/data/test-symtab/kernel-4.19/single_function.c b/tests/data/test-symtab/kernel-4.19/single_function.c
new file mode 120000
index 000000000000..a0055533bd8e
--- /dev/null
+++ b/tests/data/test-symtab/kernel-4.19/single_function.c
@@ -0,0 +1 @@
+../kernel/single_function.c
\ No newline at end of file
diff --git a/tests/data/test-symtab/kernel-4.19/single_function.ko b/tests/data/test-symtab/kernel-4.19/single_function.ko
new file mode 100644
index 0000000000000000000000000000000000000000..890b125275d59aac05b5f73abe4e5e19e0c55adc
GIT binary patch
literal 2872
zcmeHJOKTKC5U$O{cQhux5o8Y@BA8}(B9cTR3rP%tuo@v3FO%7wNit@3ChW|H2!f)Q
z;6;y~#Djuo!J7{xf53zIKjI&V)jieIo!*Ivxp=VI-KzTP*)`oY`)GRZR!^w}a+TmF
zC`qCKqlXk<6KoAmLO=8(e;U6QerM_n@N|2pFa7xT(|qaGh5pY!e|)+6;mJYNiJ15^
z7et*6l=<4)$|(Q!H`d~I>U+*oCu*ia9FfZN*Zjy!CLnTK{zMW)%b~Aq*8O(NT@IQP
z*I0FoRqc^7ck3bF{SY(Leq#Oi{f9d+GdVe49-8tSfg6>_n9Zug_UM(2E87*jf}asQ
z+ka;E+l^X<H;dn$;uC9$Th$%X61T1h=Qpi;S)g5BO>MzpO;W4{N0gv(797<i#aeJo
z2^wcXpC)B2p98(Hy<;lQAyCrllobpSF6A@ic!TguB%dOBSKz9j=Lx@uv?y;V^n8l#
zUYjVEK=pHw)Nhau=>4Ho?-3uw=Ot&Sr0ax}d#?W~;;8=T6&QnuwPKGo!EumwaP-kU
zL|~ylJHIgP%uYFcG}_f&kQ|J51)L~OedjuufqBr?<UuQS8&3E1<+`-Jmo8li5~>Ko
zxao#!BxmBf+Ya1D=*w-36Mi<A__N3sZ{Gn82bPtDRHR3`B00Vhwj6a>qZ5SQaNq$G
zQ1(t?slSl|Yx|*_Z%o@F2Ems{0=%I?v=jsL+|&gTFASp9IBNP#-xq5nXx)rkEkDAz
zA``yhhLhB7uId&46@L-E_^nhYH49VA2wWyAiR_n@88Suw9vR4UFYQhLaa8a#s!n)j
z`H&pUy5xB#HB2MJG1Klb8K{$;0j69-nAgOqz80yV3W3Lway#iS_jMbwqWqiWC+{nX
z`Mr~}yNCa4GN?*JqB6gP?<2$W^Zz~i`c8t`Z&O}FyCVO*P@}OmJqhy9@XKp5^LGQ8
zBhRI;=O}PY_Bq#4z<Lg3jP#fECBl-|P3v6+?e>?p+}GHmP~9Q_8Yxd8%Ku-={>$gj
e-v>phUeGZ4CZeeyv(|yV{OSC?Q?7zD{eJ;hHsJyQ

literal 0
HcmV?d00001

diff --git a/tests/data/test-symtab/kernel-4.19/single_function_gpl.c b/tests/data/test-symtab/kernel-4.19/single_function_gpl.c
new file mode 120000
index 000000000000..3f9b47f8514e
--- /dev/null
+++ b/tests/data/test-symtab/kernel-4.19/single_function_gpl.c
@@ -0,0 +1 @@
+../kernel/single_function_gpl.c
\ No newline at end of file
diff --git a/tests/data/test-symtab/kernel-4.19/single_function_gpl.ko b/tests/data/test-symtab/kernel-4.19/single_function_gpl.ko
new file mode 100644
index 0000000000000000000000000000000000000000..237832543c6a73a5fb44d6c941d4847fa82266ff
GIT binary patch
literal 2896
zcmeHJ&1=+95T9+T)^Dpt6fcX2sMyDDs$vUm7us41WoeQ1;K7hhUbmsyWZ7g(1yPTl
zM9`y$diUtngY7}D-n<C@13mZ;s58lX$=mFsh+aJSXfiXu`FQhY=S})#VfoHbsRVMB
zU<PtYq5vz0a=w<ZH8=$)VHo)_d<=XR>kas{bNSl))gOED*O|RH@$ATl`;CtWQJ2KT
z*RmJ%wos<EyPHya^Q}(Ujk#;B^#UjM!oX^Ee8gSe;ei`XLtwZ0bmRpspZD8r@^0I1
zdCv3=R-I&3bD~V~hUoPdOSjWsg!}LMuU24jZf>f4Wu7-ZJ19>wlU2vf+gDSrY*x$)
z{!L(S|DM^tr!=%Ti|&rTTaDya4Tdz5Tc^Y6rVTCwl*_BA4H!|RoHgKZE-0J<M-(Y%
z4LF($3TMDEMM_zk1H<tBXHjthfs&G^%;37frF>pE&I<gZkk1HuFTwMAo)h>3q`H0M
zL{C$!f4xGn1bIEr3iUgrqiTJ`Ry&BF#@|cMPDvjNT)1cY&q<uT{#gc^!Nc02%N(#Q
zq&*yeVkRQcs4uNH7ObUti^ii_?StfCG%H{QVa%;tpbJicH=>8_*lt?-DNOpfyPrN@
z_ac!U_@QI_*@zb6rrq`Irq5*=l8%=(B~YH9%6TBOLWZTOAx%<1x-L076l(=N*6ew{
zJMOu_5-9z~u$XVfz`ESG^8?aHC6_P|eo!Ky0(-$)2+Xx(8<Lp57i@%q!<l+E){M~F
z3EOQRVC-Z!{OXNIvF&WAS^qIl_keC|-oa_8T1w!OppwYCNtq#|^LK@Tybsd8=s$%D
z>fOBaQ_Dxfp_rHKbD@R>WC$zTJrxFd$EQG1t|3f05mi@5BvcXLainA?{pGptBBtB_
znebD4j-X=x)S){6Z8FAnGbPzu?k|A=8S<z9ht%~&2*r9AWtvAi|18l$VQcCp$Un!2
zaw_gW2&9h1^S?xxFj?o+3g04NJp)ok`b+v6Vacne^?`)?{iQAW7LJ&xR)l{|C{G|d
mhL5bj{Qc=Wq1)<(7%JaTudZUQqo~yRZ;SqWt2!fJ^#28NtnUK=

literal 0
HcmV?d00001

diff --git a/tests/data/test-symtab/kernel-4.19/single_variable.c b/tests/data/test-symtab/kernel-4.19/single_variable.c
new file mode 120000
index 000000000000..196fb4c0ba58
--- /dev/null
+++ b/tests/data/test-symtab/kernel-4.19/single_variable.c
@@ -0,0 +1 @@
+../kernel/single_variable.c
\ No newline at end of file
diff --git a/tests/data/test-symtab/kernel-4.19/single_variable.ko b/tests/data/test-symtab/kernel-4.19/single_variable.ko
new file mode 100644
index 0000000000000000000000000000000000000000..cc81fd99fd05de6074faea51ae0b1349d398e9df
GIT binary patch
literal 2872
zcmeHJ&1=+95T9+T)>=Q>`UM5qgNJ(PV>cCPE0u+|mO@!SpcgMOyGh%$*`#c;Wd%X;
zB%<h1@Z!OPH^Kiv1aAco{uiEl@LXr!$L94VE5)1O&}3$Q^Y!NKdy_s{TD?6`DuJRB
z+=5I~D8S5#Os;XU2It@`45EA<9}A!5`WkHQ{e1Oqe|T>1SNL-L(?NIS*~GWwXyZBY
zwHid7F6u;I1><kOyA!ul-*a}|cHlNbU)nr>$B(>Z9wN8p&nH2&5&D_WuHSCC8$oma
zI;+mIsy$t%umOCEdLY|T$*gqLxc`3t*bXc&EX<WB7yU-yM&(&%v+9&Rb4^HPyJA=H
zZyL|`(cJ#nyw&GaTKvT3LoI%*ig3Dhd9r|RTAnP>F0W>`U`W$4(SnniqDdAEYg#5+
za4J(Y$$}A06C&NqLD)Yq4VMroY3o!gn3TBEFUY`~62Bt#amnv<oF;&v%aT7pUQ{>a
z_WXW6N4%u%=a|g%0r{xDKeE(k#K*MXOU<8M?mxumB&AT5zDS%fB87u7cvvg;SQ8uv
zc?U<IoQDXk)mQGVEjcTT4vj{;dI(a3(XN0K#i{Sy$R(zv+sUI=>NcGG^d(!`?q^Fk
zgG8<f!no;%&Uz<mra>G@)tKU9CSMe-9_p92@0f-I6H7wQ%Ol@Z5;ej$q7G|xg3y}^
zJYXCW-xQYm-4s~c58Ym4T8o$jKOPCth6d4k49s&=7kIufh_>UX=`+1A)=1F18Mj(~
zgn4--{K8EosoUJvSNvD<1V+)V%ucFEQxgoXO0HP%d`N&HFN*i1U7h=W@pEXPGipwZ
z$1*^jUlniaOETVE|5F)YP8L(Ip&#``T&IU}K@|y}MoxYzUiEbcF<O&ZpYAP@y01bL
zzDg$U;!_m=o{UIU!Fq31UjbVvP(1zLqtg$mnEvMPw}XB~@f@TaMq@R?G<tzD)iCSl
z0TD#Cbb5^nVQQayHkq*A1B9UB6@QDcl6BX5Zb66Rl`q8_EppRc8DEpeGl<gvmuf%N
g?@!-@qEc_<F!|22WiNBBqy6IL`TLlKa><PU4WG*2eE<Le

literal 0
HcmV?d00001

diff --git a/tests/data/test-symtab/kernel-4.19/single_variable_gpl.c b/tests/data/test-symtab/kernel-4.19/single_variable_gpl.c
new file mode 120000
index 000000000000..dc09c0d27870
--- /dev/null
+++ b/tests/data/test-symtab/kernel-4.19/single_variable_gpl.c
@@ -0,0 +1 @@
+../kernel/single_variable_gpl.c
\ No newline at end of file
diff --git a/tests/data/test-symtab/kernel-4.19/single_variable_gpl.ko b/tests/data/test-symtab/kernel-4.19/single_variable_gpl.ko
new file mode 100644
index 0000000000000000000000000000000000000000..e5742650e2154d97dd7ba617576c998abaca7ead
GIT binary patch
literal 2896
zcmeHJ&1=+95P#cLt>0FwC|(xnLBT$E(<-)5U1)15)U_h@rXjn@Zez1A%O+bYh<fng
zMG^Gqp+^PrqzCb)e}OlT{sn>u&pPumFL_O3Dc%H!CNuM!k2mx7y-6R;EnXQYm6)Ou
zyTnpWp^Po<O68gqYwQp^$Ob_kfyaPnzP`--tFJ${9-Vvt_SUrzt<j%%UOo9fu@h`E
zC%hIt(O(B0>2u8F+g<Mly~uT}HM{584d1oeT^}rt+jWH#PBUS5-09F0Z7^-}S#x_G
zyX`fnCwO&|SIzM<CLDmLs1LMlhl*C(PTYT=e{2WlXJ)3#r)S-UXN&SAH+gl;ym%&-
z%4Wr^z~4BW?d`d3*}U<G6KTlPnh!PPtt!It*5%1yc+>J^FzxbcW`hlBS}GcBcdBTT
z!S-lcDjIBWs%VnI_Gwxy;+-61KYnEmCjlsFb*c)^60Y<U6nL5NQ=}guepBLj`(rvz
z{5J5Sbt7rd@8=7^OWJ-Oqdf0`59|9wOWl|Fker9;sxp28`LOmos+shK{LvRl`Llw-
z!#jb)o6NF+_hJ0eOax%LzHohc&RUqYa6FpTO^_OlW`$WIh+OMJVRB5o8s6<hcEc*3
z!f20rTiK%(FQn?2A2e;>YV}1k@&ZAsn%Hr(@WyRBnrLbNi0{yF#^cg}%MyUEC<&Y5
zZPDkAzUMn*p2N6=;%^L(-1Ug@p6lCbgZNQNHAn;>l#t;Dd!iLE?%0vdWKQ1`tAS{`
zT<?uHLhx<|osKIYw_FXrdShW^H&^wl|60a-fVY*7Rg$Mh(rALjLUL{h=fI2N9kQ$Y
zKx%sK2$%wnXEZxW?vY)cUs7`uZI0rz^*^M5?8M3HHSoipkn7Z?f+_^=2abL!UiEbY
zFsw1V{$s$9)IE;1*jLHOU3iM(H_!-lK4!^Vt*-z90><P2LppsWCF`I4{cs)?#Y+%#
zWE!g>rqNT7agFTyc_0qLwRCz83Sw%X6B{M0CqOKyc*S1=tYqD_o-1f`yz<4^OpDUA
tMDaB;9sqO%9<`t9_s8!<(NfQ7sC)yvPT5+A!B`Z(LFey{9t?6e{x{2j?8yKC

literal 0
HcmV?d00001

diff --git a/tests/data/test-symtab/kernel-5.4/Makefile b/tests/data/test-symtab/kernel-5.4/Makefile
new file mode 120000
index 000000000000..c7e68bddd8d2
--- /dev/null
+++ b/tests/data/test-symtab/kernel-5.4/Makefile
@@ -0,0 +1 @@
+../kernel/Makefile
\ No newline at end of file
diff --git a/tests/data/test-symtab/kernel-5.4/empty.c b/tests/data/test-symtab/kernel-5.4/empty.c
new file mode 120000
index 000000000000..ac07d5e725cc
--- /dev/null
+++ b/tests/data/test-symtab/kernel-5.4/empty.c
@@ -0,0 +1 @@
+../kernel/empty.c
\ No newline at end of file
diff --git a/tests/data/test-symtab/kernel-5.4/empty.ko b/tests/data/test-symtab/kernel-5.4/empty.ko
new file mode 100644
index 0000000000000000000000000000000000000000..6a0769eb96c66ed6e58ef026f7b9d22e00cc3c75
GIT binary patch
literal 2336
zcmeHIQEL-H5T5H*t7yT3piq>E3i^;Gy`;fbB8P1)ff^Obqa2sqwmF*Hgx*CP5c=pp
z5MTWZJ_x>uKgCD!&0nB1d%I@4cZ$?UU3xdO-^@3=oy^P~ZS6dma~#mifqO99X%yh|
zshRFe)rUnm5A&#B#K*;FyVHf~hi3imrH}XDzq@kv>%!}!?%>+^G}>fLeC@<ya)^6c
z5g&6Ar7aL)!dpBUXH$6250Y>%?zdK1gEdwv((weZJlY9}|0(}g2DUdg)+@I*c`pt{
zWsP}krRv?eoof}Z=GE}8j<x+~Zokc)TiRLFJ9DKxS9Vp=<jSrq!;L02%q~y|7MBYP
zMGz4e&in#DTfnKW=i%FT+pvg$W870SuPa>d&naS4;WSHVE#(3pqI8V>Tvm7&W!bsU
z5MMI>UtgzI4g{8rBG!i>=yuvqx?4eeGf+dwTRn!-MDiNPAU&D9Is{^r@t_HLOp2Ec
z;xxeElOYFS=`_j09?I+>mjkU4k?n~I>rLWeRE;BG63WLS%lKgibjeukj(|mB7J_si
z#$taY`ka{uv0j=2>yMIz3#7?FID@Nc7WVg5p8i%WV*siWokktcSIP|yC`sP~b1~eM
z@gwD=e^1S^`Riz)8nY|-r6yQXerF8KN1ZVH{+fT&@Fmsew-rX;H*>u;H->KWAEAvf
zoBv61e%7bnE2%|{3U#B+F9JEkK3^bASS>ft-YQ^chDc5GwS0l7)=k$=;X=99_NBd@
ud-8m&_-_<}=D-Df^yJZXL35()s4uEe>^is4r#Vu_f2v01E3})-=Klb7<B#nC

literal 0
HcmV?d00001

diff --git a/tests/data/test-symtab/kernel-5.4/one_of_each.c b/tests/data/test-symtab/kernel-5.4/one_of_each.c
new file mode 120000
index 000000000000..27c87e5758cb
--- /dev/null
+++ b/tests/data/test-symtab/kernel-5.4/one_of_each.c
@@ -0,0 +1 @@
+../kernel/one_of_each.c
\ No newline at end of file
diff --git a/tests/data/test-symtab/kernel-5.4/one_of_each.ko b/tests/data/test-symtab/kernel-5.4/one_of_each.ko
new file mode 100644
index 0000000000000000000000000000000000000000..2a6e422fc2ce5e43bd9535854fc56da9a52e6391
GIT binary patch
literal 3720
zcmeHJO=uKZ5U#O<KXHFd6j4`p2X+q;%_EsaQ86;0(G?`S{^TGY+Mb!tq{&QonCS@-
z6$KGIdi3H!FCM&j_ar%a5ijCVJS+&Fc43dARj;eM-@NYe2d_S6x~jhVdtLQ@`ugnY
z6YEMPkWqr8kV%39Y#h$`s%EP&3L`Lt{5JeM_&+%}4|iW*x^nivXJaqJ<$wNvs9xRq
zu;I#j)ajV`I30w&Rg`J0t*s@@S3LdI<){<;4R^)s1YWJ>yUpbm<j@RR=!Nw-h{Aq5
zL80L<`(dLy1EJUUXQI$|qXpOZ>Wi@AciLVvsL$+I(`tIM46qL8N$*iqANv)|NVe{~
z{JjEc1x_A2cDOut+^+>*SU#jGYI3}Ca8JUOD-)Fo{7vEB`ZBXLY!TxOSh<c~*?A8~
z@9H9)c71+0Ks!A@9N3r#5piJC0Ngli3=0P~8&bwP@IxjToC7}^QpP&)QzkG+dwK}|
z{a`D$B2Y5sDKp-~xX2^yc!cp?EDL^4<8*=~V+YfVNQ?3YTA#1;EyPP$&!g-=%Jjab
z`T9R)`!TlL&h(9@L%GVmXM3@e_&cdU*k8NShY+Xv$Pm8^h>sZks`9J<uJK`gZ;+3?
zVH5FDToF<s6!mzA&k-0-Gl+c`ak7^o_Kz4BS?CHf6i0@{0pp-n?Wm#Z;JWj3r_RjJ
zx~Go2d_7e5_n~xGRHpkNxh*PF;D%A`y9fFrQ`DvI<#z1V-1M?aFCo&!ox!>Re)>xL
zgm0?1{N?J@bF%XG=?3_vaR>OaK3)vEE|#>{@}U*gy_TE4a3ZF;q$x<L|Gycs^oej<
z-Lmdw9TNVlVZViWv6uBICWMzoKx)UAePYJnZP?rKQ<X}(3o7X((naBDJ*Z~bQ?*{u
zYK#XBP#Q|Ug;eaX#-KWW%S+dYC8h;W8iH|yu-OG#uR*vFfogcM2RcP72$!O;?kltU
zs@6s8dem<FA*RyF@ndbg8+-Mo^bNj=`31c<;GgPijw%a(m>}{}cYzf$Mg9#okn>XP
zZU4ilpuKLNfLGZeJ1G)C&IMM(EHZ@I^S{9cpUYoGJDL+wbKK^m@e+eSBPBaIF(vMK
z#ESCYWk0cFF;~C8P*IfsZ9#sjk)6MWSW*7RobYd^LhSm*1N?PR)a?~Vrndhz_P6`A
zj}2u%N*KHUHwXAv*}rNvwkm;`-a|??vGd=s0k*g2{{V5qCRi^-{O1H<D*i(0-V)w4
zeg1{{$=7;C9p(l5PcWtPi}tGBfBKFoOhua#$1Q7emWX$2vHzd^f%HU2$sV@<M+K2k
A+W-In

literal 0
HcmV?d00001

diff --git a/tests/data/test-symtab/kernel-5.4/single_function.c b/tests/data/test-symtab/kernel-5.4/single_function.c
new file mode 120000
index 000000000000..a0055533bd8e
--- /dev/null
+++ b/tests/data/test-symtab/kernel-5.4/single_function.c
@@ -0,0 +1 @@
+../kernel/single_function.c
\ No newline at end of file
diff --git a/tests/data/test-symtab/kernel-5.4/single_function.ko b/tests/data/test-symtab/kernel-5.4/single_function.ko
new file mode 100644
index 0000000000000000000000000000000000000000..84d1d1504406899f366f5d813169b2d968ddc38a
GIT binary patch
literal 2944
zcmeHJ%}>-&5TB(eehb8}#Ki1DjUM(11^ghvGyx<e1ml4i<Du!c1q$63w_U_&A{Q@4
zk)tQi_!oHcMB<r?iT)WLJnOu6X8U+s43V4hWp`)hHy>}_^v!f%PR`uxs#Jhi1@1y2
zF$%EWQ}9;CTF?upp&R)#_%-l5H9H5luBK0~bbapGc-8l)*8BMT=Fg?Y!>G$*;?GPF
zwboFUYkNDV{Ohl+#Ld+A?D<yYra>Hm=dbvYmyAK=H2kq7h!#S>(60K;hO-d3V<Tc%
z3=dXioGuP_K&tO`z;OTF|J4dijgOC3uTA*%z=^7NgeeAV=I!e_S2YLB0sIVMZ|u+P
zk5w{CJ5%;v`K>pyuIvnHWL;Z^%TDcF1}M$1s0}!xNCj)a(Lzu-1CA+D!5VP95ERaU
z6N;3xa*lMvk6*gtJOULZPtKr5ILl|r(IWg3$$dm0W_VH03xwN9%l3Ve>E#sMz22f&
zfuf%Mr2dGsPpOYZTYW;jAD<V`UZ&3pC-=7gOBSc7e>($haEV6j2^Va8Zg%>?+@w7{
zVbf4GM|Pod!kWXoAfB)05ZF<i`u0uGqsz$4$+Jf4)a}mkEp=&gFI~DABsQkk3VjG;
z*9nWso{OtaGjQstRhBH*IYs7kOZ<?6gUGW&nq`1=kvVx5u@JRHy%mIBE$~2OQ2uTb
zslS$jX!@bkKAUn%41%wr1Y}`@Xg&tvIjI9#yfBEC<H+@edNff_(Atd~4L`!T*-rST
ztR<=AE~^>;6@L-EWOo)fHV<Rv1TGV0!u4WVAXDb=kpbU-w%7efQ6cYYanp0l7v!Ml
z#rK-jFo}%Bbh~vj&?kVtzlC-ZlT=+>l+XZyCy`1!?ifDTeZ<Q4e?xxUw<Navk7Z{M
z{|{tvgAIx5=U*a!`Tt2>J0$4m)#VkmlQDIFPL$^h$F`Uu`WmUMiSBRd0NLyLze8MN
zTxT)^_Mc^dDEl*gk2v$H>Bc_ym%jSlk#RQ3pU-~^G5J4LfBy2lP`1?$4U?~^SC^iv
Sd~cNbf1~@ir8*<8`~L>+9pJA3

literal 0
HcmV?d00001

diff --git a/tests/data/test-symtab/kernel-5.4/single_function_gpl.c b/tests/data/test-symtab/kernel-5.4/single_function_gpl.c
new file mode 120000
index 000000000000..3f9b47f8514e
--- /dev/null
+++ b/tests/data/test-symtab/kernel-5.4/single_function_gpl.c
@@ -0,0 +1 @@
+../kernel/single_function_gpl.c
\ No newline at end of file
diff --git a/tests/data/test-symtab/kernel-5.4/single_function_gpl.ko b/tests/data/test-symtab/kernel-5.4/single_function_gpl.ko
new file mode 100644
index 0000000000000000000000000000000000000000..d518defe2da8e7381fb9340ac40a4f7718d86151
GIT binary patch
literal 2968
zcmeHJ&1=+95T9-8_h&^!(ZeDh^w39}wxWfVg|?PLDTwssA!L(u8=Ab7O}4ZkDtMJ5
z2%_N0ix>X@doJj~iy%nxUhpRV1v-<wY2LnuQtC~7v^z7u`FQhY-^|;`Q?qybYBk_h
zgF8@4i~_tmQu585ZNgbN1O3RK$A1g|r|0Hj`-=5wJN;~rznpmYz40~v`EhIGFzWJ{
z_%R#G?kdW(Ha82(pTX*K(#ZnfS?EeH3lr(Imm~0l<v{vr1Ed=VjWm?)DCo6V2|BUc
z4!y>h7!{+#b&A)=K@Ui)_Bmjv|8D<s1*Rt^#_QK7gI4Iu`fXv0;X(V>je@J&L-r8<
zjbLx=&uq_1S(Tkhy;ptPt-LFDhqUspt-`5OcP|UH=GW8~9Mz<fwcuDOXq*MdHK}AR
zI8h23XTeELDp;B${qXCzskn?lP0N!r7*;sTmz3kA!mlcMK+y*|Ue@!X!abx_`>y4B
znu5LSHHtMT>v=(`H;@i!^=YcDJ|TV%zb~G>OrI)Tx$o$|<#EdT?_^LhxI~=z!UM;d
zpPRWiKjq9!I%=reV?8KMSbMYw;@N7CfFqMEaBf1?4itSUU5hif<y4Px(r2B$^x0yV
zI+$uV3Lr{6H`<x<N?dU}q1!^Owy1nuTY|X`gdZY+mngCWQDlL1kvTe-Xv?l>b;HOX
z41EweRJ>Ip3sy4_ogi|{Gt$FUN*D;Ar4*>pp<GBn_-^Jx9y1E%QX;)T=*JVS6s^4^
zjsuCY^WE_E985FUTjGrWic&vN*OoWA2-hqKTvL<@*NtU?OqIW{47e}Y-t-?w1>NDY
z0}9KB%E8Qw@4HgN6f%UFc2AUnIT_6Tn`lQEQGI<-2@NUm6jHL|PU3UjN33f9XUb2%
za|D_B(<QC)f2;iQN$6RozeFuz^t(!5TS_p`YswkgRrzzGJa;&DlNm+Vky1^}{hKDB
z?9KdNAWj(9S(yR*&oQ7V`!jumIP<#c`abt3U-Rxzoaf4)&wm;*`u%Et|MXr|ZS_SB
Zm2K4P%gmMDlPdoo>i)ggosl>F{{R}I@?8J`

literal 0
HcmV?d00001

diff --git a/tests/data/test-symtab/kernel-5.4/single_variable.c b/tests/data/test-symtab/kernel-5.4/single_variable.c
new file mode 120000
index 000000000000..196fb4c0ba58
--- /dev/null
+++ b/tests/data/test-symtab/kernel-5.4/single_variable.c
@@ -0,0 +1 @@
+../kernel/single_variable.c
\ No newline at end of file
diff --git a/tests/data/test-symtab/kernel-5.4/single_variable.ko b/tests/data/test-symtab/kernel-5.4/single_variable.ko
new file mode 100644
index 0000000000000000000000000000000000000000..d62235ec6d9eb2b0d04146396960589b7d40e7f1
GIT binary patch
literal 2944
zcmeHJOHUL*5UyoV@hwEfL}T_~q8_$^0gRAfCgBwl0`WjRPG)xo7@3{H-C2UsC`V&_
z-aL6muO9dTCZ4&Nc=zJX_ydeq^>i^!?_j{Ic6O$!zIt?3Pj~e`o}8WPD3yRm32s3y
zF$%D8B<CH;I&cO~LnrcQ@v-oko?C#g-ydBYdEGZZ^}hGXhid1~tCzlQ9Y&puiLco(
zZmpwC<6}m4-og56(ntf}UGo~DSB(PjgViARn`01r^<b<S#!FF<YuAEC-CGK4W5Z%d
z3=NbiPzOFm`IGJ-!<_3NzW;6ip%s`OA0I7Wn+U3*7netbEe0y~&FdLgw)^dV{0-vS
z*q_-S7tY#aXIpaDx4T;MR2JcMYTJhebW+=g1=``))E0DUQqEd%G#50^f@7MLvlblB
z1&y=dgeGMyo$XHe@yk^7B2d!u<P0hbXZf6RbQFGB$=!<HkvMgcY+O*(MOrlPJ*jVB
z&*zAjwDs&!ao!>A*4D>SQ*9yMqkS*#VGpEzm+Z3?f@k`qaKdOX4o2e=^~4u7aNUKu
zncEAK?#zU%nyNj#3#ATg5AA}uzuJS~#z`8uH`=08<dx?Adg@i(_V!J>w6T{iT@ITr
zrq{woA0;&}au-{1Ee(@ci96RoR-$~<a-G*?uAA^f8V(}M3aQKh=`wRvi&%<VqS^{0
zzY_W&B$VAvA`RA45RD-6c52hA#2|PLHGvj3j29CSzL$C+<3(Y-lEk$@=%tBj6Rm4W
zy&l9ESI&etWu=*VwG}<%zv3^V7oE<0$7W%ijKCE|neckCERZSk_mu(ff3`RMM^Qn0
z)$AM(l>_f%_BZ88<!|P{p&ZN(V9xKL9brWEv8fX3SKvvcWXBzg>zYT5ax&+Ch8PV#
zx0#gLGEdaQr^x@UGU`*5iCO<$<xl^g^s%i3&X;v&{i~>;n5Mr35qFHj9K`hT6a|{Y
z^mj}^IhpytM4T{QXJrQLKgWQg?9cQK;>_!&FZMY<`5Gn4Ft3z9*MAC8`k%_{$={#u
fg`%mpRWtc4qvbC%SGqTf{J*IEx0$<2&h-BcXZ_&m

literal 0
HcmV?d00001

diff --git a/tests/data/test-symtab/kernel-5.4/single_variable_gpl.c b/tests/data/test-symtab/kernel-5.4/single_variable_gpl.c
new file mode 120000
index 000000000000..dc09c0d27870
--- /dev/null
+++ b/tests/data/test-symtab/kernel-5.4/single_variable_gpl.c
@@ -0,0 +1 @@
+../kernel/single_variable_gpl.c
\ No newline at end of file
diff --git a/tests/data/test-symtab/kernel-5.4/single_variable_gpl.ko b/tests/data/test-symtab/kernel-5.4/single_variable_gpl.ko
new file mode 100644
index 0000000000000000000000000000000000000000..cdbd6a7d80b7cdc3c8b103104ab94833b3967c0f
GIT binary patch
literal 2968
zcmeHJ&1=*^6o1>aT0d(=#iGJ09u(}*Zd=hpCD5*=PzoZw=pkg2bQ_vY%5Ju_ASih7
zB2^GU!INJ71N7{{qn^a82SEf69zE%MlX+%#HkQS!4x7C9e(z)6yv)4W+ttOZeWeoc
zD8UuTB}M_B?9O>xvNjxoA?Qc`2tF1*^GnNc@5RW4Z>NR^PCp(#8NZwQbmPH~ue(qu
zW8!NujN6+i(|D7S-|t{^J!z(a?`*iu(5*#*Q(uq357vX&Z_PmLHiDT}7}rtJVX+Z3
z8*V-HW~RiXm>e%tz&?D6)<L>nM$tUI`2Dx}$0{&CJ3C!IHy6}GH!fcm6)`?qxpY3`
z%9XLo82%>kZ1iTfWAUs%>}X5w_HI{8p2{MePHp$FfKF=nus}Qfn%aUvP0Cpd_T+-b
zS+G}=a@K-<xu9_t?AN4>r8C_R-+!8l69|;FJUN4Lg|j@O9Oo2%M#;m9-jq0Xk8B)Q
z)I(Y{@0Qee*YhdjC9R&vRGimHhqe0HYO1>uAC&!+OgZ9P<PU4#k$c()Wly#=*d7WR
zmuMuu@W64Fmlm!qSDl49M>W;TR0m2OwldiPac`|mfD<Qa;9M-6fugUqwi>BhbBfzI
z>C@&;`gApHIhblY3Lr{6H*!|mv6qHPtVC}5*^09_mG7tqa2*IA&~Ol0c1UFwNLQJo
zb%}c17PWR5`J<r^LPFVHCDLFs1<?#5H(w)NOu2-C@LFmC6*`Pp5)i(dx*%glVZ4^a
zULf@4iCPP-y`<3yVvH?k!`pMTmAc-Vp7mezbROu`<~unHWoHD=D$0cG#<D=B$lq56
zd@k7D^q)or?Nzg*+)@s_kJ;aptIFTZ|BiAnJA*mDjdp|))yFH9(3k=bASFBQWW28H
zh*3`F{Pz)~!RI-XGF#?}2KW^DKUYS0C3FmP{V{3@qyJU<_^1TVmv!d)Q&bfBOAvLo
zu`rthDY}i6<}l~CO+eY3`9DIOFs`#Q1NL8HKvDK*`V4XAb<^!0=O<rdi89PX<<ILs
ph$#Jk<$Ch>r~9I4s`sj?e3sGjmzgWwCq@2W)c$*!yGqXV{{^x{?kE5N

literal 0
HcmV?d00001

diff --git a/tests/data/test-symtab/kernel-5.6/Makefile b/tests/data/test-symtab/kernel-5.6/Makefile
new file mode 120000
index 000000000000..c7e68bddd8d2
--- /dev/null
+++ b/tests/data/test-symtab/kernel-5.6/Makefile
@@ -0,0 +1 @@
+../kernel/Makefile
\ No newline at end of file
diff --git a/tests/data/test-symtab/kernel-5.6/empty.c b/tests/data/test-symtab/kernel-5.6/empty.c
new file mode 120000
index 000000000000..ac07d5e725cc
--- /dev/null
+++ b/tests/data/test-symtab/kernel-5.6/empty.c
@@ -0,0 +1 @@
+../kernel/empty.c
\ No newline at end of file
diff --git a/tests/data/test-symtab/kernel-5.6/empty.ko b/tests/data/test-symtab/kernel-5.6/empty.ko
new file mode 100644
index 0000000000000000000000000000000000000000..265d7eaa15cfc9d27f37e0420589f9c4882eca34
GIT binary patch
literal 2336
zcmeHI&1w`u5U$C@-xzSggWzRB1wCxLnKg?ptPCV^S%~XT*rN=yJDp_6PEW|pY61a|
zzJeZo1D`+yPa^mX;z^G_fmZc&yPcj<Bp$WNOjUnXUv;Ops^;0+`rSFl0lgf!1GAk*
z0Y06W>AqBbScG#hkNO3CTzq<iAsl}E+&K&HdN*qCUvD&Depq<(_0dVR$(Z<BkHvH!
z_p~Cu%SDuRL4*nK@?<wZfG2z}3Af^LcbT=>QmZZ<kMSy^9fSCv@^59Jx3bcyUt8s)
zI285U%wtOp@7DD~t9wnaiGMAu?LTw-ZSLI4&Z6F#tK_+|tI8%<c3l;2G^t^BfjY3f
zTsTz*5pm)4FYq%ZocekmzJ0e1iwHQzJvH;P!u5VZ5!(u<SwgE;2)KvRG4gX!;X{;F
z=RQWfX8gatPOTgWEJ-6ah9DRY`VWU|L4P$+L&#e`g3?6tZXSX3Wb#@Nh&1Ox8;Y0|
zFW-){0E15_9Drp9Ngj?+=6i+Q)*2DnmYA~9G@e9_I07c2Vl1+p@8>|5jKyXOEDG}w
zr28ZmJE<6RW*)>wSq5yJCJ7fvlYwvsH?lk&@2EWet+<2%s7iDibv$1wS2Um`eGkmV
za8t#Pl#~8FHOJ<6&_Fe2SMZ@GSW<px49rKJF#G<Rf7S3M)#mpVM&CDcy)rk3Zu9S>
zjWC=4R&jpTr`{{6MT`n{qs=b^1;ajHAWT@ZFwfp9;9!PGP4l&Uim292*Fot*h1K?@
wy`6jVe4zL*6oKZzd3^Nb(RD#{qUxwGs!;4Yx6h|JQpMj;qw+c0&1Lg{06qDUC;$Ke

literal 0
HcmV?d00001

diff --git a/tests/data/test-symtab/kernel-5.6/one_of_each.c b/tests/data/test-symtab/kernel-5.6/one_of_each.c
new file mode 120000
index 000000000000..27c87e5758cb
--- /dev/null
+++ b/tests/data/test-symtab/kernel-5.6/one_of_each.c
@@ -0,0 +1 @@
+../kernel/one_of_each.c
\ No newline at end of file
diff --git a/tests/data/test-symtab/kernel-5.6/one_of_each.ko b/tests/data/test-symtab/kernel-5.6/one_of_each.ko
new file mode 100644
index 0000000000000000000000000000000000000000..72bb8e1cc2acb7c472f5d3ba502dbec783587da0
GIT binary patch
literal 4040
zcmeHJJ8TqZ5FWD*F(wb}M34tjj)Ve&yt2>ON>DC32^@lij1X}}vDv#@+l%jZt-C#A
zl$WI_5><qhB56{DNTG<3Qbj@(Dcnc2DUeG#BpO6VX8xVIo&9%DKx#&}H#6Tn_kZrU
z3uiywH8KK1Bk&1inxFum?ak!65$iAs6EKSM>-aeMoL*dloeS6R|NiUM9~SOk`s>a&
zH}8Hq^W%-(XfrwS?`#<LH&G|r-ri1yXZQ~`*W+#yw7lhh)J(!S0w_S<%6ePD8-6$R
z8||P3N<CY_dJwgGHHiF9P>Z9$i<iB?Z?3{d(CzpuVY4>p&bu?S6@XpXE4@qE80pv0
zSv3A!em(-Z5jcJF<cZ3WQ$Zv2qsm8a)t#BDet0yMD%I)gH2!9BZ#|t`F14*VLsqS0
zR<-R-dzyB2ksPz@%W&H1MRH)Q2qNOZo+0@75L_KX%EN(|l$MDOyqqaYa^MxEr6TR;
zQF!p!HoS(wi0V^1KFYZ06CC(4<8QGp_yvR0>5<YK%r7D@s~Z}7aooOVe3IjZ{bmF@
zjq~)kQOAJZL(`5?#(>^KQ+gE?=kbs^@W$W+?Tm7bae8k}7Y#mIn3>D$U(?Pg|HL?r
zlcrk+-(AS_FX9uBt%o`f?Y6<k2P;%Y<R0RaxZ-36Oj;}yu)mD7_}@eu`3s5vUd|)B
z@P{Z&K(=lr52%a4?Zhp&37)sKc;@`lf_LVW$5&5vE{D=RR6U-9<R+@lf)~X};LYbU
zQ`WU!(oOt^SGW%|Thtq3z0!F?WHHX%or9`nnFk(2vJdQ5--8RgG<(i!WzN}#WX)IA
zeM|JfV@P(kC#zx4!zu0Kr$sw%`t9tSBvmD!tRdpG{@z!BtP{fZ9+mY-IDKCU$w^1}
zdjcZg$1>q>DqLa-morJ3O+SYfp!?acaNW-Vh3kGQ3fKJ{RJiWv9fgD2Goy{%%p3Am
zk!ZcUD^cHV^uu;*Dr|vkp!8ePO@hq?+-}hJX}xfkoN7%d<_)8j9?*UaqvaUfmY?`w
zO0>ghEsmOjt7q43^w7H*cRE3YrA%@B*q!PnesfK~#Q&Gy#?Tk>p?T6&XGPBuK{8Kl
z1{a00_!c|JeIx#M{0TJBS!SR7UvWTo5~hHhdu)aU6bQ5X-(rU+)vu!;^+a6LDqpbI
z7<?5u`N?{eyq_ahR{v*?6F*i9<97}XW%VDG)Tc4B>o*Xi`c-^1{mBaTr%A?7c!I{V
z{zuv2m=0!N4Smg+Jx|jdFZ)zt?D_w0NPL~+>(<29B@y#qkkgph^|x$*{W&db0M}6>
zY<hsCg2XRcxWo(p1MMPf*MFX}KE+zEXwux__-oARTzeNEd;V#el$H8|HYL&vR&u*n
T`c5p1zsjE!w@sGp&yN2Oc(#eO

literal 0
HcmV?d00001

diff --git a/tests/data/test-symtab/kernel-5.6/single_function.c b/tests/data/test-symtab/kernel-5.6/single_function.c
new file mode 120000
index 000000000000..a0055533bd8e
--- /dev/null
+++ b/tests/data/test-symtab/kernel-5.6/single_function.c
@@ -0,0 +1 @@
+../kernel/single_function.c
\ No newline at end of file
diff --git a/tests/data/test-symtab/kernel-5.6/single_function.ko b/tests/data/test-symtab/kernel-5.6/single_function.ko
new file mode 100644
index 0000000000000000000000000000000000000000..28e40813c98ae20700d5be69a2d483d75be608bf
GIT binary patch
literal 3024
zcmeHJJ!lkB5Pp}9|G$ZfLO@Qih{ZjVjR_ivEF>`o;)zAjZrQurBy09|<LzFEplB`e
z2SKpXR<IKV`xG`7X)NqSEYgaFrOxcm+`fCakzhLUal13~&Ci>i_vXF3H#u{ut56U;
z3gV*3Bu0f;-<9!J!dl|6I3&7(KMIcl&s2F<R9=)euB?81-}mNo`R>=JKTkb->+b|z
z5))oCUeH_t8OPdMO8M=sEQO8Ot=V(Upc;E&AVkewa)VklCIYAKjzwND@4K0L*=^LF
zd9OM)EJx(vP!R%kaj<PteX4DS`|tj*R$yv;e6-j<;Z{5+C|;1J94wjV&!k+@954sq
zHw3-0HM2if$;j<Y?7jS5ZzNsW8PZ6)HV?;6?Hq<snqN^HVz(k?tRePfg2EYMuOelv
zA@*g0!Wm+}BBd;zBi-WrFI{mQfP#`IXHX)X<zwV%5q^^79-`M1Jgesk!fl{=^WIAI
zoppOicrW=gd7UtLYPOFLAoeJAvnYj6fcL^W@|n!^9pM~>@o!0-Y+YJ2X$P9Dhc#Ih
zwmn;(zBW5)Pfyr%)|$g@C?34#xi*N8U2{m-K^VLCh|r^B<i#j%#7@QTJl0#fAlgKG
zyS|xcyx>JPB;WL1;fGbn&#r@1Ty`3sQvq$;z;faq;lXu5TwNos9O6gV7^#esoPZ`@
z1$2Qqtbv>lnzGXL{94JY37J6YT_<CAB^I*b`VM|~8l}bA5Cm?uNZ^8a!CWY0&50e6
z#PhviF$}7%R6kl)BCxK8^|~8C++-%Wc}r33R2S8Z|BCMeFYI>Oeytc5ai?2I%5WVS
zmcZos*T{hTiS2d&QBdGs);sDBIp}%uzUO$8<geS^Cj<RN(dW0o4l$(a_(BO?Ch!1I
zwB!B4-*pu*%*ljD9jhd??J2-Gf2Iy$dj2oT|141^?8ov=U=YLqW9nEZLH}M|UIM#3
ze@>LoC5~+|L-YYqtcgCqr2}NI=l>XR#0E&ug#F755M_U+&jDv%HGQ<j`O#OeJ;r%L
s{x?W@5HP$;^!3MkCU2^Z9iV{mBPFf3o-5u%dH(%$1;1)}ri||Y8}a$_X8-^I

literal 0
HcmV?d00001

diff --git a/tests/data/test-symtab/kernel-5.6/single_function_gpl.c b/tests/data/test-symtab/kernel-5.6/single_function_gpl.c
new file mode 120000
index 000000000000..3f9b47f8514e
--- /dev/null
+++ b/tests/data/test-symtab/kernel-5.6/single_function_gpl.c
@@ -0,0 +1 @@
+../kernel/single_function_gpl.c
\ No newline at end of file
diff --git a/tests/data/test-symtab/kernel-5.6/single_function_gpl.ko b/tests/data/test-symtab/kernel-5.6/single_function_gpl.ko
new file mode 100644
index 0000000000000000000000000000000000000000..d5643b5230e62cb47685c0ad9bc9dec53caff0aa
GIT binary patch
literal 3048
zcmeHJPixdr5T7;G*4BTm^&ehV@t~GI+SHa>s4ld%7D`d1Ab1GbB;AH)U&<z1S`hRs
zQUp(eH?MvH5l_XhAc9|@-t^|J&Sc+g-oA!XdK8CEX6E;1=FOYDd2e6LEj~C_Dgjdo
z?m@0G3b5Oq%au&5z&SVzT__LYW8pKuv<%;d`fitd<WS>L@2C4;UTqKVEnho<V_8gm
zErznWi8|5FPK)z9*j$erY2Z66P3fg!ES=hV1mFkjf%KDUkZwJgPC{9Wf=-i-piy^g
zp*KA)CdBAi83P{Uphx6I(;P9>f46_R0`oI7Q{|hpK{a$``L3|V=&(I`t0k4~5qkuG
zW7r#qGdr+SR$*sS?-lQME9=VrA+4-yi*V}H{bYgG{MxVuJ(`w_7M#o#O|qa@({j;*
zzFg5H3r=ZTOQdt83x4mJ16L6!X?b!6qY7vJigKJ)_;scCEB-9Q^Lk!ZxQD!G-mPqW
zf8E|G{G#$__Bj*i)a;}msP=1htEd!yB0hlMk<Vo2Ulq<#82^*S$-hf`rh)@a)MH<G
z;5f@m3y+uQoP}9OowfFO2TBL8eWwHBBi9}SN5*O3OhC~L6n!m88>w4$ijVj9xJ(YP
z*s32CAzcj<2N%<f0*GSIjoR0PQa9X2=vHyGO;p}XZH>NdiwGakaIPfb=QSKelI4Uv
zTOIOMmZ%=0CYz$#3?qLy^g(1$>+Tb2u$h8r1d&T?Z>@|jx?ICRc*`X~A1IV7F$mvH
zUC3fap<Iil7YKdPqMD$!7uV~7#Ms$vcpDEVsq3xjSsz)Z{-RSrZOe9?ijr=$k(R*q
zWLTh3<nJp3?lZPG{ikq%_PE(;&y|Cj7xx3ln^XR#-AiR)o;2qC6|^IaxK6)RLJt*q
z8adhVzTtH}L5y;;@zLqEQuMt@5a-XFwl2wL{vXH~39pzAVm}5Y3WU-BG@ZUH#ayqc
zr)XE?&x!JR#jz_aD87xHYGTe`F#%<7=KmIP!ba3MGxlF%KymhG{vL6bb<^!b&QHE(
w?J3S1<^NO-o<ZyaKIZqQ`=@BC-Qzfb)NLeZsCYLN`%kK?`C}F(f0_P&0ZSMC9{>OV

literal 0
HcmV?d00001

diff --git a/tests/data/test-symtab/kernel-5.6/single_variable.c b/tests/data/test-symtab/kernel-5.6/single_variable.c
new file mode 120000
index 000000000000..196fb4c0ba58
--- /dev/null
+++ b/tests/data/test-symtab/kernel-5.6/single_variable.c
@@ -0,0 +1 @@
+../kernel/single_variable.c
\ No newline at end of file
diff --git a/tests/data/test-symtab/kernel-5.6/single_variable.ko b/tests/data/test-symtab/kernel-5.6/single_variable.ko
new file mode 100644
index 0000000000000000000000000000000000000000..a3d71e6df73a0deebeac405a32900a21f2b000a8
GIT binary patch
literal 3024
zcmeHJ&1=+95P#cLt>3mP3W6-?p&s_xrnYFI5^QU&l!}L<w~*bWZR~DRH`!7_(37b6
zb@b*{(5ruehhBRr2qJh8@mT2}pfkx#^7^us#j8FxnVH|b-@JK~_puKqXRdaYN`hNS
zTo$>-s1WOWa@|T)OB@l0MK|cj;4$Etnw=A$H?OaKIb($1<F2hIpWZ*d@@R8oH~5m6
z@S5?1)+*T8KBgjjd#lS~Gxl72#cBFZweAVwddptmMq?sy8s1ps2McvCcdvNOhO^+;
z#)jpH92_b`q%L^c<)01Gp`s7fA?<&+f2{&j<Kv^{{t2(@J3;x9H05B$ym&6v%I1JM
z0KXyF8=ZCgWA%(3R<@C>`Xbdxc4a#pcWtp50(WY$8A93oirWx9ij}K|*qa-QW{7=?
zm8*u>pBsv1hy#k1s<^ki#m`^5;{*UDB~Q+vLO9#UiD(gin(SVZw-Ovrk+hv8X@hJx
z?%l*+tlM+K`-sotU7{50zXo`(Qa6iI*Z{mw`Hp<HeMtKEB<C-N<cQx0M+_U|LOal8
zBXng=*!JA)^v$_RdwRmAv(_BmhT_3%Uf2flv1<+qI|yUX9w|h}$V*Y&jGd}oJk~Q`
z5bfZ-*Vu^}FZz)U$+zHosE0MDZqK)ZTI`1bnfc|BRv>+2IdP3}<GLWOej{Gdh#%$7
zC}ou71TvWw$VJw$267>2$!g25yA|IRGJ(>&PR8D9EM(KGJ2>w&N~YNm1a7rR;0N)8
z`A|sLi5-!|tNX!H7}PwePFhwY=v@mN4KIMW$w+YXR-)LcEvXs*m3|6XxZ7#@Wic$$
z&Sprea2*+zptR$=)PeUC_t*KO;J`Jm@2LAk;PuaZ-JT@Ap8rE4=qHLkz6JddL#ei}
zl+ZN-4}!#gyk2--Hvq$&OnB7xjErq-3NX%}r9+sW{~O|;C&_|&Y~KL|G5kNKwskT%
zU-s$qUj|1zJ}1iO67wxqNInILW9Z{sIzavP{9gi&*Z}!iFn^W-lFVoM8gSOtt}i+q
zAGvz%G0rRE-zMiF!0;~Ndh++jd#2q`KX!ow+EyyEx1KBBL+$webOpc7n5m-ke*+C0
B@l5~#

literal 0
HcmV?d00001

diff --git a/tests/data/test-symtab/kernel-5.6/single_variable_gpl.c b/tests/data/test-symtab/kernel-5.6/single_variable_gpl.c
new file mode 120000
index 000000000000..dc09c0d27870
--- /dev/null
+++ b/tests/data/test-symtab/kernel-5.6/single_variable_gpl.c
@@ -0,0 +1 @@
+../kernel/single_variable_gpl.c
\ No newline at end of file
diff --git a/tests/data/test-symtab/kernel-5.6/single_variable_gpl.ko b/tests/data/test-symtab/kernel-5.6/single_variable_gpl.ko
new file mode 100644
index 0000000000000000000000000000000000000000..a2142a69133f2cdc77c9894874cf31b3b9274f1d
GIT binary patch
literal 3048
zcmeHJ&1=+95Pxf0Tfc4VCn7B3K@WXxQ(J1Kve4GGP!>cAf`^bz(rsuqDVuC*K~V2f
z1W$rD!IL+!7mwl};7#x!sNg{_;!S6gnccT<V_UrHu*uB)X6C(lllSKB!}-Nq2MPtj
zR1h~sTVqs+oxZkQO2v{mDNcwUkWay5z*DX)iMKy4zN(amw#y^EUq`k+%I(KD-W&v5
zIwrgp{jj+KI@0@$wcg&wTGU89*IKt5zFiGGtF{&h;d*Oc=*BZ5wCmnX?1we5bhxa0
zjk;a)otX(aDaXc(FyaAt^48IsY!4xCnmt1PoBzcMlxJtBi&y5ns&9wI>(Z2C!{*f0
zOe&hA<|zEe;cV>BZPyAKf7sDRy4$-$jr3IJ;dpAh$q;x_yU7sB;aALt=vTD1Xoy2?
zMUf0~Skc;|A&#^aMKZ)uMax7y(>>z*FWqnffP#`IXD~)M>*pzOj_^yQ4-mhf;@CYh
zI!D|Ao;UAiYVWSwbHdM1JhOMH&|Uw}fDb5jD^Us`QoKLyvlz;eUqBvIzAyK>pX86e
zNbE0i8k(#}u5^TDEmaooEX`XBa~AblbD{&q#%o^dfVkzF<H8D~#Iq)IXTZ@{<D`+;
zRV%-}x9nlOi^pbtw-J&RKek{o&A<~u<k*3=+zg$>k3v%Uw#aINZ!E9+ZMaT|526DR
z?{LJ27(_1PG$-Kc>VU7Xg!PcMuqmreKX8YASI88~?mn4#8;Ot&FR*d#*~;*uYilqN
z+;XwN59Ei-k&v#P*diS>@Wa(8bUdjpT2^E5cA|RS3t{YZHn@$4<HUAW)vW(o#`A?;
zfVO38oDxZwTSz8wJsFlD<i)$>z~_wp_4sKp;2zgc+5-yU{m=2bK2Py_{*Nd??=<@S
zCGbNGxk}$Cq1yx=1CD;YZ+KmI0mGb3cvN~q%2^czne%7v5vJ$=lH%Zs=^&0{Fa!ZH
z{GX=MCsH_Hw(09nz>pWuiE_W<_!0}mw}9gu`urswAb&moXMiI%N_J)(Utxea$1{Hc
zILoT*);{OQSiSZ*&QprNN5<oTorZ_&$=@IEpS-DddcgqHrzNMUa5v<~Ptn!<Ivu6`
H(&K*vG{gO5

literal 0
HcmV?d00001

diff --git a/tests/data/test-symtab/kernel/Makefile b/tests/data/test-symtab/kernel/Makefile
new file mode 100644
index 000000000000..223db4550e50
--- /dev/null
+++ b/tests/data/test-symtab/kernel/Makefile
@@ -0,0 +1,19 @@
+obj-m += empty.o
+obj-m += single_function.o
+obj-m += single_function_gpl.o
+obj-m += single_variable.o
+obj-m += single_variable_gpl.o
+obj-m += one_of_each.o
+
+KDIR := /tmp/some/kernel/source/dir
+
+PWD := $(shell pwd)
+default:
+	make -C $(KDIR) tinyconfig
+	pushd $(KDIR); ./scripts/config -e 64BIT -e MODULES; $(MAKE) olddefconfig; popd
+	$(MAKE) -C $(KDIR)
+	$(MAKE) -C $(KDIR) M=$(PWD) modules
+	rm -rf *.mod.c *.o .*.cmd .*.d *.mod modules.order Module.symvers .tmp_versions
+
+clean:
+	rm *.ko
diff --git a/tests/data/test-symtab/kernel/empty.c b/tests/data/test-symtab/kernel/empty.c
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/tests/data/test-symtab/kernel/one_of_each.c b/tests/data/test-symtab/kernel/one_of_each.c
new file mode 100644
index 000000000000..9d461fbd0053
--- /dev/null
+++ b/tests/data/test-symtab/kernel/one_of_each.c
@@ -0,0 +1,16 @@
+#include <linux/module.h>
+
+void exported_function(void) {}
+EXPORT_SYMBOL(exported_function);
+
+void exported_function_gpl(void) {}
+EXPORT_SYMBOL_GPL(exported_function_gpl);
+
+int exported_variable = 1;
+EXPORT_SYMBOL(exported_variable);
+
+int exported_variable_gpl = 1;
+EXPORT_SYMBOL_GPL(exported_variable_gpl);
+
+void local_function(void) {}
+int local_variable = 2;
diff --git a/tests/data/test-symtab/kernel/single_function.c b/tests/data/test-symtab/kernel/single_function.c
new file mode 100644
index 000000000000..5160865f64ea
--- /dev/null
+++ b/tests/data/test-symtab/kernel/single_function.c
@@ -0,0 +1,7 @@
+#include <linux/module.h>
+
+void exported_function(void) {}
+EXPORT_SYMBOL(exported_function);
+
+void local_function(void) {}
+int local_variable = 2;
diff --git a/tests/data/test-symtab/kernel/single_function_gpl.c b/tests/data/test-symtab/kernel/single_function_gpl.c
new file mode 100644
index 000000000000..fb5503a0c111
--- /dev/null
+++ b/tests/data/test-symtab/kernel/single_function_gpl.c
@@ -0,0 +1,7 @@
+#include <linux/module.h>
+
+void exported_function_gpl(void) {}
+EXPORT_SYMBOL_GPL(exported_function_gpl);
+
+void local_function(void) {}
+int local_variable = 2;
diff --git a/tests/data/test-symtab/kernel/single_variable.c b/tests/data/test-symtab/kernel/single_variable.c
new file mode 100644
index 000000000000..20178f257406
--- /dev/null
+++ b/tests/data/test-symtab/kernel/single_variable.c
@@ -0,0 +1,7 @@
+#include <linux/module.h>
+
+int exported_variable = 1;
+EXPORT_SYMBOL(exported_variable);
+
+void local_function(void) {}
+int local_variable = 2;
diff --git a/tests/data/test-symtab/kernel/single_variable_gpl.c b/tests/data/test-symtab/kernel/single_variable_gpl.c
new file mode 100644
index 000000000000..552e9b500fc1
--- /dev/null
+++ b/tests/data/test-symtab/kernel/single_variable_gpl.c
@@ -0,0 +1,7 @@
+#include <linux/module.h>
+
+int exported_variable_gpl = 1;
+EXPORT_SYMBOL_GPL(exported_variable_gpl);
+
+void local_function(void) {}
+int local_variable = 2;
diff --git a/tests/test-symtab.cc b/tests/test-symtab.cc
index 62f8998af5d0..20e3071c7259 100644
--- a/tests/test-symtab.cc
+++ b/tests/test-symtab.cc
@@ -52,8 +52,9 @@ read_corpus(const std::string path, corpus_sptr& result)
 
   environment_sptr	    env(new environment);
   const std::vector<char**> debug_info_root_paths;
-  read_context_sptr	    ctxt =
-      create_read_context(absolute_path, debug_info_root_paths, env.get());
+  read_context_sptr	    ctxt = create_read_context(
+      absolute_path, debug_info_root_paths, env.get(),
+      /* load_all_type = */ true, /* linux_kernel_mode = */ true);
 
   dwarf_reader::status status = dwarf_reader::STATUS_UNKNOWN;
   result = read_corpus_from_elf(*ctxt, status);
@@ -105,7 +106,7 @@ assert_symbol_count(const std::string& path,
   const dwarf_reader::status status = read_corpus(path, corpus_ptr);
   REQUIRE(corpus_ptr);
 
-  REQUIRE(status == dwarf_reader::STATUS_OK);
+  REQUIRE((status & dwarf_reader::STATUS_OK));
   const corpus& corpus = *corpus_ptr;
 
   if (function_symbols != N)
@@ -203,3 +204,90 @@ TEST_CASE("Symtab::SimpleSymtabs", "[symtab, basic]")
     const corpus_sptr& corpus = assert_symbol_count(binary, 0, 0, 1, 1);
   }
 }
+
+static const char* kernel_versions[] = { "4.14", "4.19", "5.4", "5.6" };
+static const size_t nr_kernel_versions =
+    sizeof(kernel_versions) / sizeof(kernel_versions[0]);
+
+TEST_CASE("Symtab::SimpleKernelSymtabs", "[symtab, basic, kernel, ksymtab]")
+{
+  for (size_t i = 0; i < nr_kernel_versions; ++i)
+    {
+      const std::string base_path =
+	  "kernel-" + std::string(kernel_versions[i]) + "/";
+
+      GIVEN("The binaries in " + base_path)
+      {
+
+	GIVEN("a kernel module with no exported symbols")
+	{
+	  // TODO: should pass, but does currently not as empty tables are
+	  // treated
+	  //       like the error case, but this is an edge case anyway.
+	  // assert_symbol_count(base_path + "empty.so");
+	}
+
+	GIVEN("a kernel module with a single exported function")
+	{
+	  const std::string	 binary = base_path + "single_function.ko";
+	  const corpus_sptr&	 corpus = assert_symbol_count(binary, 1, 0);
+	  const elf_symbol_sptr& symbol =
+	      corpus->lookup_function_symbol("exported_function");
+	  REQUIRE(symbol);
+	  CHECK(!corpus->lookup_variable_symbol("exported_function"));
+	  CHECK(symbol == corpus->lookup_function_symbol(*symbol));
+	  CHECK(symbol != corpus->lookup_variable_symbol(*symbol));
+	}
+
+	GIVEN("a kernel module with a single GPL exported function")
+	{
+	  const std::string	 binary = base_path + "single_function_gpl.ko";
+	  const corpus_sptr&	 corpus = assert_symbol_count(binary, 1, 0);
+	  const elf_symbol_sptr& symbol =
+	      corpus->lookup_function_symbol("exported_function_gpl");
+	  REQUIRE(symbol);
+	  CHECK(!corpus->lookup_variable_symbol("exported_function_gpl"));
+	  CHECK(symbol == corpus->lookup_function_symbol(*symbol));
+	  CHECK(symbol != corpus->lookup_variable_symbol(*symbol));
+	}
+
+	GIVEN("a binary with a single exported variable")
+	{
+	  const std::string	 binary = base_path + "single_variable.ko";
+	  const corpus_sptr&	 corpus = assert_symbol_count(binary, 0, 1);
+	  const elf_symbol_sptr& symbol =
+	      corpus->lookup_variable_symbol("exported_variable");
+	  REQUIRE(symbol);
+	  CHECK(!corpus->lookup_function_symbol("exported_variable"));
+	  CHECK(symbol == corpus->lookup_variable_symbol(*symbol));
+	  CHECK(symbol != corpus->lookup_function_symbol(*symbol));
+	}
+
+	GIVEN("a binary with a single GPL exported variable")
+	{
+	  const std::string	 binary = base_path + "single_variable_gpl.ko";
+	  const corpus_sptr&	 corpus = assert_symbol_count(binary, 0, 1);
+	  const elf_symbol_sptr& symbol =
+	      corpus->lookup_variable_symbol("exported_variable_gpl");
+	  REQUIRE(symbol);
+	  CHECK(!corpus->lookup_function_symbol("exported_variable_gpl"));
+	  CHECK(symbol == corpus->lookup_variable_symbol(*symbol));
+	  CHECK(symbol != corpus->lookup_function_symbol(*symbol));
+	}
+
+	GIVEN("a binary with one function and one variable (GPL) exported")
+	{
+	  const std::string  binary = base_path + "one_of_each.ko";
+	  const corpus_sptr& corpus = assert_symbol_count(binary, 2, 2);
+	  CHECK(corpus->lookup_function_symbol("exported_function"));
+	  CHECK(!corpus->lookup_variable_symbol("exported_function"));
+	  CHECK(corpus->lookup_function_symbol("exported_function_gpl"));
+	  CHECK(!corpus->lookup_variable_symbol("exported_function_gpl"));
+	  CHECK(corpus->lookup_variable_symbol("exported_variable"));
+	  CHECK(!corpus->lookup_function_symbol("exported_variable"));
+	  CHECK(corpus->lookup_variable_symbol("exported_variable_gpl"));
+	  CHECK(!corpus->lookup_function_symbol("exported_variable_gpl"));
+	}
+      }
+    }
+}
-- 
2.26.2.761.g0e0b3e54be-goog


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/2] tests: Add symtab test suite
  2020-05-18 11:50 [PATCH 1/2] tests: Add symtab test suite Matthias Maennich
  2020-05-18 11:50 ` [PATCH 2/2] tests: Add kernel " Matthias Maennich
@ 2020-05-26 14:00 ` Dodji Seketeli
  2020-05-26 15:36   ` Dodji Seketeli
  2020-05-27  9:06 ` Dodji Seketeli
  2 siblings, 1 reply; 6+ messages in thread
From: Dodji Seketeli @ 2020-05-26 14:00 UTC (permalink / raw)
  To: Matthias Maennich; +Cc: libabigail, gprocida, kernel-team

Hello,

Matthias Maennich <maennich@google.com> a écrit:

[...]

> +++ b/tests/test-symtab.cc

> +TEST_CASE("Symtab::Empty", "[symtab, basic]")
> +{
> +  const std::string	     binary = "basic/empty.so";

You see, the main criteria I care about in testing is actually the
capacity for someone who is running the test to debug it (when it fails)
without having to know about the details about a particular testing
framework.  I know other people favor "fancy test outputs" and other
niceties.  I don't really care about those :-) What I care the most
about is to be able to pratically debug and fix stuff because I think
that's what matters ultimately, fixing stuff to make it work.

That means, I should be able to run the test under the debugger, set a
breakpoint in the source code of the test that I am reading and go from
there.

So for instance, in this example, I can't do that.  I can't set a
breakpoint at the line where the variable "binary" is defined, without
knowing about the function that is automatically generated by the macro
TEST_CASE("blah") etc.  To me, that's a real loss of functionality
compared to the other libabigail tests.  I was a bit reluctant to accept
the use of libCatch, because of that.  But I think there is a middle
ground we can strike here.

How about we decide that each test case should be its own function? I.e,
having:

void
test_case1()
{
  //blah.
}

and then

TEST_CASE("Symtab::Empty", "[symtab, basic]")
{
  test_case1();
}


That way, when the "Symtab::Empty" test fails, I can do:

$ gdb --args runtestsymtab
> break test_case1
> run

And then break inside test_case1 and work from there.

Or something along those lines.  This might seem like a minor point to
you today, but when we are gone and someone else has (or maybe us 10
years from now when we forgot everything about today) to fix issues
raised by this test failing, being able to single step from the failing
test will prove invaluable.  So I really care about this.

What do you think?  I am probably missing something.  Maybe you have a better idea?

Cheers,

-- 
		Dodji

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/2] tests: Add symtab test suite
  2020-05-26 14:00 ` [PATCH 1/2] tests: Add " Dodji Seketeli
@ 2020-05-26 15:36   ` Dodji Seketeli
  0 siblings, 0 replies; 6+ messages in thread
From: Dodji Seketeli @ 2020-05-26 15:36 UTC (permalink / raw)
  To: Matthias Maennich; +Cc: kernel-team, libabigail, gprocida

Dodji Seketeli <dodji@seketeli.org> a écrit:

[...]

> So for instance, in this example, I can't do that.  I can't set a
> breakpoint at the line where the variable "binary" is defined, without
> knowing about the function that is automatically generated by the macro
> TEST_CASE("blah") etc.

Err, I was wrong here. The reason why I couldn't do it was that the test
wasn't being compiled with debug info because I screwed up my
environment, of course.

So, my bad.  I take what I have said back.  Sorry :-(

I'll go ahead with the review in a subsequent message then.

Thanks!

Cheers,

-- 
		Dodji

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/2] tests: Add symtab test suite
  2020-05-18 11:50 [PATCH 1/2] tests: Add symtab test suite Matthias Maennich
  2020-05-18 11:50 ` [PATCH 2/2] tests: Add kernel " Matthias Maennich
  2020-05-26 14:00 ` [PATCH 1/2] tests: Add " Dodji Seketeli
@ 2020-05-27  9:06 ` Dodji Seketeli
  2 siblings, 0 replies; 6+ messages in thread
From: Dodji Seketeli @ 2020-05-27  9:06 UTC (permalink / raw)
  To: Matthias Maennich; +Cc: libabigail, gprocida, kernel-team

Matthias Maennich <maennich@google.com> a écrit:

[...]

>  tests/data/test-symtab/basic/Makefile         |  19 ++

This file is missing from the ChangeLog part of the commit log.  So I
have added it there.

[...]

> 	* tests/Makefile.am: add new test runtestsymtab
> 	* tests/data/Makefile.am: add new test data for runtestsymtab
> 	* tests/data/test-symtab/basic/empty.c: New test case source.
> 	* tests/data/test-symtab/basic/link_against_me.c: Likewise.
> 	* tests/data/test-symtab/basic/no_debug_info.c: Likewise.
> 	* tests/data/test-symtab/basic/one_function_one_variable.c: Likewise.
> 	* tests/data/test-symtab/basic/one_function_one_variable_undefined.c: Likewise.
> 	* tests/data/test-symtab/basic/single_function.c: Likewise.
> 	* tests/data/test-symtab/basic/single_undefined_function.c: Likewise.
> 	* tests/data/test-symtab/basic/single_undefined_variable.c: Likewise.
> 	* tests/data/test-symtab/basic/single_variable.c: Likewise.
> 	* tests/data/test-symtab/basic/empty.so: New test data.
> 	* tests/data/test-symtab/basic/link_against_me.so: Likewise.
> 	* tests/data/test-symtab/basic/no_debug_info.so: Likewise.
> 	* tests/data/test-symtab/basic/one_function_one_variable.so: Likewise.
> 	* tests/data/test-symtab/basic/one_function_one_variable_undefined.so: Likewise.
> 	* tests/data/test-symtab/basic/single_function.so: Likewise.
> 	* tests/data/test-symtab/basic/single_undefined_function.so: Likewise.
> 	* tests/data/test-symtab/basic/single_undefined_variable.so: Likewise.
> 	* tests/data/test-symtab/basic/single_variable.so: Likewise.
> 	* tests/test-symtab.cc: New test driver.
>
> Signed-off-by: Matthias Maennich <maennich@google.com>
  Acked-by: Dodji Seketeli <dodji@redhat.com>

Applied to master with the change above, thanks!

Cheers,

-- 
		Dodji

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 2/2] tests: Add kernel symtab test suite
  2020-05-18 11:50 ` [PATCH 2/2] tests: Add kernel " Matthias Maennich
@ 2020-05-27  9:15   ` Dodji Seketeli
  0 siblings, 0 replies; 6+ messages in thread
From: Dodji Seketeli @ 2020-05-27  9:15 UTC (permalink / raw)
  To: Matthias Maennich; +Cc: libabigail, gprocida, kernel-team

Matthias Maennich <maennich@google.com> a écrit:

[...]

> +++ b/tests/data/Makefile.am

[...]

> +test-symtab/kernel-5.3/Makefile \
> +test-symtab/kernel-5.3/empty.c \
> +test-symtab/kernel-5.3/empty.ko \
> +test-symtab/kernel-5.3/one_of_each.c \
> +test-symtab/kernel-5.3/one_of_each.ko \
> +test-symtab/kernel-5.3/single_function.c \
> +test-symtab/kernel-5.3/single_function.ko \
> +test-symtab/kernel-5.3/single_function_gpl.c \
> +test-symtab/kernel-5.3/single_function_gpl.ko \
> +test-symtab/kernel-5.3/single_variable.c \
> +test-symtab/kernel-5.3/single_variable.ko \
> +test-symtab/kernel-5.3/single_variable_gpl.c \
> +test-symtab/kernel-5.3/single_variable_gpl.ko \

These files are not present in the source distribution so listing them
here makes 'make distcheck' to fail, obviously.  So I removed them from
here.

[...]

> 	* tests/data/Makefile.am: add new test data for runtestsymtab
> 	* tests/data/test-symtab/kernel-4.14/Makefile: New test case makefile.
> 	* tests/data/test-symtab/kernel-4.14/empty.c: Likewise.
> 	* tests/data/test-symtab/kernel-4.14/one_of_each.c: Likewise.
> 	* tests/data/test-symtab/kernel-4.14/single_function.c: Likewise.
> 	* tests/data/test-symtab/kernel-4.14/single_function_gpl.c: Likewise.
> 	* tests/data/test-symtab/kernel-4.14/single_variable.c: Likewise.
> 	* tests/data/test-symtab/kernel-4.14/single_variable_gpl.c: Likewise.
> 	* tests/data/test-symtab/kernel-4.14/empty.ko: New test data.
> 	* tests/data/test-symtab/kernel-4.14/one_of_each.ko: Likewise.
> 	* tests/data/test-symtab/kernel-4.14/single_function.ko: Likewise.
> 	* tests/data/test-symtab/kernel-4.14/single_function_gpl.ko: Likewise.
> 	* tests/data/test-symtab/kernel-4.14/single_variable.ko: Likewise.
> 	* tests/data/test-symtab/kernel-4.14/single_variable_gpl.ko: Likewise.
> 	* tests/data/test-symtab/kernel-4.19/Makefile: New test case makefile.
> 	* tests/data/test-symtab/kernel-4.19/empty.c: Likewise.
> 	* tests/data/test-symtab/kernel-4.19/one_of_each.c: Likewise.
> 	* tests/data/test-symtab/kernel-4.19/single_function.c: Likewise.
> 	* tests/data/test-symtab/kernel-4.19/single_function_gpl.c: Likewise.
> 	* tests/data/test-symtab/kernel-4.19/single_variable.c: Likewise.
> 	* tests/data/test-symtab/kernel-4.19/single_variable_gpl.c: Likewise.
> 	* tests/data/test-symtab/kernel-4.19/empty.ko: New test data.
> 	* tests/data/test-symtab/kernel-4.19/one_of_each.ko: Likewise.
> 	* tests/data/test-symtab/kernel-4.19/single_function.ko: Likewise.
> 	* tests/data/test-symtab/kernel-4.19/single_function_gpl.ko: Likewise.
> 	* tests/data/test-symtab/kernel-4.19/single_variable.ko: Likewise.
> 	* tests/data/test-symtab/kernel-4.19/single_variable_gpl.ko: Likewise.
> 	* tests/data/test-symtab/kernel-5.4/Makefile: New test case makefile.
> 	* tests/data/test-symtab/kernel-5.4/empty.c: Likewise.
> 	* tests/data/test-symtab/kernel-5.4/one_of_each.c: Likewise.
> 	* tests/data/test-symtab/kernel-5.4/single_function.c: Likewise.
> 	* tests/data/test-symtab/kernel-5.4/single_function_gpl.c: Likewise.
> 	* tests/data/test-symtab/kernel-5.4/single_variable.c: Likewise.
> 	* tests/data/test-symtab/kernel-5.4/single_variable_gpl.c: Likewise.
> 	* tests/data/test-symtab/kernel-5.4/empty.ko: New test data.
> 	* tests/data/test-symtab/kernel-5.4/one_of_each.ko: Likewise.
> 	* tests/data/test-symtab/kernel-5.4/single_function.ko: Likewise.
> 	* tests/data/test-symtab/kernel-5.4/single_function_gpl.ko: Likewise.
> 	* tests/data/test-symtab/kernel-5.4/single_variable.ko: Likewise.
> 	* tests/data/test-symtab/kernel-5.4/single_variable_gpl.ko: Likewise.
> 	* tests/data/test-symtab/kernel-5.6/Makefile: New test case makefile.
> 	* tests/data/test-symtab/kernel-5.6/empty.c: Likewise.
> 	* tests/data/test-symtab/kernel-5.6/one_of_each.c: Likewise.
> 	* tests/data/test-symtab/kernel-5.6/single_function.c: Likewise.
> 	* tests/data/test-symtab/kernel-5.6/single_function_gpl.c: Likewise.
> 	* tests/data/test-symtab/kernel-5.6/single_variable.c: Likewise.
> 	* tests/data/test-symtab/kernel-5.6/single_variable_gpl.c: Likewise.
> 	* tests/data/test-symtab/kernel-5.6/empty.ko: New test data.
> 	* tests/data/test-symtab/kernel-5.6/one_of_each.ko: Likewise.
> 	* tests/data/test-symtab/kernel-5.6/single_function.ko: Likewise.
> 	* tests/data/test-symtab/kernel-5.6/single_function_gpl.ko: Likewise.
> 	* tests/data/test-symtab/kernel-5.6/single_variable.ko: Likewise.
> 	* tests/data/test-symtab/kernel-5.6/single_variable_gpl.ko: Likewise.
> 	* tests/data/test-symtab/kernel/Makefile: New test case source file.
> 	* tests/data/test-symtab/kernel/empty.c: Likewise.
> 	* tests/data/test-symtab/kernel/one_of_each.c: Likewise.
> 	* tests/data/test-symtab/kernel/single_function.c: Likewise.
> 	* tests/data/test-symtab/kernel/single_function_gpl.c: Likewise.
> 	* tests/data/test-symtab/kernel/single_variable.c: Likewise.
> 	* tests/data/test-symtab/kernel/single_variable_gpl.c: Likewise.
> 	* tests/test-symtab.cc: New test case to test kernel symtabs.
>
> Signed-off-by: Matthias Maennich <maennich@google.com>
  Acked-by: Dodji Seketeli <dodji@redhat.com>

Applied to master, thanks!

Cheers, 

-- 
		Dodji

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2020-05-27  9:15 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-05-18 11:50 [PATCH 1/2] tests: Add symtab test suite Matthias Maennich
2020-05-18 11:50 ` [PATCH 2/2] tests: Add kernel " Matthias Maennich
2020-05-27  9:15   ` Dodji Seketeli
2020-05-26 14:00 ` [PATCH 1/2] tests: Add " Dodji Seketeli
2020-05-26 15:36   ` Dodji Seketeli
2020-05-27  9:06 ` Dodji Seketeli

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).