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

Reply via email to