Как вызвать внешнюю функцию с Args в LLVM IR?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как вызвать внешнюю функцию с Args в LLVM IR?

Сообщение Anonymous »

Я изменяю rust/compiler/rustc_codegen_llvm/src/builder.rs , чтобы добавить вызовы внешней функции с помощью ARG в форме LLVM IR.
Объявление функции является extern "c" void __my_func (int num) {...} . и я пытаюсь вызвать его с помощью следующих кодов.
fn call_external_func(&mut self, num: usize) {
let args_ty = [self.cx.isize_ty];
let ret_ty = self.cx.type_void();
let fn_name = "__my_func";

let num_const =
unsafe { llvm::LLVMConstInt(self.cx.isize_ty, num as u64, False) };
let args = [num_const];

let fn_type = self.cx.type_func(&args_ty, ret_ty);

let external_func = unsafe {
llvm::LLVMRustGetOrInsertFunction(
self.cx.llmod,
fn_name.as_ptr().cast(),
fn_name.len(),
fn_type,
)
};
let call = unsafe {
llvm::LLVMBuildCallWithOperandBundles(
self.llbuilder,
fn_type,
external_func,
args.as_ptr() as *const &llvm::Value,
1 as c_uint, // Only one argument
[].as_ptr(), // Operand bundles pointer (empty in this case)
0, // Number of bundles
"".as_ptr().cast(), // Name of the call
)
};
unsafe {
llvm::LLVMSetLinkage(call, llvm::ExternalLinkage);
}
}
< /code>
С помощью этого кода он может компилировать Rustc, но неисправность сегментации происходит, если я использую Stage1 Rustc для составления других программ Rust следующим образом. < /p>
// command like /home/monsoon/rust/build/x86_64-unknown-linux-gnu/stage1/bin/rustc --emit=mir -o after.mir test.rs

error: rustc interrupted by SIGSEGV, printing backtrace

/home/monsoon/rust/build/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc_driver-b5f6124ddf75af00.so(+0xcf9aa6)[0x7efe66c8daa6]
/lib/x86_64-linux-gnu/libc.so.6(+0x42520)[0x7efe65da6520]
/home/monsoon/rust/build/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc_driver-b5f6124ddf75af00.so(+0x353846f)[0x7efe694cc46f]
/home/monsoon/rust/build/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc_driver-b5f6124ddf75af00.so(+0x110ea75)[0x7efe670a2a75]
/home/monsoon/rust/build/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc_driver-b5f6124ddf75af00.so(+0x101c9ce)[0x7efe66fb09ce]
/home/monsoon/rust/build/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc_driver-b5f6124ddf75af00.so(+0x10e77ea)[0x7efe6707b7ea]
/home/monsoon/rust/build/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc_driver-b5f6124ddf75af00.so(+0x1089883)[0x7efe6701d883]
/home/monsoon/rust/build/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc_driver-b5f6124ddf75af00.so(+0x1088ec9)[0x7efe6701cec9]
/home/monsoon/rust/build/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc_driver-b5f6124ddf75af00.so(+0x101bf3e)[0x7efe66faff3e]
/home/monsoon/rust/build/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc_driver-b5f6124ddf75af00.so(_RNvXs5_Cs19lfpqY5KDg_18rustc_codegen_llvmNtB5_18LlvmCodegenBackendNtNtNtCshnGYRhF9bb0_17rustc_codegen_ssa6traits7backend14CodegenBackend13codegen_crate+0xfd)[0x7efe66fe29cd]
/home/monsoon/rust/build/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc_driver-b5f6124ddf75af00.so(+0xfcf69d)[0x7efe66f6369d]
/home/monsoon/rust/build/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc_driver-b5f6124ddf75af00.so(_RNvMNtCsb2DN1jkzvVd_15rustc_interface7queriesNtB2_6Linker24codegen_and_build_linker+0x7b8)[0x7efe66edc0c8]
/home/monsoon/rust/build/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc_driver-b5f6124ddf75af00.so(+0xd431ce)[0x7efe66cd71ce]
/home/monsoon/rust/build/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc_driver-b5f6124ddf75af00.so(+0xcc596d)[0x7efe66c5996d]
/home/monsoon/rust/build/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc_driver-b5f6124ddf75af00.so(+0xd6eeb9)[0x7efe66d02eb9]
/home/monsoon/rust/build/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc_driver-b5f6124ddf75af00.so(+0xd6df63)[0x7efe66d01f63]
/home/monsoon/rust/build/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc_driver-b5f6124ddf75af00.so(+0xd17c80)[0x7efe66cabc80]
/home/monsoon/rust/build/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc_driver-b5f6124ddf75af00.so(+0xd0ebf2)[0x7efe66ca2bf2]
/home/monsoon/rust/build/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc_driver-b5f6124ddf75af00.so(+0xd1bb20)[0x7efe66cafb20]
/home/monsoon/rust/build/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc_driver-b5f6124ddf75af00.so(_RINvNtNtCs80Q9hQy23cT_3std3sys9backtrace28___rust_begin_short_backtraceNCNCINvNtCsb2DN1jkzvVd_15rustc_interface4util26run_in_thread_with_globalsNCINvB1e_31run_in_thread_pool_with_globalsNCINvNtB1g_9interface12run_compileruNCNvCscL3LCxAwsNl_17rustc_driver_impl12run_compiler0Es_0uE0uE00uEB3C_+0x62)[0x7efe66ca9d12]
/home/monsoon/rust/build/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc_driver-b5f6124ddf75af00.so(+0xd18ec3)[0x7efe66cacec3]
/home/monsoon/rust/build/x86_64-unknown-linux-gnu/stage1/bin/../lib/librustc_driver-b5f6124ddf75af00.so(+0x7bdb0fb)[0x7efe6db6f0fb]
/lib/x86_64-linux-gnu/libc.so.6(+0x94ac3)[0x7efe65df8ac3]
/lib/x86_64-linux-gnu/libc.so.6(+0x126850)[0x7efe65e8a850]

note: we would appreciate a report at https://github.com/rust-lang/rust
help: you can increase rustc's stack size by setting RUST_MIN_STACK=16777216
note: backtrace dumped due to SIGSEGV! resuming signal
Segmentation fault (core dumped)
< /code>
Похоже, что что -то не так с адресами, но я не уверен. Кто -нибудь может дать мне какие -нибудь советы?

Подробнее здесь: https://stackoverflow.com/questions/794 ... in-llvm-ir
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Llvm/IR/Attributes.inc: такого файла или каталога нет при записи игрушечного компилятора с использованием LLVM.
    Anonymous » » в форуме C++
    0 Ответы
    66 Просмотры
    Последнее сообщение Anonymous
  • Xcode 5 путь llvm-g++ и llvm-gcc?
    Anonymous » » в форуме IOS
    0 Ответы
    32 Просмотры
    Последнее сообщение Anonymous
  • LLVM `llvm/support/host.h` на C ++ Macos Arm64 не существует (Cmake)
    Anonymous » » в форуме C++
    0 Ответы
    29 Просмотры
    Последнее сообщение Anonymous
  • LLVM `llvm/support/host.h` на C ++ Macos Arm64 не существует (Cmake)
    Anonymous » » в форуме C++
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Технические различия и преимущества: def (*args) и def (args=None) в Python [закрыто]
    Anonymous » » в форуме Python
    0 Ответы
    27 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»