«LLVMSymbolizer: ошибка чтения файла: нет такого файла или каталога» при загрузке большого массива - PullRequest
0 голосов
/ 08 июня 2018

Я пытаюсь загрузить большой массив в коде LLVM IR.Это мой код LLVM IR (хранится в p.ll):

; ModuleID = 'my_module'
source_filename = "my_module"

@arr = internal global [300 x [300 x i1]] zeroinitializer

define i32 @main() {
entry:
  %arr = load [300 x [300 x i1]], [300 x [300 x i1]]* @arr
  ret i32 0
}

Когда я пытаюсь скомпилировать его с llc p.ll, выдается следующее сообщение об ошибке:

LLVMSymbolizer: error reading file: No such file or directory
#0 0x00007f7bfe16c9cb llvm::sys::PrintStackTrace(llvm::raw_ostream&) (/usr/bin/../lib/libLLVM-6.0.so+0x8759cb)
#1 0x00007f7bfe16a886 llvm::sys::RunSignalHandlers() (/usr/bin/../lib/libLLVM-6.0.so+0x873886)
#2 0x00007f7bfe16a9d3 (/usr/bin/../lib/libLLVM-6.0.so+0x8739d3)
#3 0x00007f7bfd1e88f0 __restore_rt (/usr/bin/../lib/libc.so.6+0x368f0)
#4 0x00007f7bfe7ca360 llvm::SelectionDAG::DeallocateNode(llvm::SDNode*) (/usr/bin/../lib/libLLVM-6.0.so+0xed3360)
#5 0x00007f7bfe689c67 (/usr/bin/../lib/libLLVM-6.0.so+0xd92c67)
#6 0x00007f7bfe6933b7 llvm::SelectionDAG::Combine(llvm::CombineLevel, llvm::AAResults*, llvm::CodeGenOpt::Level) (/usr/bin/../lib/libLLVM-6.0.so+0xd9c3b7)
#7 0x00007f7bfe7dec11 llvm::SelectionDAGISel::CodeGenAndEmitDAG() (/usr/bin/../lib/libLLVM-6.0.so+0xee7c11)
#8 0x00007f7bfe7e946e llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) (/usr/bin/../lib/libLLVM-6.0.so+0xef246e)
#9 0x00007f7bfe7eba67 (/usr/bin/../lib/libLLVM-6.0.so+0xef4a67)
#10 0x00007f7bffef02c5 (/usr/bin/../lib/libLLVM-6.0.so+0x25f92c5)
#11 0x00007f7bfe452172 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (/usr/bin/../lib/libLLVM-6.0.so+0xb5b172)
#12 0x00007f7bfe254dc1 llvm::FPPassManager::runOnFunction(llvm::Function&) (/usr/bin/../lib/libLLVM-6.0.so+0x95ddc1)
#13 0x00007f7bfe254e02 llvm::FPPassManager::runOnModule(llvm::Module&) (/usr/bin/../lib/libLLVM-6.0.so+0x95de02)
#14 0x00007f7bfe254592 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/usr/bin/../lib/libLLVM-6.0.so+0x95d592)
#15 0x0000557aa4dbb3f9 (llc+0x223f9)
#16 0x0000557aa4daefd5 (llc+0x15fd5)
#17 0x00007f7bfd1d506b __libc_start_main (/usr/bin/../lib/libc.so.6+0x2306b)
#18 0x0000557aa4daf16a (llc+0x1616a)
Stack dump:
0.  Program arguments: llc p.ll 
1.  Running pass 'Function Pass Manager' on module 'p.ll'.
2.  Running pass 'X86 DAG->DAG Instruction Selection' on function '@main'
Segmentation fault (core dumped)

Но когда я уменьшу массив, например [30 x [30 x i1]], ошибка не появится.

Я не могу прочитать из сообщения об ошибке, какой файл мне не хватает.Почему это происходит с большим массивом?Какой файл мне не хватает?

1 Ответ

0 голосов
/ 22 января 2019

Похоже, виновником является инструкция %arr = load [300 x [300 x i1]], [300 x [300 x i1]]* @arr, а не большой массив.Инструкция загрузки пытается загрузить очень большой объект [300 x [300 x i1]] в стек, что, по-видимому, недопустимо.И если вы измените его следующим образом, все будет хорошо.

; ModuleID = 'my_module'
source_filename = "my_module"

@arr = internal global [300 x [300 x i1]] zeroinitializer

define i32 @main() {
entry:
  %0 = load i1, i1* getelementptr inbounds ([300 x [300 x i1]], [300 x [300 x i1]]* @arr, i64 0, i64 0, i64 0)
  ret i32 0
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...