Home | History | Annotate | Line # | Download | only in gdb.dwarf2
      1 # Copyright 2016-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 load_lib dwarf.exp
     16 
     17 # This test can only be run on targets which support DWARF-4 and use gas.
     18 require dwarf2_support
     19 
     20 require !use_gdb_stub
     21 
     22 standard_testfile .c -dw.S
     23 
     24 # Make some DWARF for the test.
     25 set asm_file [standard_output_file $srcfile2]
     26 Dwarf::assemble $asm_file {
     27     global srcfile
     28 
     29     cu {} {
     30 	# Note we don't want C here as that requires canonicalization,
     31 	# so choose a language that isn't C and that gdb is unlikely
     32 	# to implement.
     33 	DW_TAG_compile_unit {
     34 		{DW_AT_language @DW_LANG_PLI}
     35                 {DW_AT_name     $srcfile}
     36                 {DW_AT_comp_dir /tmp}
     37         } {
     38 	    declare_labels type
     39 
     40             type: DW_TAG_base_type {
     41                 {DW_AT_byte_size 4 DW_FORM_sdata}
     42                 {DW_AT_encoding  @DW_ATE_signed}
     43                 {DW_AT_name      int}
     44             }
     45 
     46 	    DW_TAG_subprogram {
     47 		{MACRO_AT_func {mymain}}
     48 		{type :$type}
     49 		{DW_AT_main_subprogram 1 flag}
     50 	    } {
     51 	    }
     52 	}
     53     }
     54 }
     55 
     56 if {[prepare_for_testing "failed to prepare" ${testfile} \
     57 	 [list $srcfile $asm_file] {nodebug}]} {
     58     return -1
     59 }
     60 
     61 set have_index [exec_has_index_section $binfile]
     62 
     63 # Test that the "start" command stops in the "mymain" function.
     64 # This should happen because we used DW_AT_main_subprogram to tell gdb
     65 # that this was the real "main".
     66 
     67 if {[gdb_start_cmd] < 0} {
     68     fail "could not start ${testfile}"
     69     return -1
     70 }
     71 
     72 gdb_test_multiple "" "stopped at mymain" {
     73     -re -wrap "Temporary breakpoint .* mymain.*" {
     74 	pass $gdb_test_name
     75     }
     76     -re -wrap "Temporary breakpoint .* main.*" {
     77 	if { $have_index } {
     78 	    setup_kfail "gdb/24549" *-*-*
     79 	}
     80 	fail $gdb_test_name
     81     }
     82 }
     83