From 15e6e8cf3e6b06a79968c2c4d3eadad5729f74e1 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Thu, 3 Apr 2014 10:45:36 -0700 Subject: [PATCH 1/2] rustc: Stop using LLVMGetSectionName The recent pull request to remove libc from libstd has hit a wall in compiling on windows, and I've been trying to investigate on the try bots as to why (it compiles locally just fine). To the best of my knowledge, the LLVM section iterator is behaving badly when iterating over the sections of the libc DLL. Upon investigating the LLVMGetSectionName function in LLVM, I discovered that this function doesn't always return a null-terminated string. It returns the data pointer of a StringRef instance (LLVM's equivalent of &str essentially), but it has no method of returning the length of the name of the section. This commit modifies the section iteration when loading libraries to invoke a custom LLVMRustGetSectionName which will correctly return both the length and the data pointer. I have not yet verified that this will fix landing liblibc, as it will require a snapshot before doing a full test. Regardless, this is a worrisome situation regarding the LLVM API, and should likely be fixed anyway. --- src/librustc/lib/llvm.rs | 5 +++-- src/librustc/metadata/loader.rs | 8 +++++--- src/rustllvm/RustWrapper.cpp | 25 +++++++++++++++++++++++++ 3 files changed, 33 insertions(+), 5 deletions(-) diff --git a/src/librustc/lib/llvm.rs b/src/librustc/lib/llvm.rs index a733d2672e820..9cfe064ad986f 100644 --- a/src/librustc/lib/llvm.rs +++ b/src/librustc/lib/llvm.rs @@ -1438,8 +1438,6 @@ pub mod llvm { -> Bool; /** Moves the section iterator to point to the next section. */ pub fn LLVMMoveToNextSection(SI: SectionIteratorRef); - /** Returns the current section name. */ - pub fn LLVMGetSectionName(SI: SectionIteratorRef) -> *c_char; /** Returns the current section size. */ pub fn LLVMGetSectionSize(SI: SectionIteratorRef) -> c_ulonglong; /** Returns the current section contents as a string buffer. */ @@ -1784,6 +1782,9 @@ pub mod llvm { pub fn LLVMRustSetDLLExportStorageClass(V: ValueRef); pub fn LLVMVersionMinor() -> c_int; + + pub fn LLVMRustGetSectionName(SI: SectionIteratorRef, + data: *mut *c_char) -> c_int; } } diff --git a/src/librustc/metadata/loader.rs b/src/librustc/metadata/loader.rs index 8a3d6567c77a1..4dd892fd70345 100644 --- a/src/librustc/metadata/loader.rs +++ b/src/librustc/metadata/loader.rs @@ -29,9 +29,10 @@ use std::cast; use std::cmp; use std::io; use std::os::consts::{macos, freebsd, linux, android, win32}; +use std::ptr; use std::rc::Rc; -use std::str; use std::slice; +use std::str; use collections::{HashMap, HashSet}; use flate; @@ -439,8 +440,9 @@ fn get_metadata_section_imp(os: Os, filename: &Path) -> Result(SI); +} + +extern "C" int +LLVMRustGetSectionName(LLVMSectionIteratorRef SI, const char **ptr) { + StringRef ret; + if (error_code ec = (*unwrap(SI))->getName(ret)) + report_fatal_error(ec.message()); + *ptr = ret.data(); + return ret.size(); +} From 0bd6f2ce0b650ebcb1d2b05dc501a9ed4907b6d2 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Thu, 3 Apr 2014 10:49:57 -0700 Subject: [PATCH 2/2] rustllvm: Remove a no longer needed file The .def.in files haven't been necessary since the switch to static linking awhile back. --- src/rustllvm/rustllvm.def.in | 635 ----------------------------------- 1 file changed, 635 deletions(-) delete mode 100644 src/rustllvm/rustllvm.def.in diff --git a/src/rustllvm/rustllvm.def.in b/src/rustllvm/rustllvm.def.in deleted file mode 100644 index 0b4a619c41990..0000000000000 --- a/src/rustllvm/rustllvm.def.in +++ /dev/null @@ -1,635 +0,0 @@ -LLVMRustCreateMemoryBufferWithContentsOfFile -LLVMRustWriteOutputFile -LLVMRustGetLastError -LLVMRustConstSmallInt -LLVMRustConstInt -LLVMRustPrintPassTimings -LLVMRustStartMultithreading -LLVMCreateObjectFile -LLVMDisposeObjectFile -LLVMDisposeExecutionEngine -LLVMGetSections -LLVMDisposeSectionIterator -LLVMIsSectionIteratorAtEnd -LLVMMoveToNextSection -LLVMGetSectionName -LLVMGetSectionSize -LLVMGetSectionContents -LLVMABIAlignmentOfType -LLVMABISizeOfType -LLVMAddAggressiveDCEPass -LLVMAddAlias -LLVMAddArgumentPromotionPass -LLVMAddAttribute -LLVMAddBasicAliasAnalysisPass -LLVMAddCFGSimplificationPass -LLVMAddCase -LLVMAddClause -LLVMAddConstantMergePass -LLVMAddConstantPropagationPass -LLVMAddCorrelatedValuePropagationPass -LLVMAddDeadArgEliminationPass -LLVMAddDeadStoreEliminationPass -LLVMAddDemoteMemoryToRegisterPass -LLVMAddDestination -LLVMAddEarlyCSEPass -LLVMAddFunction -LLVMAddFunctionAttr -LLVMAddFunctionAttrString -LLVMAddFunctionAttrsPass -LLVMAddFunctionInliningPass -LLVMAddGVNPass -LLVMAddGlobal -LLVMAddGlobalDCEPass -LLVMAddGlobalInAddressSpace -LLVMAddGlobalOptimizerPass -LLVMAddIPConstantPropagationPass -LLVMAddIPSCCPPass -LLVMAddIncoming -LLVMAddIndVarSimplifyPass -LLVMAddInstrAttribute -LLVMAddInstructionCombiningPass -LLVMAddInternalizePass -LLVMAddJumpThreadingPass -LLVMAddLICMPass -LLVMAddLoopDeletionPass -LLVMAddLoopIdiomPass -LLVMAddLoopRotatePass -LLVMAddLoopUnrollPass -LLVMAddLoopUnswitchPass -LLVMAddMemCpyOptPass -LLVMAddNamedMetadataOperand -LLVMAddPromoteMemoryToRegisterPass -LLVMAddPruneEHPass -LLVMAddReassociatePass -LLVMAddSCCPPass -LLVMAddScalarReplAggregatesPass -LLVMAddScalarReplAggregatesPassSSA -LLVMAddScalarReplAggregatesPassWithThreshold -LLVMAddSimplifyLibCallsPass -LLVMAddStripDeadPrototypesPass -LLVMAddStripSymbolsPass -LLVMAddTailCallEliminationPass -LLVMAddTargetData -LLVMAddTypeBasedAliasAnalysisPass -LLVMAddVerifierPass -LLVMAlignOf -LLVMAppendBasicBlock -LLVMAppendBasicBlockInContext -LLVMArrayType -LLVMBasicBlockAsValue -LLVMBlockAddress -LLVMBuildAShr -LLVMBuildAtomicLoad -LLVMBuildAtomicStore -LLVMBuildAtomicCmpXchg -LLVMBuildAtomicRMW -LLVMBuildAtomicFence -LLVMBuildAdd -LLVMBuildAggregateRet -LLVMBuildAlloca -LLVMBuildAnd -LLVMBuildArrayAlloca -LLVMBuildArrayMalloc -LLVMBuildBinOp -LLVMBuildBitCast -LLVMBuildBr -LLVMBuildCall -LLVMBuildCast -LLVMBuildCondBr -LLVMBuildExactSDiv -LLVMBuildExtractElement -LLVMBuildExtractValue -LLVMBuildFAdd -LLVMBuildFCmp -LLVMBuildFDiv -LLVMBuildFMul -LLVMBuildFNeg -LLVMBuildFPCast -LLVMBuildFPExt -LLVMBuildFPToSI -LLVMBuildFPToUI -LLVMBuildFPTrunc -LLVMBuildFRem -LLVMBuildFSub -LLVMBuildFree -LLVMBuildGEP -LLVMBuildGlobalString -LLVMBuildGlobalStringPtr -LLVMBuildICmp -LLVMBuildInBoundsGEP -LLVMBuildIndirectBr -LLVMBuildInsertElement -LLVMBuildInsertValue -LLVMBuildIntCast -LLVMBuildIntToPtr -LLVMBuildInvoke -LLVMBuildIsNotNull -LLVMBuildIsNull -LLVMBuildLandingPad -LLVMBuildLShr -LLVMBuildLoad -LLVMBuildMalloc -LLVMBuildMul -LLVMBuildNSWAdd -LLVMBuildNSWMul -LLVMBuildNSWNeg -LLVMBuildNSWSub -LLVMBuildNUWAdd -LLVMBuildNUWMul -LLVMBuildNUWNeg -LLVMBuildNUWSub -LLVMBuildNeg -LLVMBuildNot -LLVMBuildOr -LLVMBuildPhi -LLVMBuildPointerCast -LLVMBuildPtrDiff -LLVMBuildPtrToInt -LLVMBuildResume -LLVMBuildRet -LLVMBuildRetVoid -LLVMBuildSDiv -LLVMBuildSExt -LLVMBuildSExtOrBitCast -LLVMBuildSIToFP -LLVMBuildSRem -LLVMBuildSelect -LLVMBuildShl -LLVMBuildShuffleVector -LLVMBuildStore -LLVMBuildStructGEP -LLVMBuildSub -LLVMBuildSwitch -LLVMBuildTrunc -LLVMBuildTruncOrBitCast -LLVMBuildUDiv -LLVMBuildUIToFP -LLVMBuildURem -LLVMBuildUnreachable -LLVMBuildVAArg -LLVMBuildXor -LLVMBuildZExt -LLVMBuildZExtOrBitCast -LLVMByteOrder -LLVMCallFrameAlignmentOfType -LLVMClearInsertionPosition -LLVMConstAShr -LLVMConstAdd -LLVMConstAllOnes -LLVMConstAnd -LLVMConstArray -LLVMConstBitCast -LLVMConstExactSDiv -LLVMConstExtractElement -LLVMConstExtractValue -LLVMConstFAdd -LLVMConstFCmp -LLVMConstFDiv -LLVMConstFMul -LLVMConstFNeg -LLVMConstFPCast -LLVMConstFPExt -LLVMConstFPToSI -LLVMConstFPToUI -LLVMConstFPTrunc -LLVMConstFRem -LLVMConstFSub -LLVMConstGEP -LLVMConstICmp -LLVMConstInBoundsGEP -LLVMConstInlineAsm -LLVMConstInsertElement -LLVMConstInsertValue -LLVMConstInt -LLVMConstIntCast -LLVMConstIntGetSExtValue -LLVMConstIntGetZExtValue -LLVMConstIntOfArbitraryPrecision -LLVMConstIntOfString -LLVMConstIntOfStringAndSize -LLVMConstIntToPtr -LLVMConstLShr -LLVMConstMul -LLVMConstNSWAdd -LLVMConstNSWMul -LLVMConstNSWNeg -LLVMConstNSWSub -LLVMConstNUWAdd -LLVMConstNUWMul -LLVMConstNUWNeg -LLVMConstNUWSub -LLVMConstNeg -LLVMConstNot -LLVMConstNull -LLVMConstOr -LLVMConstPointerCast -LLVMConstPointerNull -LLVMConstPtrToInt -LLVMConstReal -LLVMConstRealOfString -LLVMConstRealOfStringAndSize -LLVMConstSDiv -LLVMConstSExt -LLVMConstSExtOrBitCast -LLVMConstSIToFP -LLVMConstSRem -LLVMConstSelect -LLVMConstShl -LLVMConstShuffleVector -LLVMConstString -LLVMConstStringInContext -LLVMConstStruct -LLVMConstStructInContext -LLVMConstSub -LLVMConstTrunc -LLVMConstTruncOrBitCast -LLVMConstUDiv -LLVMConstUIToFP -LLVMConstURem -LLVMConstVector -LLVMConstXor -LLVMConstZExt -LLVMConstZExtOrBitCast -LLVMContextCreate -LLVMContextDispose -LLVMCopyStringRepOfTargetData -LLVMCountBasicBlocks -LLVMCountIncoming -LLVMCountParamTypes -LLVMCountParams -LLVMCountStructElementTypes -LLVMCreateBuilder -LLVMCreateBuilderInContext -LLVMCreateFunctionPassManager -LLVMCreateFunctionPassManagerForModule -LLVMCreateMemoryBufferWithContentsOfFile -LLVMCreateMemoryBufferWithSTDIN -LLVMCreateModuleProviderForExistingModule -LLVMCreateObjectFile -LLVMCreatePassManager -LLVMCreateTargetData -LLVMDeleteBasicBlock -LLVMDeleteFunction -LLVMDeleteGlobal -LLVMDisposeBuilder -LLVMDisposeMemoryBuffer -LLVMDisposeMessage -LLVMDisposeModule -LLVMDisposeModuleProvider -LLVMDisposeObjectFile -LLVMDisposePassManager -LLVMDisposeSectionIterator -LLVMDisposeTargetData -LLVMDoubleType -LLVMDoubleTypeInContext -LLVMDumpModule -LLVMDumpValue -LLVMElementAtOffset -LLVMFP128Type -LLVMFP128TypeInContext -LLVMFinalizeFunctionPassManager -LLVMFloatType -LLVMFloatTypeInContext -LLVMFunctionType -LLVMGetAlignment -LLVMGetArrayLength -LLVMGetAttribute -LLVMGetBasicBlockParent -LLVMGetBasicBlocks -LLVMGetBitcodeModule -LLVMGetBitcodeModuleInContext -LLVMGetBitcodeModuleProvider -LLVMGetBitcodeModuleProviderInContext -LLVMGetConstOpcode -LLVMGetCurrentDebugLocation -LLVMGetDataLayout -LLVMGetElementType -LLVMGetEntryBasicBlock -LLVMGetFirstBasicBlock -LLVMGetFirstFunction -LLVMGetFirstGlobal -LLVMGetFirstInstruction -LLVMGetFirstParam -LLVMGetFirstUse -LLVMGetFunctionAttr -LLVMGetFunctionCallConv -LLVMGetGC -LLVMGetGlobalContext -LLVMGetGlobalParent -LLVMGetGlobalPassRegistry -LLVMGetIncomingBlock -LLVMGetIncomingValue -LLVMGetInitializer -LLVMGetInsertBlock -LLVMGetInstructionCallConv -LLVMGetInstructionParent -LLVMGetIntTypeWidth -LLVMGetIntrinsicID -LLVMGetLastBasicBlock -LLVMGetLastFunction -LLVMGetLastGlobal -LLVMGetLastInstruction -LLVMGetLastParam -LLVMGetLinkage -LLVMGetMDKindID -LLVMGetMDKindIDInContext -LLVMGetMetadata -LLVMGetModuleContext -LLVMGetNamedFunction -LLVMGetNamedGlobal -LLVMGetNextBasicBlock -LLVMGetNextFunction -LLVMGetNextGlobal -LLVMGetNextInstruction -LLVMGetNextParam -LLVMGetNextUse -LLVMGetNumOperands -LLVMGetOperand -LLVMGetOrInsertFunction -LLVMGetParam -LLVMGetParamParent -LLVMGetParamTypes -LLVMGetParams -LLVMGetPointerAddressSpace -LLVMGetPointerToGlobal -LLVMGetPreviousBasicBlock -LLVMGetPreviousFunction -LLVMGetPreviousGlobal -LLVMGetPreviousInstruction -LLVMGetPreviousParam -LLVMGetReturnType -LLVMGetSection -LLVMGetSectionContents -LLVMGetSectionName -LLVMGetSectionSize -LLVMGetSections -LLVMGetStructElementTypes -LLVMGetTarget -LLVMGetTypeContext -LLVMGetTypeKind -LLVMGetUndef -LLVMGetUsedValue -LLVMGetUser -LLVMGetValueName -LLVMGetVectorSize -LLVMGetVisibility -LLVMHasMetadata -LLVMInitializeCodeGen -LLVMInitializeFunctionPassManager -LLVMInitializeIPA -LLVMInitializeInstCombine -LLVMInitializeScalarOpts -LLVMInitializeTarget -LLVMInitializeTransformUtils -LLVMInitializeARMAsmParser -LLVMInitializeMipsAsmParser -LLVMInitializeX86AsmParser -LLVMInitializeARMAsmPrinter -LLVMInitializeMipsAsmPrinter -LLVMInitializeX86AsmPrinter -LLVMInitializeARMDisassembler -LLVMInitializeMipsDisassembler -LLVMInitializeX86Disassembler -LLVMInitializeARMTarget -LLVMInitializeMipsTarget -LLVMInitializeX86Target -LLVMInitializeARMTargetMC -LLVMInitializeMipsTargetMC -LLVMInitializeX86TargetMC -LLVMInitializeARMTargetInfo -LLVMInitializeMipsTargetInfo -LLVMInitializeX86TargetInfo -LLVMInsertBasicBlock -LLVMInsertBasicBlockInContext -LLVMInsertIntoBuilder -LLVMInsertIntoBuilderWithName -LLVMInstructionEraseFromParent -LLVMInt16Type -LLVMInt16TypeInContext -LLVMInt1Type -LLVMInt1TypeInContext -LLVMInt32Type -LLVMInt32TypeInContext -LLVMInt64Type -LLVMInt64TypeInContext -LLVMInt8Type -LLVMInt8TypeInContext -LLVMIntPtrType -LLVMIntType -LLVMIntTypeInContext -LLVMIsAAllocaInst -LLVMIsAArgument -LLVMIsABasicBlock -LLVMIsABinaryOperator -LLVMIsABitCastInst -LLVMIsABranchInst -LLVMIsACallInst -LLVMIsACastInst -LLVMIsACmpInst -LLVMIsAConstant -LLVMIsAConstantAggregateZero -LLVMIsAConstantArray -LLVMIsAConstantExpr -LLVMIsAConstantFP -LLVMIsAConstantInt -LLVMIsAConstantPointerNull -LLVMIsAConstantStruct -LLVMIsAConstantVector -LLVMIsADbgDeclareInst -LLVMIsADbgInfoIntrinsic -LLVMIsAExtractElementInst -LLVMIsAExtractValueInst -LLVMIsAFCmpInst -LLVMIsAFPExtInst -LLVMIsAFPToSIInst -LLVMIsAFPToUIInst -LLVMIsAFPTruncInst -LLVMIsAFunction -LLVMIsAGetElementPtrInst -LLVMIsAGlobalAlias -LLVMIsAGlobalValue -LLVMIsAGlobalVariable -LLVMIsAICmpInst -LLVMIsAInlineAsm -LLVMIsAInsertElementInst -LLVMIsAInsertValueInst -LLVMIsAInstruction -LLVMIsAIntToPtrInst -LLVMIsAIntrinsicInst -LLVMIsAInvokeInst -LLVMIsALoadInst -LLVMIsAMemCpyInst -LLVMIsAMemIntrinsic -LLVMIsAMemMoveInst -LLVMIsAMemSetInst -LLVMIsAPHINode -LLVMIsAPtrToIntInst -LLVMIsAReturnInst -LLVMIsASExtInst -LLVMIsASIToFPInst -LLVMIsASelectInst -LLVMIsAShuffleVectorInst -LLVMIsAStoreInst -LLVMIsASwitchInst -LLVMIsATerminatorInst -LLVMIsATruncInst -LLVMIsAUIToFPInst -LLVMIsAUnaryInstruction -LLVMIsAUndefValue -LLVMIsAUnreachableInst -LLVMIsAUser -LLVMIsAVAArgInst -LLVMIsAZExtInst -LLVMIsConstant -LLVMIsDeclaration -LLVMIsFunctionVarArg -LLVMIsGlobalConstant -LLVMIsNull -LLVMIsPackedStruct -LLVMIsSectionIteratorAtEnd -LLVMIsTailCall -LLVMIsThreadLocal -LLVMIsUndef -LLVMLabelType -LLVMLabelTypeInContext -LLVMLinkInInterpreter -LLVMMDNode -LLVMMDNodeInContext -LLVMMDString -LLVMMDStringInContext -LLVMMetadataTypeInContext -LLVMModuleCreateWithName -LLVMModuleCreateWithNameInContext -LLVMMoveBasicBlockAfter -LLVMMoveBasicBlockBefore -LLVMMoveToNextSection -LLVMOffsetOfElement -LLVMPPCFP128Type -LLVMPPCFP128TypeInContext -LLVMParseBitcode -LLVMParseBitcodeInContext -LLVMPassManagerBuilderCreate -LLVMPassManagerBuilderDispose -LLVMPassManagerBuilderPopulateModulePassManager -LLVMPassManagerBuilderSetDisableSimplifyLibCalls -LLVMPassManagerBuilderSetDisableUnitAtATime -LLVMPassManagerBuilderPopulateFunctionPassManager -LLVMPassManagerBuilderSetDisableUnrollLoops -LLVMPassManagerBuilderSetOptLevel -LLVMPassManagerBuilderSetSizeLevel -LLVMPassManagerBuilderUseInlinerWithThreshold -LLVMPointerSize -LLVMPointerType -LLVMPositionBuilder -LLVMPositionBuilderAtEnd -LLVMPositionBuilderBefore -LLVMPreferredAlignmentOfGlobal -LLVMPreferredAlignmentOfType -LLVMRemoveAttribute -LLVMRemoveFunctionAttr -LLVMRemoveInstrAttribute -LLVMReplaceAllUsesWith -LLVMRunFunctionPassManager -LLVMRunPassManager -LLVMSetAlignment -LLVMSetCleanup -LLVMSetCurrentDebugLocation -LLVMSetDataLayout -LLVMSetDebug -LLVMSetFunctionCallConv -LLVMSetGC -LLVMSetGlobalConstant -LLVMSetInitializer -LLVMSetInstDebugLocation -LLVMSetInstrParamAlignment -LLVMSetInstructionCallConv -LLVMSetLinkage -LLVMSetMetadata -LLVMSetModuleInlineAsm -LLVMSetOperand -LLVMSetParamAlignment -LLVMSetSection -LLVMSetTailCall -LLVMSetTarget -LLVMSetThreadLocal -LLVMSetValueName -LLVMSetVisibility -LLVMSizeOf -LLVMSizeOfTypeInBits -LLVMStoreSizeOfType -LLVMStructType -LLVMStructTypeInContext -LLVMTypeOf -LLVMValueAsBasicBlock -LLVMValueIsBasicBlock -LLVMVectorType -LLVMVerifyFunction -LLVMVerifyModule -LLVMViewFunctionCFG -LLVMViewFunctionCFGOnly -LLVMVoidType -LLVMVoidTypeInContext -LLVMWriteBitcodeToFD -LLVMWriteBitcodeToFile -LLVMWriteBitcodeToFileHandle -LLVMX86FP80Type -LLVMX86FP80TypeInContext -LLVMX86MMXType -LLVMX86MMXTypeInContext -LLVMConstNamedStruct -LLVMStructCreateNamed -LLVMStructSetBody -LLVMInlineAsm -LLVMInitializePasses -LLVMDIBuilderCreate -LLVMDIBuilderDispose -LLVMDIBuilderFinalize -LLVMDIBuilderCreateCompileUnit -LLVMDIBuilderCreateStaticVariable -LLVMDIBuilderCreateLocalVariable -LLVMDIBuilderCreateFunction -LLVMDIBuilderCreateFile -LLVMDIBuilderCreateLexicalBlock -LLVMDIBuilderCreateBasicType -LLVMDIBuilderCreatePointerType -LLVMDIBuilderCreateMemberType -LLVMDIBuilderCreateStructType -LLVMDIBuilderGetOrCreateSubrange -LLVMDIBuilderCreateArrayType -LLVMDIBuilderCreateVectorType -LLVMDIBuilderCreateSubroutineType -LLVMDIBuilderGetOrCreateArray -LLVMDIBuilderInsertDeclareAtEnd -LLVMDIBuilderInsertDeclareBefore -LLVMDIBuilderCreateEnumerator -LLVMDIBuilderCreateEnumerationType -LLVMDIBuilderCreateUnionType -LLVMDIBuilderCreateTemplateTypeParameter -LLVMDIBuilderCreateOpDeref -LLVMDIBuilderCreateOpPlus -LLVMDIBuilderCreateComplexVariable -LLVMDIBuilderCreateNameSpace -LLVMDICompositeTypeSetTypeArray -LLVMSetUnnamedAddr -LLVMRustAddPass -LLVMRustAddAnalysisPasses -LLVMRustAddLibraryInfo -LLVMRustCreateTargetMachine -LLVMRustRunFunctionPassManager -LLVMRustPrintModule -LLVMRustDisposeTargetMachine -LLVMRustAddBuilderLibraryInfo -LLVMRustSetLLVMOptions -LLVMRustPrintPasses -LLVMRustSetNormalizedTarget -LLVMRustAddAlwaysInlinePass -LLVMAddReturnAttribute -LLVMRemoveReturnAttribute -LLVMTypeToString -LLVMAddColdAttribute -LLVMCreateMemoryBufferWithMemoryRange -LLVMCreateMemoryBufferWithMemoryRangeCopy -LLVMPassManagerBuilderPopulateLTOPassManager -LLVMRustLinkInExternalBitcode -LLVMRustRunRestrictionPass