On 10 November 2015 at 18:41, Vladimir Olovyannikov <volov...@broadcom.com> wrote: > Ard, > Many thanks for your help. It works. >
Great! Thanks for reporting back. -- Ard. > -----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