On 2019-08-15 19:14:36, Michael D Kinney wrote:
> The local variable PpiArray[10] is declared in middle
> of the SEC module _ModuleEntryPoint().  When building
> for XCODE5 with optimizations enabled, this results in
> corruption and an exception.

It looks like with old code, the scope containing PpiArray was closed,
but a dangling reference to had been made to it's location on the
stack. So, I think the change is good but we should add this extra
detail to the commit message.

-Jordan

> The fix is to move the
> declaration of PpiArray[10] to the standard location
> at the beginning of the function so the storage for
> this local variable is allocated for the entire
> lifetime of the function.
> 
> Cc: Jordan Justen <jordan.l.jus...@intel.com>
> Cc: Ray Ni <ray...@intel.com>
> Cc: Michael D Kinney <michael.d.kin...@intel.com>
> Signed-off-by: Andrew Fish <af...@apple.com>
> ---
>  EmulatorPkg/Sec/Sec.c | 16 +++++++---------
>  1 file changed, 7 insertions(+), 9 deletions(-)
> 
> diff --git a/EmulatorPkg/Sec/Sec.c b/EmulatorPkg/Sec/Sec.c
> index 701032233b..b734d2bb87 100644
> --- a/EmulatorPkg/Sec/Sec.c
> +++ b/EmulatorPkg/Sec/Sec.c
> @@ -75,6 +75,7 @@ _ModuleEntryPoint (
>    EFI_PEI_PPI_DESCRIPTOR    *SecPpiList;
>    UINTN                     SecReseveredMemorySize;
>    UINTN                     Index;
> +  EFI_PEI_PPI_DESCRIPTOR    PpiArray[10];
>
>    EMU_MAGIC_PAGE()->PpiList = PpiList;
>    ProcessLibraryConstructorList ();
> @@ -104,16 +105,13 @@ _ModuleEntryPoint (
>    SecCoreData->PeiTemporaryRamBase = (VOID 
> *)((UINTN)SecCoreData->PeiTemporaryRamBase + SecReseveredMemorySize);
>    SecCoreData->PeiTemporaryRamSize -= SecReseveredMemorySize;
>  #else
> -  {
> -    //
> -    // When I subtrack from SecCoreData->PeiTemporaryRamBase PEI Core 
> crashes? Either there is a bug
> -    // or I don't understand temp RAM correctly?
> -    //
> -    EFI_PEI_PPI_DESCRIPTOR    PpiArray[10];
> +  //
> +  // When I subtrack from SecCoreData->PeiTemporaryRamBase PEI Core crashes? 
> Either there is a bug
> +  // or I don't understand temp RAM correctly?
> +  //
>
> -    SecPpiList = &PpiArray[0];
> -    ASSERT (sizeof (PpiArray) >= SecReseveredMemorySize);
> -  }
> +  SecPpiList = &PpiArray[0];
> +  ASSERT (sizeof (PpiArray) >= SecReseveredMemorySize);
>  #endif
>    // Copy existing list, and append our entries.
>    CopyMem (SecPpiList, PpiList, sizeof (EFI_PEI_PPI_DESCRIPTOR) * Index);
> -- 
> 2.21.0.windows.1
> 

-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#45846): https://edk2.groups.io/g/devel/message/45846
Mute This Topic: https://groups.io/mt/32894354/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to