From 0149bc4e7e596005c665b132877abebe5258a0f6 Mon Sep 17 00:00:00 2001 From: "William S. Moses" Date: Wed, 3 Mar 2021 21:35:47 -0500 Subject: [PATCH] Plugin variant 2 --- compiler/rustc_codegen_llvm/src/llvm_util.rs | 12 ++++++++++++ compiler/rustc_session/src/options.rs | 2 ++ 2 files changed, 14 insertions(+) diff --git a/compiler/rustc_codegen_llvm/src/llvm_util.rs b/compiler/rustc_codegen_llvm/src/llvm_util.rs index 544ef38c12c6d..c1b0d09253333 100644 --- a/compiler/rustc_codegen_llvm/src/llvm_util.rs +++ b/compiler/rustc_codegen_llvm/src/llvm_util.rs @@ -10,6 +10,8 @@ use rustc_span::symbol::Symbol; use rustc_target::spec::{MergeFunctions, PanicStrategy}; use std::ffi::{CStr, CString}; +use libc; + use std::slice; use std::str; use std::sync::atomic::{AtomicBool, Ordering}; @@ -113,6 +115,16 @@ unsafe fn configure_llvm(sess: &Session) { } llvm::LLVMInitializePasses(); + + for plugin in &sess.opts.cg.llvm_plugins { + let path = CString::new(plugin.as_bytes()).unwrap(); + let res = libc::dlopen(path.as_ptr(), libc::RTLD_LAZY | libc::RTLD_GLOBAL); + if res.is_null() { + println!("{}", CStr::from_ptr(libc::dlerror()).to_string_lossy().into_owned()); + } + println!("{:p}", res); + println!("{}", plugin); + } rustc_llvm::initialize_available_targets(); diff --git a/compiler/rustc_session/src/options.rs b/compiler/rustc_session/src/options.rs index e2b6b1dc2437b..0335a4868e5a5 100644 --- a/compiler/rustc_session/src/options.rs +++ b/compiler/rustc_session/src/options.rs @@ -789,6 +789,8 @@ options! {CodegenOptions, CodegenSetter, basic_codegen_options, "generate build artifacts that are compatible with linker-based LTO"), llvm_args: Vec = (Vec::new(), parse_list, [TRACKED], "a list of arguments to pass to LLVM (space separated)"), + llvm_plugins: Vec = (Vec::new(), parse_list, [TRACKED], + "a list LLVM plugins to enable (space separated)"), lto: LtoCli = (LtoCli::Unspecified, parse_lto, [TRACKED], "perform LLVM link-time optimizations"), metadata: Vec = (Vec::new(), parse_list, [TRACKED],