fixathon marked 2 inline comments as done.
fixathon added inline comments.

================
Comment at: lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp:540
+        for (uint32_t i = 0;
+             count > 0 && count <= sizeof(gpr.r) && i < count - 1; ++i) {
           gpr.r[i] = data.GetU32(&offset);
----------------
fixathon wrote:
> jasonmolenda wrote:
> > jasonmolenda wrote:
> > > clayborg wrote:
> > > > 
> > > The `count` field for a Darwin register context is the number of 4-byte 
> > > entries in the object - it's a trick the kernel API often use so they can 
> > > add fields later and the kernel knows what version of the object the 
> > > userland process is requesting when it asks for "flavor, size" in a 
> > > `get_thread_state` call.  This Aarch32 register context is `struct GPR 
> > > {uint32_t r[16]; uint32_t cpsr};` or count 17, but `sizeof(gpr.r)` is 
> > > going to be 64.  We only want to loop for 16 entries.
> > FWIW the Aarch64 version of this function hardcodes the number of elements 
> > (where each general purpose register is 8-bytes, so count==2, and then 
> > there's one cpsr 4-byte register),
> > ```
> >         // x0-x29 + fp + lr + sp + pc (== 33 64-bit registers) plus cpsr (1
> >         // 32-bit register)
> >         if (count >= (33 * 2) + 1) {
> >           for (uint32_t i = 0; i < 29; ++i)
> >             gpr.x[i] = data.GetU64(&offset);
> >           gpr.fp = data.GetU64(&offset);
> >           gpr.lr = data.GetU64(&offset);
> >           gpr.sp = data.GetU64(&offset);
> >           gpr.pc = data.GetU64(&offset);
> >           gpr.cpsr = data.GetU32(&offset);
> > ```
> Good catch. I'll: count <= sizeof(gpr.r)/sizeof(gpr.r[0]) 
"count > 0 && count <= sizeof(gpr.r)/sizeof(uint32_t) && i < count - 1; ++i)" 
was causing a compiler warning, which is the reason I moved **count** out of 
the for loop condition


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D131554

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

Reply via email to