Skip to content
  • Greg Clayton's avatar
    Fixed issues with RegisterContext classes and the subclasses. There was · 5ccbd294
    Greg Clayton authored
    an issue with the way the UnwindLLDB was handing out RegisterContexts: it
    was making shared pointers to register contexts and then handing out just
    the pointers (which would get put into shared pointers in the thread and
    stack frame classes) and cause double free issues. MallocScribble helped to
    find these issues after I did some other cleanup. To help avoid any
    RegisterContext issue in the future, all code that deals with them now
    returns shared pointers to the register contexts so we don't end up with
    multiple deletions. Also now that the RegisterContext class doesn't require
    a stack frame, we patched a memory leak where a StackFrame object was being
    created and leaked.
    
    Made the RegisterContext class not have a pointer to a StackFrame object as
    one register context class can be used for N inlined stack frames so there is
    not a 1 - 1 mapping. Updates the ExecutionContextScope part of the 
    RegisterContext class to never return a stack frame to indicate this when it
    is asked to recreate the execution context. Now register contexts point to the
    concrete frame using a concrete frame index. Concrete frames are all of the
    frames that are actually formed on the stack of a thread. These concrete frames
    can be turned into one or more user visible frames due to inlining. Each 
    inlined stack frame has the exact same register context (shared via shared
    pointers) as any parent inlined stack frames all the way up to the concrete 
    frame itself.
    
    So now the stack frames and the register contexts should behave much better.
    
    llvm-svn: 122976
    5ccbd294
Loading