labath added inline comments.

================
Comment at: 
lldb/source/Plugins/Process/elf-core/RegisterContextPOSIXCore_arm64.cpp:82-106
+uint32_t
+RegisterContextCorePOSIX_arm64::CalculateSVEOffset(uint32_t reg_num) const {
+  uint32_t sve_offset = 0;
+  if (m_sve_state == SVE_STATE::SVE_STATE_FPSIMD) {
+    if (IsSVEZ(reg_num))
+      sve_offset = (reg_num - GetRegNumSVEZ0()) * 16;
+    else if (reg_num == GetRegNumFPSR())
----------------
omjavaid wrote:
> labath wrote:
> > I'm confused by this function. If I understant the SVE_PT macros and the 
> > logic in `RegisterInfoPOSIX_arm64::ConfigureVectorRegisterInfos` correctly, 
> > then they both seem to encode the same information. And it seems to me that 
> > this function should just be `reg_infos[reg_num].offset - some_constant`, 
> > which is the same thing that we're doing for the arm FP registers when SVE 
> > is disabled, and also for most other architectures too.
> > 
> > Why is that not the case? Am I missing something? If they are not encoding 
> > the same thing, could they be made to encode the same thing?
> This function calculates offset of a particular register in core note data. 
> SVE data in core dump is similar to what PTrace emits and offsets into this 
> data is not linear. SVE macros are used to access those offsets based on 
> register numbers and currently selected vector length.
> Also for the purpose of ease we have linear offsets in SVE register infos and 
> it helps us simplify register data once it makes way to 
> GDBRemoteRegisterContext on the client side.
Could you give an example of the non-linearity of the core dump data? (Some 
registers, and their respective core file and gdb-remote offsets)


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D77047/new/

https://reviews.llvm.org/D77047



_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to