asmith marked an inline comment as done. asmith added inline comments.
================ Comment at: lldb/source/Plugins/Process/Utility/RegisterContextWindows_x86_64.cpp:141 +GetRegisterInfo_WoW64(const lldb_private::ArchSpec &arch) { + // A WoW64 register info is the same as the i386's. + std::vector<lldb_private::RegisterInfo> &g_register_infos = ---------------- labath wrote: > labath wrote: > > asmith wrote: > > > labath wrote: > > > > Hui wrote: > > > > > labath wrote: > > > > > > Why is all of this complexity necessary? Couldn't you just switch > > > > > > on the target architecture in `CreateRegisterInfoInterface` in > > > > > > NativeRegisterContextWindows_x86_64.cpp and create either > > > > > > `RegisterContextWindows_WoW64` or `RegisterContextWindows_x86_64` ? > > > > > > > > > > > > In fact, if RegisterContextWindows_WoW64 is identical to > > > > > > RegisterContextWindows_i386, then why do you even need the _WoW64 > > > > > > version of the class in the first place? FWIW, linux also does not > > > > > > have a RegisterContextLinux_32_bit_process_on_64_bit_kernel class... > > > > > I think WoW64 is i686 that shall deserve a separate arch specific > > > > > implementation? > > > > I am sorry, but I don't follow. Can you repeat the question? > > > > > > > > (FWIW, I don't believe that the fact that two things are different from > > > > a certain point of view justifies copy-pasting (at least) 150 LOC. If > > > > you think it's confusing to use something called "i386" in things > > > > dealing with WoW64, you can always typedef the WOW64 context to it, or > > > > rename the i386 context to something more generic.) > > > I don't want this to block the review and have removed the code. > > Thanks. FTR, I'm not opposed to splitting these classes again in the > > future, if we develop a need for them to diverge (though it would be nice > > to find a way to factor the common parts in that case). > > > > However, there's one more thing that bothers me here. It's this business > > with constructing a `RegisterContextWindows_i386` here, copying the entries > > out of it, and re-using them elsewhere while asserting that things were > > done in the right order. It seems very complex, and I'm not sure that > > complexity is needed. It seems to me like all of that could be removed if > > you just made the decision which set of registers to use one level up > > (i.e., in `CreateRegisterInfoInterface` in > > NativeRegisterContextWindows_x86_64.cpp. You could just have that function > > switch on the process byte size, and return RegisterContextWindows_i386 or > > RegisterContextWindows_x86_64. This is the same way things are done on x86 > > linux (see NativeRegisterContextLinux_x86_64.cpp). > Unfortunately NativeRegisterContextLinux_x86_64 is not good example here. It > turns I misread, and that class actually switches on the *host* architecture > instead of *target*, and its implementation of RegisterContextLinux_x86_64 > does indeed the i386 copying tricks that are very similar to what you do > here. However, that class has the "excuse" of needing to fix up the register > offsets in the i386-on-x86_64 case (for those following along: see > `UPDATE_REGISTER_INFOS_I386_STRUCT_WITH_X86_64_OFFSETS`). You don't need to > do anything like that here, so I would hope that we can do something simpler > here. > > And I'll try to figure out a way to do the linux thing in a saner fashion... Are you accepting this review? CHANGES SINCE LAST ACTION https://reviews.llvm.org/D63165/new/ https://reviews.llvm.org/D63165 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits