[PATCH] D71360: Accept -fuse-init-array when os is not specified on x86

kamlesh kumar via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Dec 11 07:26:09 PST 2019


kamleshbhalui created this revision.
kamleshbhalui added reviewers: rnk, craig.topper.
kamleshbhalui added a project: LLVM.
Herald added a subscriber: hiraditya.

Currently -fuse-init-array option is not effective when target triple does not specify os, on x86,x86_64.
i.e.
$clang -target i386 -fuse-init-array test.c -S // -fuse-init-array is not honored.

$clang -target i386-linux -fuse-init-array test.c -S // -fuse-init-array is honored.

This patch fixes first case.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D71360

Files:
  llvm/lib/Target/X86/X86TargetMachine.cpp
  llvm/lib/Target/X86/X86TargetObjectFile.cpp
  llvm/lib/Target/X86/X86TargetObjectFile.h


Index: llvm/lib/Target/X86/X86TargetObjectFile.h
===================================================================
--- llvm/lib/Target/X86/X86TargetObjectFile.h
+++ llvm/lib/Target/X86/X86TargetObjectFile.h
@@ -49,6 +49,12 @@
     const MCExpr *getDebugThreadLocalSymbol(const MCSymbol *Sym) const override;
   };
 
+  /// X86BinFormatELFTargetObjectFile - This implementation is used for OS
+  /// which uses ELF Binary Format on x86 and x86-64.
+  class X86BinFormatELFTargetObjectFile : public X86ELFTargetObjectFile {
+    void Initialize(MCContext &Ctx, const TargetMachine &TM) override;
+  };
+
   /// X86FreeBSDTargetObjectFile - This implementation is used for FreeBSD
   /// on x86 and x86-64.
   class X86FreeBSDTargetObjectFile : public X86ELFTargetObjectFile {
Index: llvm/lib/Target/X86/X86TargetObjectFile.cpp
===================================================================
--- llvm/lib/Target/X86/X86TargetObjectFile.cpp
+++ llvm/lib/Target/X86/X86TargetObjectFile.cpp
@@ -64,6 +64,13 @@
   return MCSymbolRefExpr::create(Sym, MCSymbolRefExpr::VK_DTPOFF, getContext());
 }
 
+void
+X86BinFormatELFTargetObjectFile::Initialize(MCContext &Ctx,
+                                       const TargetMachine &TM) {
+  TargetLoweringObjectFileELF::Initialize(Ctx, TM);
+  InitializeELF(TM.Options.UseInitArray);
+}
+
 void
 X86FreeBSDTargetObjectFile::Initialize(MCContext &Ctx,
                                        const TargetMachine &TM) {
Index: llvm/lib/Target/X86/X86TargetMachine.cpp
===================================================================
--- llvm/lib/Target/X86/X86TargetMachine.cpp
+++ llvm/lib/Target/X86/X86TargetMachine.cpp
@@ -100,8 +100,10 @@
     return std::make_unique<X86SolarisTargetObjectFile>();
   if (TT.isOSFuchsia())
     return std::make_unique<X86FuchsiaTargetObjectFile>();
-  if (TT.isOSBinFormatELF())
+  if (TT.isOSNetBSD())
     return std::make_unique<X86ELFTargetObjectFile>();
+  if (TT.isOSBinFormatELF())
+    return std::make_unique<X86BinFormatELFTargetObjectFile>();
   if (TT.isOSBinFormatCOFF())
     return std::make_unique<TargetLoweringObjectFileCOFF>();
   llvm_unreachable("unknown subtarget type");


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D71360.233367.patch
Type: text/x-patch
Size: 2178 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20191211/fe439762/attachment.bin>


More information about the llvm-commits mailing list