Ard:
  I check VS build. Two copies of mVirtualAddressChangeEvent are mapped to the 
same memory location. For RuntimeDxe case, it doesn't cause any issue, because 
their notification function doesn't use Event. 

  I agree this is a potential issue. But, VS and GCC compiler doesn't report 
warning for it. Your fix is for GCC tool chain. I will investigate VS solution. 

Thanks
Liming
-----Original Message-----
From: Ard Biesheuvel [mailto:[email protected]] 
Sent: Friday, December 04, 2015 5:26 PM
To: Gao, Liming
Cc: [email protected]; Justen, Jordan L; Zhu, Yonghong
Subject: Re: [PATCH] BaseTools GCC: avoid the use of COMMON symbols

On 4 December 2015 at 10:17, Gao, Liming <[email protected]> wrote:
> Good fix. How do you find this issue?
>

I got build failures with RVCT when using the UEFI Secure Boot versions of 
VariableRuntimeDxe.
Could you check how VS deals with this? I.e., if the two copies of 
mVirtualAddressChangeEvent are mapped onto the same memory location?


> Reviewed-by: Liming Gao <[email protected]>
>

Thanks

> -----Original Message-----
> From: Ard Biesheuvel [mailto:[email protected]]
> Sent: Thursday, December 03, 2015 8:54 PM
> To: [email protected]; Justen, Jordan L; Gao, Liming; Zhu, 
> Yonghong
> Cc: Ard Biesheuvel
> Subject: [PATCH] BaseTools GCC: avoid the use of COMMON symbols
>
> The default behavior of the GCC compiler is to emit uninitialized globals 
> into a COMMON section, where duplicate definitions are merged.
> This may result in unexpected behavior, since global variables appearing by 
> the same name in different C files typically do not refer to the same 
> conceptual data item.
>
> For instance, the definitions of EFI_EVENT mVirtualAddressChangeEvent in that 
> appear in the following files:
>
>   CryptoPkg/Library/BaseCryptLib/SysCall/RuntimeMemAllocation.c
>   MdeModulePkg/Universal/Variable/RuntimeDxe/VariableDxe.c
>
> will be folded into a single instance of the variable when the latter module 
> includes the former library, which can lead to unexpected results.
>
> So prevent GCC from emitting variables into the COMMON section, by passing 
> -fno-common to the compiler, and discarding the COMMON section in the GNU ld 
> linker script.
>
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Ard Biesheuvel <[email protected]>
> ---
>
> NOTE: this patch will result in build failures until we fix the code to make
>       at least some instances of mVirtualAddressChangeEvent STATIC
>
>  BaseTools/Conf/tools_def.template | 2 +-
>  BaseTools/Scripts/GccBase.lds     | 3 ++-
>  2 files changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/BaseTools/Conf/tools_def.template 
> b/BaseTools/Conf/tools_def.template
> index 564d1336650c..2216e747c02d 100644
> --- a/BaseTools/Conf/tools_def.template
> +++ b/BaseTools/Conf/tools_def.template
> @@ -4318,7 +4318,7 @@ NOOPT_DDK3790xASL_IPF_DLINK_FLAGS    = /NOLOGO 
> /NODEFAULTLIB /LTCG /DLL /OPT:REF
>  DEBUG_*_*_OBJCOPY_ADDDEBUGFLAG     = 
> --add-gnu-debuglink=$(DEBUG_DIR)/$(MODULE_NAME).debug
>  RELEASE_*_*_OBJCOPY_ADDDEBUGFLAG   =
>
> -DEFINE GCC_ALL_CC_FLAGS            = -g -Os -fshort-wchar 
> -fno-strict-aliasing -Wall -Werror -Wno-array-bounds -c -include AutoGen.h
> +DEFINE GCC_ALL_CC_FLAGS            = -g -Os -fshort-wchar 
> -fno-strict-aliasing -Wall -Werror -Wno-array-bounds -c -include AutoGen.h 
> -fno-common
>  DEFINE GCC_IA32_CC_FLAGS           = DEF(GCC_ALL_CC_FLAGS) -m32 
> -malign-double -freorder-blocks -freorder-blocks-and-partition -O2 
> -mno-stack-arg-probe
>  DEFINE GCC_X64_CC_FLAGS            = DEF(GCC_ALL_CC_FLAGS) -mno-red-zone 
> -Wno-address -mno-stack-arg-probe
>  DEFINE GCC_IPF_CC_FLAGS            = DEF(GCC_ALL_CC_FLAGS) 
> -minline-int-divide-min-latency
> diff --git a/BaseTools/Scripts/GccBase.lds 
> b/BaseTools/Scripts/GccBase.lds index 4ee6d998532c..32310bc75dcc 
> 100644
> --- a/BaseTools/Scripts/GccBase.lds
> +++ b/BaseTools/Scripts/GccBase.lds
> @@ -46,7 +46,7 @@ SECTIONS {
>     */
>    .data ALIGN(ALIGNOF(.text)) : ALIGN(CONSTANT(COMMONPAGESIZE)) {
>      *(.data .data.* .gnu.linkonce.d.*)
> -    *(.bss .bss.* *COM*)
> +    *(.bss .bss.*)
>    }
>
>    .eh_frame ALIGN(CONSTANT(COMMONPAGESIZE)) : { @@ -66,5 +66,6 @@ SECTIONS {
>      *(.dynamic)
>      *(.hash)
>      *(.comment)
> +    *(COMMON)
>    }
>  }
> --
> 1.9.1
>
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to