On 06/23/15 17:30, Ard Biesheuvel wrote:
> Use GCC's 'small' C model when building ArmVirtQemu for AArch64.
> This model uses PC relative references for globals instead of
> absolute references, which is assumed to be beneficial since it
> means fewer runtime relocations to fix up, and less indirect
> addressing via literals that are accessed via the D-cache.
> 
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Ard Biesheuvel <ard.biesheu...@linaro.org>
> ---
>  ArmVirtPkg/ArmVirtQemu.dsc |  2 +-
>  ArmVirtPkg/ArmVirtQemu.fdf | 24 +++++++++++++++++++++---
>  2 files changed, 22 insertions(+), 4 deletions(-)
> 
> diff --git a/ArmVirtPkg/ArmVirtQemu.dsc b/ArmVirtPkg/ArmVirtQemu.dsc
> index 374cf7a9ee02..b6a6a44c7216 100644
> --- a/ArmVirtPkg/ArmVirtQemu.dsc
> +++ b/ArmVirtPkg/ArmVirtQemu.dsc
> @@ -76,7 +76,7 @@ [LibraryClasses.ARM.SEC]
>  [BuildOptions]
>    RVCT:*_*_ARM_PLATFORM_FLAGS == --cpu Cortex-A15 
> -I$(WORKSPACE)/ArmVirtPkg/Include
>    GCC:*_*_ARM_PLATFORM_FLAGS == -mcpu=cortex-a15 
> -I$(WORKSPACE)/ArmVirtPkg/Include
> -  *_*_AARCH64_PLATFORM_FLAGS == -I$(WORKSPACE)/ArmVirtPkg/Include
> +  *_*_AARCH64_PLATFORM_FLAGS == -I$(WORKSPACE)/ArmVirtPkg/Include 
> -mcmodel=small

According to the gcc documentation, "-mcmodel=small" is actually the
default setting (... for hosted -- not freestanding -- compilation at
least).

https://gcc.gnu.org/onlinedocs/gcc/AArch64-Options.html

  -mcmodel=small
    Generate code for the small code model. The program and its
    statically defined symbols must be within 4GB of each other.
    Pointers are 64 bits. Programs can be statically or dynamically
    linked. This is the default code model.

Seems fine, I just wish there was a way to avoid duplicating the
-mcmodel option (cue the previous patch in the series). If I remember
correctly, "==" replaces, "=" appends... but yes, here only
PLATFORM_FLAGS are replaced, and they are fused with a bunch of others
in the previous patch.

I wonder if -mcmodel=large could be removed fom GCC_AARCH64_CC_FLAGS,
and pushed to all the more specific flag variables that include
GCC_AARCH64_CC_FLAGS. Could be a big churn though.

>  
>  
>  
> ################################################################################
> diff --git a/ArmVirtPkg/ArmVirtQemu.fdf b/ArmVirtPkg/ArmVirtQemu.fdf
> index 73d088a3bbdb..617b786798ca 100644
> --- a/ArmVirtPkg/ArmVirtQemu.fdf
> +++ b/ArmVirtPkg/ArmVirtQemu.fdf
> @@ -306,24 +306,42 @@ [FV.FVMAIN_COMPACT]
>  #
>  ############################################################################
>  
> -[Rule.Common.SEC]
> +[Rule.ARM.SEC]
>    FILE SEC = $(NAMED_GUID) RELOCS_STRIPPED {
>      TE  TE Align = 128                  $(INF_OUTPUT)/$(MODULE_NAME).efi
>    }
>  
> -[Rule.Common.PEI_CORE]
> +[Rule.AARCH64.SEC]
> +  FILE SEC = $(NAMED_GUID) RELOCS_STRIPPED {
> +    TE  TE Align = 4K                   $(INF_OUTPUT)/$(MODULE_NAME).efi
> +  }
> +
> +[Rule.ARM.PEI_CORE]
>    FILE PEI_CORE = $(NAMED_GUID) {
>      TE     TE Align = 8                 $(INF_OUTPUT)/$(MODULE_NAME).efi
>      UI     STRING ="$(MODULE_NAME)" Optional
>    }
>  
> -[Rule.Common.PEIM]
> +[Rule.AARCH64.PEI_CORE]
> +  FILE PEI_CORE = $(NAMED_GUID) {
> +    TE     TE Align = 4K                $(INF_OUTPUT)/$(MODULE_NAME).efi
> +    UI     STRING ="$(MODULE_NAME)" Optional
> +  }
> +
> +[Rule.ARM.PEIM]
>    FILE PEIM = $(NAMED_GUID) {
>       PEI_DEPEX PEI_DEPEX Optional       $(INF_OUTPUT)/$(MODULE_NAME).depex
>       TE       TE Align = 8              $(INF_OUTPUT)/$(MODULE_NAME).efi
>       UI       STRING="$(MODULE_NAME)" Optional
>    }
>  
> +[Rule.AARCH64.PEIM]
> +  FILE PEIM = $(NAMED_GUID) {
> +     PEI_DEPEX PEI_DEPEX Optional       $(INF_OUTPUT)/$(MODULE_NAME).depex
> +     TE       TE Align = 4K             $(INF_OUTPUT)/$(MODULE_NAME).efi
> +     UI       STRING="$(MODULE_NAME)" Optional
> +  }
> +
>  [Rule.Common.PEIM.TIANOCOMPRESSED]
>    FILE PEIM = $(NAMED_GUID) DEBUG_MYTOOLS_IA32 {
>      PEI_DEPEX PEI_DEPEX Optional        $(INF_OUTPUT)/$(MODULE_NAME).depex
> 

Looks reasonable to me. This seems to handle all the TE binary rules.

Reviewed-by: Laszlo Ersek <ler...@redhat.com>

------------------------------------------------------------------------------
Monitor 25 network devices or servers for free with OpManager!
OpManager is web-based network management software that monitors 
network devices and physical & virtual servers, alerts via email & sms 
for fault. Monitor 25 devices for free with no restriction. Download now
http://ad.doubleclick.net/ddm/clk/292181274;119417398;o
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to