Skip site navigation (1)Skip section navigation (2)
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>