Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add GDB/LLDB pretty-printers for NonZero types #98301

Merged
merged 1 commit into from
Aug 28, 2022
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
3 changes: 3 additions & 0 deletions src/etc/gdb_lookup.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,4 +89,7 @@ def lookup(valobj):
if rust_type == RustType.STD_REF_CELL:
return StdRefCellProvider(valobj)

if rust_type == RustType.STD_NONZERO_NUMBER:
return StdNonZeroNumberProvider(valobj)

return None
11 changes: 11 additions & 0 deletions src/etc/gdb_providers.py
Original file line number Diff line number Diff line change
Expand Up @@ -231,6 +231,17 @@ def children(self):
yield "borrow", self.borrow


class StdNonZeroNumberProvider:
def __init__(self, valobj):
fields = valobj.type.fields()
assert len(fields) == 1
field = list(fields)[0]
self.value = str(valobj[field.name])

def to_string(self):
return self.value


# Yields children (in a provider's sense of the word) for a BTreeMap.
def children_of_btree_map(map):
# Yields each key/value pair in the node and in any child nodes.
Expand Down
1 change: 1 addition & 0 deletions src/etc/lldb_commands
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,5 @@ type summary add -F lldb_lookup.summary_lookup -e -x -h "^(core::([a-z_]+::)+)C
type summary add -F lldb_lookup.summary_lookup -e -x -h "^(core::([a-z_]+::)+)Ref<.+>$" --category Rust
type summary add -F lldb_lookup.summary_lookup -e -x -h "^(core::([a-z_]+::)+)RefMut<.+>$" --category Rust
type summary add -F lldb_lookup.summary_lookup -e -x -h "^(core::([a-z_]+::)+)RefCell<.+>$" --category Rust
type summary add -F lldb_lookup.summary_lookup -e -x -h "^core::num::([a-z_]+::)*NonZero.+$" --category Rust
type category enable Rust
3 changes: 3 additions & 0 deletions src/etc/lldb_lookup.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,9 @@ def summary_lookup(valobj, dict):
if rust_type == RustType.STD_REF_CELL:
return StdRefSummaryProvider(valobj, dict)

if rust_type == RustType.STD_NONZERO_NUMBER:
return StdNonZeroNumberSummaryProvider(valobj, dict)

return ""


Expand Down
8 changes: 8 additions & 0 deletions src/etc/lldb_providers.py
Original file line number Diff line number Diff line change
Expand Up @@ -739,3 +739,11 @@ def update(self):
def has_children(self):
# type: () -> bool
return True


def StdNonZeroNumberSummaryProvider(valobj, _dict):
# type: (SBValue, dict) -> str
objtype = valobj.GetType()
field = objtype.GetFieldAtIndex(0)
element = valobj.GetChildMemberWithName(field.name)
return element.GetValue()
3 changes: 3 additions & 0 deletions src/etc/rust_types.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ class RustType(object):
STD_REF = "StdRef"
STD_REF_MUT = "StdRefMut"
STD_REF_CELL = "StdRefCell"
STD_NONZERO_NUMBER = "StdNonZeroNumber"


STD_STRING_REGEX = re.compile(r"^(alloc::(\w+::)+)String$")
Expand All @@ -49,6 +50,7 @@ class RustType(object):
STD_REF_REGEX = re.compile(r"^(core::(\w+::)+)Ref<.+>$")
STD_REF_MUT_REGEX = re.compile(r"^(core::(\w+::)+)RefMut<.+>$")
STD_REF_CELL_REGEX = re.compile(r"^(core::(\w+::)+)RefCell<.+>$")
STD_NONZERO_NUMBER_REGEX = re.compile(r"^core::num::([a-z_]+::)*NonZero.+$")

TUPLE_ITEM_REGEX = re.compile(r"__\d+$")

