From owner-freebsd-emulation@freebsd.org Mon Sep 12 19:57:05 2016 Return-Path: Delivered-To: freebsd-emulation@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 0FAF1BD8B41 for ; Mon, 12 Sep 2016 19:57:05 +0000 (UTC) (envelope-from joe@getsomewhere.net) Received: from prak.gameowls.com (prak.gameowls.com [IPv6:2001:19f0:5c00:950b:5400:ff:fe14:46b7]) by mx1.freebsd.org (Postfix) with ESMTP id BDD9AB6D for ; Mon, 12 Sep 2016 19:57:04 +0000 (UTC) (envelope-from joe@getsomewhere.net) Received: from [IPv6:2001:470:c412:beef:135:c8df:2d0e:4ea6] (unknown [IPv6:2001:470:c412:beef:135:c8df:2d0e:4ea6]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by prak.gameowls.com (Postfix) with ESMTPSA id F101B18195 for ; Mon, 12 Sep 2016 14:57:02 -0500 (CDT) From: Joe Love Message-Id: <4AB10098-988D-4DB9-ADB3-8F0C26C86B73@getsomewhere.net> Mime-Version: 1.0 (Mac OS X Mail 9.3 \(3124\)) Subject: Re: linux-compat semctl operation - bad address Date: Mon, 12 Sep 2016 14:57:01 -0500 References: <276F4863-DE8C-49F7-BB60-F8614F88064C@getsomewhere.net> To: freebsd-emulation@freebsd.org In-Reply-To: <276F4863-DE8C-49F7-BB60-F8614F88064C@getsomewhere.net> X-Mailer: Apple Mail (2.3124) Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Content-Filtered-By: Mailman/MimeDel 2.1.23 X-BeenThere: freebsd-emulation@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Development of Emulators of other operating systems List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 12 Sep 2016 19:57:05 -0000 > On Sep 9, 2016, at 4:34 PM, Joe Love 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