[PATCH] generate .init_array instead of .ctors sections for AArch64 ELF targets

Kristof Beyls kristof.beyls at arm.com
Thu Jan 9 08:40:40 PST 2014


The .init_array should be used on any platform that follows the AArch64
C++ ABI, which I think would be any platform using ELF as an object file
format. I think that the patch does implement that (but this is an area
of the code I'm not very familiar with).

As for factoring out defaulting -fuse-init-array: the decision logic
for Linux::addClangTargetOptions and Generic_GCC:addClangTargetOptions
is different, so the only thing to factor out would be
+  if (DriverArgs.hasFlag(options::OPT_fuse_init_array,
+                         options::OPT_fno_use_init_array,
+                         UseInitArrayDefault))
+    CC1Args.push_back("-fuse-init-array");
The conditions on when to add this by default would remain different
between Generic_GCC and Linux, and therefore the 2 implementations of
addClangTargetOptions in the Generic_GCC and Linux subclasses need to
remain. 
Generic_GCC:
  bool UseInitArrayDefault = getTriple().getArch() == llvm::Triple::aarch64;

Linux:
  const Generic_GCC::GCCVersion &V = GCCInstallation.getVersion();
  bool UseInitArrayDefault =
      !V.isOlderThan(4, 7, 0) ||
      getTriple().getArch() == llvm::Triple::aarch64 ||
      getTriple().getEnvironment() == llvm::Triple::Android;

Or am I missing something obvious here?
Is it worthwhile to factor out only the 4 lines that add the -fuse-init-array
option into a separate function?

Thanks,

Kristof

> -----Original Message-----
> From: Rafael EspĂ­ndola [mailto:rafael.espindola at gmail.com]
> Sent: 09 January 2014 16:25
> To: Kristof Beyls
> Cc: llvm cfe; Tim Northover
> Subject: Re: [PATCH] generate .init_array instead of .ctors sections for
> AArch64 ELF targets
> 
> So .init_array should be used on BSDs only for aarch64?
> 
> In any case, please refactor the clang code so that we don't add
> -fuse-init-array in two places (Generic_GCC::addClangTargetOptions and
> Linux::addClangTargetOptions.
> 
> On 9 January 2014 10:28, Kristof Beyls <kristof.beyls at arm.com> wrote:
> > Hi,
> >
> >
> >
> > The AArch64 C++ ABI states that .init_array sections should be used for
> > static constructors.
> >
> > The attached patches (one for clang, one for LLVM), make sure that these
> > sections get
> > produced in an ABI-compliant way, not just for linux platforms, but for all
> > ELF-based
> > platforms. Could I get a review on these patches?
> >
> >
> >
> > Thanks,
> >
> >
> >
> > Kristof
> >
> >
> > _______________________________________________
> > cfe-commits mailing list
> > cfe-commits at cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
> >







More information about the cfe-commits mailing list