程式語言 - GNU - lightning - Hello, world!



參考資訊:
https://www.gnu.org/software/lightning/manual/lightning.html

main.c

#include <stdio.h>
#include <lightning.h>

int main(int argc, char *argv[])
{
    void (*pfn)(void);
    jit_state_t *_jit = NULL;

    init_jit(argv[0]);
    _jit = jit_new_state();
 
    jit_prolog();
    jit_prepare();
    jit_pushargi((jit_word_t)"Hello, world!\n");
    jit_finishi(printf);
    jit_ret();
    jit_epilog();
 
    pfn = jit_emit();
    pfn();

    jit_clear_state(); 
    jit_destroy_state();
    finish_jit();

    return 0;
}

編譯、執行

$ export LD_LIBRARY_PATH=/usr/local/lib
$ gcc main.c -o test -llightning -ggdb
$ ./test 
    Hello, world!

$ gdb ./test

(gdb) b main.c:20
(gdb) r
(gdb) x/9i pfn
   0x7ffff7f79000:	sub    $0x18,%rsp
   0x7ffff7f79004:	mov    %rbp,(%rsp)
   0x7ffff7f79008:	mov    %rsp,%rbp
   0x7ffff7f7900b:	movabs $0x555555556004,%rdi
   0x7ffff7f79015:	call   0x7ffff7db35b0 <__printf>
   0x7ffff7f7901a:	mov    %rbp,%rsp
   0x7ffff7f7901d:	mov    (%rsp),%rbp
   0x7ffff7f79021:	add    $0x18,%rsp
   0x7ffff7f79025:	ret