| # 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 |