Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 8 additions & 4 deletions src/pyts/coresight/generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -413,15 +413,19 @@ def _copy_data_metadata(

if feature != "data" or not isinstance(value, dict):
return
for property_name in ("symbol", "symbol-file", "symbol-size", "symbol-type", "label"):
if property_name in value:
ref[property_name] = value[property_name]

symbol_file = value.get("symbol-file")
address = _integer(value.get("address"))
size = _integer(value.get("size")) or _integer(value.get("symbol-size"))
data_type = value.get("symbol-type")
if size is not None:
ref["size"] = HexInt(size)
if isinstance(data_type, str):
ref["data-type"] = data_type
if isinstance(symbol_file, str):
ref["symbol-file"] = symbol_file
if address is not None:
ref["symbol-address"] = HexInt(address)
ref["address"] = HexInt(address)


def _feature_registers(
Expand Down
43 changes: 23 additions & 20 deletions tests/test_trace.py
Original file line number Diff line number Diff line change
Expand Up @@ -549,11 +549,11 @@ def test_setup_trace_generates_coresight_register_settings(
}
assert refs_by_name["data#0"]["type"] == "dwt"
assert refs_by_name["data#0"]["source"] == 0
assert refs_by_name["data#0"]["symbol"] == "main"
assert refs_by_name["data#0"]["symbol-address"] == 0x08000100
assert refs_by_name["data#0"]["address"] == 0x08000100
assert refs_by_name["data#0"]["symbol-file"].endswith("/Blinky.axf")
assert refs_by_name["data#0"]["symbol-size"] == 64
assert refs_by_name["data#0"]["symbol-type"] == "func"
assert refs_by_name["data#0"]["size"] == 64
assert refs_by_name["data#0"]["data-type"] == "func"
assert "symbol" not in refs_by_name["data#0"]
assert refs_by_name["data#0"]["regs"] == [
{"name": "DWT_COMP0", "value": 0x08000100},
{"name": "DWT_MASK0", "value": 2},
Expand Down Expand Up @@ -587,7 +587,7 @@ def test_setup_trace_generates_coresight_register_settings(
assert all(ref["stream"] == 1 for ref in refs)
output_text = output_path.read_text(encoding="utf-8")
assert "address: 0x08000100" in output_text
assert "symbol-address: 0x08000100" in output_text
assert "symbol-address:" not in output_text
assert "value: 0x00000103" in output_text
assert "mask: 0x00000303" in output_text
assert "value: 0x00010001" in output_text
Expand Down Expand Up @@ -1133,7 +1133,7 @@ def _generate_data_refs(
)


def test_generate_ctrace_run_copies_data_location_metadata_to_ref() -> None:
def test_generate_ctrace_run_copies_data_reference_metadata_to_ref() -> None:
_output, refs = _generate_data_refs(
[
{
Expand All @@ -1149,12 +1149,12 @@ def test_generate_ctrace_run_copies_data_location_metadata_to_ref() -> None:
Processor.from_core("CM4", None),
)

assert refs[0]["symbol"] == "counter"
assert refs[0]["address"] == 0x20000000
assert refs[0]["symbol-file"] == "counter.axf"
assert refs[0]["symbol-size"] == 8
assert refs[0]["symbol-type"] == "object"
assert refs[0]["label"] == "Counter value"
assert refs[0]["symbol-address"] == 0x20000000
assert refs[0]["size"] == 8
assert refs[0]["data-type"] == "object"
assert "symbol" not in refs[0]
assert "label" not in refs[0]


def test_generate_ctrace_run_omits_absent_data_location_metadata() -> None:
Expand All @@ -1168,6 +1168,8 @@ def test_generate_ctrace_run_omits_absent_data_location_metadata() -> None:
for property_name in (
"symbol",
"symbol-file",
"size",
"data-type",
"symbol-size",
"symbol-type",
"label",
Expand All @@ -1193,11 +1195,12 @@ def test_generate_ctrace_run_copies_data_metadata_when_generation_fails() -> Non
)

assert "error" in refs[0]
assert refs[0]["symbol"] == "counter"
assert refs[0]["address"] == 0x20000000
assert refs[0]["symbol-file"] == "counter.axf"
assert refs[0]["symbol-size"] == 8
assert refs[0]["symbol-type"] == "object"
assert refs[0]["label"] == "Counter value"
assert refs[0]["size"] == 3
assert refs[0]["data-type"] == "object"
assert "symbol" not in refs[0]
assert "label" not in refs[0]


def test_generate_ctrace_run_copies_data_metadata_for_unsupported_core() -> None:
Expand All @@ -1218,11 +1221,11 @@ def test_generate_ctrace_run_copies_data_metadata_for_unsupported_core() -> None
assert refs[0]["error"] == (
"core CM0 has no architectural ITM/DWT trace support"
)
assert refs[0]["symbol"] == "counter"
assert refs[0]["symbol-file"] == "counter.axf"
assert refs[0]["symbol-size"] == 8
assert refs[0]["symbol-type"] == "object"
assert refs[0]["label"] == "Counter value"
assert refs[0]["size"] == 8
assert refs[0]["data-type"] == "object"
assert "symbol" not in refs[0]
assert "label" not in refs[0]


@pytest.mark.parametrize(
Expand Down Expand Up @@ -2410,7 +2413,7 @@ def test_setup_trace_accepts_anonymous_fixed_address(
assert result.missing == []
ref = output["ctrace-run"]["ctrace-refs"][0]
assert "error" not in ref
assert ref["symbol-address"] == 0x20001000
assert ref["address"] == 0x20001000
assert ref["regs"][0] == {"name": "DWT_COMP0", "value": 0x20001000}
output_text = output_path.read_text(encoding="utf-8")
assert "address: 0x20001000" in output_text
Expand Down