public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* [PATCH] BaseTools: Enhance call stack unwindability for CLANGPDB x64 binary
@ 2020-02-03 14:01 Steven Shi
  2020-02-04  7:21 ` Liming Gao
  0 siblings, 1 reply; 4+ messages in thread
From: Steven Shi @ 2020-02-03 14:01 UTC (permalink / raw)
  To: devel; +Cc: liming.gao, bob.c.feng, Steven

From: Steven <steven.shi@intel.com>

BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=2487

The call stack unwindability of the COFF X64 binary requires
the binary to remain the pdata and xdata sections.
Details see the MSVC X64 calling convertion doc in below link:
https://docs.microsoft.com/en-us/cpp/build/x64-calling-convention

Current build options discard or zero the data in pdata and xdata
sections which cause the debugger cannot correctly unwind the
X64 binary call stack in the runtime.
Enhance the build options to force emit the unwind tables and
keep the data of pdata and xdata sections correct in the binary.

Signed-off-by: Steven Shi <steven.shi@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Cc: Bob Feng <bob.c.feng@intel.com>
---
 BaseTools/Conf/tools_def.template | 16 +++++++++-------
 1 file changed, 9 insertions(+), 7 deletions(-)

diff --git a/BaseTools/Conf/tools_def.template b/BaseTools/Conf/tools_def.template
index feee2bbf16..26294efe05 100755
--- a/BaseTools/Conf/tools_def.template
+++ b/BaseTools/Conf/tools_def.template
@@ -2759,7 +2759,7 @@ DEFINE CLANGPDB_IA32_TARGET          = -target i686-unknown-windows
 DEFINE CLANGPDB_X64_TARGET           = -target x86_64-unknown-windows
 
 DEFINE CLANGPDB_WARNING_OVERRIDES    = -Wno-parentheses-equality -Wno-tautological-compare -Wno-tautological-constant-out-of-range-compare -Wno-empty-body -Wno-unused-const-variable -Wno-varargs -Wno-unknown-warning-option -Wno-microsoft-enum-forward-reference
-DEFINE CLANGPDB_ALL_CC_FLAGS         = DEF(GCC48_ALL_CC_FLAGS) DEF(CLANGPDB_WARNING_OVERRIDES) -fno-stack-protector -mms-bitfields -Wno-address -Wno-shift-negative-value -Wno-unknown-pragmas -Wno-incompatible-library-redeclaration -fno-asynchronous-unwind-tables -mno-implicit-float  -ftrap-function=undefined_behavior_has_been_optimized_away_by_clang -funsigned-char -fno-ms-extensions -Wno-null-dereference -fms-compatibility -mno-stack-arg-probe
+DEFINE CLANGPDB_ALL_CC_FLAGS         = DEF(GCC48_ALL_CC_FLAGS) DEF(CLANGPDB_WARNING_OVERRIDES) -fno-stack-protector -mms-bitfields -Wno-address -Wno-shift-negative-value -Wno-unknown-pragmas -Wno-incompatible-library-redeclaration -mno-implicit-float  -ftrap-function=undefined_behavior_has_been_optimized_away_by_clang -funsigned-char -fno-ms-extensions -Wno-null-dereference -fms-compatibility -mno-stack-arg-probe
 
 ###########################
 # CLANGPDB IA32 definitions
@@ -2817,18 +2817,20 @@ NOOPT_CLANGPDB_IA32_DLINK2_FLAGS     =
 *_CLANGPDB_X64_ASLPP_FLAGS          = DEF(GCC_ASLPP_FLAGS) DEF(CLANGPDB_X64_TARGET)
 *_CLANGPDB_X64_VFRPP_FLAGS          = DEF(GCC_VFRPP_FLAGS) DEF(CLANGPDB_X64_TARGET)
 
-DEBUG_CLANGPDB_X64_CC_FLAGS         = DEF(CLANGPDB_ALL_CC_FLAGS) -m64 "-DEFIAPI=__attribute__((ms_abi))" -mno-red-zone -mcmodel=small -Oz -flto DEF(CLANGPDB_X64_TARGET) -gcodeview
-DEBUG_CLANGPDB_X64_DLINK_FLAGS      = /NOLOGO /NODEFAULTLIB /IGNORE:4001 /OPT:REF /OPT:ICF=10 /ALIGN:32 /FILEALIGN:32 /SECTION:.xdata,D /SECTION:.pdata,D /Machine:X64 /DLL /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DEBUG:GHASH  /lldmap
+DEBUG_CLANGPDB_X64_CC_FLAGS         = DEF(CLANGPDB_ALL_CC_FLAGS) -m64 "-DEFIAPI=__attribute__((ms_abi))" -mno-red-zone -mcmodel=small -Oz -flto DEF(CLANGPDB_X64_TARGET) -gcodeview -funwind-tables
+DEBUG_CLANGPDB_X64_DLINK_FLAGS      = /NOLOGO /NODEFAULTLIB /IGNORE:4001 /OPT:REF /OPT:ICF=10 /ALIGN:32 /FILEALIGN:32 /Machine:X64 /DLL /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DEBUG:GHASH  /lldmap
 DEBUG_CLANGPDB_X64_DLINK2_FLAGS     =
+DEBUG_CLANGPDB_X64_GENFW_FLAGS      = --keepexceptiontable
 
-RELEASE_CLANGPDB_X64_CC_FLAGS       = DEF(CLANGPDB_ALL_CC_FLAGS) -m64 "-DEFIAPI=__attribute__((ms_abi))" -mno-red-zone -mcmodel=small -Oz -flto DEF(CLANGPDB_X64_TARGET)
+RELEASE_CLANGPDB_X64_CC_FLAGS       = DEF(CLANGPDB_ALL_CC_FLAGS) -m64 "-DEFIAPI=__attribute__((ms_abi))" -mno-red-zone -mcmodel=small -Oz -flto DEF(CLANGPDB_X64_TARGET) -fno-unwind-tables
 RELEASE_CLANGPDB_X64_DLINK_FLAGS    = /NOLOGO /NODEFAULTLIB /IGNORE:4001 /IGNORE:4254 /OPT:REF /OPT:ICF=10 /ALIGN:32 /FILEALIGN:32 /SECTION:.xdata,D /SECTION:.pdata,D /Machine:X64 /DLL /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /MERGE:.rdata=.data  /lldmap
 RELEASE_CLANGPDB_X64_DLINK2_FLAGS   =
+RELEASE_CLANGPDB_X64_GENFW_FLAGS    =
 
-NOOPT_CLANGPDB_X64_CC_FLAGS         = DEF(CLANGPDB_ALL_CC_FLAGS) -m64 "-DEFIAPI=__attribute__((ms_abi))" -mno-red-zone -mcmodel=small -O0 DEF(CLANGPDB_X64_TARGET) -gcodeview
-NOOPT_CLANGPDB_X64_DLINK_FLAGS      = /NOLOGO /NODEFAULTLIB /IGNORE:4001 /OPT:REF /OPT:ICF=10 /ALIGN:32 /FILEALIGN:32 /SECTION:.xdata,D /SECTION:.pdata,D /Machine:X64 /DLL /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DEBUG:GHASH  /lldmap
+NOOPT_CLANGPDB_X64_CC_FLAGS         = DEF(CLANGPDB_ALL_CC_FLAGS) -m64 "-DEFIAPI=__attribute__((ms_abi))" -mno-red-zone -mcmodel=small -O0 DEF(CLANGPDB_X64_TARGET) -gcodeview -funwind-tables
+NOOPT_CLANGPDB_X64_DLINK_FLAGS      = /NOLOGO /NODEFAULTLIB /IGNORE:4001 /OPT:REF /OPT:ICF=10 /ALIGN:32 /FILEALIGN:32 /Machine:X64 /DLL /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DEBUG:GHASH  /lldmap
 NOOPT_CLANGPDB_X64_DLINK2_FLAGS     =
-
+NOOPT_CLANGPDB_X64_GENFW_FLAGS      = --keepexceptiontable
 
 #
 #
-- 
2.16.1.windows.4


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] BaseTools: Enhance call stack unwindability for CLANGPDB x64 binary
  2020-02-03 14:01 [PATCH] BaseTools: Enhance call stack unwindability for CLANGPDB x64 binary Steven Shi
@ 2020-02-04  7:21 ` Liming Gao
  2020-02-04  7:48   ` Steven Shi
  0 siblings, 1 reply; 4+ messages in thread
From: Liming Gao @ 2020-02-04  7:21 UTC (permalink / raw)
  To: Shi, Steven, devel@edk2.groups.io; +Cc: Feng, Bob C

Steven:
  Have you verified this change in Emulator X64?

Thanks
Liming
> -----Original Message-----
> From: Shi, Steven <steven.shi@intel.com>
> Sent: Monday, February 3, 2020 10:02 PM
> To: devel@edk2.groups.io
> Cc: Gao, Liming <liming.gao@intel.com>; Feng, Bob C <bob.c.feng@intel.com>; Shi, Steven <steven.shi@intel.com>
> Subject: [PATCH] BaseTools: Enhance call stack unwindability for CLANGPDB x64 binary
> 
> From: Steven <steven.shi@intel.com>
> 
> BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=2487
> 
> The call stack unwindability of the COFF X64 binary requires
> the binary to remain the pdata and xdata sections.
> Details see the MSVC X64 calling convertion doc in below link:
> https://docs.microsoft.com/en-us/cpp/build/x64-calling-convention
> 
> Current build options discard or zero the data in pdata and xdata
> sections which cause the debugger cannot correctly unwind the
> X64 binary call stack in the runtime.
> Enhance the build options to force emit the unwind tables and
> keep the data of pdata and xdata sections correct in the binary.
> 
> Signed-off-by: Steven Shi <steven.shi@intel.com>
> Cc: Liming Gao <liming.gao@intel.com>
> Cc: Bob Feng <bob.c.feng@intel.com>
> ---
>  BaseTools/Conf/tools_def.template | 16 +++++++++-------
>  1 file changed, 9 insertions(+), 7 deletions(-)
> 
> diff --git a/BaseTools/Conf/tools_def.template b/BaseTools/Conf/tools_def.template
> index feee2bbf16..26294efe05 100755
> --- a/BaseTools/Conf/tools_def.template
> +++ b/BaseTools/Conf/tools_def.template
> @@ -2759,7 +2759,7 @@ DEFINE CLANGPDB_IA32_TARGET          = -target i686-unknown-windows
>  DEFINE CLANGPDB_X64_TARGET           = -target x86_64-unknown-windows
> 
>  DEFINE CLANGPDB_WARNING_OVERRIDES    = -Wno-parentheses-equality -Wno-tautological-compare -Wno-tautological-constant-
> out-of-range-compare -Wno-empty-body -Wno-unused-const-variable -Wno-varargs -Wno-unknown-warning-option -Wno-
> microsoft-enum-forward-reference
> -DEFINE CLANGPDB_ALL_CC_FLAGS         = DEF(GCC48_ALL_CC_FLAGS) DEF(CLANGPDB_WARNING_OVERRIDES) -fno-stack-protector -
> mms-bitfields -Wno-address -Wno-shift-negative-value -Wno-unknown-pragmas -Wno-incompatible-library-redeclaration -fno-
> asynchronous-unwind-tables -mno-implicit-float  -ftrap-function=undefined_behavior_has_been_optimized_away_by_clang -
> funsigned-char -fno-ms-extensions -Wno-null-dereference -fms-compatibility -mno-stack-arg-probe
> +DEFINE CLANGPDB_ALL_CC_FLAGS         = DEF(GCC48_ALL_CC_FLAGS) DEF(CLANGPDB_WARNING_OVERRIDES) -fno-stack-protector -
> mms-bitfields -Wno-address -Wno-shift-negative-value -Wno-unknown-pragmas -Wno-incompatible-library-redeclaration -mno-
> implicit-float  -ftrap-function=undefined_behavior_has_been_optimized_away_by_clang -funsigned-char -fno-ms-extensions -Wno-
> null-dereference -fms-compatibility -mno-stack-arg-probe
> 
>  ###########################
>  # CLANGPDB IA32 definitions
> @@ -2817,18 +2817,20 @@ NOOPT_CLANGPDB_IA32_DLINK2_FLAGS     =
>  *_CLANGPDB_X64_ASLPP_FLAGS          = DEF(GCC_ASLPP_FLAGS) DEF(CLANGPDB_X64_TARGET)
>  *_CLANGPDB_X64_VFRPP_FLAGS          = DEF(GCC_VFRPP_FLAGS) DEF(CLANGPDB_X64_TARGET)
> 
> -DEBUG_CLANGPDB_X64_CC_FLAGS         = DEF(CLANGPDB_ALL_CC_FLAGS) -m64 "-DEFIAPI=__attribute__((ms_abi))" -mno-red-zone -
> mcmodel=small -Oz -flto DEF(CLANGPDB_X64_TARGET) -gcodeview
> -DEBUG_CLANGPDB_X64_DLINK_FLAGS      = /NOLOGO /NODEFAULTLIB /IGNORE:4001 /OPT:REF /OPT:ICF=10 /ALIGN:32 /FILEALIGN:32
> /SECTION:.xdata,D /SECTION:.pdata,D /Machine:X64 /DLL /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER
> /SAFESEH:NO /BASE:0 /DEBUG:GHASH  /lldmap
> +DEBUG_CLANGPDB_X64_CC_FLAGS         = DEF(CLANGPDB_ALL_CC_FLAGS) -m64 "-DEFIAPI=__attribute__((ms_abi))" -mno-red-zone -
> mcmodel=small -Oz -flto DEF(CLANGPDB_X64_TARGET) -gcodeview -funwind-tables
> +DEBUG_CLANGPDB_X64_DLINK_FLAGS      = /NOLOGO /NODEFAULTLIB /IGNORE:4001 /OPT:REF /OPT:ICF=10 /ALIGN:32
> /FILEALIGN:32 /Machine:X64 /DLL /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0
> /DEBUG:GHASH  /lldmap
>  DEBUG_CLANGPDB_X64_DLINK2_FLAGS     =
> +DEBUG_CLANGPDB_X64_GENFW_FLAGS      = --keepexceptiontable
> 
> -RELEASE_CLANGPDB_X64_CC_FLAGS       = DEF(CLANGPDB_ALL_CC_FLAGS) -m64 "-DEFIAPI=__attribute__((ms_abi))" -mno-red-zone -
> mcmodel=small -Oz -flto DEF(CLANGPDB_X64_TARGET)
> +RELEASE_CLANGPDB_X64_CC_FLAGS       = DEF(CLANGPDB_ALL_CC_FLAGS) -m64 "-DEFIAPI=__attribute__((ms_abi))" -mno-red-zone -
> mcmodel=small -Oz -flto DEF(CLANGPDB_X64_TARGET) -fno-unwind-tables
>  RELEASE_CLANGPDB_X64_DLINK_FLAGS    = /NOLOGO /NODEFAULTLIB /IGNORE:4001 /IGNORE:4254 /OPT:REF /OPT:ICF=10
> /ALIGN:32 /FILEALIGN:32 /SECTION:.xdata,D /SECTION:.pdata,D /Machine:X64 /DLL /ENTRY:$(IMAGE_ENTRY_POINT)
> /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /MERGE:.rdata=.data  /lldmap
>  RELEASE_CLANGPDB_X64_DLINK2_FLAGS   =
> +RELEASE_CLANGPDB_X64_GENFW_FLAGS    =
> 
> -NOOPT_CLANGPDB_X64_CC_FLAGS         = DEF(CLANGPDB_ALL_CC_FLAGS) -m64 "-DEFIAPI=__attribute__((ms_abi))" -mno-red-zone -
> mcmodel=small -O0 DEF(CLANGPDB_X64_TARGET) -gcodeview
> -NOOPT_CLANGPDB_X64_DLINK_FLAGS      = /NOLOGO /NODEFAULTLIB /IGNORE:4001 /OPT:REF /OPT:ICF=10 /ALIGN:32 /FILEALIGN:32
> /SECTION:.xdata,D /SECTION:.pdata,D /Machine:X64 /DLL /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER
> /SAFESEH:NO /BASE:0 /DEBUG:GHASH  /lldmap
> +NOOPT_CLANGPDB_X64_CC_FLAGS         = DEF(CLANGPDB_ALL_CC_FLAGS) -m64 "-DEFIAPI=__attribute__((ms_abi))" -mno-red-zone -
> mcmodel=small -O0 DEF(CLANGPDB_X64_TARGET) -gcodeview -funwind-tables
> +NOOPT_CLANGPDB_X64_DLINK_FLAGS      = /NOLOGO /NODEFAULTLIB /IGNORE:4001 /OPT:REF /OPT:ICF=10 /ALIGN:32
> /FILEALIGN:32 /Machine:X64 /DLL /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0
> /DEBUG:GHASH  /lldmap
>  NOOPT_CLANGPDB_X64_DLINK2_FLAGS     =
> -
> +NOOPT_CLANGPDB_X64_GENFW_FLAGS      = --keepexceptiontable
> 
>  #
>  #
> --
> 2.16.1.windows.4


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] BaseTools: Enhance call stack unwindability for CLANGPDB x64 binary
  2020-02-04  7:21 ` Liming Gao
