jasonmolenda created this revision. jasonmolenda added a reviewer: fixathon. jasonmolenda added a project: LLDB. Herald added a subscriber: JDevlieghere. Herald added a project: All. jasonmolenda requested review of this revision. Herald added a subscriber: lldb-commits.
Thanks to @fixathon for catching this code I added in https://reviews.llvm.org/D62764. This method clears the lower 3 bits of the second byte of an instruction, then compares it to a few values including 0x20 (fine) and 0x24, twice, with comments that seem to contradict the behavior. Of course, having masked off the low 3 bits, these duplicated entries are never matched. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D131029 Files: lldb/source/Plugins/UnwindAssembly/x86/x86AssemblyInspectionEngine.cpp Index: lldb/source/Plugins/UnwindAssembly/x86/x86AssemblyInspectionEngine.cpp =================================================================== --- lldb/source/Plugins/UnwindAssembly/x86/x86AssemblyInspectionEngine.cpp +++ lldb/source/Plugins/UnwindAssembly/x86/x86AssemblyInspectionEngine.cpp @@ -682,10 +682,6 @@ // The second byte is a ModR/M /4 byte, strip off the registers uint8_t second_byte_sans_reg = *(m_cur_insn + 1) & ~7; - // Don't handle 0x24 disp32, because the target address is - // knowable statically - pc_rel_branch_or_jump_p() will - // return the target address. - // [reg] if (second_byte_sans_reg == 0x20) return true; @@ -702,17 +698,6 @@ if (second_byte_sans_reg == 0xe0) return true; - // disp32 - // jumps to an address stored in memory, the value can't be cached - // in an unwind plan. - if (second_byte_sans_reg == 0x24) - return true; - - // use SIB byte - // ff 24 fe jmpq *(%rsi,%rdi,8) - if (second_byte_sans_reg == 0x24) - return true; - return false; }
Index: lldb/source/Plugins/UnwindAssembly/x86/x86AssemblyInspectionEngine.cpp =================================================================== --- lldb/source/Plugins/UnwindAssembly/x86/x86AssemblyInspectionEngine.cpp +++ lldb/source/Plugins/UnwindAssembly/x86/x86AssemblyInspectionEngine.cpp @@ -682,10 +682,6 @@ // The second byte is a ModR/M /4 byte, strip off the registers uint8_t second_byte_sans_reg = *(m_cur_insn + 1) & ~7; - // Don't handle 0x24 disp32, because the target address is - // knowable statically - pc_rel_branch_or_jump_p() will - // return the target address. - // [reg] if (second_byte_sans_reg == 0x20) return true; @@ -702,17 +698,6 @@ if (second_byte_sans_reg == 0xe0) return true; - // disp32 - // jumps to an address stored in memory, the value can't be cached - // in an unwind plan. - if (second_byte_sans_reg == 0x24) - return true; - - // use SIB byte - // ff 24 fe jmpq *(%rsi,%rdi,8) - if (second_byte_sans_reg == 0x24) - return true; - return false; }
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits