Yep.

> On Jul 24, 2014, at 5:28 PM, Todd Fiala <tfi...@google.com> wrote:
> 
> Hey Jason - if Tong verifies this is all still good, is that essentially a 
> LGTM from you?  (i.e. is that something I can get checked in for him?)
> 
> 
> On Thu, Jul 24, 2014 at 5:16 PM, Jason Molenda <jmole...@apple.com> wrote:
> Good catch Tong.  I don't think clang generates this instruction pattern (it 
> normally pushq's all the registers in the prologue that it wants to preserve) 
> so we've never hit this bug.
> 
> I don't have a strong preference about mov_reg_to_local_stack_frame_p() 
> returning a positive value in rbp_offset except that we have other sections 
> returning an offset from the CFA e.g. UnwindPlan::Row::GetCFAOffset() which 
> return a positive offset value that must be subtracted from the CFA to get 
> the correct address.
> 
> If you would prefer to change mov_reg_to_local_stack_frame_p() to return a 
> negative value, I'm not going to argue against it.  But maybe a slight change 
> to your patch like this?  It's complicated enough code that I added a couple 
> of comments while I was at it.
> 
> 
> 
> 
> 
> 
> 
> > On Jul 24, 2014, at 3:33 PM, Tong Shen <endlessr...@google.com> wrote:
> >
> > Hi jmolenda, lldb-commits,
> >
> > While hacking around x86 assembly profiler, I found a problem about 
> > non-volatile register information.
> >
> > At UnwindAssembly-x86.cpp line 630 (ViewVC link), stack_offset is 
> > calculated but not used.
> > I think it should be used in line 636:
> >         regloc.SetAtCFAPlusOffset (-row->GetCFAOffset() + stack_offset);
> > instead of what's there now:
> >         regloc.SetAtCFAPlusOffset (-row->GetCFAOffset());
> >
> > Also, in line 417 of the same file, when calculating stack_offset, why is 
> > rbp_offset set to abs(offset)?
> >
> > For testing, I wrote an assembly (test.S in attachment) to test if lldb can 
> > recover non-volatile registers.
> > You can put a breakpoint after where asm_frame() overrides %rbx, then do "f 
> > 1" & "register read" to see if %rbx is correctly restored.
> > In my test, unmodified lldb gives wrong %rbx.
> > Attached patch solved this problem, and make lldb recover those registers 
> > correctly.
> >
> > Am I missing anything here? Is the original behavior intentional? Please 
> > correct me if I'm wrong :-)
> >
> > Thank you.
> >
> > --
> > Best Regards, Tong Shen
> > <test.S><1.patch>
> 
> 
> _______________________________________________
> lldb-commits mailing list
> lldb-commits@cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits
> 
> 
> 
> 
> -- 
> Todd Fiala |   Software Engineer |     tfi...@google.com |     650-943-3180
> 

_______________________________________________
lldb-commits mailing list
lldb-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits

Reply via email to