@ 2020-02-04  7:48   ` Steven Shi
  2020-02-06  9:26     ` Liming Gao
  0 siblings, 1 reply; 4+ messages in thread
From: Steven Shi @ 2020-02-04  7:48 UTC (permalink / raw)
  To: Gao, Liming, devel@edk2.groups.io; +Cc: Feng, Bob C

Yes, I did. This patch also enables the Emulator X64 stack unwind as well.


Thanks

Steven Shi
Intel\SSG\SFE\FIE Firmware Infrastructure


> -----Original Message-----
> From: Gao, Liming <liming.gao@intel.com>
> Sent: Tuesday, February 4, 2020 3:22 PM
> To: Shi, Steven <steven.shi@intel.com>; devel@edk2.groups.io
> Cc: Feng, Bob C <bob.c.feng@intel.com>
> Subject: RE: [PATCH] BaseTools: Enhance call stack unwindability for
> CLANGPDB x64 binary
> 
> Steven:
>   Have you verified this change in Emulator X64?
> 
> Thanks
> Liming
> > -----Original Message-----
> > From: Shi, Steven <steven.shi@intel.com>
> > Sent: Monday, February 3, 2020 10:02 PM
> > To: devel@edk2.groups.io
> > Cc: Gao, Liming <liming.gao@intel.com>; Feng, Bob C
> <bob.c.feng@intel.com>; Shi, Steven <steven.shi@intel.com>
> > Subject: [PATCH] BaseTools: Enhance call stack unwindability for
> CLANGPDB x64 binary
> >
> > From: Steven <steven.shi@intel.com>
> >
> > BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=2487
> >
> > The call stack unwindability of the COFF X64 binary requires
> > the binary to remain the pdata and xdata sections.
> > Details see the MSVC X64 calling convertion doc in below link:
> > https://docs.microsoft.com/en-us/cpp/build/x64-calling-convention
> >
> > Current build options discard or zero the data in pdata and xdata
> > sections which cause the debugger cannot correctly unwind the
> > X64 binary call stack in the runtime.
> > Enhance the build options to force emit the unwind tables and
> > keep the data of pdata and xdata sections correct in the binary.
> >
> > Signed-off-by: Steven Shi <steven.shi@intel.com>
> > Cc: Liming Gao <liming.gao@intel.com>
> > Cc: Bob Feng <bob.c.feng@intel.com>
> > ---
> >  BaseTools/Conf/tools_def.template | 16 +++++++++-------
> >  1 file changed, 9 insertions(+), 7 deletions(-)
> >
> > diff --git a/BaseTools/Conf/tools_def.template
> b/BaseTools/Conf/tools_def.template
> > index feee2bbf16..26294efe05 100755
> > --- a/BaseTools/Conf/tools_def.template
> > +++ b/BaseTools/Conf/tools_def.template
> > @@ -2759,7 +2759,7 @@ DEFINE CLANGPDB_IA32_TARGET          = -target
> i686-unknown-windows
> >  DEFINE CLANGPDB_X64_TARGET           = -target x86_64-unknown-
> windows
> >
> >  DEFINE CLANGPDB_WARNING_OVERRIDES    = -Wno-parentheses-equality
> -Wno-tautological-compare -Wno-tautological-constant-
> > out-of-range-compare -Wno-empty-body -Wno-unused-const-variable -
> Wno-varargs -Wno-unknown-warning-option -Wno-
> > microsoft-enum-forward-reference
> > -DEFINE CLANGPDB_ALL_CC_FLAGS         = DEF(GCC48_ALL_CC_FLAGS)
> DEF(CLANGPDB_WARNING_OVERRIDES) -fno-stack-protector -
> > mms-bitfields -Wno-address -Wno-shift-negative-value -Wno-unknown-
> pragmas -Wno-incompatible-library-redeclaration -fno-
> > asynchronous-unwind-tables -mno-implicit-float  -ftrap-
> function=undefined_behavior_has_been_optimized_away_by_clang -
> > funsigned-char -fno-ms-extensions -Wno-null-dereference -fms-
> compatibility -mno-stack-arg-probe
> > +DEFINE CLANGPDB_ALL_CC_FLAGS         = DEF(GCC48_ALL_CC_FLAGS)
> DEF(CLANGPDB_WARNING_OVERRIDES) -fno-stack-protector -
> > mms-bitfields -Wno-address -Wno-shift-negative-value -Wno-unknown-
> pragmas -Wno-incompatible-library-redeclaration -mno-
> > implicit-float  -ftrap-
> function=undefined_behavior_has_been_optimized_away_by_clang -
> funsigned-char -fno-ms-extensions -Wno-
> > null-dereference -fms-compatibility -mno-stack-arg-probe
> >
> >  ###########################
> >  # CLANGPDB IA32 definitions
> > @@ -2817,18 +2817,20 @@ NOOPT_CLANGPDB_IA32_DLINK2_FLAGS     =
> >  *_CLANGPDB_X64_ASLPP_FLAGS          = DEF(GCC_ASLPP_FLAGS)
> DEF(CLANGPDB_X64_TARGET)
> >  *_CLANGPDB_X64_VFRPP_FLAGS          = DEF(GCC_VFRPP_FLAGS)
> DEF(CLANGPDB_X64_TARGET)
> >
> > -DEBUG_CLANGPDB_X64_CC_FLAGS         = DEF(CLANGPDB_ALL_CC_FLAGS)
> -m64 "-DEFIAPI=__attribute__((ms_abi))" -mno-red-zone -
> > mcmodel=small -Oz -flto DEF(CLANGPDB_X64_TARGET) -gcodeview
> > -DEBUG_CLANGPDB_X64_DLINK_FLAGS      = /NOLOGO /NODEFAULTLIB
> /IGNORE:4001 /OPT:REF /OPT:ICF=10 /ALIGN:32 /FILEALIGN:32
> > /SECTION:.xdata,D /SECTION:.pdata,D /Machine:X64 /DLL
> /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER
> > /SAFESEH:NO /BASE:0 /DEBUG:GHASH  /lldmap
> > +DEBUG_CLANGPDB_X64_CC_FLAGS         =
> DEF(CLANGPDB_ALL_CC_FLAGS) -m64 "-DEFIAPI=__attribute__((ms_abi))" -
> mno-red-zone -
> > mcmodel=small -Oz -flto DEF(CLANGPDB_X64_TARGET) -gcodeview -
> funwind-tables
> > +DEBUG_CLANGPDB_X64_DLINK_FLAGS      = /NOLOGO /NODEFAULTLIB
> /IGNORE:4001 /OPT:REF /OPT:ICF=10 /ALIGN:32
> > /FILEALIGN:32 /Machine:X64 /DLL /ENTRY:$(IMAGE_ENTRY_POINT)
> /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0
> > /DEBUG:GHASH  /lldmap
> >  DEBUG_CLANGPDB_X64_DLINK2_FLAGS     =
> > +DEBUG_CLANGPDB_X64_GENFW_FLAGS      = --keepexceptiontable
> >
> > -RELEASE_CLANGPDB_X64_CC_FLAGS       =
> DEF(CLANGPDB_ALL_CC_FLAGS) -m64 "-DEFIAPI=__attribute__((ms_abi))" -
> mno-red-zone -
> > mcmodel=small -Oz -flto DEF(CLANGPDB_X64_TARGET)
> > +RELEASE_CLANGPDB_X64_CC_FLAGS       =
> DEF(CLANGPDB_ALL_CC_FLAGS) -m64 "-DEFIAPI=__attribute__((ms_abi))" -
> mno-red-zone -
> > mcmodel=small -Oz -flto DEF(CLANGPDB_X64_TARGET) -fno-unwind-tables
> >  RELEASE_CLANGPDB_X64_DLINK_FLAGS    = /NOLOGO /NODEFAULTLIB
> /IGNORE:4001 /IGNORE:4254 /OPT:REF /OPT:ICF=10
> > /ALIGN:32 /FILEALIGN:32 /SECTION:.xdata,D /SECTION:.pdata,D
> /Machine:X64 /DLL /ENTRY:$(IMAGE_ENTRY_POINT)
> > /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0
> /MERGE:.rdata=.data  /lldmap
> >  RELEASE_CLANGPDB_X64_DLINK2_FLAGS   =
> > +RELEASE_CLANGPDB_X64_GENFW_FLAGS    =
> >
> > -NOOPT_CLANGPDB_X64_CC_FLAGS         = DEF(CLANGPDB_ALL_CC_FLAGS)
> -m64 "-DEFIAPI=__attribute__((ms_abi))" -mno-red-zone -
> > mcmodel=small -O0 DEF(CLANGPDB_X64_TARGET) -gcodeview
> > -NOOPT_CLANGPDB_X64_DLINK_FLAGS      = /NOLOGO /NODEFAULTLIB
> /IGNORE:4001 /OPT:REF /OPT:ICF=10 /ALIGN:32 /FILEALIGN:32
> > /SECTION:.xdata,D /SECTION:.pdata,D /Machine:X64 /DLL
> /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER
> > /SAFESEH:NO /BASE:0 /DEBUG:GHASH  /lldmap
> > +NOOPT_CLANGPDB_X64_CC_FLAGS         =
> DEF(CLANGPDB_ALL_CC_FLAGS) -m64 "-DEFIAPI=__attribute__((ms_abi))" -
> mno-red-zone -
> > mcmodel=small -O0 DEF(CLANGPDB_X64_TARGET) -gcodeview -funwind-
> tables
> > +NOOPT_CLANGPDB_X64_DLINK_FLAGS      = /NOLOGO /NODEFAULTLIB
> /IGNORE:4001 /OPT:REF /OPT:ICF=10 /ALIGN:32
> > /FILEALIGN:32 /Machine:X64 /DLL /ENTRY:$(IMAGE_ENTRY_POINT)
> /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0
> > /DEBUG:GHASH  /lldmap
> >  NOOPT_CLANGPDB_X64_DLINK2_FLAGS     =
> > -
> > +NOOPT_CLANGPDB_X64_GENFW_FLAGS      = --keepexceptiontable
> >
> >  #
> >  #
> > --
> > 2.16.1.windows.4


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] BaseTools: Enhance call stack unwindability for CLANGPDB x64 binary
  2020-02-04  7:48   ` Steven Shi
@ 2020-02-06  9:26     ` Liming Gao
  0 siblings, 0 replies; 4+ messages in thread
