私はこのMacBook Proで小さな実験を行いました。あなたのコードは、あなたがそれを意味するように思えます。私は
with System;
procedure Bootloader is
procedure Call;
pragma No_Return (Call);
pragma Import (Assembler, Call);
for Call'Address use System'To_Address (16#0E00#);
begin
Call;
end Bootloader;
を読み取るために、コードを変更し、私はgnatmake -c -u -f -S bootloader.adb
でコンパイルするときに保存アセンブラは、私が知っているASMで十分慣れていないんですけれども、有望に見える
.text
.globl __ada_bootloader
__ada_bootloader:
LFB1:
pushq %rbp
LCFI0:
movq %rsp, %rbp
LCFI1:
subq $16, %rsp
LCFI2:
movq $3584, -8(%rbp)
movq -8(%rbp), %rax
call *%rax
leave
LCFI3:
ret
[...]
です。私が手GDBの下でそれを実行
(後のおしゃべりのロット)、より希望に満ち見えます
(gdb) run
Starting program: /Users/simon/tmp/bootloader
Reading symbols for shared libraries ++........................ done
Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_INVALID_ADDRESS at address: 0x0000000000000e00
0x0000000000000e00 in ??()
(gdb) bt
#0 0x0000000000000e00 in ??()
Cannot access memory at address 0xe00
#1 0x0000000100000d93 in main (argc=1, argv=140734799805048, envp=140734799805064) at /Users/simon/tmp/b~bootloader.adb:121
#2 0x0000000100000bf4 in start()
。
おそらくあなたのAVRコンパイラはコード生成が適切ではありませんか?
永遠の質問:**どのように "機能しません"?** –
1.それを行うには? 2.それはどのように機能しませんか? 3.私はそれについて考えなかった可能性がありますか?プラグマに問題があると思います。インポートには何もリンクされていません。 –
「どうしてうまくいかないの?」という意味は:試してみたときに何が起こったのですか? –