Whoops wrong compiler. Here is an update. I added the flags so this one 
reproduces the issue.

https://godbolt.org/#z:OYLghAFBqd5QCxAYwPYBMCmBRdBLAF1QCcAaPECAMzwBtMA7AQwFtMQByARg9KtQYEAysib0QXACx8BBAKoBnTAAUAHpwAMvAFYTStJg1DIApACYAQuYukl9ZATwDKjdAGFUtAK4sGIM6SuADJ4DJgAcj4ARpjEINIADqgKhE4MHt6%2B/qRJKY4CIWGRLDFx0naYDmlCBEzEBBk%2BfgEVVQI1dQSFEdGx8ba19Y1ZLYNdoT0lfZIAlLaoXsTI7BwA9KsA1AAqAJ4JmBs7C8QbaFgbCLGYpBskG7SoTOgbhhuYqqwJ9AB0JhoAgqECBsFABHLx1TAQIEbBg%2BGYbEwAdisAI26I2xEwBEWDFhPg2ACp8SwTABmVH/ZEAEQ4c1onAArLw/BwtKRUJw3NZrCDjstEWYyTxSARNHS5gBrECMjT6TiSFnijmcXgKEBysVsumkOCwJBoFgJOixciUQ3G%2BhxYBcMxcPh0AixdUQKLKqKhOo7Tgiw1sQQAeQYtG92tIWBYhmA4jD%2BCxVQAbph1WH3pUvE6fbwgZgGWHaHgosQvR4sMqCMQ8Cws3MqAZgAoAGp4TAAdwD%2B1ZIv4ghEYnYUhkgkUKnUYd09oMRhQPMs%2BkL6sgc1QCXyDBTAFoA2SNhvI0sEOTqQpJTsDJLMGrc5U1y4GO5PE09MEJsVSnpcqkBMM/PbP2vujfPp7VaNcOiGR8shA682gYcDxiKXo4hAsYfz0BQxkApCJDmBR%2BQHUUsRWHh6SZJUw05DhVAADgANg3WjJA2YBkGQDZbW%2BLgNggblLGsG5cEIO5zGFG4PCNE0ThErgZl4LUtDmCADVQCSrTNCALUklApxtSQNDlGhaCdYgXTdMMPWYYhQ19FT/QIIMQ2VCMoxjdk4xvPAkxTdk02QDNiOzQRc2VAsixLDAVnZCsqxrPh6ybFt207LMh2EURxEHHt5CUNRlV0AIdJnPi51CxcIGXVc0k3bdd33ZBDzJY9T3PS9bBg28IFcND7RfRCpmQnJki/dJIN/Qa8jSLD%2BvQ9rqlQ0aZvsMDMNfbCUM6bqBk6Kb3xk%2BZFmWPQK0wALSI4ZlSFZdlKJo%2BjGNOHT2Mkb4NBe7jeKsOcNkEogpKFe0NnEy1YkFMkzFk0VxUUpB8CoKh1KyvsMukLKR1y/MEHVSdMdhqgCD2dg5WITHsmJhRcfx/YNTOi6rt4SjqTwOGNmbNsQduhimJYtiOK4hMFA2Dn7uQR6pBel65KhqUZTlPNFUu5VKLVbJ5IleUODMcjrtVSHtRmOYkxMtJ4iAA

Thanks,

Andrew Fish

