File: gdb-utils.exp

package info (click to toggle)
gdb-doc 13.1-1
  • links: PTS, VCS
  • area: non-free
  • in suites: bookworm
  • size: 234,284 kB
  • sloc: ansic: 1,988,072; asm: 373,465; exp: 187,579; cpp: 75,697; makefile: 69,432; sh: 24,829; yacc: 11,654; python: 9,602; ada: 6,680; xml: 6,073; perl: 5,077; pascal: 3,357; f90: 2,555; tcl: 1,902; lisp: 1,578; cs: 879; lex: 759; sed: 228; awk: 154; objc: 137; fortran: 57
file content (102 lines) | stat: -rw-r--r-- 3,194 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# Copyright 2014-2023 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/>.

# Utility procedures, shared between test suite domains.

# A helper procedure to retrieve commands to send to GDB before a program
# is started.

proc gdb_init_commands {} {
    set commands ""
    if [target_info exists gdb_init_command] {
	lappend commands [target_info gdb_init_command]
    }
    if [target_info exists gdb_init_commands] {
	set commands [concat $commands [target_info gdb_init_commands]]
    }
    return $commands
}

# Given an input string, adds backslashes as needed to create a
# regexp that will match the string.

proc string_to_regexp {str} {
    set result $str
    regsub -all {[]?*+.|(){}^$\[\\]} $str {\\&} result
    return $result
}

# Given a list of strings, adds backslashes as needed to each string to
# create a regexp that will match the string, and join the result.

proc string_list_to_regexp { args } {
    set result ""
    foreach arg $args {
	set arg [string_to_regexp $arg]
       append result $arg
    }
    return $result
}

# Wrap STR in an ANSI terminal escape sequences -- one to set the
# style to STYLE, and one to reset the style to the default.  The
# return value is suitable for use as a regular expression.

# STYLE can either be the payload part of an ANSI terminal sequence,
# or a shorthand for one of the gdb standard styles: "file",
# "function", "variable", or "address".

proc style {str style} {
    switch -exact -- $style {
	title { set style 1 }
	file { set style 32 }
	function { set style 33 }
	highlight { set style 31 }
	variable { set style 36 }
	address { set style 34 }
	metadata { set style 2 }
	version { set style "35;1" }
	none { return $str }
    }
    return "\033\\\[${style}m${str}\033\\\[m"
}

# gdb_get_bp_addr num
#
# Purpose:
#    Get address of a particular breakpoint.
#
# Parameter:
#    The parameter "num" indicates the number of the breakpoint to get.
#    Note that *currently* this parameter must be an integer value.
#    E.g., -1 means that we're gonna get the first internal breakpoint;
#    2 means to get the second user-defined breakpoint.
#
# Return:
#    First address for a particular breakpoint.
#
# TODO:
#    It would be nice if this procedure could accept floating point value.
#    E.g., 'gdb_get_bp_addr 1.2' means to get the address of the second
#    location of breakpoint #1.
#
proc gdb_get_bp_addr { num } {
    gdb_test_multiple "maint info break $num" "find address of specified bp $num" {
	-re -wrap ".*(0x\[0-9a-f\]+).*" {
	    return $expect_out(1,string)
	}
    }
    return ""
}