Skip to content

LLJIT running error "Segmentation fault: 11", while linking c++ standard libraries. #84

Closed
@lanistor

Description

@lanistor

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/ffifile.

#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
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions