charles-zablit wrote:
This is what I get (without the patch) when running the following:
```
.\llvm-build\relwdeb\bin\lldb.exe
(lldb) log enable -f C:\Users\charleszablit\lldb-packets.log gdb-remote packets
(lldb) process attach --pid 37568
Process 37568 stopped
* thread #2, stop reason = signal SIGTRAP
frame #0: 0x00007ffb04b20ac1 ntdll.dll`DbgBreakPoint + 1
ntdll.dll`DbgBreakPoint:
-> 0x7ffb04b20ac1 <+1>: retq
0x7ffb04b20ac2 <+2>: int3
0x7ffb04b20ac3 <+3>: int3
0x7ffb04b20ac4 <+4>: int3
Executable binary set to "C:\Users\charleszablit\Developer\testing\main.exe".
Architecture set to: x86_64-pc-windows-msvc.
(lldb) register read eax
error: Invalid register name 'eax'
(lldb) register read rax
rax = 0x0000008d05f3d000
```
These are the packet logs:
```
< 1> send packet: +
history[1] tid=0x8c50 < 1> send packet: +
< 19> send packet: $QStartNoAckMode#b0
< 1> read packet: +
< 6> read packet: $OK#9a
< 1> send packet: +
< 104> send packet:
$qSupported:xmlRegisters=i386,arm,mips,arc;multiprocess+;fork-events+;vfork-events+;swbreak+;hwbreak+#cd
< 181> read packet:
$PacketSize=131072;QStartNoAckMode+;qEcho+;native-signals+;QThreadSuffixSupported+;QListThreadsInStopReply+;qXfer:features:read+;QNonStop+;jMultiBreakpoint+;qXfer:libraries:read+#2c
< 26> send packet: $QThreadSuffixSupported#e4
< 6> read packet: $OK#9a
< 27> send packet: $QListThreadsInStopReply#21
< 6> read packet: $OK#9a
< 13> send packet: $qHostInfo#9b
< 243> read packet:
$triple:7838365f36342d70632d77696e646f77732d6d737663;ptrsize:8;watchpoint_exceptions_received:after;endian:little;os_version:6.2.0;os_build:57696e646f7773204e5420362e322e30;os_kernel:57696e646f7773204e5420362e322e30;hostname:435a2d50432d30;#7f
< 10> send packet: $vCont?#49
< 19> read packet: $vCont;c;C;s;S;t#11
< 27> send packet: $qVAttachOrWaitSupported#38
< 6> read packet: $OK#9a
< 23> send packet: $QEnableErrorStrings#8c
< 6> read packet: $OK#9a
< 23> send packet: $QSetDetachOnError:1#f8
< 6> read packet: $OK#9a
< 16> send packet: $vAttach;8970#de
< 518> read packet:
$T05thread:4e28;threads:9a40,4e28;thread-pcs:00007ffb04b61bc4,00007ffb04b20ac1;00:004095a49f000000;01:0000000000000000;02:0000000000000000;03:a02bb304fb7f0000;04:0000000000000000;05:0000000000000000;06:0000000000000000;07:68faafa49f000000;08:0000000000000000;09:a02bb304fb7f0000;0a:0000000000000000;0b:0000000000000000;0c:0000000000000000;0d:0000000000000000;0e:0000000000000000;0f:0000000000000000;10:c10ab204fb7f0000;11:4602000000000000;12:3300;13:5300;14:2b00;15:2b00;16:2b00;17:2b00;reason:breakpoint;library:1;#9c
< 16> send packet: $qProcessInfo#dc
< 192> read packet:
$pid:8970;parent-pid:6678;real-uid:ffffffff;real-gid:ffffffff;effective-uid:ffffffff;effective-gid:ffffffff;triple:7838365f36342d70632d77696e646f7773;ostype:windows;endian:little;ptrsize:8;#05
< 43> send packet: $qXfer:features:read:target.xml:0,131071#78
<6850> read packet: $l<?xml version="1.0"?>
<target version="1.0">
<architecture>x86_64</architecture>
<feature>
<reg name="rax" bitsize="64" regnum="0" offset="0" encoding="uint"
format="hex" group="General Purpose Registers" ehframe_regnum="0"
dwarf_regnum="0" />
<reg name="rbx" bitsize="64" regnum="1" offset="24" encoding="uint"
format="hex" group="General Purpose Registers" ehframe_regnum="3"
dwarf_regnum="3" />
<reg name="rcx" bitsize="64" regnum="2" offset="8" encoding="uint"
format="hex" group="General Purpose Registers" ehframe_regnum="2"
dwarf_regnum="2" generic="arg1" />
<reg name="rdx" bitsize="64" regnum="3" offset="16" encoding="uint"
format="hex" group="General Purpose Registers" ehframe_regnum="1"
dwarf_regnum="1" generic="arg2" />
<reg name="rdi" bitsize="64" regnum="4" offset="56" encoding="uint"
format="hex" group="General Purpose Registers" ehframe_regnum="5"
dwarf_regnum="5" />
<reg name="rsi" bitsize="64" regnum="5" offset="48" encoding="uint"
format="hex" group="General Purpose Registers" ehframe_regnum="4"
dwarf_regnum="4" />
<reg name="rbp" bitsize="64" regnum="6" offset="40" encoding="uint"
format="hex" group="General Purpose Registers" ehframe_regnum="6"
dwarf_regnum="6" generic="fp" />
<reg name="rsp" bitsize="64" regnum="7" offset="32" encoding="uint"
format="hex" group="General Purpose Registers" ehframe_regnum="7"
dwarf_regnum="7" generic="sp" />
<reg name="r8" bitsize="64" regnum="8" offset="64" encoding="uint"
format="hex" group="General Purpose Registers" ehframe_regnum="8"
dwarf_regnum="8" generic="arg3" />
<reg name="r9" bitsize="64" regnum="9" offset="72" encoding="uint"
format="hex" group="General Purpose Registers" ehframe_regnum="9"
dwarf_regnum="9" generic="arg4" />
<reg name="r10" bitsize="64" regnum="10" offset="80" encoding="uint"
format="hex" group="General Purpose Registers" ehframe_regnum="10"
dwarf_regnum="10" />
<reg name="r11" bitsize="64" regnum="11" offset="88" encoding="uint"
format="hex" group="General Purpose Registers" ehframe_regnum="11"
dwarf_regnum="11" />
<reg name="r12" bitsize="64" regnum="12" offset="96" encoding="uint"
format="hex" group="General Purpose Registers" ehframe_regnum="12"
dwarf_regnum="12" />
<reg name="r13" bitsize="64" regnum="13" offset="104" encoding="uint"
format="hex" group="General Purpose Registers" ehframe_regnum="13"
dwarf_regnum="13" />
<reg name="r14" bitsize="64" regnum="14" offset="112" encoding="uint"
format="hex" group="General Purpose Registers" ehframe_regnum="14"
dwarf_regnum="14" />
<reg name="r15" bitsize="64" regnum="15" offset="120" encoding="uint"
format="hex" group="General Purpose Registers" ehframe_regnum="15"
dwarf_regnum="15" />
<reg name="rip" bitsize="64" regnum="16" offset="128" encoding="uint"
format="hex" group="General Purpose Registers" ehframe_regnum="16"
dwarf_regnum="16" generic="pc" />
<reg name="rflags" bitsize="64" regnum="17" offset="136" encoding="uint"
format="hex" group="General Purpose Registers" ehframe_regnum="49"
dwarf_regnum="49" generic="flags" />
<reg name="cs" bitsize="16" regnum="18" offset="144" encoding="uint"
format="hex" group="General Purpose Registers" ehframe_regnum="51"
dwarf_regnum="51" />
<reg name="fs" bitsize="16" regnum="19" offset="146" encoding="uint"
format="hex" group="General Purpose Registers" ehframe_regnum="54"
dwarf_regnum="54" />
<reg name="gs" bitsize="16" regnum="20" offset="148" encoding="uint"
format="hex" group="General Purpose Registers" ehframe_regnum="55"
dwarf_regnum="55" />
<reg name="ss" bitsize="16" regnum="21" offset="150" encoding="uint"
format="hex" group="General Purpose Registers" ehframe_regnum="52"
dwarf_regnum="52" />
<reg name="ds" bitsize="16" regnum="22" offset="152" encoding="uint"
format="hex" group="General Purpose Registers" ehframe_regnum="53"
dwarf_regnum="53" />
<reg name="es" bitsize="16" regnum="23" offset="154" encoding="uint"
format="hex" group="General Purpose Registers" ehframe_regnum="50"
dwarf_regnum="50" />
<reg name="xmm0" bitsize="128" regnum="24" offset="160" encoding="uint"
format="vector-uint64" group="Floating Point Registers" ehframe_regnum="17"
dwarf_regnum="17" />
<reg name="xmm1" bitsize="128" regnum="25" offset="176" encoding="uint"
format="vector-uint64" group="Floating Point Registers" ehframe_regnum="18"
dwarf_regnum="18" />
<reg name="xmm2" bitsize="128" regnum="26" offset="192" encoding="uint"
format="vector-uint64" group="Floating Point Registers" ehframe_regnum="19"
dwarf_regnum="19" />
<reg name="xmm3" bitsize="128" regnum="27" offset="208" encoding="uint"
format="vector-uint64" group="Floating Point Registers" ehframe_regnum="20"
dwarf_regnum="20" />
<reg name="xmm4" bitsize="128" regnum="28" offset="224" encoding="uint"
format="vector-uint64" group="Floating Point Registers" ehframe_regnum="21"
dwarf_regnum="21" />
<reg name="xmm5" bitsize="128" regnum="29" offset="240" encoding="uint"
format="vector-uint64" group="Floating Point Registers" ehframe_regnum="22"
dwarf_regnum="22" />
<reg name="xmm6" bitsize="128" regnum="30" offset="256" encoding="uint"
format="vector-uint64" group="Floating Point Registers" ehframe_regnum="23"
dwarf_regnum="23" />
<reg name="xmm7" bitsize="128" regnum="31" offset="272" encoding="uint"
format="vector-uint64" group="Floating Point Registers" ehframe_regnum="24"
dwarf_regnum="24" />
<reg name="xmm8" bitsize="128" regnum="32" offset="288" encoding="uint"
format="vector-uint64" group="Floating Point Registers" ehframe_regnum="25"
dwarf_regnum="25" />
<reg name="xmm9" bitsize="128" regnum="33" offset="304" encoding="uint"
format="vector-uint64" group="Floating Point Registers" ehframe_regnum="26"
dwarf_regnum="26" />
<reg name="xmm10" bitsize="128" regnum="34" offset="320" encoding="uint"
format="vector-uint64" group="Floating Point Registers" ehframe_regnum="27"
dwarf_regnum="27" />
<reg name="xmm11" bitsize="128" regnum="35" offset="336" encoding="uint"
format="vector-uint64" group="Floating Point Registers" ehframe_regnum="28"
dwarf_regnum="28" />
<reg name="xmm12" bitsize="128" regnum="36" offset="352" encoding="uint"
format="vector-uint64" group="Floating Point Registers" ehframe_regnum="29"
dwarf_regnum="29" />
<reg name="xmm13" bitsize="128" regnum="37" offset="368" encoding="uint"
format="vector-uint64" group="Floating Point Registers" ehframe_regnum="30"
dwarf_regnum="30" />
<reg name="xmm14" bitsize="128" regnum="38" offset="384" encoding="uint"
format="vector-uint64" group="Floating Point Registers" ehframe_regnum="31"
dwarf_regnum="31" />
<reg name="xmm15" bitsize="128" regnum="39" offset="400" encoding="uint"
format="vector-uint64" group="Floating Point Registers" ehframe_regnum="32"
dwarf_regnum="32" />
</feature>
</target>
#2a
< 26> send packet: $qStructuredDataPlugins#02
< 6> read packet: $[]#b8
< 34> send packet: $qXfer:libraries:read::0,131071#d0
< 620> read packet: $l<library-list><library
name="C:\Users\charleszablit\Developer\testing\main.exe"><section
address="0x7ff752d00000"/></library><library
name="C:\windows\System32\CsXumd64_20907.dll"><section
address="0x1cf218e0000"/></library><library
name="C:\windows\System32\KERNEL32.DLL"><section
address="0x7ffb03b00000"/></library><library
name="C:\windows\System32\KERNELBASE.dll"><section
address="0x7ffb01410000"/></library><library
name="C:\windows\SYSTEM32\ntdll.dll"><section
address="0x7ffb04a00000"/></library><library
name="C:\windows\System32\umppc20907.dll"><section
address="0x1cf218a0000"/></library></library-list>#09
< 13> send packet: $qSymbol::#5b
< 4> read packet: $#00
< 19> send packet: $p0;thread:4e28;#cb
< 20> read packet: $004095a49f000000#86
< 23> send packet: $qThreadStopInfo9a40#f9
< 7> read packet: $E2a#d8
< 16> send packet: $jThreadsInfo#c1
< 7> read packet: $E34#ac
< 104> send packet:
$qSupported:xmlRegisters=i386,arm,mips,arc;multiprocess+;fork-events+;vfork-events+;swbreak+;hwbreak+#cd
< 181> read packet:
$PacketSize=131072;QStartNoAckMode+;qEcho+;native-signals+;QThreadSuffixSupported+;QListThreadsInStopReply+;qXfer:features:read+;QNonStop+;jMultiBreakpoint+;qXfer:libraries:read+#2c
< 8> send packet: $x0,0#04
< 6> read packet: $OK#9a
< 21> send packet: $x7ffb04b20a00,200#84
< 520> read packet:
$88000000c3cccccccccccccc4883ec28b908000000e80e0000004883c428c3cccccccccccccccccc894c24084883ec28488d0db9ce0a00e8a4010000488b442428488905a0cf0a00488d4424284883c00848890530cf0a00488b0589cf0a00488905facd0a00c705e0cd0a00090400c0c705dacd0a0001000000c705e4cd0a0001000000b808000000486bc000488d0ddccd0a008b54243048891401488d0d5d360500e8c0fdffff4883c428c3cccccccccccccccccc66660f1f840000000000ccc3cccccccccccc0f1f840000000000ccc3cccccccccccc0f1f840000000000ccc3cccccccccccc0f1f840000000000458bc8448bc2668b11488b4908b801000000cd2dccc3cccccccccccc0f1f400066448b4a024c8b4208668b11488b4908b802000000cd2dccc3cccccccccccccccccccccccccc66660f1f840000000000b935000000cd2990cccccccccccccccccccccccccccc66660f1f840000000000489cd9b900010000c78102010000000000000f29b1000200000f29b910020000440f298120020000440f298930020000440f299140020000440f299950020000440f29a160020000440f29a970020000440f29b180020000440f29b9900200000fae9918010000488d1549000000ffe2cccccccccccc66660f1f840000000000489c4889417848898980000000488991880000004c8981b80000004c8989c000#a1
< 19> send packet: $x9fa4affa00,200#58
< 516> read packet:
$0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ee2bb304fb7f000000000000000000000000000000000000000000000000000000000000000000000000000000000000d7e8b203fb7f000000000000000000000000000000000000000000000000000000000000000000000000000000000000fcc3a804fb7f00000000000000000000000000000000000030fbfffff004000030fbffffd00400002100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000#58
< 24> send packet: $jThreadExtendedInfo:#b9
< 4> read packet: $#00
```
So `qHostInfo` and `qProcessInfo` both work on Windows.
However, in `ABIX86::AugmentRegisterInfo`, we use
`process_sp->GetTarget().GetArchitecture()` **before** running
`GetTarget().SetArchitecture(process_arch)` in `BuildDynamicRegisterInfo`.
That's why deferring the call to `BuildDynamicRegisterInfo` works, moving past
`SetArchitecture`.
https://github.com/llvm/llvm-project/blob/4adb32bbca24fbcd247e0725992024d922a94303/lldb/source/Plugins/ABI/X86/ABIX86.cpp#L208-L209
The ABI plugins are called `ABIX86_64` and `ABIX86_i386` so they already know
their own bits. Asking the Target seems incorrect.
https://github.com/llvm/llvm-project/pull/203498
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits