执行 LLVM MCJIT 生成机器码时出现段错误

时间:2021-05-29 03:05:58

标签: segmentation-fault llvm llvm-ir mcjit

检查_siginfo,si_code为2

(gdb) p $_siginfo
$2 = {si_signo = 11, si_errno = 0, si_code = 2, _sifields = {_pad = {1254290016, 32642, 0 <repeats 26 times>}, _kill = {
      si_pid = 1254290016, si_uid = 32642}, _timer = {si_tid = 1254290016, si_overrun = 32642, si_sigval = {sival_int = 0,
        sival_ptr = 0x0}}, _rt = {si_pid = 1254290016, si_uid = 32642, si_sigval = {sival_int = 0, sival_ptr = 0x0}},
    _sigchld = {si_pid = 1254290016, si_uid = 32642, si_status = 0, si_utime = 0, si_stime = 0}, _sigfault = {
      si_addr = 0x7f824ac2f260}, _sigpoll = {si_band = 140197576766048, si_fd = 0}}}
    /* `si_code' values for SIGSEGV signal.  */
enum
{
  SEGV_MAPERR = 1,                /* Address not mapped to object.  */
# define SEGV_MAPERR        SEGV_MAPERR
  SEGV_ACCERR                        /* Invalid permissions for mapped object.  */
# define SEGV_ACCERR        SEGV_ACCERR
};

映射对象的无效权限

我查过core文件,用disas打印asm代码,这个地址可以正常访问,和我本地代码没有区别。

我查看了另一个线程,发现还有另一个线程 只是编译机器码,所以可能是这个的影响?

0 个答案:

没有答案