From patchwork Mon May 18 11:50:13 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Matthias_M=C3=A4nnich?= X-Patchwork-Id: 39287 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 50CFE388A82C; Mon, 18 May 2020 11:50:31 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 50CFE388A82C DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1589802631; bh=KYerti3auvrfGU/IbVaukcHkVwPVeVAurOCGr6MAtW4=; h=Date:Subject:To:List-Id:List-Unsubscribe:List-Archive:List-Help: List-Subscribe:From:Reply-To:Cc:From; b=il5S/lUZ1xa1pJSIh0mgu9YzDsgg2aTo/8B9a03pGZdsxiTjQqe8JWrH6qI/0WHMh NBXdbB0RKSqm1zWO6wYNccdNNsBCaruFvmbQFZKIS/qUWO2uhefcrmTc+ux1w5QKy0 5J17zITmFFVGiNyPAEbXNWn9PCXAQE56+jHRCh3I= X-Original-To: libabigail@sourceware.org Delivered-To: libabigail@sourceware.org Received: from mail-yb1-xb4a.google.com (mail-yb1-xb4a.google.com [IPv6:2607:f8b0:4864:20::b4a]) by sourceware.org (Postfix) with ESMTPS id F08AC388A823 for ; Mon, 18 May 2020 11:50:24 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org F08AC388A823 Received: by mail-yb1-xb4a.google.com with SMTP id 5so11174040ybe.17 for ; Mon, 18 May 2020 04:50:24 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:message-id:mime-version:subject:from:to:cc; bh=KYerti3auvrfGU/IbVaukcHkVwPVeVAurOCGr6MAtW4=; b=n7yFIkqEHDs9w4+83UICZnoMQh8d68YvUMSE28PJndMRLqtgJihSTtklv3mSlyCXOs aWd0Hh6SGQ95dTrcClZJyVeuek7bKngwt/xe2M8TaoVfDWP/eWEhNeqJdAw8cuq+6w3L DrDyJkIuQ6YiY/EyPRPDzGLou1hzrbEHblkt9m5NaZVzbyxJ4MG1uXIVvdZFwOdyeQy6 O3ep9KiZzGsdCTAQERcsjoMn92UHpuB+nJkmbkoSkSjdV++FHWsBQxH7CXx16ANWZS3w BDjDEaA3pkqZ1gkZHSWDnPDJQH+JIyb3HjNkB+Tm+4PNKSSPEXBEsjsk1a41tE70J+Bd 4P4w== X-Gm-Message-State: AOAM533YoAh4zMpkLKuLogZupm6EQU62R5tzwG+KvuvSzhb5NZYrFssC Tcf5D5s5kn2oJ6RAf32HeMnEJxmHBDrv/F8kfWstwAgccNvRJxSkD5ZFIsWWE4/ZvejULUAfm3f wY5Ini29kcABr42I/dMDq6NrEuyM22mqcW+iHvy5hZHHUrNC0dREEq8PvPvG6PLDj+NjDQyE= X-Google-Smtp-Source: ABdhPJyQQbGkEl9xrcwtfxJjLN26U+qGS2O2wmL2IS2ZsJNRhXqMzJKTlRyLsBcwBpBUcrmNN1a+OHt4jN5p8w== X-Received: by 2002:a05:6902:68b:: with SMTP id i11mr7650670ybt.398.1589802624254; Mon, 18 May 2020 04:50:24 -0700 (PDT) Date: Mon, 18 May 2020 13:50:13 +0200 Message-Id: <20200518115014.225405-1-maennich@google.com> Mime-Version: 1.0 X-Mailer: git-send-email 2.26.2.761.g0e0b3e54be-goog Subject: [PATCH 1/2] tests: Add symtab test suite To: libabigail@sourceware.org X-Spam-Status: No, score=-22.2 required=5.0 tests=BAYES_05, DKIMWL_WL_MED, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_LOTSOFHASH, KAM_SHORT, LIKELY_SPAM_BODY, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: libabigail@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Mailing list of the Libabigail project List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-Patchwork-Original-From: Matthias Maennich via Libabigail From: =?utf-8?q?Matthias_M=C3=A4nnich?= Reply-To: Matthias Maennich Cc: maennich@google.com, gprocida@google.com, kernel-team@android.com Errors-To: libabigail-bounces@sourceware.org Sender: "Libabigail" 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 --- 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 zcmeHOUuYaf7@y=Co7T3mw%TaLu2O9a-X@J{k_u@r&7W>1X=_bE!Lsb#ZSD^4PuSg~ zIejn?gqBk5lk`EM`rtpL_#(chRQg-r6DSFBL@<|nAdsY_Vs$`Ph@`}j=%i=2*yY=9SW~ss788L8 zRLHp8MhB}TAEoFLDD>>-x2Lf)70rJ(DEa~#_PdWv=k>sT{zx;u#(}APC@K8fNydIx zq~8_k2YOoCgLZNdD%`%`2M)j`LiYwz0qWb5?1ejCmfO460{G65AIDg4eDkuOpcp3m z?4&Xn z)Foq)M&9%wx_Lh(GGO+8Z$FznKOm5RV=(} zQ&R%#1M|5efxaN;AM#J7ygS8Sg5HaufL}Tq@I0qH29)KH97}_BDy)5Kssx1QY`If`GB`W2bScU(;2?MYGXW2((ufq`*(_#5`U-0>BY!>isy6z(mqQ@Bm_rLH~mY0tx|zfI>hapb$_9 zCy)5Kssx1QY@a0fm4v z+O3jbmHZ=;$Nk*hlE=N+9|7rQfrBb6gueI2aLY$&yzs+rv4#Y&(Svv6hp`56=w^BnSGnWKK)Y zoIWv1Ps^>9GkK>{u2kJ*wS2x%&L%y+vh51HH0#y$jOaP<_GBt$&ncvPiiNb5F6692 z(R6DiGVJke*K>QamS_3Zq!gzuw~&dBtd&pj&Ft_cY-y4pA=XLQD?zvAu|AsR8yf4V zS>7SKV{Bt)0Mz4vB&>U=6J3F-;4U0}V1wF&W{&|>X(gv}cDgrCXKVEqc;x!)ju z;VU0ag}*cHq7}DoQa&5O`3WhsY_*EK&*{QSnnx$fJy&g194e0vN2H>Er}U$;r#9w5T= zh4X;4sF3*G>&OS!k&BGuxn6Z$3`a2Qxg*}j!&D@ zBgZDkDMoW{i=QA9p9J%FsWZ)4HbM`+utYtFKEOotsFf?8t>?;BJzXsnv&lkM_*~v{ z^Fq(o%H$bP&k?#~7cCYF-5-ZOTlDl?#S^+`&(V_+6}p`dunUX=*a98u6u~Odr=EQ| z1~ou?fzZ>gD|DK>63qw6>~u9pnLdKK34lB7IElw-qxQC2{4-jU{h4Ahw#^yk>{ z$NmP2^G>w?I5(XkU+x#qTaA5CeiwI zTr~f=_JBX=RZ@lhMM~QC1{CX5N*m*W|GT6J`(r=smj1Ad`h)*~Dr|%PYpFn^t>e#a zh07zVi?M?Aus-A=_p2UryY^q}xY--~n8DePiq) fcd_DUo6`9S9hJ%mODD#7{{fk&yciBj^{D?}#aZM} 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<aEGRb60N$*~huZRj6*!?wbn266ZVkcJxDxm=if~T z`_lh@g&xGmg$9%trB z`#MxYje28G*oQklEq?XrmAfe$nT82XMwHyP2G0G8vgi7v@GRk*Xf|JvfUF~((*#`` zsU(?ZP39bDENiAvDq0oSF1wbctoz1Ctc+83W^xtRDUXi~iDq zU>^HEVV-LFVTV%Y@sHf5>gVRMj}uF^Mpp0qhKj1Ud`tKCEosWVPPyqt7?{uYea+lw zTh6lBebK#|+`Yhga<{&^+`eUjZI?un{o9`Xo$SZlcF8=sVxIYNk9p=|+>CuGny>5b3c) zs2B3PC#i6PIE#mtyuLT|mRqWmj)0DUj)0DUj)0DUj)0DUj)0DUj)0DUj==vf0tBeuD9U1E`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^|+nthke4lH+bK`z}?C2L1!{&7n8e<9^>}y zJ-yrfT(T$ClcK*n!VV(zIPEmXe)wQuVLmtF?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<^7`t}v+!bxa=Pz=WT`t@6mQ!@g^J==sCAY#Jk~!lWDOk{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$cDnn5F|Dnd~4SvSU@}TxS!*h-QA0AB2L51>sjO=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_&8J^i0nZ)OkM$4EXW|?t`VAh& zf!{T8|G~#PX_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 zcmeHOPiz%M7@yZirA45kAXSX45e*nwY6U4Kg;)BA#k56hiJC|@+rDl4lJ|$aw~Z|( z(%5Jqgvg0t;z7BH#)B8VT7n@aUc`%fF^z!)6E!taQ$6tfzTNNlx^KEQgoCG<^zAp_ z@B1?|znSgqVdi9Se_ul?rBKppzhW(OPlRN|kaW)HPLgkx{YcMkAX<*Co0H2|LGy?O7a5#R{J_iM~L_>1q zTt*rO3GHFkl!k3>XFs1BQXyVZfRFrO7$d`0FmEoVVtJhUz!Y?3YbfYN6FV zKar{W*mZigY|T*ZW2%jvgM)Ln^9PPS+xRVueT%^+N_U>?l&-lt-?DXveXocl|Bpid zJr`N*xaFK)a4!FLz`4Abc2ZZJYqx@plwd#-G*#!vTDJBq#m{u+$fPEB9d%|qALgoa z`bMzUIn((ZDL0Q*tJRwm^tjsCMSAKO+J*f2buw}kkGpQ91e#(PFbo(53GH zFkl!k3>XFs1BL;^fMLKeU>GnA7zPXjh5^HXVZbn87%&VN1`Gpt%mB{S;vDT-WRi2W z>qK7^{Q=Q&K6i`gICuM?=s2hQkY@k$R<*>?b~$t#os3={`bY*!aAQ_U!{KMqZ4(7-`57UoS*fAAJ_PNL~y+C zNVbmA9@B=I0YP1|wg2}Nl zdsHo5w{U}kJIWU>Ds(R+TXM(qr4cXhW`k0>;(C))YP3{1p7#SkYwz8?dvCH6-^0kc zUb*Z|yM8e!Pph%ASMc5JWT7xkAu-J*&!En=Sfbk>Ba`D~87ooWT(@tiYoOQd9qi%T zAw91Qb`2cvCYWx90CcmJk~`rQvwTN{Gpeu)%01M7=c1GF=F~5t2bUk`t&EOM!2X7boqJ$y`3WGnZANHsMt!l%1U} zQe-59va-v5-eXYN;W+H$`M@4819?qCFI0*iRs_|6_Z=evGso zRN*}x@z{4Dr^J!lrB`9;evjZ8lAIgyb5eoCcZ0ZxIZ$Wm(2sK?9{U(1z8m!Zw{kF* zA^LH@@ZD0|@8tjDW_F4doxk_U7LUii2&w&h)zhn&wRr5GkUHPcAw4ZVBMm}+7VA4# z_5O@&@z{?c@x6sK`uKSt;qiliWr?Rq-5>oHFZCK#c(23!;JXy}@N|FZkh2uq5{t)o zz$v+J2tRTO3v|eL2<5p)`}khKeMQ_$#5fQK9$%$c9zWvoT`^CmC%IVRbLoM2$O~kO z$E%F^wnY-_RM6V{gZK}~5Rb=x*edbx)8nCkNEP-$|E)}9u~vxZw&LXzQWz8WnhEib z*N~`!__(aCotUp92^XYee2J2CVLaf4*C+ZO3s)VxBW(~3iBVJO%Pu+o?LAR|{{HCk 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 zcmeHOZ)hCH6`#G;*-~VmWIJi4IIXuq4tB|{WJQUk7+I&kJ{!w%RS8mv+3elz-7Vbh ziM>5rN(vP{`_4U1- zd3$@SJ-1LOCCs4P_h;Vk&CHvbojKjiSLRPIBou{FQrU5aQl_74G9u&pgkXSV*f{Hf z=V#bMzHL`4Ya92p$Rx^yUo0bu)DQbRB#&3^{;Wg!v`<90yahRzK( zjj!_9{QlvI ztE;!(U;i`K1)Gokj5uDuhoLDNNL=p?l~z_hI&j5T#5@*2r^Vm zVf)xn1{g>b&lTYJ!YIEj0=3i6g@<93sx`-`d#39d1~X1BFB%2QwMur~v)tvy*-Fi^ zmd#wn;(75oMt;pSine1`?B^_It*zEv&ng(jhLiW~n$yypH(lFzCd#LAOXF-y)bElQ zm!!Wg^aB|VBt6MDr??*b1Y<+#R!A>~uAj9P(qo@fx)ah<>?luC837pq837pq837pq z837pq837rA|E~ySFMiyey^{R>Fk{&lUiT8sce5AY>b?LZy&)*rzv|mR{yijz?`AJ=W#9P2 zRQ8QKYF2qW`}4cr{or6xIOuNPEcP9kYvDI0ZOCGc;g#&g$=(Tg_$$=m^j<(Az*afMUYmdNC=_Eiq-SU)jHFXZI%j zaERE4;Pb0LHk1I{GRX+Y2*?P?2*?P?2*?P?2*?P?2*?P?2z(+UK<8KKyy`A$ zl{mk;Tgd+q@}Q9E9PEA}(|5%Og-qvR@%tqv%D;WLSws0*ak$k#gAVeDIMm9|C^L3R zX_!0U4D?;bkqvg>#;S;m7 zPilwetekB++Jru;A4!jnALg7kIx;!}e~&Rdjm-nb+q>=5bi}<0a+j~`RNOl|vSc}y zYv(~U-F$g+ZTyM!6JuJsq@{~zPtL;Atgk!yvRiX%je5G_T(F%&+QTE{^_WxT+fSYk zU#Jh~YmVpIx#5bPGjn#yv@1q^y$Vi-J*)23hYO}>`fOULb7tM<&Gp;d;QUT4GuZ2-6OEG$%wd?y>-27Fcv2?z_-F^>anXrcQD%^CS`5w+y;a-Fm zYft|T3|r$Ad7xb(B$a)tgC3@2Oi~%W9osWiMsNR?9_AptN&eJqX*h>(lmy;Viu6}X z=vO29&j~%PL);5vM}bj7alrC0Ex<>K>6a?#vD~eQe_THlw!MG91^T%9cWT!UeLuU{ zOByhd6zAtnuu<6daq^C@-@C1Ue<}3Q@$doY6L^Cs(yrfup5dyf`AqQmCvXY2eO{>0 zFa>VhM91ME=p!zCUxzyAXFwl!Z)X|warbtL9sGQ?gP!GGukJO9MR<+3uJ;&T)yU%o zpE}$FD%6ZprIs@*M!~DOb;E3|v3#w%TCw0NkA8G)>}b3Z-utl)({;^t!-5y>IxD(n z)iMf=YIPkTA;|zsug&yc3x{DWEKM)Y8}n!8@MhB7m(ENto}2}ba4U(FMxkCa%BEAm z`$^~>vSGn7=CcBvom*ml4ViJ`^iwm_r;Vo;7QQ&YY%EXDoSp}_?N^ul`%kfVoPwo= z7R1)_6I^q;=k2NXi&jkMYYkA(g{25+nK-BBS$fH7=(&bnDWvTJ^QE#`FEhQc?f{Zg z&t751!ze^xL=4+&G+&+`3X3qKAl?x6`!`)s1ugejH_Q#07N z(~6J*9r`9b?c0gcJ{?T_gg(M43j+EkJna{VQu)#PQ~67PMW65{p7uRN>H7`2iMAitM{GaE zpJ~EU&> zfJAm&YRRPkE@a@?q4H_}M)!;99x=6>aMTaa02bR%c-rUPgwxKLH2>Lp5T58OkQK(W zjIbTyl*YNx2JIpI4{4RPx6m|K^v;Smf<;C2Ry}rTQT-yV6c2)PHIN@ zM*<;+h-hv7Pth7XMg8dvy!puXn_{v5!K dHl(Xm5Ep}Tg@`-HSp2Kw+yeKP;S>?szW}b0nQj08 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 zcmeHOYit}>6~43UO`NX1cIq^Bnv_hzK`z4U#Ch0G;$;2Ih9+q+jtZ1$GP^tbP%I5W)8}R)iXsrA;*?%b`ZyTkJBprj1 zQ>}7MmbWe?co8yVURv_fk_UNH+C#QG+1hpFdX8`g0kY451ti;YxcHWpv*W6*y6r+c zVGjx3hl$7ayxRb`&&u+)^2<+T`yk;SE_WAQQM%4txFmk?-7B{rdEd*w_|>gFCx3sV z=h<%@&RylYustr;?>5Ykp&DTP!7XrZPmq0)@O$a z*DOsF+S$4DTF$5$g;L!zYIEl&%T?2u(=%nmNefQVvJ1MFFPVC|^t2%wX3ikR$Z1dM zwUW)lK8{5Xw z^!2x_j`WSO2~t)sQw>*(bbBo}O1g3xyGj|_dxBuL1sw73CdnVEQp|1FR`;s{Q zz=;nW?t3r8%%^3$c%AI<8zke*{RCalQknNNFrMiCOk}ci+bk8pdKf|vgdPYz5PBf= zKJ;!^fX>F#AsIRN&&A|2~r z-ml8RUaOK^XtPxT{ChGZ)N|QMrv36xKz@H~I`wzUmFfR&fqm@$a*z4;4WF5uJg)Xn z8JUu9s-wxFGIIkKZzQkZW#!z8x^)-j zYF011?Gl6Y^}%e_v}&cyV7ZjhGbP%JUe@Z16)I@ZGU`@+FsEC(9UYKxMz5EgmfOt_ zzES(#^ATQ)DD@${*R6O|;C*hz+XUYGRy-!~KDOf9-1oK>r?*)4`&PVNsDU`0f(gX$ zanH}R<`WnA{-2MMvR#bEed@oz^ZV~jJN9oW2_W!rq(}{_c z7jfcI(IeDAe3$4C#P8dj2_aFjdkZ}HI}sK5YPQm%0;7l@$LO(v^XH{aywlu3oEVQ& z5wZDsB_zJ&d%h1zeA$N&6RyyIIpGH`kHZXIO2Bie5YFY|+y>inSfoo4o1gDXga_6C zhlF!J__n}t13l&At?V}lZ_%a_n$XyyvJ=XvRae4zn}br@Cc8RKEFk6 zM{Vx^y9tlbDD8h=_7Se|iJlZnbmS1>YAa-G<6Gd5Z-LJf9&}#ldBTIv3w>pad_=Zp z)vZQ8PXoZlF(J*WXjwieRHySqxvEwuS2Ogj%~{o2UDF#2B3rFISvD*qmmEHFWH{J} z&kvO}y;jo~HG{s(iy~jsD~6V9R4R)^@n{-ZS}mq`H)Q#S08N{j9X~&?9RM$DROcxq4MA>Sm4)Kyk5@OoN*?otEVE)U2?pF0?b}9-SCJr#(6|^O5N} zZEk$x+%#p|dN#^FU=@6b>R%ka+8E9-E(aa5@}1=pNoUj|Y1L>@BUwbutXf90U^bGO zMyZ?|DCLB$74>>iBy)=g?a;FMy639if$IDn@P1~=BtS7 znM}=i3L2d*GZ3dn2fRZ67R2*;o)bqT+kXzS&zGy5M!P5B8>9}AM*=HtRu+84xEQKq)Fkt!N)uVa#yPqhC4WNNVVwa9JLdEE3hf8Zzo~JZunuy+yYl;sae_?j;P?MygnId^8+J()b-x2N|e8}%mikB}^()6GsRjERN2l;(U z@bcA^W2s6$?EHM_KcWcRp#GTG^>4xFvb^C{QW%rwZW8$KcM&H7KBO~G^BIwPL1yUB z7d$Y2LlHm5X;&qYm$lyDw_T+~KgRaIl>D@p9ANuy0LGMu4)I+G%@OY1Usi+w#{BJE zlKkJgOeX@qSK{6CnqC=lv~}5Wc^u&`iT;4^Cx0LC>>Y-4|LCwIzm0-qqEEHwib4Fg 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_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 zcmeHOU1%It6uz5jH0`#DZT+cM>u7 zHc`+(5fl;oBz+LnzF5TvUj)S$i=}Vk&zn9-6qPC}5mYKl*K_8cGnt*874^Xv@1=Xs z&pqF{_nv!a=7!$$}6OQQ-vS-?dPM~1_;TX^XmINJ?TER551>FN*2W9N(Zu48DaWds; zBIa87;WF(%bX@E?a@*h+x2-XMeyRS!yTjRSXTSaUEHs6~$Mr&-93M_dho4->=3w=B zD0Hc&L9eH@-PuKt^GdVF{?qi>`FgQI4CaA>!toTQS*i_&sz!GmScK))I!MRm_CXHJ5y9eKt(`BKt(`B zKt(`BKt(`BKtVYkJ z;9du=a+(ba&y9bI*ynmbL9+XDa2>dN0eNt@y0tX0Wf5)PCkpnjh4y!!MRNO@ z!lg%At=6SEs4n(SfSh@R`(^s=MfQo>MfQo>MfQo>MfQo>M zfQo>MfQo>MfQo>MfQo>MfQo>MfQo>MfQo>MfQo>MfQrDsjsV}2<$JMf*%RH9T}Sd| zl5ZrL@7r!BneWlwL^9vIy*bhT%av9GRom$jZFmPA{}thT?8*N4KJxy_$$Rwe`|P4)x%zHn#MqG= z8M|F_`pEFeF#Nj-zbRk7II%^1Mq8WP(495VWcye-n&3vt?>nJZB?)1 z2Jm0_>oZ&XH)gf|&HdNh0KM!KTK_%Sd$YT<2R81#u?OO)4T@}bPgcXO@s_?OwnLrC z{NBF~>M(%-Zc=B2@3_^P9o^YBN?;{Y?sCI5cztrmXkw0ft{ya9d%SA9w&#>Uw7k;X z`25(e+^(H^uBzuMM-EIvZTSmsY0hi7ji#S#x+fjCoD1-hxSukDp_Belso@5mQyi)} zMXTskEvIJs3w3}D1-2jfLuD(lLN-V0qUAes@Zk))RvO+Qr+pkZ(m=`kzg@3I`@UVj zDtbQJ^}T}kdAlB-B6?oi^;Zi$Ro^FuQ}wH(Jd}1nYXrX!+V${s>T!+aHL*6jpC514 z#5%$6iFSRzNP8|cF(CMUe!D#kJ|EXeUW1GTevaa;8ssVHsrDP=W)ZK285)roF`Bq8 z;^T}au8)fmuL*d7Qi>+{ZM4#exd*GnPk2?Pt>F8)M|7@BKj}{-*6~)-^ZT8h;Ts_n ziv#wDWg32&ly#|t9{XKR_+JR^JJvRFl~56E{KX})oruftk)L+5|d1@4BAXPU-qUseRN`G%A7j15A%TbJ#=Vd=D;NQ zfgB)Knq|LX&RK35vw_g32nQj|{Ra=_1fDxe(7{(dUmDqJs&4$s8#> zNc;+CGluc^k}2c)+?G7|i~%0cij3#;B-7K>KlTfc)=C~2>GMF*H{+LxVan%GG7o() zkF)?k^v!twPBT4+Mo^OD=P$ugXv1;An@JXaKM_rSNs{q<5m0eFfA^WPyDsjWVzX}Z6 z@c8w-Y|*>mIS$fFh&O=2{>hxxg7MoTjbzXk3sc;m%!dtBO_M`Ct^_`5dm%-KkP6}N zMIly__>Z71sYCNu2v6H6@{qLsybJzA!jD8q$t3aL5uVH=>&y. + +// Author: Matthias Maennich + +/// @file +/// +/// This program tests symtab invariants through abg-corpus. + +#include +#include +#include + +#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 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::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); + } +}