From 48fc5ceb8e57ee8052fc560272a5ff6117f76a3e Mon Sep 17 00:00:00 2001 From: occheung Date: Fri, 27 May 2022 10:41:34 +0800 Subject: [PATCH] nac3artiq: demote global value to private ... except typeinfo & now symbols. typeinfo will be read by the runtime linker; now is for now-pinning. --- nac3artiq/src/lib.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/nac3artiq/src/lib.rs b/nac3artiq/src/lib.rs index 3c006350..85e71d44 100644 --- a/nac3artiq/src/lib.rs +++ b/nac3artiq/src/lib.rs @@ -6,6 +6,7 @@ use std::sync::Arc; use inkwell::{ memory_buffer::MemoryBuffer, + module::Linkage, passes::{PassManager, PassManagerBuilder}, targets::*, OptimizationLevel, @@ -822,6 +823,19 @@ impl Nac3 { function_iter = func.get_next_function(); } + // Demote all global variables that will not be referenced in the kernel to private + let preserved_symbols: Vec<&'static [u8]> = vec![ + b"typeinfo", + b"now", + ]; + let mut global_option = main.get_first_global(); + while let Some(global) = global_option { + if !preserved_symbols.contains(&(global.get_name().to_bytes())) { + global.set_linkage(Linkage::Private); + } + global_option = global.get_next_global(); + } + let builder = PassManagerBuilder::create(); builder.set_optimization_level(OptimizationLevel::Aggressive); let passes = PassManager::create(());