Ard, Many thanks for your help. It works. Vladimir
-----Original Message----- From: Ard Biesheuvel [mailto:ard.biesheu...@linaro.org] Sent: Monday, November 09, 2015 10:31 PM To: Vladimir Olovyannikov Cc: Cohen, Eugene; edk2-devel@lists.01.org Subject: Re: [edk2] Strange behavior of the DS-5 debugger on AARCH64 with step-by-step debugging in uefi On 9 November 2015 at 19:01, Vladimir Olovyannikov <volov...@broadcom.com> wrote: > -----Original Message----- > From: Ard Biesheuvel [mailto:ard.biesheu...@linaro.org] > Sent: Sunday, November 08, 2015 10:52 PM > To: Vladimir Olovyannikov > Cc: Cohen, Eugene; edk2-devel@lists.01.org > Subject: Re: [edk2] Strange behavior of the DS-5 debugger on AARCH64 with > step-by-step debugging in uefi > > On 6 November 2015 at 21:32, Vladimir Olovyannikov > <volov...@broadcom.com>> wrote: >>> Hello Ard, Eugene, >>> Thank you for explanation. >>> >>> Ard, I tried the patch, but it cannot be applied to the latest (pulled a >>> minute ago, git-svn-id: >>> https://svn.code.sf.net/p/edk2/code/trunk/edk2@18732 >>> 6f19259b-4bc3-4df7-8a09-765794883524) >>> tree: all 3 hunks failed. Which commit should I be based on to apply the >>> patch? >>> >>> Anyway I found the lines manually and changed them. However, when I try to >>> >>> source /uefi/ArmPlatformPkg/Scripts/Ds5/cmd_load_symbols.py -f >>> (0x85000000,0x00280000) -m (0x80000000,0x40000000) -a >>> I am getting >>> >>> ERROR(?): ValueError: need more than 1 value to unpack >>> File " /uefi/ArmPlatformPkg/Scripts/Ds5/cmd_load_symbols.py", line 94, in >>> <module>> >>> armplatform_debugger.load_all_symbols() >>> ERROR(CMD656): >>> # in /uefi/BroadcomPlatformPkg/NS2Pkg/Scripts/armpkg_syms.ds:2 while >>> executing: source /uefi/ArmPlatformPkg/Scripts/Ds5/cmd_load_symbols.py -f >>> (0x85000000,0x00280000) -m (0x80000000,0x40000000) -a >>> ! The script /uefi/ArmPlatformPkg/Scripts/Ds5/cmd_load_symbols.py failed to >>> complete due to an error during execution of the script >>> >>> Replacing the script with the older version makes it work as before, but >>> again the debugger is useless. >>> >>> Any idea what is wrong? >>> > >>No, not a clue. But could you please share the diff between the >>version of the script that works for you and the version that doesn't? >>I don't think the patch I sent could trigger the error you are seeing, >>so it must be something else that changed. > Here is the diff. > > --- firmware_volume_old.py 2015-06-24 15:15:37.000000000 -0700 > +++ firmware_volume_new.py 2015-11-06 11:49:24.321730539 -0800 > @@ -91,12 +91,7 @@ > return filename[0:string.find(filename,'\0')] > > def get_debug_elfbase(self): > - stripped_size = struct.unpack("<H", > self.ec.getMemoryService().read(self.base_te + 0x6, 2, 32))[0] > - stripped_size -= EfiSectionTE.SIZEOF_EFI_TE_IMAGE_HEADER > - > - base_of_code = self.ec.getMemoryService().readMemory32(self.base_te > + 0xC) > - > - return self.base_te + base_of_code - stripped_size > + return self.base_pe32 > This hunk is incorrect. Could you please try the patch instead? (attached, this time, so it should apply more easily) Thanks, Ard. > class EfiSectionPE32: > def __init__(self, ec, base_pe32): > @@ -131,17 +126,7 @@ > return filename[0:string.find(filename,'\0')] > > def get_debug_elfbase(self): > - # Offset from dos hdr to PE file hdr > - pe_file_header = self.base_pe32 + > self.ec.getMemoryService().readMemory32(self.base_pe32 + 0x3C) > - > - base_of_code = self.base_pe32 + > self.ec.getMemoryService().readMemory32(pe_file_header + 0x28) > - base_of_data = self.base_pe32 + > self.ec.getMemoryService().readMemory32(pe_file_header + 0x2C) > - > - if (base_of_code < base_of_data) and (base_of_code != 0): > - return base_of_code > - else: > - return base_of_data > - > + return self.base_pe32 > class EfiSectionPE64: > def __init__(self, ec, base_pe64): > self.ec = ec > @@ -176,16 +161,7 @@ > return filename[0:string.find(filename,'\0')] > > def get_debug_elfbase(self): > - # Offset from dos hdr to PE file hdr > - pe_file_header = self.base_pe64 + > self.ec.getMemoryService().readMemory32(self.base_pe64 + 0x3C) > - > - base_of_code = self.base_pe64 + > self.ec.getMemoryService().readMemory32(pe_file_header + 0x28) > - base_of_data = self.base_pe64 + > self.ec.getMemoryService().readMemory32(pe_file_header + 0x2C) > - > - if (base_of_code < base_of_data) and (base_of_code != 0): > - return base_of_code > - else: > - return base_of_data > + return self.base_pe64 > > class FirmwareFile: > EFI_FV_FILETYPE_RAW = 0x01 > >>> Eugene, so you do not use the so convenient cmd_load_symbols.py script to >>> load all symbols? >>> I dumped efi and dll as you suggested. The .text and .data sections in >>> PE-COFF and ELF match 1:1 for me. Still the debugger is useless as it >>> points to non-relevant code. >>> > >>Indeed, this is expected. The PE/COFF and ELF versions of the binary >>should look entirely the same, it's only the DS-5 scripts that needs >>to have the hack removed to deal with the difference. > OK, I see. > > Thank you, > > Vladimir _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel