diff options
| author | Richard Cobbe <ricobbe@microsoft.com> | 2021-09-10 17:34:09 -0700 |
|---|---|---|
| committer | Richard Cobbe <ricobbe@microsoft.com> | 2021-09-20 14:50:35 -0700 |
| commit | 142f6c0b078ceef1dc817c418f628d350551f6e4 (patch) | |
| tree | cf487a6b2de22b3ac0692310d0b5ac9fc8f678a3 /compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp | |
| parent | 60e70cc909f84e84ed3bca3fe3459ddceefdd08c (diff) | |
| download | rust-142f6c0b078ceef1dc817c418f628d350551f6e4.tar.gz rust-142f6c0b078ceef1dc817c418f628d350551f6e4.zip | |
Implement #[link_ordinal] attribute in the context of #[link(kind = "raw-dylib")].
Diffstat (limited to 'compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp')
| -rw-r--r-- | compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp b/compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp index 9850f395a0f..b0ebae5214a 100644 --- a/compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp +++ b/compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp @@ -1749,10 +1749,11 @@ LLVMRustBuildMaxNum(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS) { } // This struct contains all necessary info about a symbol exported from a DLL. -// At the moment, it's just the symbol's name, but we use a separate struct to -// make it easier to add other information like ordinal later. struct LLVMRustCOFFShortExport { const char* name; + bool ordinal_present; + // The value of `ordinal` is only meaningful if `ordinal_present` is true. + uint16_t ordinal; }; // Machine must be a COFF machine type, as defined in PE specs. @@ -1768,13 +1769,15 @@ extern "C" LLVMRustResult LLVMRustWriteImportLibrary( ConvertedExports.reserve(NumExports); for (size_t i = 0; i < NumExports; ++i) { + bool ordinal_present = Exports[i].ordinal_present; + uint16_t ordinal = ordinal_present ? Exports[i].ordinal : 0; ConvertedExports.push_back(llvm::object::COFFShortExport{ Exports[i].name, // Name std::string{}, // ExtName std::string{}, // SymbolName std::string{}, // AliasTarget - 0, // Ordinal - false, // Noname + ordinal, // Ordinal + ordinal_present, // Noname false, // Data false, // Private false // Constant |
