[Bug 37485] New: LLDB reads wrong registers on 64bit Windows

Bug ID 37485
Summary LLDB reads wrong registers on 64bit Windows
Product lldb
Version 6.0
Hardware PC
OS Windows NT
Status NEW
Severity enhancement
Priority P
Component All Bugs
Assignee lldb-dev@lists.llvm.org
Reporter kenji.koyanagi@gmail.com
CC llvm-bugs@lists.llvm.org

LLDB reads wrong registers on 64bit Windows because
RegisterContextWindows_x64::GetRegisterInfoAtIndex returns wrong reference.
I encountered broken backtrace when the program stopped at function which does
not have prologue code, such as compiled with '-fomit-frame-pointer'.
In this situation, CFA is equal to rsp but LLDB reads r9.

I investigated the cause.
RegisterContextWindows_x64::GetRegisterInfoAtIndex depends the order of
lldb_XXX_x86_64 values, but RegisterIndex/g_register_infos/g_gpr_reg_indices
does not follow order.

In source/Plugins/Process/Utility/lldb-x86-register-enums.h
The order of GPRs is rax, rbx, rcx, rdx, rdi, rsi, rbp, rsp, r8, ...

In source/Plugins/Process/Windows/Common/x64/RegisterContextWindows_x64.cpp
The order of GPRs is rax, rbx, rcx, rdx, rdi, rsi, r8, r9, r10, ...

I am using is what I built by myself on MinGW.

Stella Stamenova changed bug 37485

What Removed Added
Resolution FIXED
CC stilis@microsoft.com
Status NEW RESOLVED

Comment # 3 on bug 37485 from Stella Stamenova

I committed your patch to the mainline. Thanks!

This fixed 8 or so tests in the lldbsuite as well.