> On May 18, 2023, at 11:45 AM, Andrew Fish via groups.io 
> <afish=apple....@groups.io> wrote:
> 
> Mike,
> 
> This is a good way to play around with fixes, and to report bugs. You can see 
> the assembler for different compilers with different flag. 
> 
> https://godbolt.org/#z:OYLghAFBqd5QCxAYwPYBMCmBRdBLAF1QCcAaPECAMzwBtMA7AQwFtMQByARg9KtQYEAysib0QXACx8BBAKoBnTAAUAHpwAMvAFYTStJg1DIApACYAQuYukl9ZATwDKjdAGFUtAK4sGIM6SuADJ4DJgAcj4ARpjEINIADqgKhE4MHt6%2B/qRJKY4CIWGRLDFx0naYDmlCBEzEBBk%2BfgEVVQI1dQSFEdGx8ba19Y1ZLYNdoT0lfZIAlLaoXsTI7BwA9KsA1AAqAJ4JmBs7C8QbaFgbCLGYpBskG7SoTOgbhhuYqqwJ9AB0JhoAgqECBsFABHLx1TAQIEbBg%2BGYbEwAdisAI26I2xEwBEWDFhPg2ACp8SwTABmVH/ZEAEQ4c1onAArLw/BwtKRUJw3NZrCDjstEWYyTxSARNHS5gBrECMjT6TiSFnijmcXgKEBysVsumkOCwJBoFgJOixciUQ3G%2BhxYBcMxcPh0AixdUQKLKqKhOo7Tgiw1sQQAeQYtG92tIWBYhmA4jD%2BCxVQAbph1WH3pUvE6fbwgZgGWHaHgosQvR4sMqCMQ8Cws3MqAZgAoAGp4TAAdwD%2B1ZIv4ghEYnYUhkgkUKnUYd09oMRhQPMs%2BkL6sgc1QCXyDBTAFoA2SNhvI0sEOTqQpJTsDJLMGrc5U1y4GO5PE09MEJsVSnpcqkBMM/PbP2vujfPp7VaNcOiGR8shA682gYcDxiKXo4hAsYfz0BQxkApCJDmBR%2BQHUUsRWHh6SZJUw05DhVAADgANg3WjJA2YBkGQDZbW%2BLgNggblLGsG5cEIO5zGFG4PCNE0ThErgZl4LUtDmCADVQCSrTNCALUklApxtSQNDlGhaCdYgXTdMMPWYYhQ19FT/QIIMQ2VCMoxjdk4xvPAkxTdk02QDNiOzQRc2VAsixLDAVnZCsqxrPh6ybFt207LMh2EURxEHHt5CUNRlV0AIdJnPi51CxcIGXVc0k3bdd33ZBDzJY9T3PS9bBg28IFcND7RfRCpmQnJki/dJIN/Qa8jSLD%2BvQ9rqlQ0aZvsMDMNfbCUM6bqBk6Kb3xk%2BZFmWPQK0wALSI4ZlSFZdlKJo%2BjGNOHT2Mkb4NBe7jeKsOcNkEogpKFe0NnEy1YkFMkzFk0VxUUpB8CoKh1KyvsMukLKR1y/MEHVSdMdhqgCD2dg5WITHsmJhRcfx/YNTOi6rt4SjqTwOGNmbNsQduhimJYtiOK4hMFA2Dn7uQR6pBel65KhqUZTlPNFUu5VKLVbJ5IleUODMcjrtVSHtRmOYkxMtJ4iAA
> 
> Sorry I’m traveling and in Cupertino with lots of meetings so I did not have 
> time to adjust the compiler flags….
> 
> Thanks,
> 
> Andrew Fish
> 
>> On May 18, 2023, at 10:24 AM, Andrew (EFI) Fish <af...@apple.com> wrote:
>> 
>> Mike,
>> 
>> I guess my other question… If this turns out to be a compiler bug should we 
>> scope the change to the broken toolchain. I’m not sure what the right answer 
>> is for that, but I want to ask the question? 
>> 
>> Thanks,
>> 
>> Andrew Fish
>> 
>>> On May 18, 2023, at 10:19 AM, Michael D Kinney <michael.d.kin...@intel.com> 
>>> wrote:
>>> 
>>> Andrew,
>>>  
>>> This might work for XIP.  Set non const global to initial value that is 
>>> expected value to stay in dead loop.
>>>  
>>> UINTN  mDeadLoopCount = 0;
>>>  
>>> VOID
>>> CpuDeadLoop(
>>>   VOID
>>>   ) 
>>> {
>>>   while (mDeadLoopCount == 0) {
>>>       CpuPause();
>>>   }
>>> }
>>>  
>>> When deadloop is entered, developer can not change value of mDeadLoopCount, 
>>> but they can use debugger to force exit loop and return from function.
>>>  
>>> Mike
>>>  
>>>  
>>> From: Andrew (EFI) Fish <af...@apple.com <mailto:af...@apple.com>> 
>>> Sent: Thursday, May 18, 2023 10:09 AM
>>> To: Kinney, Michael D <michael.d.kin...@intel.com 
>>> <mailto:michael.d.kin...@intel.com>>
>>> Cc: edk2-devel-groups-io <devel@edk2.groups.io 
>>> <mailto:devel@edk2.groups.io>>; Ni, Ray <ray...@intel.com 
>>> <mailto:ray...@intel.com>>; Rebecca Cran <rebe...@bsdio.com 
>>> <mailto:rebe...@bsdio.com>>
>>> Subject: Re: [edk2-devel] CpuDeadLoop() is optimized by compiler
>>>  
>>> Mike,
>>>  
>>> Good point, that is why we are using the stack ….
>>>  
>>> The only other thing I can think of is to pass the address of Index to some 
>>> inline assembler, or an asm no op function, to give it a side effect the 
>>> compiler can’t resolve. 
>>>  
>>> Thanks,
>>>  
>>> Andrew Fish
>>> 
>>> 
>>> On May 18, 2023, at 10:05 AM, Kinney, Michael D <michael.d.kin...@intel.com 
>>> <mailto:michael.d.kin...@intel.com>> wrote:
>>>  
>>> Static global will not work for XIP
>>>  
>>> Mike
>>>  
>>> From: Andrew (EFI) Fish <af...@apple.com <mailto:af...@apple.com>> 
>>> Sent: Thursday, May 18, 2023 9:49 AM
>>> To: edk2-devel-groups-io <devel@edk2.groups.io 
>>> <mailto:devel@edk2.groups.io>>; Kinney, Michael D 
>>> <michael.d.kin...@intel.com <mailto:michael.d.kin...@intel.com>>
>>> Cc: Ni, Ray <ray...@intel.com <mailto:ray...@intel.com>>; Rebecca Cran 
>>> <rebe...@bsdio.com <mailto:rebe...@bsdio.com>>
>>> Subject: Re: [edk2-devel] CpuDeadLoop() is optimized by compiler
>>>  
>>> Mike,
>>>  
>>> I pinged some compiler experts to see if our code is correct, or if the 
>>> compiler has an issue. Seems to be trending compiler issue right now, but 
>>> I’ve NOT gotten feedback from anyone on the spec committee yet. 
>>>  
>>> If we move Index to a static global that would likely work around the 
>>> compiler issue.
>>>  
>>> Thanks,
>>>  
>>> Andrew Fish
>>> 
>>> 
>>> 
>>> On May 18, 2023, at 8:36 AM, Michael D Kinney <michael.d.kin...@intel.com 
>>> <mailto:michael.d.kin...@intel.com>> wrote:
>>>  
>>> Hi Ray,
>>>  
>>> So the code generated does deadloop, but is just not easy to resume from as 
>>> we have been able to do in the past.
>>>  
>>> We use CpuDeadloop() for 2 purposes.  One is a terminal condition with no 
>>> reason to ever continue.
>>>  
>>> The 2nd is a debug aide for developers to halt the system at a specific 
>>> location and then continue from that point, usually with a debugger, to 
>>> step through code to an area to evaluate unexpected behavior.
>>>  
>>> We may have to do a NASM implementation of CpuDeadloop() to make sure it 
>>> meets both use cases.
>>>  
>>> Mike
>>>  
>>> From: Ni, Ray <ray...@intel.com <mailto:ray...@intel.com>> 
>>> Sent: Thursday, May 18, 2023 3:00 AM
>>> To: devel@edk2.groups.io <mailto:devel@edk2.groups.io>
>>> Cc: Kinney, Michael D <michael.d.kin...@intel.com 
>>> <mailto:michael.d.kin...@intel.com>>; Rebecca Cran <rebe...@bsdio.com 
>>> <mailto:rebe...@bsdio.com>>; Ni, Ray <ray...@intel.com 
>>> <mailto:ray...@intel.com>>
>>> Subject: CpuDeadLoop() is optimized by compiler
>>>  
>>> Hi,
>>> Starting from certain version of Visual Studio C compiler (I don’t have the 
>>> exact version. I am using VS2019), CpuDeadLoop is now optimized quite well 
>>> by compiler.
>>>  
>>> The optimization is so “good” that it becomes harder for developers to 
>>> break out of the deadloop.
>>>  
>>> I copied the assembly instructions as below for your reference.
>>> The compiler does not generate instructions that jump out of the loop when 
>>> the Index is not zero.
>>> So in order to break out of the loop, developers need to:
>>> Manually adjust rsp by increasing 40
>>> Manually “ret”
>>>  
>>> I am not sure if anyone has interest to re-write this function so that 
>>> compiler can be “fooled” again.
>>> Thanks,
>>> Ray
>>>  
>>> =======================
>>> ; Function compile flags: /Ogspy
>>> ; File e:\work\edk2\MdePkg\Library\BaseLib\CpuDeadLoop.c
>>> ;              COMDAT CpuDeadLoop
>>> _TEXT    SEGMENT
>>> Index$ = 48
>>> CpuDeadLoop PROC                                                            
>>>         ; COMDAT
>>>  
>>> ; 26   : {
>>>  
>>> $LN12:
>>>   00000  48 83 ec 28         sub        rsp, 40                             
>>>    ; 00000028H
>>>  
>>> ; 27   :   volatile UINTN  Index;
>>> ; 28   : 
>>> ; 29   :   for (Index = 0; Index == 0;) {
>>>  
>>>   00004  48 c7 44 24 30
>>>                00 00 00 00        mov      QWORD PTR Index$[rsp], 0
>>> $LN10@CpuDeadLoo:
>>>  
>>> ; 30   :     CpuPause ();
>>>  
>>>   0000d  48 8b 44 24 30   mov      rax, QWORD PTR Index$[rsp]
>>>   00012  e8 00 00 00 00   call        CpuPause
>>>   00017  eb f4                     jmp       SHORT $LN10@CpuDeadLoo
>>> CpuDeadLoop ENDP
>>> _TEXT    ENDS
>>> END
>>>  
>>>  
>>>  
>> 
> 
> 



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#105050): https://edk2.groups.io/g/devel/message/105050
Mute This Topic: https://groups.io/mt/98987896/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: 
https://edk2.groups.io/g/devel/leave/9847357/21656/1706620634/xyzzy 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to