[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