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>