Wie nenne ich eine externe Funktion mit Args in LLVM IR?C++

Programme in C++. Entwicklerforum
Anonymous
 Wie nenne ich eine externe Funktion mit Args in LLVM IR?

Post by Anonymous »

Ich modifiziere den Rost/Compiler/sastc_codegen_llvm/src/builder.rs , um externe Funktionsaufrufe mit Argums in LLVM IR -Form hinzuzufügen.
Die Funktionserklärung ist externe "c" void __my_func (int num) {...} .und ich versuche es mit folgenden Codes aufzurufen.
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>
Mit diesem Code ist es in der Lage, RustC zu kompilieren, aber der Segmentierungsfehler, wenn ich Stufe1 RustC verwende, um andere Rust -Programme wie folgt zu kompilieren. < /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>
Es sieht so aus, als ob mit Adressen etwas nicht stimmt, aber ich bin mir nicht sicher. Kann mir jemand einen Rat anbieten?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post