Marvin:
  This is a better. I suggest to create two patch sets. I think you focuses on 
the first. For the second, UNREACHABLE is a decorator, and has no real impact. 
1. For static code analyzer, add ANALYZER_UNREACHABLE macro in BaseLib.h, and 
use it in _ASSERT() macro in DebugLib.h
2. For un reachable case, add UNREACHABLE macro in BaseLib.h, and apply it in 
code pointed by Andrew. 

Thanks
Liming
> -----Original Message-----
> From: Marvin Häuser [mailto:marvin.haeu...@outlook.com]
> Sent: Monday, June 13, 2016 2:46 AM
> To: edk2-devel@lists.01.org
> Cc: Kinney, Michael D <michael.d.kin...@intel.com>; Gao, Liming
> <liming....@intel.com>
> Subject: RE: [PATCH v1 2/2] MdePkg/BaseLib: Flag CpuDeadLoop() and
> CpuBreakpoint() as ANALYZER_NORETURN.
> 
> Dear package maintainers and reviewers,
> 
> Please do not approve this patch yet. I have thought further about the
> consequences of decorating CpuDeadLoop() and CpuBreakpoint() with the
> ANALYZER_NORETURN attribute and fear that the Analyzer, against the
> original intention, could issue incorrect warnings when they are used in the
> middle of code. All code following could probably be classified as unreachable
> (as the Analyzer will rightfully assume the Cpu* functions won't return).
> 
> I do not know if there is a way to limit this behavior to ASSERT. Maybe this
> patch should be gotten rid of and UNREACHABLE() should be added within
> the ASSERT() macro itself? This would make more sense than what I have
> done in this patch, looking back.
> 
> If you have thoughts, please be kind enough to share them.
> 
> Regards,
> Marvin.
> 
> > -----Original Message-----
> > From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of
> > Marvin Häuser
> > Sent: Friday, June 10, 2016 11:02 PM
> > To: edk2-devel@lists.01.org
> > Cc: michael.d.kin...@intel.com; liming....@intel.com
> > Subject: [edk2] [PATCH v1 2/2] MdePkg/BaseLib: Flag CpuDeadLoop() and
> > CpuBreakpoint() as ANALYZER_NORETURN.
> >
> > Add the ANALYZER_NORETURN attribute to CpuDeadLoop() and
> > CpuBreakpoint() to avoid false 'possible NULL-dereference' warnings when
> > dereferencing pointers after having validated them with ASSERT(). As the
> > ANALYZER-prefixed versions are being used, the code following the calls
> will
> > not be optimized away.
> >
> > Contributed-under: TianoCore Contribution Agreement 1.0
> > Signed-off-by: Marvin Haeuser <marvin.haeu...@outlook.com>
> > ---
> >  MdePkg/Library/BaseLib/CpuDeadLoop.c           | 3 +++
> >  MdePkg/Library/BaseLib/Ebc/CpuBreakpoint.c     | 3 +++
> >  MdePkg/Library/BaseLib/Ia32/CpuBreakpoint.c    | 3 +++
> >  MdePkg/Library/BaseLib/Ipf/CpuBreakpoint.c     | 3 +++
> >  MdePkg/Library/BaseLib/Ipf/CpuBreakpointMsc.c  | 3 +++
> >  MdePkg/Library/BaseLib/X64/CpuBreakpoint.c     | 3 +++
> >  MdePkg/Library/BaseLib/X64/GccInline.c         | 3 +++
> >  MdePkg/Include/Library/BaseLib.h               | 2 ++
> >  MdePkg/Library/BaseLib/AArch64/CpuBreakpoint.S | 1 +
> >  MdePkg/Library/BaseLib/Arm/CpuBreakpoint.S     | 1 +
> >  MdePkg/Library/BaseLib/Arm/CpuBreakpoint.asm   | 1 +
> >  MdePkg/Library/BaseLib/Ia32/CpuBreakpoint.asm  | 1 +
> >  MdePkg/Library/BaseLib/X64/CpuBreakpoint.asm   | 1 +
> >  13 files changed, 28 insertions(+)
> >
> > diff --git a/MdePkg/Library/BaseLib/CpuDeadLoop.c
> > b/MdePkg/Library/BaseLib/CpuDeadLoop.c
> > index 3f9440547d4d..7e386eab61a3 100644
> > --- a/MdePkg/Library/BaseLib/CpuDeadLoop.c
> > +++ b/MdePkg/Library/BaseLib/CpuDeadLoop.c
> > @@ -28,6 +28,7 @@
> >  **/
> >  VOID
> >  EFIAPI
> > +ANALYZER_NORETURN
> >  CpuDeadLoop (
> >    VOID
> >    )
> > @@ -35,4 +36,6 @@ CpuDeadLoop (
> >    volatile UINTN  Index;
> >
> >    for (Index = 0; Index == 0;);
> > +
> > +  ANALYZER_UNREACHABLE ();
> >  }
> > diff --git a/MdePkg/Library/BaseLib/Ebc/CpuBreakpoint.c
> > b/MdePkg/Library/BaseLib/Ebc/CpuBreakpoint.c
> > index 9b7d875664bd..bd8da8a671d1 100644
> > --- a/MdePkg/Library/BaseLib/Ebc/CpuBreakpoint.c
> > +++ b/MdePkg/Library/BaseLib/Ebc/CpuBreakpoint.c
> > @@ -29,11 +29,14 @@ _break (
> >  **/
> >  VOID
> >  EFIAPI
> > +ANALYZER_NORETURN
> >  CpuBreakpoint (
> >    VOID
> >    )
> >  {
> >    _break (3);
> > +
> > +  ANALYZER_UNREACHABLE ();
> >  }
> >
> >  /**
> > diff --git a/MdePkg/Library/BaseLib/Ia32/CpuBreakpoint.c
> > b/MdePkg/Library/BaseLib/Ia32/CpuBreakpoint.c
> > index f5df7f2883c6..d68fd770ce3d 100644
> > --- a/MdePkg/Library/BaseLib/Ia32/CpuBreakpoint.c
> > +++ b/MdePkg/Library/BaseLib/Ia32/CpuBreakpoint.c
> > @@ -32,10 +32,13 @@ void __debugbreak ();  **/  VOID  EFIAPI
> > +ANALYZER_NORETURN
> >  CpuBreakpoint (
> >    VOID
> >    )
> >  {
> >    __debugbreak ();
> > +
> > +  ANALYZER_UNREACHABLE ();
> >  }
> >
> > diff --git a/MdePkg/Library/BaseLib/Ipf/CpuBreakpoint.c
> > b/MdePkg/Library/BaseLib/Ipf/CpuBreakpoint.c
> > index 302974bd5c98..29456b5f867d 100644
> > --- a/MdePkg/Library/BaseLib/Ipf/CpuBreakpoint.c
> > +++ b/MdePkg/Library/BaseLib/Ipf/CpuBreakpoint.c
> > @@ -24,11 +24,14 @@
> >  **/
> >  VOID
> >  EFIAPI
> > +ANALYZER_NORETURN
> >  CpuBreakpoint (
> >    VOID
> >    )
> >  {
> >    __break (0);
> > +
> > +  ANALYZER_UNREACHABLE ();
> >  }
> >
> >  /**
> > diff --git a/MdePkg/Library/BaseLib/Ipf/CpuBreakpointMsc.c
> > b/MdePkg/Library/BaseLib/Ipf/CpuBreakpointMsc.c
> > index 89b0acfd801b..2b098d462bee 100644
> > --- a/MdePkg/Library/BaseLib/Ipf/CpuBreakpointMsc.c
> > +++ b/MdePkg/Library/BaseLib/Ipf/CpuBreakpointMsc.c
> > @@ -29,11 +29,14 @@
> >  **/
> >  VOID
> >  EFIAPI
> > +ANALYZER_NORETURN
> >  CpuBreakpoint (
> >    VOID
> >    )
> >  {
> >    __break (0);
> > +
> > +  ANALYZER_UNREACHABLE ();
> >  }
> >
> >  /**
> > diff --git a/MdePkg/Library/BaseLib/X64/CpuBreakpoint.c
> > b/MdePkg/Library/BaseLib/X64/CpuBreakpoint.c
> > index d654f845716f..72055c2acfaa 100644
> > --- a/MdePkg/Library/BaseLib/X64/CpuBreakpoint.c
> > +++ b/MdePkg/Library/BaseLib/X64/CpuBreakpoint.c
> > @@ -30,10 +30,13 @@ void __debugbreak ();  **/  VOID  EFIAPI
> > +ANALYZER_NORETURN
> >  CpuBreakpoint (
> >    VOID
> >    )
> >  {
> >    __debugbreak ();
> > +
> > +  ANALYZER_UNREACHABLE ();
> >  }
> >
> > diff --git a/MdePkg/Library/BaseLib/X64/GccInline.c
> > b/MdePkg/Library/BaseLib/X64/GccInline.c
> > index 3d175ee9314e..b3443c55cb27 100644
> > --- a/MdePkg/Library/BaseLib/X64/GccInline.c
> > +++ b/MdePkg/Library/BaseLib/X64/GccInline.c
> > @@ -99,11 +99,14 @@ CpuPause (
> >  **/
> >  VOID
> >  EFIAPI
> > +ANALYZER_NORETURN
> >  CpuBreakpoint (
> >    VOID
> >    )
> >  {
> >    __asm__ __volatile__ ("int $3");
> > +
> > +  ANALYZER_UNREACHABLE ();
> >  }
> >
> >
> > diff --git a/MdePkg/Include/Library/BaseLib.h
> > b/MdePkg/Include/Library/BaseLib.h
> > index 79f421a97111..87f1e39d61db 100644
> > --- a/MdePkg/Include/Library/BaseLib.h
> > +++ b/MdePkg/Include/Library/BaseLib.h
> > @@ -3960,6 +3960,7 @@ SwitchStack (
> >  **/
> >  VOID
> >  EFIAPI
> > +ANALYZER_NORETURN
> >  CpuBreakpoint (
> >    VOID
> >    );
> > @@ -3976,6 +3977,7 @@ CpuBreakpoint (
> >  **/
> >  VOID
> >  EFIAPI
> > +ANALYZER_NORETURN
> >  CpuDeadLoop (
> >    VOID
> >    );
> > diff --git a/MdePkg/Library/BaseLib/AArch64/CpuBreakpoint.S
> > b/MdePkg/Library/BaseLib/AArch64/CpuBreakpoint.S
> > index 6323cffaa981..e4008ec1d3fd 100644
> > --- a/MdePkg/Library/BaseLib/AArch64/CpuBreakpoint.S
> > +++ b/MdePkg/Library/BaseLib/AArch64/CpuBreakpoint.S
> > @@ -28,6 +28,7 @@ GCC_ASM_EXPORT(CpuBreakpoint)  #**/  #VOID
> > #EFIAPI
> > +#ANALYZER_NORETURN
> >  #CpuBreakpoint (
> >  #  VOID
> >  #  );
> > diff --git a/MdePkg/Library/BaseLib/Arm/CpuBreakpoint.S
> > b/MdePkg/Library/BaseLib/Arm/CpuBreakpoint.S
> > index b6b80a1326d0..accb6f1b3287 100644
> > --- a/MdePkg/Library/BaseLib/Arm/CpuBreakpoint.S
> > +++ b/MdePkg/Library/BaseLib/Arm/CpuBreakpoint.S
> > @@ -27,6 +27,7 @@ GCC_ASM_EXPORT(CpuBreakpoint)  #**/  #VOID
> > #EFIAPI
> > +#ANALYZER_NORETURN
> >  #CpuBreakpoint (
> >  #  VOID
> >  #  );
> > diff --git a/MdePkg/Library/BaseLib/Arm/CpuBreakpoint.asm
> > b/MdePkg/Library/BaseLib/Arm/CpuBreakpoint.asm
> > index 8a8065159bf2..5d51d13930f3 100644
> > --- a/MdePkg/Library/BaseLib/Arm/CpuBreakpoint.asm
> > +++ b/MdePkg/Library/BaseLib/Arm/CpuBreakpoint.asm
> > @@ -27,6 +27,7 @@
> >  ;**/
> >  ;VOID
> >  ;EFIAPI
> > +;ANALYZER_NORETURN
> >  ;CpuBreakpoint (
> >  ;  VOID
> >  ;  );
> > diff --git a/MdePkg/Library/BaseLib/Ia32/CpuBreakpoint.asm
> > b/MdePkg/Library/BaseLib/Ia32/CpuBreakpoint.asm
> > index e4364055e8ee..e48a0fa92517 100644
> > --- a/MdePkg/Library/BaseLib/Ia32/CpuBreakpoint.asm
> > +++ b/MdePkg/Library/BaseLib/Ia32/CpuBreakpoint.asm
> > @@ -28,6 +28,7 @@
> >  
> > ;------------------------------------------------------------------------------
> >  ; VOID
> >  ; EFIAPI
> > +; ANALYZER_NORETURN
> >  ; CpuBreakpoint (
> >  ;   VOID
> >  ;   );
> > diff --git a/MdePkg/Library/BaseLib/X64/CpuBreakpoint.asm
> > b/MdePkg/Library/BaseLib/X64/CpuBreakpoint.asm
> > index 25dd9b48e808..f0e4e93714fb 100644
> > --- a/MdePkg/Library/BaseLib/X64/CpuBreakpoint.asm
> > +++ b/MdePkg/Library/BaseLib/X64/CpuBreakpoint.asm
> > @@ -25,6 +25,7 @@
> >  
> > ;------------------------------------------------------------------------------
> >  ; VOID
> >  ; EFIAPI
> > +; ANALYZER_NORETURN
> >  ; CpuBreakpoint (
> >  ;   VOID
> >  ;   );
> > --
> > 2.7.4.windows.1
> >
> > _______________________________________________
> > edk2-devel mailing list
> > edk2-devel@lists.01.org
> > https://lists.01.org/mailman/listinfo/edk2-devel
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to