Closed
Description
I was using custom c++ functions, and it includes c++ standard libraries
.
While i using c++ standard libraries
, error occured:
./build/main;
Stack dump:
0. Program arguments: ./build/main
0 main 0x000000010c4f7d8c llvm::sys::PrintStackTrace(llvm::raw_ostream&) + 60
1 main 0x000000010c4f8349 PrintStackTraceSignalHandler(void*) + 25
2 main 0x000000010c4f5dc6 llvm::sys::RunSignalHandlers() + 118
3 main 0x000000010c4fbf0c SignalHandler(int) + 252
4 libsystem_platform.dylib 0x00007fff6af3642d _sigtramp + 29
5 libsystem_platform.dylib 000000000000000000 _sigtramp + 18446603338721827824
6 libsystem_platform.dylib 0x00000001162a8213 _sigtramp + 18446603343388679683
7 libsystem_platform.dylib 0x00000001162a80d1 _sigtramp + 18446603343388679361
8 libsystem_platform.dylib 0x00000001162a801a _sigtramp + 18446603343388679178
9 libsystem_platform.dylib 0x00000001162a7c2d _sigtramp + 18446603343388678173
10 libsystem_platform.dylib 0x00000001162a79ed _sigtramp + 18446603343388677597
11 libsystem_platform.dylib 0x00000001162a7147 _sigtramp + 18446603343388675383
12 libsystem_platform.dylib 0x00000001162a7032 _sigtramp + 18446603343388675106
13 main 0x000000010c2f63d6 main + 1830
14 libdyld.dylib 0x00007fff6ad3d7fd start + 1
make: *** [start] Segmentation fault: 11
Codes:
main.cpp
#include "llvm/ExecutionEngine/JITLink/JITLinkMemoryManager.h"
#include "llvm/ExecutionEngine/JITSymbol.h"
#include "llvm/ExecutionEngine/Orc/LLJIT.h"
#include "llvm/ExecutionEngine/Orc/ObjectLinkingLayer.h"
#include "llvm/ExecutionEngine/Orc/ThreadSafeModule.h"
#include "llvm/IR/Verifier.h"
#include "llvm/Support/InitLLVM.h"
#include "llvm/Support/MemoryBuffer.h"
#include "llvm/Support/TargetSelect.h"
#include <fstream>
#include <iostream>
using namespace std;
using namespace llvm;
using namespace llvm::orc;
int main(int argc, char *argv[]) {
InitLLVM X(argc, argv);
InitializeNativeTarget();
InitializeNativeTargetAsmPrinter();
ThreadSafeContext context(std::make_unique<LLVMContext>());
ExitOnError ExitOnErr;
auto JTMB = ExitOnErr(JITTargetMachineBuilder::detectHost());
JTMB.setCodeModel(CodeModel::Small);
auto jit =
ExitOnErr(LLJITBuilder()
.setJITTargetMachineBuilder(std::move(JTMB))
.create());
jit->getMainJITDylib().addGenerator(
ExitOnErr(orc::DynamicLibrarySearchGenerator::GetForCurrentProcess(
jit->getDataLayout().getGlobalPrefix())));
char ffi_file[] = "build/ffi";
llvm::Error err =
jit->addObjectFile(ExitOnErr(errorOrToExpected(MemoryBuffer::getFileAsStream(ffi_file))));
if (err) {
cout << "error addObjectFile" << endl;
return 1;
};
char func_name[] = "add";
auto func_add = ExitOnErr(jit->lookup(func_name));
int (*func)(int, int) = (int (*)(int, int))func_add.getAddress();
int result = func(111, 222);
cout << "result: " << result << endl;
return 0;
}
ffi.cpp, which will build and output build/ffi
file.
#include <vector>
extern "C" int add(int a, int b) {
std::vector<int> vc;
vc.push_back(1);
return a + b;
}
When vc.push_back(1);
was included in ffi.cpp
, error occoured, when delete this line , it runs ok.
Here is my environment
OS: MacOSX 10.15.2
LLVM: 10
Clang: 11
Here is my cmake file
cmake_minimum_required(VERSION 3.15.0)
project(jitdemo)
SET (CMAKE_C_COMPILER /usr/bin/clang)
SET (CMAKE_CXX_COMPILER /usr/bin/clang++)
SET ( CMAKE_BUILD_TYPE Debug )
find_package(LLVM REQUIRED CONFIG)
message(STATUS ">>Found LLVM ${LLVM_PACKAGE_VERSION}")
message(STATUS ">>Using LLVMConfig.cmake in: ${LLVM_DIR}")
add_compile_options(-std=c++17)
add_compile_options(-stdlib=libc++)
add_definitions(${LLVM_DEFINITIONS})
include_directories(${LLVM_INCLUDE_DIRS})
include_directories(${PROJECT_SOURCE_DIR})
add_subdirectory(link)
llvm_map_components_to_libnames(llvm_libs support core orcjit irreader nativecodegen)
add_executable(main main.cpp)
target_link_libraries(main link ${llvm_libs})
Metadata
Metadata
Assignees
Labels
No labels