Expand All @@ -72,6 +74,7 @@ class RustType(object):
RustType.STD_REF_MUT: STD_REF_MUT_REGEX,
RustType.STD_REF_CELL: STD_REF_CELL_REGEX,
RustType.STD_CELL: STD_CELL_REGEX,
RustType.STD_NONZERO_NUMBER: STD_NONZERO_NUMBER_REGEX,
}

def is_tuple_fields(fields):
Expand Down
87 changes: 86 additions & 1 deletion src/test/debuginfo/numeric-types.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
// only-cdb
// compile-flags:-g

// min-gdb-version: 8.1

// Tests the visualizations for `NonZero{I,U}{8,16,32,64,128,size}`, `Wrapping<T>` and
// `Atomic{Bool,I8,I16,I32,I64,Isize,U8,U16,U32,U64,Usize}` located in `libcore.natvis`.

Expand Down Expand Up @@ -153,6 +154,90 @@
// cdb-check:a_usize : 0x400 [Type: core::sync::atomic::AtomicUsize]
// cdb-check: [<Raw View>] [Type: core::sync::atomic::AtomicUsize]


// === GDB TESTS ===================================================================================

// gdb-command:run

// gdb-command:print/d nz_i8
// gdb-check:[...]$1 = 11

// gdb-command:print nz_i16
// gdb-check:[...]$2 = 22

// gdb-command:print nz_i32
// gdb-check:[...]$3 = 33

// gdb-command:print nz_i64
// gdb-check:[...]$4 = 44

// gdb-command:print nz_i128
// gdb-check:[...]$5 = 55

// gdb-command:print nz_isize
// gdb-check:[...]$6 = 66

// gdb-command:print/d nz_u8
// gdb-check:[...]$7 = 77

// gdb-command:print nz_u16
// gdb-check:[...]$8 = 88

// gdb-command:print nz_u32
// gdb-check:[...]$9 = 99

// gdb-command:print nz_u64
// gdb-check:[...]$10 = 100

// gdb-command:print nz_u128
// gdb-check:[...]$11 = 111

// gdb-command:print nz_usize
// gdb-check:[...]$12 = 122



// === LLDB TESTS ==================================================================================

// lldb-command:run

// lldb-command:print/d nz_i8
// lldb-check:[...]$0 = 11 { __0 = 11 }

// lldb-command:print nz_i16
// lldb-check:[...]$1 = 22 { __0 = 22 }

// lldb-command:print nz_i32
// lldb-check:[...]$2 = 33 { __0 = 33 }

// lldb-command:print nz_i64
// lldb-check:[...]$3 = 44 { __0 = 44 }

// lldb-command:print nz_i128
// lldb-check:[...]$4 = 55 { __0 = 55 }

// lldb-command:print nz_isize
// lldb-check:[...]$5 = 66 { __0 = 66 }

// lldb-command:print/d nz_u8
// lldb-check:[...]$6 = 77 { __0 = 77 }

// lldb-command:print nz_u16
// lldb-check:[...]$7 = 88 { __0 = 88 }

// lldb-command:print nz_u32
// lldb-check:[...]$8 = 99 { __0 = 99 }

// lldb-command:print nz_u64
// lldb-check:[...]$9 = 100 { __0 = 100 }

// lldb-command:print nz_u128
// lldb-check:[...]$10 = 111 { __0 = 111 }

// lldb-command:print nz_usize
// lldb-check:[...]$11 = 122 { __0 = 122 }


use std::num::*;
use std::sync::atomic::*;

Expand Down
1 change: 1 addition & 0 deletions src/tools/compiletest/src/runtest.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1094,6 +1094,7 @@ impl<'test> TestCx<'test> {
"^(core::([a-z_]+::)+)Ref<.+>$",
"^(core::([a-z_]+::)+)RefMut<.+>$",
"^(core::([a-z_]+::)+)RefCell<.+>$",
"^core::num::([a-z_]+::)*NonZero.+$",
];

script_str
Expand Down