[Lldb-commits] [lldb] [lldb] Override default struct layout when building register types (PR #189590)
Sergei Barannikov via lldb-commits
lldb-commits at lists.llvm.org
Tue Apr 14 07:13:47 PDT 2026
================
@@ -28,31 +28,18 @@ static void dump_type_value(lldb_private::CompilerType &fields_type, T value,
lldb_private::Stream &strm) {
lldb::ByteOrder target_order = exe_scope->CalculateProcess()->GetByteOrder();
- // For the bitfield types we generate, it is expected that the fields are
- // in what is usually a big endian order. Most significant field first.
- // This is also clang's internal ordering and the order we want to print
- // them. On a big endian host this all matches up, for a little endian
- // host we have to swap the order of the fields before display.
- if (target_order == lldb::ByteOrder::eByteOrderLittle) {
- value = reg_info.flags_type->ReverseFieldOrder(value);
- }
-
- // Then we need to match the target's endian on a byte level as well.
+ // The type will be rendered in the target's type system, so it must match
+ // its endian.
if (lldb_private::endian::InlHostByteOrder() != target_order)
value = llvm::byteswap(value);
----------------
s-barannikov wrote:
Wait,.. can't the byteswapping be combined with DataExtractor construction below? That is, replace
```C++
if (lldb_private::endian::InlHostByteOrder() != target_order)
value = llvm::byteswap(value);
lldb_private::DataExtractor data_extractor{&value, sizeof(T), target_order,
8};
```
with
```C++
lldb_private::DataExtractor data_extractor{
&value, sizeof(T), endian::InlHostByteOrder(), 8};
```
If this is equivalent, it would clear up my confusion.
https://github.com/llvm/llvm-project/pull/189590
More information about the lldb-commits
mailing list