1 # Useful gdb string convenience functions.
2 # Copyright (C) 2012-2013 Free Software Foundation, Inc.
4 # This program is free software; you can redistribute it and/or modify
5 # it under the terms of the GNU General Public License as published by
6 # the Free Software Foundation; either version 3 of the License, or
7 # (at your option) any later version.
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
14 # You should have received a copy of the GNU General Public License
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
17 """$_memeq, $_strlen, $_streq, $_regex"""
23 class _MemEq(gdb.Function):
24 """$_memeq - compare bytes of memory
30 True if len bytes at a and b compare equally.
33 super(_MemEq, self).__init__("_memeq")
35 def invoke(self, a, b, length):
37 raise ValueError("length must be non-negative")
40 # The argument(s) to vector are [low_bound,]high_bound.
41 byte_vector = gdb.lookup_type("char").vector(length - 1)
42 ptr_byte_vector = byte_vector.pointer()
43 a_ptr = a.reinterpret_cast(ptr_byte_vector)
44 b_ptr = b.reinterpret_cast(ptr_byte_vector)
45 return a_ptr.dereference() == b_ptr.dereference()
48 class _StrLen(gdb.Function):
49 """$_strlen - compute string length
55 Length of string a, assumed to be a string in the current language.
58 super(_StrLen, self).__init__("_strlen")
65 class _StrEq(gdb.Function):
66 """$_streq - check string equality
72 True if a and b are identical strings in the current language.
74 Example (amd64-linux):
76 cond $bpnum $_streq((char*) $rdi, "foo")
79 super(_StrEq, self).__init__("_streq")
81 def invoke(self, a, b):
82 return a.string() == b.string()
85 class _RegEx(gdb.Function):
86 """$_regex - check if a string matches a regular expression
89 $_regex(string, regex)
92 True if string str (in the current language) matches the
93 regular expression regex.
96 super(_RegEx, self).__init__("_regex")
98 def invoke(self, string, regex):
100 r = re.compile(regex.string())
101 return bool(r.match(s))
104 # GDB will import us automagically via gdb/__init__.py.