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