[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 06:59:35 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:
This has always confused me. Registers don't have byte order (memory has). So unless we fetch the register value from memory, byte swapping doesn't seem to make sense.
Are we byteswapping it here just to cancel out byteswapping done somewhere else?
I get it that we store register values in host endian internally, which makes sense, but why are we byteswapping the incoming value here?
https://github.com/llvm/llvm-project/pull/189590
More information about the lldb-commits
mailing list