python: accept address and explicit locations in gdb.decode_line
authorMarkus Metzger <markus.t.metzger@intel.com>
Mon, 20 Jun 2016 09:12:14 +0000 (11:12 +0200)
committerMarkus Metzger <markus.t.metzger@intel.com>
Fri, 7 Oct 2016 07:02:56 +0000 (09:02 +0200)
The gdb.decode_line python function is documented to support the same location
expressions as the "break" command.  It currently expects a linespec location.

Instead of creating a linespec location directly, create the location via
string_to_event_location_basic.

gdb/ChangeLog
gdb/python/python.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.python/python.exp

index 95f2b92f65c50abd633fc6fc95c72ad8be74dd74..65ed6b3e5e38e1c26f69120d32ffaa59a7c05f2d 100644 (file)
@@ -1,3 +1,8 @@
+2016-10-07  Markus Metzger  <markus.t.metzger@intel.com>
+
+       * python/python.c (gdbpy_decode_line): Call
+       string_to_event_location_basic instead of new_linespec_location.
+
 2016-10-06  Sergio Durigan Junior  <sergiodj@redhat.com>
 
        * target.c (target_supports_multi_process): New function, moved
index b00b70be85b11c248025a3faa9803c4fbf335e51..7e34d2638cc28aa9658439637eb1b376324c14cc 100644 (file)
@@ -740,7 +740,7 @@ gdbpy_decode_line (PyObject *self, PyObject *args)
 
   if (arg != NULL)
     {
-      location = new_linespec_location (&arg);
+      location = string_to_event_location_basic (&arg, python_language);
       make_cleanup_delete_event_location (location);
     }
 
index 4722c34aed718384488488358c7db84f1b314da6..74091eef0a82733cd8f842b193ec3297414e2385 100644 (file)
@@ -1,3 +1,7 @@
+2016-10-07  Markus Metzger  <markus.t.metzger@intel.com>
+
+       * gdb.python/python.exp: Test decode_line("*0").
+
 2016-10-06  Doug Evans  <dje@google.com>
 
        * gdb.python/py-value.exp (test_value_creation): Add test for large
index 3f8c46fb5628636a555089a907bf8d52f08b6b18..4072fa3d35b8168ec6fa7f8f5c28a7fbd9b6f1e1 100644 (file)
@@ -251,6 +251,13 @@ gdb_py_test_silent_cmd {python symtab = gdb.decode_line ("func1,func2")} \
     "test decode_line func1,func2" 1
 gdb_test {python print (symtab[0])} ",func2" "stop at comma in linespec"
 
+gdb_py_test_silent_cmd "python symtab = gdb.decode_line(\"*0\")" "Test decode_line *0" 1
+gdb_test "python print (len(symtab))" "2" "Test decode_line *0 result length"
+gdb_test "python print (symtab\[0\])" "None" "Test decode_line *0 unparsed"
+gdb_test "python print (len(symtab\[1\]))" "1" "Test decode_line *0 locations length"
+gdb_test "python print (symtab\[1\]\[0\].symtab)" "None" "Test decode_line *0 filename"
+gdb_test "python print (symtab\[1\]\[0\].pc)" "0" "Test decode_line *0 pc"
+
 # gdb.write
 gdb_test "python print (sys.stderr)" ".*gdb.GdbOutputErrorFile (instance|object) at.*" "Test stderr location"
 gdb_test "python print (sys.stdout)" ".*gdb.GdbOutputFile (instance|object) at.*" "Test stdout location"