[2/3] Handle Source in DAP breakpointLocations
Checks
Context |
Check |
Description |
linaro-tcwg-bot/tcwg_gdb_build--master-aarch64 |
success
|
Testing passed
|
linaro-tcwg-bot/tcwg_gdb_build--master-arm |
success
|
Testing passed
|
linaro-tcwg-bot/tcwg_gdb_check--master-arm |
success
|
Testing passed
|
linaro-tcwg-bot/tcwg_gdb_check--master-aarch64 |
success
|
Testing passed
|
Commit Message
This changes the DAP breakpointLocations request to accept a Source
and to decode it properly.
---
gdb/python/lib/gdb/dap/locations.py | 12 ++++--------
gdb/python/lib/gdb/dap/sources.py | 16 ++++++++++++++++
2 files changed, 20 insertions(+), 8 deletions(-)
@@ -19,11 +19,13 @@ import gdb
from typing import Optional
from .server import capability, request
+from .sources import decode_source
from .startup import in_gdb_thread, send_gdb_with_response
@in_gdb_thread
-def _find_lines(filename, start_line, end_line):
+def _find_lines(source, start_line, end_line):
+ filename = decode_source(source)
lines = set()
for entry in gdb.execute_mi("-symbol-list-lines", filename)["lines"]:
line = entry["line"]
@@ -44,10 +46,4 @@ def _find_lines(filename, start_line, end_line):
def breakpoint_locations(*, source, line: int, endLine: Optional[int] = None, **extra):
if endLine is None:
endLine = line
- if "path" in source:
- filename = source["path"]
- elif "name" in source:
- filename = source["name"]
- else:
- raise Exception("")
- return send_gdb_with_response(lambda: _find_lines(filename, line, endLine))
+ return send_gdb_with_response(lambda: _find_lines(source, line, endLine))
@@ -54,6 +54,22 @@ def make_source(fullname, filename):
return result
+@in_gdb_thread
+def decode_source(source):
+ """Decode a Source object.
+
+ Finds and returns the filename of a given Source object."""
+ if "path" in source:
+ return source["path"]
+ if "sourceReference" not in source:
+ raise Exception("either 'path' or 'sourceReference' must appear in Source")
+ ref = source["sourceReference"]
+ global _id_map
+ if ref not in _id_map:
+ raise Exception("no sourceReference " + str(ref))
+ return _id_map[ref]["path"]
+
+
@in_gdb_thread
def _sources():
result = []