From: Liming Gao @ 2020-02-06  9:26 UTC (permalink / raw)
  To: Shi, Steven, devel@edk2.groups.io; +Cc: Feng, Bob C

Reviewed-by: Liming Gao <liming.gao@intel.com>

> -----Original Message-----
> From: Shi, Steven <steven.shi@intel.com>
> Sent: Tuesday, February 4, 2020 3:49 PM
> To: Gao, Liming <liming.gao@intel.com>; devel@edk2.groups.io
> Cc: Feng, Bob C <bob.c.feng@intel.com>
> Subject: RE: [PATCH] BaseTools: Enhance call stack unwindability for CLANGPDB x64 binary
> 
> Yes, I did. This patch also enables the Emulator X64 stack unwind as well.
> 
> 
> Thanks
> 
> Steven Shi
> Intel\SSG\SFE\FIE Firmware Infrastructure
> 
> 
> > -----Original Message-----
> > From: Gao, Liming <liming.gao@intel.com>
> > Sent: Tuesday, February 4, 2020 3:22 PM
> > To: Shi, Steven <steven.shi@intel.com>; devel@edk2.groups.io
> > Cc: Feng, Bob C <bob.c.feng@intel.com>
> > Subject: RE: [PATCH] BaseTools: Enhance call stack unwindability for
> > CLANGPDB x64 binary
> >
> > Steven:
> >   Have you verified this change in Emulator X64?
> >
> > Thanks
> > Liming
> > > -----Original Message-----
> > > From: Shi, Steven <steven.shi@intel.com>
> > > Sent: Monday, February 3, 2020 10:02 PM
> > > To: devel@edk2.groups.io
> > > Cc: Gao, Liming <liming.gao@intel.com>; Feng, Bob C
> > <bob.c.feng@intel.com>; Shi, Steven <steven.shi@intel.com>
> > > Subject: [PATCH] BaseTools: Enhance call stack unwindability for
> > CLANGPDB x64 binary
> > >
> > > From: Steven <steven.shi@intel.com>
> > >
> > > BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=2487
> > >
> > > The call stack unwindability of the COFF X64 binary requires
> > > the binary to remain the pdata and xdata sections.
> > > Details see the MSVC X64 calling convertion doc in below link:
> > > https://docs.microsoft.com/en-us/cpp/build/x64-calling-convention
> > >
> > > Current build options discard or zero the data in pdata and xdata
> > > sections which cause the debugger cannot correctly unwind the
> > > X64 binary call stack in the runtime.
> > > Enhance the build options to force emit the unwind tables and
> > > keep the data of pdata and xdata sections correct in the binary.
> > >
> > > Signed-off-by: Steven Shi <steven.shi@intel.com>
> > > Cc: Liming Gao <liming.gao@intel.com>
> > > Cc: Bob Feng <bob.c.feng@intel.com>
> > > ---
> > >  BaseTools/Conf/tools_def.template | 16 +++++++++-------
> > >  1 file changed, 9 insertions(+), 7 deletions(-)
> > >
> > > diff --git a/BaseTools/Conf/tools_def.template
> > b/BaseTools/Conf/tools_def.template
> > > index feee2bbf16..26294efe05 100755
> > > --- a/BaseTools/Conf/tools_def.template
> > > +++ b/BaseTools/Conf/tools_def.template
> > > @@ -2759,7 +2759,7 @@ DEFINE CLANGPDB_IA32_TARGET          = -target
> > i686-unknown-windows
> > >  DEFINE CLANGPDB_X64_TARGET           = -target x86_64-unknown-
> > windows
> > >
> > >  DEFINE CLANGPDB_WARNING_OVERRIDES    = -Wno-parentheses-equality
> > -Wno-tautological-compare -Wno-tautological-constant-
> > > out-of-range-compare -Wno-empty-body -Wno-unused-const-variable -
> > Wno-varargs -Wno-unknown-warning-option -Wno-
> > > microsoft-enum-forward-reference
> > > -DEFINE CLANGPDB_ALL_CC_FLAGS         = DEF(GCC48_ALL_CC_FLAGS)
> > DEF(CLANGPDB_WARNING_OVERRIDES) -fno-stack-protector -
> > > mms-bitfields -Wno-address -Wno-shift-negative-value -Wno-unknown-
> > pragmas -Wno-incompatible-library-redeclaration -fno-
> > > asynchronous-unwind-tables -mno-implicit-float  -ftrap-
> > function=undefined_behavior_has_been_optimized_away_by_clang -
> > > funsigned-char -fno-ms-extensions -Wno-null-dereference -fms-
> > compatibility -mno-stack-arg-probe
> > > +DEFINE CLANGPDB_ALL_CC_FLAGS         = DEF(GCC48_ALL_CC_FLAGS)
> > DEF(CLANGPDB_WARNING_OVERRIDES) -fno-stack-protector -
> > > mms-bitfields -Wno-address -Wno-shift-negative-value -Wno-unknown-
> > pragmas -Wno-incompatible-library-redeclaration -mno-
> > > implicit-float  -ftrap-
> > function=undefined_behavior_has_been_optimized_away_by_clang -
> > funsigned-char -fno-ms-extensions -Wno-
> > > null-dereference -fms-compatibility -mno-stack-arg-probe
> > >
> > >  ###########################
> > >  # CLANGPDB IA32 definitions
> > > @@ -2817,18 +2817,20 @@ NOOPT_CLANGPDB_IA32_DLINK2_FLAGS     =
> > >  *_CLANGPDB_X64_ASLPP_FLAGS          = DEF(GCC_ASLPP_FLAGS)
> > DEF(CLANGPDB_X64_TARGET)
> > >  *_CLANGPDB_X64_VFRPP_FLAGS          = DEF(GCC_VFRPP_FLAGS)
> > DEF(CLANGPDB_X64_TARGET)
> > >
> > > -DEBUG_CLANGPDB_X64_CC_FLAGS         = DEF(CLANGPDB_ALL_CC_FLAGS)
> > -m64 "-DEFIAPI=__attribute__((ms_abi))" -mno-red-zone -
> > > mcmodel=small -Oz -flto DEF(CLANGPDB_X64_TARGET) -gcodeview
> > > -DEBUG_CLANGPDB_X64_DLINK_FLAGS      = /NOLOGO /NODEFAULTLIB
> > /IGNORE:4001 /OPT:REF /OPT:ICF=10 /ALIGN:32 /FILEALIGN:32
> > > /SECTION:.xdata,D /SECTION:.pdata,D /Machine:X64 /DLL
> > /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER
> > > /SAFESEH:NO /BASE:0 /DEBUG:GHASH  /lldmap
> > > +DEBUG_CLANGPDB_X64_CC_FLAGS         =
> > DEF(CLANGPDB_ALL_CC_FLAGS) -m64 "-DEFIAPI=__attribute__((ms_abi))" -
> > mno-red-zone -
> > > mcmodel=small -Oz -flto DEF(CLANGPDB_X64_TARGET) -gcodeview -
> > funwind-tables
> > > +DEBUG_CLANGPDB_X64_DLINK_FLAGS      = /NOLOGO /NODEFAULTLIB
> > /IGNORE:4001 /OPT:REF /OPT:ICF=10 /ALIGN:32
> > > /FILEALIGN:32 /Machine:X64 /DLL /ENTRY:$(IMAGE_ENTRY_POINT)
> > /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0
> > > /DEBUG:GHASH  /lldmap
> > >  DEBUG_CLANGPDB_X64_DLINK2_FLAGS     =
> > > +DEBUG_CLANGPDB_X64_GENFW_FLAGS      = --keepexceptiontable
> > >
> > > -RELEASE_CLANGPDB_X64_CC_FLAGS       =
> > DEF(CLANGPDB_ALL_CC_FLAGS) -m64 "-DEFIAPI=__attribute__((ms_abi))" -
> > mno-red-zone -
> > > mcmodel=small -Oz -flto DEF(CLANGPDB_X64_TARGET)
> > > +RELEASE_CLANGPDB_X64_CC_FLAGS       =
> > DEF(CLANGPDB_ALL_CC_FLAGS) -m64 "-DEFIAPI=__attribute__((ms_abi))" -
> > mno-red-zone -
> > > mcmodel=small -Oz -flto DEF(CLANGPDB_X64_TARGET) -fno-unwind-tables
> > >  RELEASE_CLANGPDB_X64_DLINK_FLAGS    = /NOLOGO /NODEFAULTLIB
> > /IGNORE:4001 /IGNORE:4254 /OPT:REF /OPT:ICF=10
> > > /ALIGN:32 /FILEALIGN:32 /SECTION:.xdata,D /SECTION:.pdata,D
> > /Machine:X64 /DLL /ENTRY:$(IMAGE_ENTRY_POINT)
> > > /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0
> > /MERGE:.rdata=.data  /lldmap
> > >  RELEASE_CLANGPDB_X64_DLINK2_FLAGS   =
> > > +RELEASE_CLANGPDB_X64_GENFW_FLAGS    =
> > >
> > > -NOOPT_CLANGPDB_X64_CC_FLAGS         = DEF(CLANGPDB_ALL_CC_FLAGS)
> > -m64 "-DEFIAPI=__attribute__((ms_abi))" -mno-red-zone -
> > > mcmodel=small -O0 DEF(CLANGPDB_X64_TARGET) -gcodeview
> > > -NOOPT_CLANGPDB_X64_DLINK_FLAGS      = /NOLOGO /NODEFAULTLIB
> > /IGNORE:4001 /OPT:REF /OPT:ICF=10 /ALIGN:32 /FILEALIGN:32
> > > /SECTION:.xdata,D /SECTION:.pdata,D /Machine:X64 /DLL
> > /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER
> > > /SAFESEH:NO /BASE:0 /DEBUG:GHASH  /lldmap
> > > +NOOPT_CLANGPDB_X64_CC_FLAGS         =
> > DEF(CLANGPDB_ALL_CC_FLAGS) -m64 "-DEFIAPI=__attribute__((ms_abi))" -
> > mno-red-zone -
> > > mcmodel=small -O0 DEF(CLANGPDB_X64_TARGET) -gcodeview -funwind-
> > tables
> > > +NOOPT_CLANGPDB_X64_DLINK_FLAGS      = /NOLOGO /NODEFAULTLIB
> > /IGNORE:4001 /OPT:REF /OPT:ICF=10 /ALIGN:32
> > > /FILEALIGN:32 /Machine:X64 /DLL /ENTRY:$(IMAGE_ENTRY_POINT)
> > /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0
> > > /DEBUG:GHASH  /lldmap
> > >  NOOPT_CLANGPDB_X64_DLINK2_FLAGS     =
> > > -
> > > +NOOPT_CLANGPDB_X64_GENFW_FLAGS      = --keepexceptiontable
> > >
> > >  #
> > >  #
> > > --
> > > 2.16.1.windows.4


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2020-02-06  9:26 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-02-03 14:01 [PATCH] BaseTools: Enhance call stack unwindability for CLANGPDB x64 binary Steven Shi
2020-02-04  7:21 ` Liming Gao
2020-02-04  7:48   ` Steven Shi
2020-02-06  9:26     ` Liming Gao

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox