[RISCV] Support TLSDESC in the RISC-V backend (#66915)
authorPaul Kirth <paulkirth@google.com>
Wed, 24 Jan 2024 00:16:07 +0000 (16:16 -0800)
committerGitHub <noreply@github.com>
Wed, 24 Jan 2024 00:16:07 +0000 (16:16 -0800)
commit03a61d34ebf4f8eeaa6861bec3ab39c75bb41778
treeb40e7c22db320a412a4a6c8d049a31156aff6cf7
parentd657519838e4b2310e13ec5ff52599e041860825
[RISCV] Support TLSDESC in the RISC-V backend (#66915)

This patch adds basic TLSDESC support in the RISC-V backend.

Specifically, we add new relocation types for TLSDESC, as prescribed in
https://github.com/riscv-non-isa/riscv-elf-psabi-doc/pull/373, and add a
new pseudo instruction to simplify code generation.

This patch does not try to optimize the local dynamic case, which can be
improved in separate patches.

Linker side changes will also be handled separately.

The current implementation is only enabled when passing the new
`-enable-tlsdesc` codegen flag.
24 files changed:
llvm/include/llvm/BinaryFormat/ELFRelocs/RISCV.def
llvm/include/llvm/CodeGen/CommandFlags.h
llvm/include/llvm/Target/TargetMachine.h
llvm/include/llvm/Target/TargetOptions.h
llvm/include/llvm/TargetParser/Triple.h
llvm/lib/CodeGen/CommandFlags.cpp
llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp
llvm/lib/Target/RISCV/MCTargetDesc/RISCVAsmBackend.cpp
llvm/lib/Target/RISCV/MCTargetDesc/RISCVBaseInfo.h
llvm/lib/Target/RISCV/MCTargetDesc/RISCVELFObjectWriter.cpp
llvm/lib/Target/RISCV/MCTargetDesc/RISCVFixupKinds.h
llvm/lib/Target/RISCV/MCTargetDesc/RISCVMCCodeEmitter.cpp
llvm/lib/Target/RISCV/MCTargetDesc/RISCVMCExpr.cpp
llvm/lib/Target/RISCV/MCTargetDesc/RISCVMCExpr.h
llvm/lib/Target/RISCV/RISCVAsmPrinter.cpp
llvm/lib/Target/RISCV/RISCVExpandPseudoInsts.cpp
llvm/lib/Target/RISCV/RISCVISelLowering.cpp
llvm/lib/Target/RISCV/RISCVISelLowering.h
llvm/lib/Target/RISCV/RISCVInstrInfo.cpp
llvm/lib/Target/RISCV/RISCVInstrInfo.td
llvm/lib/Target/TargetMachine.cpp
llvm/test/CodeGen/RISCV/tls-models.ll
llvm/test/MC/RISCV/relocations.s
llvm/test/MC/RISCV/tlsdesc.s [new file with mode: 0644]