Date: Mon, 12 Sep 2016 14:57:01 -0500 From: Joe Love <joe@getsomewhere.net> To: freebsd-emulation@freebsd.org Subject: Re: linux-compat semctl operation - bad address Message-ID: <4AB10098-988D-4DB9-ADB3-8F0C26C86B73@getsomewhere.net> In-Reply-To: <276F4863-DE8C-49F7-BB60-F8614F88064C@getsomewhere.net> References: <276F4863-DE8C-49F7-BB60-F8614F88064C@getsomewhere.net>
next in thread | previous in thread | raw e-mail | index | archive | help
> On Sep 9, 2016, at 4:34 PM, Joe Love <joe@getsomewhere.net> wrote: >=20 > Hi, >=20 > I have a linux binary I=E2=80=99m trying to run on a 12-CURRENT = machine with the linux_base-c7 (64-bit) port. >=20 > When trying to run it, it starts up and then spits out this error: > shm_semaphores_init: semctl init error: Bad address - trying again >=20 > I=E2=80=99m guessing that it=E2=80=99s reaching the end of the switch = statement in sys/compat/linux/linux_ipc.c=E2=80=99s linux_semctl(=E2=80=A6= ) function and getting an EINVAL result. That=E2=80=99s a guess, = however, as I don=E2=80=99t know enough about debugging at this level in = order to tell what it=E2=80=99s actually doing. >=20 > Can anyone tell me how to get the results of the linux_msg() call at = the end of the function to find out what ipc type it=E2=80=99s trying to = utilize, and with a little luck maybe get a patch created to support = whatever operation it=E2=80=99s trying? >=20 > Thanks, > -Joe >=20 A little further explanation (since I failed to give it earlier): I have = two linux game servers that do this, =E2=80=9C7 Days to Die=E2=80=9D = (7dtd) and =E2=80=9CUnturned.=E2=80=9D Based on the first dtrace probe = I tried (entry), it seems that 7dtd might be easier to understand. = Obviously I don=E2=80=99t have access to game sources. I did a little digging with dtrace, though my knowledge of dtrace is all = new as of this experience. /* my dtrace probe file, semprobe.d */ fbt:linux:linux_semctl:entry, fbt:linux64:linux_semctl:entry { /* args->cmd & ~LINUX_IPC_64 .. LINUX_IPC_64 =3D 0x0100 */ printf("%s (%d, %d, %d, %d)", probefunc, args[1]->cmd, = args[1]->cmd & ~0x0100, args[1]->semid, args[1]->arg.val); } fbt:kernel:kern_semctl:entry { printf("%s (%d, %d, %d, %d)", probefunc, args[3], args[3], = args[1], args[4]->val); } fbt:kernel:kern_semctl:return { printf("%s (%d, %d)", probefunc, args[1], errno); } fbt:linux:linux_semctl:return, fbt:linux64:linux_semctl:return { printf("%s (%d, %d)\n", probefunc, args[1], errno); } I ran that with "dtrace -n semprobe.d=E2=80=9D When I ran the 7dtd server, dtrace proceeded to spit out this = information (while 7dtd spat out it=E2=80=99s error in my first email): dtrace: script 'semprobe.d' matched 6 probes CPU ID FUNCTION:NAME 21 63000 linux_semctl:entry linux_semctl (0, 0, = 952369158, 0) 21 37620 kern_semctl:entry kern_semctl (9, 9, = 952369158, -11936) 21 37621 kern_semctl:return kern_semctl (14, 0) 21 63001 linux_semctl:return linux_semctl (14, 0) 21 63000 linux_semctl:entry linux_semctl (0, 0, = 952369158, 0) 21 37620 kern_semctl:entry kern_semctl (0, 0, = 952369158, 1876522240) 21 37621 kern_semctl:return kern_semctl (0, 14) 21 63001 linux_semctl:return linux_semctl (0, 14) 21 63000 linux_semctl:entry linux_semctl (0, 0, = 952434694, 0) 21 37620 kern_semctl:entry kern_semctl (9, 9, = 952434694, -11936) 21 37621 kern_semctl:return kern_semctl (14, 0) 21 63001 linux_semctl:return linux_semctl (14, 0) 21 63000 linux_semctl:entry linux_semctl (0, 0, = 952434694, 0) 21 37620 kern_semctl:entry kern_semctl (0, 0, = 952434694, 1876522240) 21 37621 kern_semctl:return kern_semctl (0, 14) 21 63001 linux_semctl:return linux_semctl (0, 14) 21 63000 linux_semctl:entry linux_semctl (0, 0, = 952500230, 0) 21 37620 kern_semctl:entry kern_semctl (9, 9, = 952500230, -11936) 21 37621 kern_semctl:return kern_semctl (14, 0) 21 63001 linux_semctl:return linux_semctl (14, 0) 21 63000 linux_semctl:entry linux_semctl (0, 0, = 952500230, 0) 21 37620 kern_semctl:entry kern_semctl (0, 0, = 952500230, 1876522240) 21 37621 kern_semctl:return kern_semctl (0, 14) 21 63001 linux_semctl:return linux_semctl (0, 14) 21 63000 linux_semctl:entry linux_semctl (0, 0, = 952565766, 0) 21 37620 kern_semctl:entry kern_semctl (9, 9, = 952565766, -11936) 21 37621 kern_semctl:return kern_semctl (14, 0) 21 63001 linux_semctl:return linux_semctl (14, 0) 21 63000 linux_semctl:entry linux_semctl (0, 0, = 952565766, 0) 21 37620 kern_semctl:entry kern_semctl (0, 0, = 952565766, 1876522240) 21 37621 kern_semctl:return kern_semctl (0, 0) 21 63001 linux_semctl:return linux_semctl (0, 0) 21 63000 linux_semctl:entry linux_semctl (0, 0, = 952631302, 0) 21 37620 kern_semctl:entry kern_semctl (9, 9, = 952631302, -11936) 21 37621 kern_semctl:return kern_semctl (14, 0) 21 63001 linux_semctl:return linux_semctl (14, 0) 21 63000 linux_semctl:entry linux_semctl (0, 0, = 952631302, 0) 21 37620 kern_semctl:entry kern_semctl (0, 0, = 952631302, 1876522240) 21 37621 kern_semctl:return kern_semctl (0, 0) 21 63001 linux_semctl:return linux_semctl (0, 0) (and repeated the last 2 =E2=80=99sets', with other semaphore ID=E2=80=99s= , always incrementing) I=E2=80=99m hoping someone can find fault with my assessment, because I = don't understand why args->cmd seems to go from LINUX_IPC_RMID (0) to = bsd=E2=80=99s SETALL (9). Anyone have thoughts on what to check, or maybe what is going on? Thanks, -Joe
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4AB10098-988D-4DB9-ADB3-8F0C26C86B73>