Home | History | Annotate | Line # | Download | only in gdb.opt
      1 # Copyright 2020-2024 Free Software Foundation, Inc.
      2 
      3 # This program is free software; you can redistribute it and/or modify
      4 # it under the terms of the GNU General Public License as published by
      5 # the Free Software Foundation; either version 3 of the License, or
      6 # (at your option) any later version.
      7 #
      8 # This program is distributed in the hope that it will be useful,
      9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
     10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     11 # GNU General Public License for more details.
     12 #
     13 # You should have received a copy of the GNU General Public License
     14 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
     15 
     16 # Check for an issue in GDB where buildsym_compunit::record_line was
     17 # removing duplicate line table entries, but skip_prologue_using_sal
     18 # depends on these duplicates to spot the end of the prologue.
     19 #
     20 # When the de-duplication was added this regression was not spotted as
     21 # it requires a particular combination of a (very) small function
     22 # being inlined into an also very small outer function.
     23 #
     24 # See also gdb.dwarf/dw2-inline-small-func.exp for a version of this
     25 # test that makes use of the Dejagnu DWARF compiler.
     26 #
     27 # This test simply compiles with optimization and checks that GDB can
     28 # do something suitable with the compiled binary.  Problems with this
     29 # test are most likely to occur when GDB asks the target specific code
     30 # to skip the prologue (gdbarch_skip_prologue).  Some targets make use
     31 # of skip_prologue_using_sal, which should be fine, however, some
     32 # targets make a poor attempt to duplicate parts of
     33 # skip_prologue_using_sal, these targets could easily fail this test.
     34 # This is not (necessarily) a problem with this test, but could
     35 # indicate a weakness with the target in question.
     36 
     37 standard_testfile inline-small-func.c inline-small-func.h
     38 
     39 if { [prepare_for_testing "failed to prepare" ${testfile} \
     40 	  [list $srcfile] {debug optimize=-O1}] } {
     41     return -1
     42 }
     43 
     44 if ![runto_main] {
     45     return -1
     46 }
     47 
     48 # Delete all breakpoints, watchpoints, tracepoints, and catchpoints so that
     49 # the output of "info breakpoints" below will only contain a single breakpoint.
     50 delete_breakpoints
     51 
     52 # Place a breakpoint within the function in the header file.
     53 set linenum [gdb_get_line_number "callee: body" $srcfile2]
     54 gdb_breakpoint "${srcfile2}:${linenum}"
     55 
     56 # Check that the breakpoint was placed where we expected.  It should
     57 # appear at the requested line.  When the bug in GDB was present the
     58 # breakpoint would be placed on one of the following lines instead.
     59 gdb_test "info breakpoints" \
     60     ".* in callee at \[^\r\n\]+${srcfile2}:${linenum}\\y.*"
     61