# This file is part of ltrace. # Copyright (C) 2012 Petr Machata, Red Hat Inc. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of the # License, or (at your option) any later version. # # This program 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 Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA # 02110-1301 USA set libfilt1 [ltraceCompile libfilt1.so [ltraceSource c { void func2(void); void func1(void) { func2(); } }]] set libfilt2 [ltraceCompile libfilt2.so [ltraceSource c { void func2(void) { puts("func2"); } }]] foreach ext {{} .pie} { set filt [ltraceCompile filt$ext $libfilt1 $libfilt2 [ltraceSource c { void func1(void); int main(int argc, char *argv[]) { func1(); return 0; } }]] ltraceMatch [ltraceRun -e* $filt] { {{filt(\.pie)?->func1} == 1} {{libfilt1.so->func2} == 1} {{libfilt2.so->puts} == 1} {{func2 resumed} == 1} {{func1 resumed} == 1} } ltraceMatch1 [ltraceRun $filt] \ {^func1\(.*\)} == 1 ltraceMatch1 [ltraceRun -e@MAIN $filt] \ {filt(\.pie)?->func1\(.*\)} == 1 ltraceMatch1 [ltraceRun -e@libfilt1.so $filt] \ {libfilt1.so->func2\(.*\)} == 1 ltraceMatch1 [ltraceRun -e@libfilt2.so $filt] \ {libfilt2.so->puts\(.*\)} == 1 ltraceMatch [ltraceRun -e@libfilt* $filt] { {{libfilt1.so->func2\(} == 1} {{libfilt2.so->puts\(.*\)} == 1} {{func2 resumed} == 1} } ltraceMatch [ltraceRun -efunc* $filt] { {{filt(\.pie)?->func1\(} == 1} {{libfilt1.so->func2\(.*\)} == 1} {{func1 resumed} == 1} } # Check that we handle breakpoint on both PLT entry and entry point ltraceMatch [ltraceRun -efunc1 -xfunc1 $filt] { {{filt(\.pie)?->func1\(} == 1} {{func1@libfilt1.so\(.*\)} == 1} {{func1 resumed} == 1} } # Check that when given -l, we don't trace symbols from other # libraries. ltraceMatch1 [ltraceRun -llibfilt1.so -- $filt] \ {filt(\.pie)?->func1\(.*\)} == 1 ltraceMatch [ltraceRun -llibfilt1.so -llibfilt2.so $filt] { {{filt(\.pie)?->func1\(} == 1} {{libfilt1.so->func2\(.*\)} == 1} {{func1 resumed} == 1} } } ltraceDone