Closed dylanmckay closed 9 years ago
A segmentation fault is generating during instruction selection when compiling wiring_analog.c from the Arduino core.
wiring_analog.c
wiring_analog.ll.
wiring_analog.ll
Output:
#0 0x132b14b llvm::sys::PrintStackTrace(llvm::raw_ostream&) /home/dylan/projects/avr-llvm/llvm/lib/Support/Unix/Signals.inc:437:0 #1 0x132b4c8 PrintStackTraceSignalHandler(void*) /home/dylan/projects/avr-llvm/llvm/lib/Support/Unix/Signals.inc:495:0 #2 0x132a09f SignalHandler(int) /home/dylan/projects/avr-llvm/llvm/lib/Support/Unix/Signals.inc:210:0 #3 0x7fbfa33ca660 __restore_rt (/usr/lib/libpthread.so.0+0x10660) #4 0x9e6664 llvm::Value::getType() const /home/dylan/projects/avr-llvm/llvm/include/llvm/IR/Value.h:222:0 #5 0x9fcbc8 bool llvm::AVR::isProgramMemoryAddress<llvm::Value const>(llvm::Value const*) /home/dylan/projects/avr-llvm/llvm/lib/Target/AVR/AVR.h:48:0 #6 0x9fbf3f llvm::AVR::isProgramMemoryAccess(llvm::MemSDNode const*) /home/dylan/projects/avr-llvm/llvm/lib/Target/AVR/AVR.h:55:0 #7 0x9f93cf llvm::SDNode* llvm::AVRDAGToDAGISel::select<157u>(llvm::SDNode*) /home/dylan/projects/avr-llvm/llvm/lib/Target/AVR/AVRISelDAGToDAG.cpp:400:0 #8 0x9fa5dd llvm::AVRDAGToDAGISel::Select(llvm::SDNode*) /home/dylan/projects/avr-llvm/llvm/lib/Target/AVR/AVRISelDAGToDAG.cpp:571:0 #9 0x1172e73 llvm::SelectionDAGISel::DoInstructionSelection() /home/dylan/projects/avr-llvm/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:892:0 #10 0x11727f3 llvm::SelectionDAGISel::CodeGenAndEmitDAG() /home/dylan/projects/avr-llvm/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:791:0 #11 0x1175b2e llvm::SelectionDAGISel::FinishBasicBlock() /home/dylan/projects/avr-llvm/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1568:0 #12 0x1174827 llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) /home/dylan/projects/avr-llvm/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1317:0 #13 0x117072c llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) /home/dylan/projects/avr-llvm/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:465:0 #14 0x9f7edf llvm::AVRDAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&) /home/dylan/projects/avr-llvm/llvm/lib/Target/AVR/AVRISelDAGToDAG.cpp:69:0 #15 0xbd3f11 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) /home/dylan/projects/avr-llvm/llvm/lib/CodeGen/MachineFunctionPass.cpp:41:0 #16 0xf89aa3 llvm::FPPassManager::runOnFunction(llvm::Function&) /home/dylan/projects/avr-llvm/llvm/lib/IR/LegacyPassManager.cpp:1520:0 #17 0xf89c02 llvm::FPPassManager::runOnModule(llvm::Module&) /home/dylan/projects/avr-llvm/llvm/lib/IR/LegacyPassManager.cpp:1540:0 #18 0xf89f31 (anonymous namespace)::MPPassManager::runOnModule(llvm::Module&) /home/dylan/projects/avr-llvm/llvm/lib/IR/LegacyPassManager.cpp:1596:0 #19 0xf8a592 llvm::legacy::PassManagerImpl::run(llvm::Module&) /home/dylan/projects/avr-llvm/llvm/lib/IR/LegacyPassManager.cpp:1698:0 #20 0xf8a797 llvm::legacy::PassManager::run(llvm::Module&) /home/dylan/projects/avr-llvm/llvm/lib/IR/LegacyPassManager.cpp:1730:0 #21 0x9c9b65 compileModule(char**, llvm::LLVMContext&) /home/dylan/projects/avr-llvm/llvm/tools/llc/llc.cpp:367:0 #22 0x9c8cdd main /home/dylan/projects/avr-llvm/llvm/tools/llc/llc.cpp:204:0 #23 0x7fbfa2586790 __libc_start_main (/usr/lib/libc.so.6+0x20790) #24 0x9c7ae9 _start (/home/dylan/projects/builds/avr-llvm/llvm/bin/llc+0x9c7ae9) Stack dump: 0. Program arguments: ./llc -march=avr -mcpu=atmega328p -filetype=obj -O0 -o tmp_arduino/wiring_analog.o /home/dylan/arduino-core/wiring_analog.ll 1. Running pass 'Function Pass Manager' on module '/home/dylan/arduino-core/wiring_analog.ll'. 2. Running pass 'AVR DAG->DAG Instruction Selection' on function '@analogWrite'
A quick debugging session shows that isProgramMemoryAddress is being called by isProgramMemoryAccess, and the value N->getMemOperand()->getValue() is returning a null pointer.
isProgramMemoryAddress
isProgramMemoryAccess
N->getMemOperand()->getValue()
Command line:
llc -march=avr -mcpu=atmega328p -filetype=obj -O0 -o wiring_analog.o wiring_analog.ll
Fixed in 77d5497314e0040e574d70ee0332b58e636e0b84.
A segmentation fault is generating during instruction selection when compiling
wiring_analog.c
from the Arduino core.wiring_analog.ll
.Output:
A quick debugging session shows that
isProgramMemoryAddress
is being called byisProgramMemoryAccess
, and the valueN->getMemOperand()->getValue()
is returning a null pointer.Command line: