diff options
author | Jan Kratochvil <jan.kratochvil@redhat.com> | 2013-02-03 16:09:33 +0000 |
---|---|---|
committer | Jan Kratochvil <jan.kratochvil@redhat.com> | 2013-02-03 16:09:33 +0000 |
commit | 1b56eb55405f0222188073473e1ab563899424ca (patch) | |
tree | 1a79fc095fcae3d4e0a122f1384ceae7e1a9190a /gdb/testsuite/gdb.dwarf2/dw2-dir-file-name.exp | |
parent | aa079c9346c65921b85c75da180a887b7bd7a776 (diff) | |
download | gdb-1b56eb55405f0222188073473e1ab563899424ca.zip gdb-1b56eb55405f0222188073473e1ab563899424ca.tar.gz gdb-1b56eb55405f0222188073473e1ab563899424ca.tar.bz2 |
gdb/
Add a new variable that controls a way in which filenames are
displayed.
* NEWS (set filename-display): New entry.
* source.c (filename_display_basename, filename_display_relative)
(filename_display_absolute, filename_display_kind_names)
(filename_display_string, show_filename_display_string)
(symtab_to_filename_for_display): New.
(_initialize_source): Added initialization of 'filename-display'
variable.
* source.h (symtab_to_filename_for_display): Added declaration.
* stack.c (print_frame): Added new variable and calling of a new
function and condition with this variable. Changed third argument of
calling of a function.
gdb/doc/
* gdb.texinfo (Backtrace): Added description of 'filename-display'
variable in 'set/show backtrace' section.
gdb/testsuite/
* gdb.dwarf2/dw2-dir-file-name.exp: New file.
* gdb.dwarf2/dw2-dir-file-name.c: New file.
Diffstat (limited to 'gdb/testsuite/gdb.dwarf2/dw2-dir-file-name.exp')
-rw-r--r-- | gdb/testsuite/gdb.dwarf2/dw2-dir-file-name.exp | 400 |
1 files changed, 400 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-dir-file-name.exp b/gdb/testsuite/gdb.dwarf2/dw2-dir-file-name.exp new file mode 100644 index 0000000..882bdb0 --- /dev/null +++ b/gdb/testsuite/gdb.dwarf2/dw2-dir-file-name.exp @@ -0,0 +1,400 @@ +# Copyright 2012 Free Software Foundation, 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 3 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, see <http://www.gnu.org/licenses/>. +load_lib dwarf.exp + +# This test can only be run on targets which support DWARF-2 and use gas. +if {![dwarf2_support]} { + return 0 +} + +standard_testfile +set asmsrcfile [standard_output_file ${testfile}asm.S] +set asmobjfile [standard_output_file ${testfile}asm.o] +set srcabsdir [standard_output_file ${testfile}.d] +set srctmpfile tmp-${testfile}.c + +# $srcdir may be relative. +if {[file pathtype $srcabsdir] != "absolute"} { + untested "objdir pathtype is not absolute" + return -1 +} + +set f [open $asmsrcfile "w"] +puts $f "/* DO NOT EDIT! GENERATED AUTOMATICALLY! */" + +proc out_cu { name cu_dir cu_name line_dir line_name } { + global f + + puts -nonewline $f "\ +.L${name}_begin: + .4byte .L${name}_end - .L${name}_start /* Length of Compilation Unit */ +.L${name}_start: + .2byte 2 /* DWARF Version */ + .4byte .Labbrev1_begin /* Offset into abbrev section */ + .byte 4 /* Pointer size */ +" + if { $cu_dir != "" } { + puts $f " .uleb128 ABBREV_COMP_DIR_NAME /* Abbrev: DW_TAG_compile_unit */" + } else { + puts $f " .uleb128 ABBREV_NAME /* Abbrev: DW_TAG_compile_unit */" + } + puts -nonewline $f "\ + .ascii \"GNU C\\0\" /* DW_AT_producer */ + .byte 2 /* DW_AT_language (DW_LANG_C) */ + .4byte .Lline_${name}_begin /* DW_AT_stmt_list */ + .4byte ${name}_start /* DW_AT_low_pc */ + .4byte ${name}_end /* DW_AT_high_pc */ +" + if { $cu_dir != "" } { + puts $f " .ascii $cu_dir /* DW_AT_comp_dir */" + } + puts -nonewline $f "\ + .ascii $cu_name /* DW_AT_name */ + + .uleb128 3 /* Abbrev: DW_TAG_subprogram */ + .asciz \"${name}\" /* DW_AT_name */ + .4byte ${name}_start /* DW_AT_low_pc */ + .4byte ${name}_end /* DW_AT_high_pc */ + + .byte 0 /* End of children of CU */ +.L${name}_end: +" +} + +proc out_line { name cu_dir cu_name line_dir line_name } { + global f + + puts -nonewline $f "\ +.Lline_${name}_begin: + .4byte .Lline_${name}_end - .Lline_${name}_start /* Initial length */ +.Lline_${name}_start: + .2byte 2 /* Version */ + .4byte .Lline_${name}_lines - .Lline_${name}_hdr /* header_length */ +.Lline_${name}_hdr: + .byte 1 /* Minimum insn length */ + .byte 1 /* default_is_stmt */ + .byte 1 /* line_base */ + .byte 1 /* line_range */ + .byte 4 /* opcode_base */ + + /* Standard lengths */ + .byte 0 + .byte 1 + .byte 1 + + /* Include directories */ +" + if { $line_dir != "" } { + puts $f " .ascii $line_dir" + } + puts -nonewline $f "\ + .byte 0 + + /* File names */ + .ascii $line_name +" + if { $line_dir != "" } { + puts $f " .uleb128 1" + } else { + puts $f " .uleb128 0" + } + puts -nonewline $f "\ + .uleb128 0 + .uleb128 0 + + .byte 0 + +.Lline_${name}_lines: + .byte 3 /* DW_LNS_advance_line */ + .sleb128 998 /* ... to 999 */ + .byte 0 /* DW_LNE_set_address */ + .uleb128 5 + .byte 2 + .4byte ${name}_start + .byte 1 /* DW_LNS_copy */ + .byte 3 /* DW_LNS_advance_line */ + .sleb128 1 /* ... to 1000 */ + .byte 0 /* DW_LNE_set_address */ + .uleb128 5 + .byte 2 + .4byte ${name}_end + .byte 1 /* DW_LNS_copy */ + .byte 0 /* DW_LNE_end_of_sequence */ + .uleb128 1 + .byte 1 +.Lline_${name}_end: +" +} + +# IFSOME can be optionally _same or _different if >= 2 absolute directories are +# provided. Then in the _different case the overriden directories have invalid +# XDIR value. + +proc out_unit { func compdir ldir file ifsame } { + set name "compdir_${compdir}_ldir_${ldir}_file_${file}${ifsame}" + + if { $compdir == "missing_" } { + set cu_dir {} + } elseif { $compdir == "relative" } { + set cu_dir {COMPDIR "\0"} + } elseif { $compdir == "absolute" } { + set cu_dir {BDIR "/" COMPDIR "\0"} + } else { + error "compdir $compdir" + } + + if { $ldir == "missing_" } { + set line_dir {} + } elseif { $ldir == "relative" } { + set line_dir {LDIR "\0"} + } elseif { $ldir == "absolute" } { + set line_dir {BDIR "/" LDIR "\0"} + } else { + error "ldir $ldir" + } + + if { $file == "basename" } { + set cu_name {FILE "\0"} + } elseif { $file == "relative" } { + set cu_name {FDIR "/" FILE "\0"} + } elseif { $file == "absolute" } { + set cu_name {BDIR "/" FILE "\0"} + } else { + error "file $file" + } + set line_name $cu_name + + if { "$ifsame" == "_different" } { + if { $file == "absolute" } { + if { $ldir == "absolute" } { + set line_dir {XDIR "\0"} + } + if { $compdir == "absolute" } { + set cu_dir {XDIR "\0"} + } + } elseif { $ldir == "absolute" } { + if { $compdir == "absolute" } { + set cu_dir {XDIR "\0"} + } + } else { + error "not enough absolutes" + } + } + + $func $name $cu_dir $cu_name $line_dir $line_name +} + +proc out_diff { func compdir ldir file } { + set abscount 0 + if { $compdir == "absolute" } { + incr abscount + } + if { $ldir == "absolute" } { + incr abscount + } + if { $file == "absolute" } { + incr abscount + } + if { $abscount <= 1 } { + out_unit $func $compdir $ldir $file "" + } else { + out_unit $func $compdir $ldir $file "_same" + out_unit $func $compdir $ldir $file "_different" + } +} + +proc out_file { func compdir ldir } { + out_diff $func $compdir $ldir "basename" + out_diff $func $compdir $ldir "relative" + out_diff $func $compdir $ldir "absolute" +} + +proc out_ldir { func compdir } { + out_file $func $compdir "missing_" + out_file $func $compdir "relative" + out_file $func $compdir "absolute" +} + +proc out_compdir { func } { + out_ldir $func "missing_" + out_ldir $func "relative" + out_ldir $func "absolute" +} + +puts -nonewline $f "\ +#define ABBREV_NAME 1 +#define ABBREV_COMP_DIR_NAME 2 + .section .debug_info +" +out_compdir out_cu + +puts $f " .section .debug_line" +out_compdir out_line + +puts -nonewline $f "\ + .section .debug_abbrev +.Labbrev1_begin: + + .uleb128 ABBREV_NAME /* Abbrev code */ + .uleb128 0x11 /* DW_TAG_compile_unit */ + .byte 1 /* has_children */ + .uleb128 0x25 /* DW_AT_producer */ + .uleb128 0x8 /* DW_FORM_string */ + .uleb128 0x13 /* DW_AT_language */ + .uleb128 0xb /* DW_FORM_data1 */ + .uleb128 0x10 /* DW_AT_stmt_list */ + .uleb128 0x6 /* DW_FORM_data4 */ + .uleb128 0x11 /* DW_AT_low_pc */ + .uleb128 0x1 /* DW_FORM_addr */ + .uleb128 0x12 /* DW_AT_high_pc */ + .uleb128 0x1 /* DW_FORM_addr */ + .uleb128 0x3 /* DW_AT_name */ + .uleb128 0x8 /* DW_FORM_string */ + .byte 0x0 /* Terminator */ + .byte 0x0 /* Terminator */ + + .uleb128 ABBREV_COMP_DIR_NAME /* Abbrev code */ + .uleb128 0x11 /* DW_TAG_compile_unit */ + .byte 1 /* has_children */ + .uleb128 0x25 /* DW_AT_producer */ + .uleb128 0x8 /* DW_FORM_string */ + .uleb128 0x13 /* DW_AT_language */ + .uleb128 0xb /* DW_FORM_data1 */ + .uleb128 0x10 /* DW_AT_stmt_list */ + .uleb128 0x6 /* DW_FORM_data4 */ + .uleb128 0x11 /* DW_AT_low_pc */ + .uleb128 0x1 /* DW_FORM_addr */ + .uleb128 0x12 /* DW_AT_high_pc */ + .uleb128 0x1 /* DW_FORM_addr */ + .uleb128 0x1b /* DW_AT_comp_dir */ + .uleb128 0x8 /* DW_FORM_string */ + .uleb128 0x3 /* DW_AT_name */ + .uleb128 0x8 /* DW_FORM_string */ + .byte 0x0 /* Terminator */ + .byte 0x0 /* Terminator */ + + .uleb128 3 /* Abbrev code */ + .uleb128 0x2e /* DW_TAG_subprogram */ + .byte 0 /* has_children */ + .uleb128 0x3 /* DW_AT_name */ + .uleb128 0x8 /* DW_FORM_string */ + .uleb128 0x11 /* DW_AT_low_pc */ + .uleb128 0x1 /* DW_FORM_addr */ + .uleb128 0x12 /* DW_AT_high_pc */ + .uleb128 0x1 /* DW_FORM_addr */ + .byte 0x0 /* Terminator */ + .byte 0x0 /* Terminator */ + + .byte 0x0 /* Terminator */ + .byte 0x0 /* Terminator */ +" + +close $f + +set opts {} +# Base directory. +lappend opts "additional_flags=-DBDIR=\"${srcabsdir}\"" +# Incorrect directory which should never be visible from GDB. +lappend opts "additional_flags=-DXDIR=\"${srcabsdir}/xdir\"" +# CU's DW_AT_comp_dir. +lappend opts "additional_flags=-DCOMPDIR=\"compdir\"" +# .debug_line's directory. +lappend opts "additional_flags=-DLDIR=\"ldir\"" +# CU's DW_AT_name and .debug_line's filename relative directory, if needed. +lappend opts "additional_flags=-DFDIR=\"fdir\"" +# CU's DW_AT_name and .debug_line's filename. +lappend opts "additional_flags=-DFILE=\"${srctmpfile}\"" + +if { [gdb_compile "${asmsrcfile} ${srcdir}/${subdir}/$srcfile" "${binfile}" executable $opts] != "" } { + untested "Cannot compile ${asmsrcfile} or $srcfile" + return -1 +} + +remote_exec host "sh -c \"rm -f ${srcabsdir}{/rdir,}{/xdir,}{/compdir,}{/ldir,}{/fdir,}/${srctmpfile}\"" +remote_exec host "sh -c \"rmdir ${srcabsdir}{/rdir,}{/xdir,}{/compdir,}{/ldir,}{/fdir,}\"" +remote_exec host "sh -c \"mkdir ${srcabsdir}{,/rdir}{,/xdir}{,/compdir}{,/ldir}{,/fdir}\"" +remote_exec host "sh -c \"for d in ${srcabsdir}{,/rdir}{,/xdir}{,/compdir}{,/ldir}{,/fdir};do cp ${srcdir}/${subdir}/${srcfile} \\\$d/${srctmpfile}; done\"" + +clean_restart ${testfile} + +if ![runto_main] { + return -1 +} + +gdb_test "cd ${srcabsdir}/rdir" "Working directory [string_to_regexp ${srcabsdir}]/rdir\\." + +proc test { func compdir filename } { with_test_prefix "$func" { + # Clear the GDB cache. + gdb_test_no_output "set directories" "" + + if {$compdir == ""} { + set absolute "$filename" + } else { + set absolute "$compdir/$filename" + } + if {[string index $absolute 0] != "/"} { + error "not absolute" + } + + gdb_breakpoint $func + gdb_continue_to_breakpoint $func "$func \\(\\) at .*" + + gdb_test_no_output "set filename-display absolute" + verbose -log "expect: ${absolute}" + gdb_test "frame" " in $func \\(\\) at [string_to_regexp ${absolute}]:999" "absolute" + + gdb_test_no_output "set filename-display basename" + verbose -log "expect: [file tail $filename]" + gdb_test "frame" " in $func \\(\\) at [string_to_regexp [file tail $filename]]:999" "basename" + + gdb_test_no_output "set filename-display relative" + verbose -log "expect: $filename" + gdb_test "frame" " in $func \\(\\) at [string_to_regexp $filename]:999" "relative" +}} + +set bdir "${srcabsdir}" +set file "${srctmpfile}" +test "compdir_missing__ldir_missing__file_basename" "$bdir/rdir" "$file" +test "compdir_missing__ldir_missing__file_relative" "$bdir/rdir" "fdir/$file" +test "compdir_missing__ldir_missing__file_absolute" "" "$bdir/$file" +test "compdir_missing__ldir_relative_file_basename" "$bdir/rdir" "ldir/$file" +test "compdir_missing__ldir_relative_file_relative" "$bdir/rdir" "ldir/fdir/$file" +test "compdir_missing__ldir_relative_file_absolute" "" "$bdir/$file" +test "compdir_missing__ldir_absolute_file_basename" "" "$bdir/ldir/$file" +test "compdir_missing__ldir_absolute_file_relative" "" "$bdir/ldir/fdir/$file" +test "compdir_missing__ldir_absolute_file_absolute_same" "" "$bdir/$file" +test "compdir_missing__ldir_absolute_file_absolute_different" "" "$bdir/$file" +test "compdir_relative_ldir_missing__file_basename" "$bdir/rdir/compdir" "$file" +test "compdir_relative_ldir_missing__file_relative" "$bdir/rdir/compdir" "fdir/$file" +test "compdir_relative_ldir_missing__file_absolute" "" "$bdir/$file" +test "compdir_relative_ldir_relative_file_basename" "$bdir/rdir/compdir" "ldir/$file" +test "compdir_relative_ldir_relative_file_relative" "$bdir/rdir/compdir" "ldir/fdir/$file" +test "compdir_relative_ldir_relative_file_absolute" "" "$bdir/$file" +test "compdir_relative_ldir_absolute_file_basename" "" "$bdir/ldir/$file" +test "compdir_relative_ldir_absolute_file_relative" "" "$bdir/ldir/fdir/$file" +test "compdir_relative_ldir_absolute_file_absolute_same" "" "$bdir/$file" +test "compdir_relative_ldir_absolute_file_absolute_different" "" "$bdir/$file" +test "compdir_absolute_ldir_missing__file_basename" "$bdir/compdir" "$file" +test "compdir_absolute_ldir_missing__file_relative" "$bdir/compdir" "fdir/$file" +test "compdir_absolute_ldir_missing__file_absolute_same" "" "$bdir/$file" +test "compdir_absolute_ldir_missing__file_absolute_different" "" "$bdir/$file" +test "compdir_absolute_ldir_relative_file_basename" "$bdir/compdir" "ldir/$file" +test "compdir_absolute_ldir_relative_file_relative" "$bdir/compdir" "ldir/fdir/$file" +test "compdir_absolute_ldir_relative_file_absolute_same" "" "$bdir/$file" +test "compdir_absolute_ldir_relative_file_absolute_different" "" "$bdir/$file" +test "compdir_absolute_ldir_absolute_file_basename_same" "" "$bdir/ldir/$file" +test "compdir_absolute_ldir_absolute_file_relative_different" "" "$bdir/ldir/fdir/$file" +test "compdir_absolute_ldir_absolute_file_absolute_same" "" "$bdir/$file" +test "compdir_absolute_ldir_absolute_file_absolute_different" "" "$bdir/$file" |