Solaris 8 X11 二进制文件在 NetBSD 上产生分段违规

Solaris 8 X11 二进制文件在 NetBSD 上产生分段违规

全部,

最近,我一直在尝试从具有 X11 转发功能的客户端获取 NetBSD 的 Solaris 8 版本xtermxauth运行,但两个二进制文件似乎都会立即产生分段违规。我对这两个程序都运行了,试图找出发生了什么,这两个程序的最后几行输出如下所示:sshktrace

...
   571      1 xclock   compat_20_getfsstat(0xedefa018, 0xefffede4) Err#2 ENOENT
   571      1 xclock   compat_50_getrusage(0xedefa000, 0x1000) = 0
   571      1 xclock   #115 (obsolete vtrace)(0, 0x1000, 0x7, 0x80000102, 0xffffffff, 0) = -303063040
   571      1 xclock   compat_50_getrusage(0xedee4000, 0x1000) = 0
   571      1 xclock   break(0x25850)              = 0
   571      1 xclock   break(0x27850)              = 0
   571      1 xclock   break(0x27850)              = 0
   571      1 xclock   break(0x29850)              = 0
   571      1 xclock   break(0x29850)              = 0
   571      1 xclock   break(0x2b850)              = 0
   571      1 xclock   compat_43_otruncate(0x5, 0xeffff3a0) = 0
   571      1 xclock   shmdt(0x2, 0x2, 0)          = 3
   571      1 xclock   modctl(0x3, 0x6, 0x1, 0xeffff39c, 0x4) = 0
   571      1 xclock   modctl(0x3, 0xffff, 0x8, 0xeffff398, 0x4) = 0
   571      1 xclock   break(0x2b850)              = 0
   571      1 xclock   break(0x2d850)              = 0
   571      1 xclock   open("/emul/svr4/etc/netconfig", 0, 0x1b6) = 4
   571      1 xclock   #217 (unimplemented)(0x4, 0xefffebb0) = 0
   571      1 xclock   ioctl(0x4, _IO('T',0x1,0), 0xefffeb3c) Err#-4
   571      1 xclock   read(0x4, 0x2b9a4, 0x400)   = 1024
       "#pragma ident\t"@(#)netconfig\t1.16\t99/10/25 SMI"\n#\n# The "Network Configuration" File.\n#\n# Each entry is of the form:\n#\n#       <network_id> <semantics> <fl"
   571      1 xclock   SIGSEGV SIG_DFL

我注意到呼叫ioctl失败了;这可能是失败的原因吗?

我还运行了ktraceNetBSD 版本xclockxterm看看是否有任何相似之处,我能找到的最相似的输出示例如下:

...
   604      1 xclock   __stat50("/etc/nsswitch.conf", 0xefffeed8) = 0
   604      1 xclock   open("/etc/nsswitch.conf", 0x400000, 0x1b6) = 3
   604      1 xclock   __fstat50(0x3, 0xefffeb70)  = 0
   604      1 xclock   read(0x3, 0xed61d000, 0x4000) = 621
       "#\t$NetBSD: nsswitch.conf,v 1.6 2009/10/25 00:17:06 tsarna Exp $\n#\n# nsswitch.conf(5) -\n#\tname service switch configuration file\n#\n\n\n# These are the default"
   604      1 xclock   read(0x3, 0xed61d000, 0x4000) = 0
...
   604      1 xclock   open("/etc/hosts", 0x400000, 0x1b6) = 3
   604      1 xclock   __fstat50(0x3, 0xefffcc38)  = 0
   604      1 xclock   read(0x3, 0xed61d000, 0x4000) = 831
       "#\t$NetBSD: hosts,v 1.9 2013/11/24 07:20:01 dholland Exp $\n#\n# Host name database.\n#\n# This file contains addresses and aliases for local hosts whose names\n# n"
   604      1 xclock   read(0x3, 0xed61d000, 0x4000) = 0
       ""
   604      1 xclock   close(0x3)                  = 0

因此,我怀疑原因可能在于我复制到 NetBSD 虚拟机的某些 Solaris 8 文件(例如/etc/netconfig),但我不确定。这些文件是否是导致 Solaris 8 X11 二进制文件无法在 NetBSD 上正常运行的原因?

答案1

ioctl()由于尝试读取的文件(FD#4)最终被成功读取,因此这次失败可能无关紧要。

还有一个未实现的系统调用,同样位于 FD#4 上,就在看起来是 的上方fstat64(),可能是为了查找文件的大小。同样,这可能无关紧要,因为文件似乎已被成功读取。

这两个调用都可能是在 Solaris libc 中通过 STDIO 函数进行的,通过setnetconfig(),也在 libc 中。

因此,假设您在 NetBSD 测试主机上放入的文件/emul/svr4/etc/netconfig与有效工作的 Solaris 8 副本没有变化/etc/netconfig,我会进一步怀疑ktrace输出中看到的任何内容是否能为问题提供任何真正的线索。

下一步可能是尝试一些更简单的程序,例如cat/bin/echo,甚至/bin/true/bin/false,看看它们是否成功运行。

真正的答案可能只有在可以在 NetBSD 上的模拟下在源代码级调试器下运行从 Solaris 源代码构建的未剥离版本的代码时才会出现,以准确查看它崩溃的位置。

相关内容