[RISCV] Use init_array instead of ctors for RISCV target, by default
authorMandeep Singh Grang <mgrang@codeaurora.org>
Sat, 24 Mar 2018 18:37:19 +0000 (18:37 +0000)
committerMandeep Singh Grang <mgrang@codeaurora.org>
Sat, 24 Mar 2018 18:37:19 +0000 (18:37 +0000)
commit98bc25a0f2bf169ef13f4dfc8ad3cc863731a8e7
tree6e598dc90726dcde313d8463999cf7e7775d2f17
parent2b5967f510a8b73f3bd883d57120ee2d16db9488
[RISCV] Use init_array instead of ctors for RISCV target, by default

Summary:
LLVM defaults to the newer .init_array/.fini_array scheme for static
constructors rather than the less desirable .ctors/.dtors (the UseCtors
flag defaults to false). This wasn't being respected in the RISC-V
backend because it fails to call TargetLoweringObjectFileELF::InitializeELF with the the appropriate
flag for UseInitArray.
This patch fixes this by implementing RISCVELFTargetObjectFile and overriding its Initialize method to call
InitializeELF(TM.Options.UseInitArray).

Reviewers: asb, apazos

Reviewed By: asb

Subscribers: mgorny, rbar, johnrusso, simoncook, jordy.potman.lists, sabuasal, niosHD, kito-cheng, shiva0217, llvm-commits

Differential Revision: https://reviews.llvm.org/D44750

llvm-svn: 328433
llvm/lib/Target/RISCV/CMakeLists.txt
llvm/lib/Target/RISCV/RISCVTargetMachine.cpp
llvm/lib/Target/RISCV/RISCVTargetObjectFile.cpp [new file with mode: 0644]
llvm/lib/Target/RISCV/RISCVTargetObjectFile.h [new file with mode: 0644]
llvm/test/CodeGen/RISCV/init-array.ll [new file with mode: 0644]