Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 15 Dec 2004 12:26:25 +0200
From:      Ruslan Ermilov <ru@FreeBSD.org>
To:        Sean McNeil <sean@mcneil.com>
Cc:        "Tim J. Robbins" <tjr@FreeBSD.org>
Subject:   Re: ports/emulators/linux_base on amd64
Message-ID:  <20041215102625.GM25967@ip.net.ua>
In-Reply-To: <1103066141.2041.4.camel@server.mcneil.com>
References:  <20041214182153.GA80721@ip.net.ua> <1103049246.21655.3.camel@server.mcneil.com> <20041214215415.GB29362@ip.net.ua> <1103062382.46568.1.camel@server.mcneil.com> <1103066141.2041.4.camel@server.mcneil.com>

next in thread | previous in thread | raw e-mail | index | archive | help

--lRF4gxo9Z9M++D0O
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Tue, Dec 14, 2004 at 03:15:41PM -0800, Sean McNeil wrote:
> On Tue, 2004-12-14 at 14:13 -0800, Sean McNeil wrote:
> > On Tue, 2004-12-14 at 23:54 +0200, Ruslan Ermilov wrote:
> > > On Tue, Dec 14, 2004 at 10:34:06AM -0800, Sean McNeil wrote:
> > > [...]
> > > > rpm scripts should also be fixed.  It seems like a bug in the rpm p=
ort
> > > > that no one has addressed.
> > > >=20
> > > rpm port is not guilty -- running the postinstall script
> > > manually on amd64 returns 1, but on i386 it returns 0:
> > >=20
> > > Script started on Tue Dec 14 23:10:31 2004
> > > hammer#	/compat/linux/bin/sh
> > > sh-2.04# uname -srm
> > > Linux 2.4.2 amd64
> > > sh-2.04# /usr/sbin/glibc_post_upgrade=20
> > > sh-2.04# echo $?
> > > 1
> > > Script done on Tue Dec 14 23:10:53 2004
> >=20
> > Yes, I just got to this point.  Thanks for the confirmation.  I'm trying
> > to find sources to glibc_post_upgrade to take a look.
>=20
> Here is what I have so far....
>=20
> The source looks like this:
>=20
> #ifdef ARCH_386
>   /* Work around rpm bug */
>   char *remove_file[] =3D {
>     "/lib/i686/libc-" VERSION ".so",
>     "/lib/i686/libm-" VERSION ".so",
>     "/lib/i686/libpthread-" PVERSION ".so",
>     "/lib/i686/libc.so.6",
>     "/lib/i686/libm.so.6",
>     "/lib/i686/libpthread.so.0",
>     NULL };
>   int i;
>=20
>   for (i =3D 0; remove_file[i]; i++)
>     unlink (remove_file[i]);
> #endif
>   pid =3D vfork ();
>   if (pid =3D=3D 0) {
>     execl ("/sbin/ldconfig", "/sbin/ldconfig", NULL);
>     _exit (1);
>   } else if (pid < 0) {
>     _exit (1);
>   }
>   if (waitpid (0, &status, 0) !=3D pid || !WIFEXITED (status)) {
>     _exit (1);
>   }
>   if (WEXITSTATUS (status))
>     _exit (WEXITSTATUS (status));
>=20
> ktrace shows:
>=20
>   2018 ktrace   RET   ktrace 0
>   2018 ktrace   CALL
> execve(0x7fffffffee0f,0x7fffffffec60,0x7fffffffec70)
>   2018 ktrace   NAMI  "/compat/linux/usr/sbin/glibc_post_upgrade"
>   2018 glibc_post_upgrade RET   execve 0
>   2018 glibc_post_upgrade CALL  unlink(0x8048788)
>   2018 glibc_post_upgrade NAMI  "/compat/linux/lib/i686/libc-2.2.4.so"
>   2018 glibc_post_upgrade NAMI  "/lib/i686/libc-2.2.4.so"
>   2018 glibc_post_upgrade RET   unlink JUSTRETURN
>   2018 glibc_post_upgrade CALL  unlink(0x80487a0)
>   2018 glibc_post_upgrade NAMI  "/compat/linux/lib/i686/libm-2.2.4.so"
>   2018 glibc_post_upgrade NAMI  "/lib/i686/libm-2.2.4.so"
>   2018 glibc_post_upgrade RET   unlink JUSTRETURN
>   2018 glibc_post_upgrade CALL  unlink(0x80487b8)
>   2018 glibc_post_upgrade NAMI
> "/compat/linux/lib/i686/libpthread-0.9.so"
>   2018 glibc_post_upgrade NAMI  "/lib/i686/libpthread-0.9.so"
>   2018 glibc_post_upgrade RET   unlink JUSTRETURN
>   2018 glibc_post_upgrade CALL  unlink(0x80487d4)
>   2018 glibc_post_upgrade NAMI  "/compat/linux/lib/i686/libc.so.6"
>   2018 glibc_post_upgrade NAMI  "/lib/i686/libc.so.6"
>   2018 glibc_post_upgrade RET   unlink JUSTRETURN
>   2018 glibc_post_upgrade CALL  unlink(0x80487e8)
>   2018 glibc_post_upgrade NAMI  "/compat/linux/lib/i686/libm.so.6"
>   2018 glibc_post_upgrade NAMI  "/lib/i686/libm.so.6"
>   2018 glibc_post_upgrade RET   unlink JUSTRETURN
>   2018 glibc_post_upgrade CALL  unlink(0x80487fc)
>   2018 glibc_post_upgrade NAMI  "/compat/linux/lib/i686/libpthread.so.0"
>   2018 glibc_post_upgrade NAMI  "/lib/i686/libpthread.so.0"
>   2018 glibc_post_upgrade RET   unlink JUSTRETURN
>   2018 glibc_post_upgrade CALL  lstat
>   2018 glibc_post_upgrade RET   lstat 2019/0x7e3
>   2018 glibc_post_upgrade CALL  old.sendmsg(0,0xffffdb8c,0,0)
>   2018 glibc_post_upgrade RET   old.sendmsg 2019/0x7e3
>   2018 glibc_post_upgrade CALL  exit(0x1)
>=20
> Looks like there is a mismatch in kernel entry points here.
>=20
> lstat instead of vfork and old.sendmsg instead of (maybe) waitpid.
>=20
> Does ktrace work with linux abi?
>=20
On i386 it looks identical, except that sendmsg doesn't result in
exit(0x1):

 20167 ktrace   RET   ktrace 0
 20167 ktrace   CALL  execve(0xbfbfec77,0xbfbfeb60,0xbfbfeb68)
 20167 ktrace   NAMI  "/compat/linux/usr/sbin/glibc_post_upgrade"
 20167 glibc_post_upgrade RET   execve 0
 20167 glibc_post_upgrade CALL  unlink(0x8048788)
 20167 glibc_post_upgrade NAMI  "/compat/linux/lib/i686/libc-2.2.4.so"
 20167 glibc_post_upgrade NAMI  "/lib/i686/libc-2.2.4.so"
 20167 glibc_post_upgrade RET   unlink JUSTRETURN
 20167 glibc_post_upgrade CALL  unlink(0x80487a0)
 20167 glibc_post_upgrade NAMI  "/compat/linux/lib/i686/libm-2.2.4.so"
 20167 glibc_post_upgrade NAMI  "/lib/i686/libm-2.2.4.so"
 20167 glibc_post_upgrade RET   unlink JUSTRETURN
 20167 glibc_post_upgrade CALL  unlink(0x80487b8)
 20167 glibc_post_upgrade NAMI  "/compat/linux/lib/i686/libpthread-0.9.so"
 20167 glibc_post_upgrade NAMI  "/lib/i686/libpthread-0.9.so"
 20167 glibc_post_upgrade RET   unlink JUSTRETURN
 20167 glibc_post_upgrade CALL  unlink(0x80487d4)
 20167 glibc_post_upgrade NAMI  "/compat/linux/lib/i686/libc.so.6"
 20167 glibc_post_upgrade NAMI  "/lib/i686/libc.so.6"
 20167 glibc_post_upgrade RET   unlink JUSTRETURN
 20167 glibc_post_upgrade CALL  unlink(0x80487e8)
 20167 glibc_post_upgrade NAMI  "/compat/linux/lib/i686/libm.so.6"
 20167 glibc_post_upgrade NAMI  "/lib/i686/libm.so.6"
 20167 glibc_post_upgrade RET   unlink JUSTRETURN
 20167 glibc_post_upgrade CALL  unlink(0x80487fc)
 20167 glibc_post_upgrade NAMI  "/compat/linux/lib/i686/libpthread.so.0"
 20167 glibc_post_upgrade NAMI  "/lib/i686/libpthread.so.0"
 20167 glibc_post_upgrade RET   unlink JUSTRETURN
 20167 glibc_post_upgrade CALL  lstat
 20167 glibc_post_upgrade RET   lstat 20168/0x4ec8
 20167 glibc_post_upgrade CALL  old.sendmsg(0,0xbfbfea1c,0,0)
 20167 glibc_post_upgrade RET   old.sendmsg 20168/0x4ec8
 20167 glibc_post_upgrade CALL  accept(0x8048880,0)
 20167 glibc_post_upgrade NAMI  "/compat/linux/usr/lib/gconv/gconv-modules.=
