krytarowski added a comment. 1. I was trying to comment out `DBG` registers (as unsupported by NetBSD) from `RegisterInfos_x86_64.h` with the following patch:
diff --git a/lldb-git/patches/patch-lldb_source_Plugins_Process_Utility_RegisterInfos__x86__64.h b/lldb-git/patches/patch-lldb_source_Plugins_Process_Utility_RegisterInfos__x86__64.h new file mode 100644 index 0000000..280330e --- /dev/null +++ b/lldb-git/patches/patch-lldb_source_Plugins_Process_Utility_RegisterInfos__x86__64.h @@ -0,0 +1,74 @@ +$NetBSD$ + +--- lldb/source/Plugins/Process/Utility/RegisterInfos_x86_64.h.orig 2015-12-06 02:57:30.000000000 +0000 ++++ lldb/source/Plugins/Process/Utility/RegisterInfos_x86_64.h +@@ -48,7 +48,9 @@ + // Number of bytes needed to represent a YMM register. + #define YMM_SIZE sizeof(YMMReg) + ++#ifndef NO_DEBUGREGS + #define DR_SIZE sizeof(((DBG*)NULL)->dr[0]) ++#endif + + // RegisterKind: EHFrame, DWARF, Generic, Process Plugin, LLDB + +@@ -85,10 +87,12 @@ + { dwarf_##reg##i##h_x86_64, dwarf_##reg##i##h_x86_64, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, lldb_##reg##i##_x86_64 }, \ + NULL, NULL } + ++#ifndef NO_DEBUGREGS + #define DEFINE_DR(reg, i) \ + { #reg#i, NULL, DR_SIZE, DR_OFFSET(i), eEncodingUint, eFormatHex, \ + { LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, \ + LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM }, NULL, NULL } ++#endif + + #define DEFINE_GPR_PSEUDO_32(reg32, reg64) \ + { #reg32, NULL, 4, GPR_OFFSET(reg64), eEncodingUint, \ +@@ -251,6 +255,7 @@ g_register_infos_x86_64[] = + DEFINE_YMM(ymm, 14), + DEFINE_YMM(ymm, 15), + ++#ifndef NO_DEBUGREGS + // Debug registers for lldb internal use + DEFINE_DR(dr, 0), + DEFINE_DR(dr, 1), +@@ -259,7 +264,8 @@ g_register_infos_x86_64[] = + DEFINE_DR(dr, 4), + DEFINE_DR(dr, 5), + DEFINE_DR(dr, 6), +- DEFINE_DR(dr, 7) ++ DEFINE_DR(dr, 7), ++#endif + }; + + static_assert((sizeof(g_register_infos_x86_64) / sizeof(g_register_infos_x86_64[0])) == k_num_registers_x86_64, +@@ -314,10 +320,12 @@ do { + g_register_infos[lldb_##reg##i##_i386].byte_offset = YMM_OFFSET(i); \ + } while(false); + ++#ifndef NO_DEBUGREGS + #define UPDATE_DR_INFO(reg_index) \ + do { \ + g_register_infos[lldb_dr##reg_index##_i386].byte_offset = DR_OFFSET(reg_index); \ + } while(false); ++#endif + + // Update the register offsets + UPDATE_GPR_INFO(eax, rax); +@@ -400,6 +408,7 @@ do { + UPDATE_YMM_INFO(ymm, 6); + UPDATE_YMM_INFO(ymm, 7); + ++#ifndef NO_DEBUGREGS + UPDATE_DR_INFO(0); + UPDATE_DR_INFO(1); + UPDATE_DR_INFO(2); +@@ -408,6 +417,7 @@ do { + UPDATE_DR_INFO(5); + UPDATE_DR_INFO(6); + UPDATE_DR_INFO(7); ++#endif + + #undef UPDATE_GPR_INFO + #undef UPDATE_GPR_INFO_8H But I get this assert being triggered: In file included from /tmp/pkgsrc-tmp/wip/lldb-git/work/lldb/source/Plugins/Process/Utility/RegisterContextNetBSD_x86_64.cpp:59:0: /tmp/pkgsrc-tmp/wip/lldb-git/work/lldb/source/Plugins/Process/Utility/RegisterInfos_x86_64.h:271:1: error: static assertion failed: g_register_infos_x86_64 has wrong number of register infos static_assert((sizeof(g_register_infos_x86_64) / sizeof(g_register_infos_x86_64[0])) == k_num_registers_x86_64, ^ What's the correct approach to address it? Mirror modified `RegisterInfos_x86_64.h` in `RegisterContextNetBSD_x86_64.cpp` and removed/altered `static_assert`? 2. I don't understand "marking registers as valid". NetBSD offers `ptrace`(2) call to with a pair of accessors set or get, one for `REG` and the other for `FPREG`. Thank you in advance. Repository: rL LLVM http://reviews.llvm.org/D16508 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits