EmulatorPkg: Fix XCODE5 lldb issues

Fix scripts to support lldb symbolic debugging when
using XCODE5 tool chain.

Cc: Jordan Justen <jordan.l.justen@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Signed-off-by: Andrew Fish <afish@apple.com>
Reviewed-by: Michael D Kinney <michael.d.kinney@intel.com>
Acked-by: Jordan Justen <jordan.l.justen@intel.com>
Tested-by: Andrew Fish <afish@apple.com>
This commit is contained in:
Andrew Fish 2019-08-15 09:50:01 -07:00 committed by Michael D Kinney
parent 4331b9f5f0
commit 32e55c9f18
2 changed files with 15 additions and 18 deletions

View File

@ -346,6 +346,11 @@ def TypePrintFormating(debugger):
debugger.HandleCommand("type summary add CHAR8 --python-function lldbefi.CHAR8_TypeSummary")
debugger.HandleCommand('type summary add --regex "CHAR8 \[[0-9]+\]" --python-function lldbefi.CHAR8_TypeSummary')
debugger.HandleCommand(
'setting set frame-format "frame #${frame.index}: ${frame.pc}'
'{ ${module.file.basename}{:${function.name}()${function.pc-offset}}}'
'{ at ${line.file.fullpath}:${line.number}}\n"'
)
gEmulatorBreakWorkaroundNeeded = True
@ -381,15 +386,16 @@ def LoadEmulatorEfiSymbols(frame, bp_loc , internal_dict):
Error = lldb.SBError()
FileNamePtr = frame.FindVariable ("FileName").GetValueAsUnsigned()
FileNameLen = frame.FindVariable ("FileNameLength").GetValueAsUnsigned()
FileName = frame.thread.process.ReadCStringFromMemory (FileNamePtr, FileNameLen, Error)
if not Error.Success():
print "!ReadCStringFromMemory() did not find a %d byte C string at %x" % (FileNameLen, FileNamePtr)
# make breakpoint command contiue
frame.GetThread().GetProcess().Continue()
return False
debugger = frame.thread.process.target.debugger
if frame.FindVariable ("AddSymbolFlag").GetValueAsUnsigned() == 1:
LoadAddress = frame.FindVariable ("LoadAddress").GetValueAsUnsigned()
LoadAddress = frame.FindVariable ("LoadAddress").GetValueAsUnsigned() - 0x240
debugger.HandleCommand ("target modules add %s" % FileName)
print "target modules load --slid 0x%x %s" % (LoadAddress, FileName)
@ -405,7 +411,7 @@ def LoadEmulatorEfiSymbols(frame, bp_loc , internal_dict):
print "!lldb.target.RemoveModule (%s) FAILED" % SBModule
# make breakpoint command contiue
frame.thread.process.Continue()
return False
def GuidToCStructStr (guid, Name=False):
#

View File

@ -209,21 +209,12 @@ fi
if [[ "$RUN_EMULATOR" == "yes" ]]; then
case `uname` in
Darwin*)
#
# On Darwin we can't use dlopen, so we have to load the real PE/COFF images.
# This .gdbinit script sets a breakpoint that loads symbols for the PE/COFFEE
# images that get loaded in Host
#
if [[ "$CLANG_VER" == *-ccc-host-triple* ]]
then
# only older versions of Xcode support -ccc-host-tripe, for newer versions
# it is -target
cp $WORKSPACE/EmulatorPkg/Unix/lldbefi.py "$BUILD_OUTPUT_DIR/${BUILDTARGET}_$TARGET_TOOLS/$PROCESSOR"
cd $BUILD_ROOT_ARCH; /usr/bin/lldb --source $WORKSPACE/EmulatorPkg/Unix/lldbinit Host
exit $?
else
cp $WORKSPACE/EmulatorPkg/Unix/.gdbinit "$BUILD_OUTPUT_DIR/${BUILDTARGET}_$TARGET_TOOLS/$PROCESSOR"
fi
cd $BUILD_ROOT_ARCH
/usr/bin/lldb \
-o "command script import $WORKSPACE/EmulatorPkg/Unix/lldbefi.py" \
-o 'script lldb.debugger.SetAsync(True)' \
-o "run" ./Host
exit $?
;;
esac