cache"
 20167 glibc_post_upgrade NAMI  "/compat/linux"
 20167 glibc_post_upgrade NAMI  "/compat/linux/usr/lib/gconv/gconv-modules.=
cache"
 20167 glibc_post_upgrade RET   accept 0
 20167 glibc_post_upgrade CALL  lstat
 20167 glibc_post_upgrade RET   lstat 20171/0x4ecb
 20167 glibc_post_upgrade CALL  old.sendmsg(0,0xbfbfea1c,0,0)
 20167 glibc_post_upgrade RET   old.sendmsg 20171/0x4ecb
 20167 glibc_post_upgrade CALL  access(0x804883b,0x1)
 20167 glibc_post_upgrade NAMI  "/compat/linux/sbin/telinit"
 20167 glibc_post_upgrade NAMI  "/sbin/telinit"
 20167 glibc_post_upgrade RET   access JUSTRETURN
 20167 glibc_post_upgrade CALL  exit(0)

The reason for this is as follows:

hammer# grep -C3 TJR /sys/compat/linux/linux_socket.c=20
        struct iovec *iov;
        int error;

        /* XXXTJR sendmsg is broken on amd64 */

        error =3D copyin(args, &linux_args, sizeof(linux_args));
        if (error)
--
        struct cmsghdr *cmsg;
        int error;

        /* XXXTJR recvmsg is broken on amd64 */

        if ((error =3D copyin(args, &linux_args, sizeof(linux_args))))
                return (error);


Cheers,
--=20
Ruslan Ermilov
ru@FreeBSD.org
FreeBSD committer

--lRF4gxo9Z9M++D0O
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.6 (FreeBSD)

iD8DBQFBwBFQqRfpzJluFF4RAhKyAKCLUAmm7bW4iNPASB1E/a+QkwaHcgCaA1fn
DqZgFt/6XtT1VaydJG3w0yc=
=eGX2
-----END PGP SIGNATURE-----

--lRF4gxo9Z9M++D0O--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20041215102625.GM25967>