From owner-freebsd-ppc@FreeBSD.ORG Sun Dec 11 18:53:54 2011 Return-Path: Delivered-To: freebsd-ppc@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 7F8151065670 for ; Sun, 11 Dec 2011 18:53:54 +0000 (UTC) (envelope-from torfinn.ingolfsen@broadpark.no) Received: from thalia-smout.broadpark.no (thalia-smout.broadpark.no [80.202.8.21]) by mx1.freebsd.org (Postfix) with ESMTP id 39F128FC08 for ; Sun, 11 Dec 2011 18:53:53 +0000 (UTC) MIME-version: 1.0 Content-transfer-encoding: 7BIT Content-type: text/plain; CHARSET=US-ASCII Received: from terra-smin.broadpark.no ([80.202.8.13]) by thalia-smout.broadpark.no (Sun Java(tm) System Messaging Server 7u3-15.01 64bit (built Feb 12 2010)) with ESMTP id <0LW100LAGZ5S0G50@thalia-smout.broadpark.no> for freebsd-ppc@freebsd.org; Sun, 11 Dec 2011 19:53:52 +0100 (CET) Received: from kg-v2.kg4.no ([84.48.120.32]) by terra-smin.broadpark.no (Sun Java(tm) System Messaging Server 7u3-15.01 64bit (built Feb 12 2010)) with SMTP id <0LW1004HBZ5S0E40@terra-smin.broadpark.no> for freebsd-ppc@freebsd.org; Sun, 11 Dec 2011 19:53:52 +0100 (CET) Date: Sun, 11 Dec 2011 19:53:52 +0100 From: Torfinn Ingolfsen To: freebsd-ppc@freebsd.org Message-id: <20111211195352.3cf2f767.torfinn.ingolfsen@broadpark.no> X-Mailer: Sylpheed 3.1.2 (GTK+ 2.24.6; amd64-portbld-freebsd8.2) X-Face: "t9w2,-X@O^I`jVW\sonI3.,36KBLZE*AL[y9lL[PyFD*r_S:dIL9c[8Y>V42R0"!"yb_zN,f#%.[PYYNq; m"_0v; ~rUM2Yy!zmkh)3&U|u!=T(zyv,MHJv"nDH>OJ`t(@mil461d_B'Uo|'nMwlKe0Mv=kvV?Nh@>Hb<3s_z2jYgZhPb@?Wi^x1a~Hplz1.zH Subject: iBook G4: moused doesn't work? X-BeenThere: freebsd-ppc@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting FreeBSD to the PowerPC List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 11 Dec 2011 18:53:54 -0000 How do I get moused working on a iBook G4[1]? I'm running FreeBSD 9.0-RC2: root@kg-ibook# uname -a FreeBSD kg-ibook.kg4.no 9.0-RC2 FreeBSD 9.0-RC2 #0: Mon Nov 14 08:04:49 UTC 2011 marcel@xserve.lan.xcllnt.net:/usr/obj/usr/src/sys/GENERIC powerpc The touchpad is detected in dmesg: usbus0: 12Mbps Full Speed USB v1.0 ums0: on usbus0 ums0: 5 buttons and [XY] coordinates ID=0 ugen0.3: at usbus0 atp0: on usbus0 and moused is started: root@kg-ibook# ps ax | grep moused 1380 ?? Is 0:00.00 /usr/sbin/moused -p /dev/ums0 -t auto -I /var/run/moused.ums0.pid 2170 0 R+ 0:00.00 grep moused and the mouse pointer shows up on (in?) the console, but it doesn't work. :-/ References: 1) http://sites.google.com/site/tingox/ibook_g4 -- Torfinn From owner-freebsd-ppc@FreeBSD.ORG Sun Dec 11 20:02:22 2011 Return-Path: Delivered-To: freebsd-ppc@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 5C96B106564A for ; Sun, 11 Dec 2011 20:02:22 +0000 (UTC) (envelope-from nwhitehorn@freebsd.org) Received: from adsum.doit.wisc.edu (adsum.doit.wisc.edu [144.92.197.210]) by mx1.freebsd.org (Postfix) with ESMTP id 30F088FC12 for ; Sun, 11 Dec 2011 20:02:21 +0000 (UTC) MIME-version: 1.0 Content-transfer-encoding: 7BIT Content-type: text/plain; CHARSET=US-ASCII; format=flowed Received: from avs-daemon.smtpauth1.wiscmail.wisc.edu by smtpauth1.wiscmail.wisc.edu (Sun Java(tm) System Messaging Server 7u2-7.05 32bit (built Jul 30 2009)) id <0LW200L002BX7N00@smtpauth1.wiscmail.wisc.edu> for freebsd-ppc@freebsd.org; Sun, 11 Dec 2011 14:02:21 -0600 (CST) Received: from comporellon.tachypleus.net ([unknown] [76.210.61.201]) by smtpauth1.wiscmail.wisc.edu (Sun Java(tm) System Messaging Server 7u2-7.05 32bit (built Jul 30 2009)) with ESMTPSA id <0LW200K7N2BWLJ00@smtpauth1.wiscmail.wisc.edu>; Sun, 11 Dec 2011 14:02:20 -0600 (CST) Date: Sun, 11 Dec 2011 14:02:19 -0600 From: Nathan Whitehorn In-reply-to: <20111211195352.3cf2f767.torfinn.ingolfsen@broadpark.no> To: Torfinn Ingolfsen Message-id: <4EE50C4B.5040901@freebsd.org> X-Spam-Report: AuthenticatedSender=yes, SenderIP=76.210.61.201 X-Spam-PmxInfo: Server=avs-11, Version=5.6.1.2065439, Antispam-Engine: 2.7.2.376379, Antispam-Data: 2011.12.11.195415, SenderIP=76.210.61.201 References: <20111211195352.3cf2f767.torfinn.ingolfsen@broadpark.no> User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:8.0) Gecko/20111113 Thunderbird/8.0 Cc: freebsd-ppc@freebsd.org Subject: Re: iBook G4: moused doesn't work? X-BeenThere: freebsd-ppc@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting FreeBSD to the PowerPC List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 11 Dec 2011 20:02:22 -0000 On 12/11/11 12:53, Torfinn Ingolfsen wrote: > How do I get moused working on a iBook G4[1]? > I'm running FreeBSD 9.0-RC2: > root@kg-ibook# uname -a > FreeBSD kg-ibook.kg4.no 9.0-RC2 FreeBSD 9.0-RC2 #0: Mon Nov 14 08:04:49 UTC 2011 > marcel@xserve.lan.xcllnt.net:/usr/obj/usr/src/sys/GENERIC powerpc > > The touchpad is detected in dmesg: > usbus0: 12Mbps Full Speed USB v1.0 > ums0: on usbus0 > ums0: 5 buttons and [XY] coordinates ID=0 > ugen0.3: at usbus0 > atp0: on usbus0 > > and moused is started: > root@kg-ibook# ps ax | grep moused > 1380 ?? Is 0:00.00 /usr/sbin/moused -p /dev/ums0 -t auto -I /var/run/moused.ums0.pid > 2170 0 R+ 0:00.00 grep moused > > and the mouse pointer shows up on (in?) the console, but it doesn't work. :-/ > > > References: > 1) http://sites.google.com/site/tingox/ibook_g4 You need to set up moused to point to the touchpad device, atp0. There's an example in the atp(4) manpage, but all you need to do is to put the following in rc.conf: moused_enable="YES" moused_port="/dev/atp0" -Nathan From owner-freebsd-ppc@FreeBSD.ORG Mon Dec 12 11:07:30 2011 Return-Path: Delivered-To: freebsd-ppc@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 0632A106568B for ; Mon, 12 Dec 2011 11:07:30 +0000 (UTC) (envelope-from owner-bugmaster@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id E83B18FC0C for ; Mon, 12 Dec 2011 11:07:29 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.5/8.14.5) with ESMTP id pBCB7Tm9030110 for ; Mon, 12 Dec 2011 11:07:29 GMT (envelope-from owner-bugmaster@FreeBSD.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.5/8.14.5/Submit) id pBCB7Tr0030107 for freebsd-ppc@FreeBSD.org; Mon, 12 Dec 2011 11:07:29 GMT (envelope-from owner-bugmaster@FreeBSD.org) Date: Mon, 12 Dec 2011 11:07:29 GMT Message-Id: <201112121107.pBCB7Tr0030107@freefall.freebsd.org> X-Authentication-Warning: freefall.freebsd.org: gnats set sender to owner-bugmaster@FreeBSD.org using -f From: FreeBSD bugmaster To: freebsd-ppc@FreeBSD.org Cc: Subject: Current problem reports assigned to freebsd-ppc@FreeBSD.org X-BeenThere: freebsd-ppc@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting FreeBSD to the PowerPC List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 12 Dec 2011 11:07:30 -0000 Note: to view an individual PR, use: http://www.freebsd.org/cgi/query-pr.cgi?pr=(number). The following is a listing of current problems submitted by FreeBSD users. These represent problem reports covering all versions including experimental development code and obsolete releases. S Tracker Resp. Description -------------------------------------------------------------------------------- o power/162091 ppc FreeBSD/ppc CD crashes Mac OS X o power/161947 ppc multimedia/libdvdnav builds broken binaries on big end o power/161045 ppc X doesn't detect ADB mouse up event until another even o power/149009 ppc sysinstall(8) on powerpc fails to install manpages, so o power/140241 ppc [kernel] [patch] Linker set problems on PowerPC EABI o power/135576 ppc gdb cannot debug threaded programs on ppc o power/133503 ppc [sound] Sound stutter after switching ttys o power/133382 ppc [install] Installer gets signal 11 o power/131548 ppc ofw_syscons no longer supports 32-bit framebuffer 9 problems total. From owner-freebsd-ppc@FreeBSD.ORG Fri Dec 16 20:27:12 2011 Return-Path: Delivered-To: freebsd-ppc@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 47165106566C for ; Fri, 16 Dec 2011 20:27:12 +0000 (UTC) (envelope-from superbisquit@gmail.com) Received: from mail-pz0-f54.google.com (mail-pz0-f54.google.com [209.85.210.54]) by mx1.freebsd.org (Postfix) with ESMTP id 23A138FC1B for ; Fri, 16 Dec 2011 20:27:11 +0000 (UTC) Received: by dakp5 with SMTP id p5so3544278dak.13 for ; Fri, 16 Dec 2011 12:27:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type; bh=2s4Dan/5pRWaJs0tylwaSjWgF49ocQG63UMuliNbFNA=; b=h3X4GDa4pjq4sHFkmmneXAsFIUs3e9uGEZMFLIBxyL7GVZffckY91xW3uAaGCBdeTV GcH666pa1V0R9wJ4mLjYK4pVRjQnoQyCtzX9xL9rzrb98jA9JmhYZha0Qpc0KU+oc9V+ vxCJoF5b9lpRqq7yj3w+p0NzGa3WR+aN/Xbes= MIME-Version: 1.0 Received: by 10.68.211.66 with SMTP id na2mr18173954pbc.21.1324067231695; Fri, 16 Dec 2011 12:27:11 -0800 (PST) Received: by 10.68.64.168 with HTTP; Fri, 16 Dec 2011 12:27:11 -0800 (PST) Date: Fri, 16 Dec 2011 15:27:11 -0500 Message-ID: From: Super Bisquit To: FreeBSD PowerPC ML Content-Type: text/plain; charset=ISO-8859-1 X-Content-Filtered-By: Mailman/MimeDel 2.1.5 Subject: Xorg, 2 cards, jail, two computers. X-BeenThere: freebsd-ppc@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting FreeBSD to the PowerPC List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 16 Dec 2011 20:27:12 -0000 Is it possible to run "Xorg -configure -retro" from a jail after adding a second card and commenting out the primary/host card? In said jail assign a second NIC to it. The card will serve as a dhcp router and the iMac G4 would be connected to it- with a crossover cable. Sort of Computer-[jail(matrox card & 2nd monitor, tulip NIC as dhcpserver for jail)]- network. Also usb:A to A data transfer, can this be used for ssh logins between machines? I know it isn't IP protocol but also want to know if one of the SunBlades could be added. Also can a jail to jail- iMac_jail to separate Quicksilver_jail- be used? From owner-freebsd-ppc@FreeBSD.ORG Sat Dec 17 00:21:17 2011 Return-Path: Delivered-To: powerpc@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 684ED1065676; Sat, 17 Dec 2011 00:21:17 +0000 (UTC) (envelope-from tinderbox@freebsd.org) Received: from freebsd-current.sentex.ca (freebsd-current.sentex.ca [64.7.128.98]) by mx1.freebsd.org (Postfix) with ESMTP id 32CD68FC13; Sat, 17 Dec 2011 00:21:16 +0000 (UTC) Received: from freebsd-current.sentex.ca (localhost [127.0.0.1]) by freebsd-current.sentex.ca (8.14.5/8.14.4) with ESMTP id pBH0LGFH025062; Fri, 16 Dec 2011 19:21:16 -0500 (EST) (envelope-from tinderbox@freebsd.org) Received: (from tinderbox@localhost) by freebsd-current.sentex.ca (8.14.5/8.14.4/Submit) id pBH0LGWc025053; Sat, 17 Dec 2011 00:21:16 GMT (envelope-from tinderbox@freebsd.org) Date: Sat, 17 Dec 2011 00:21:16 GMT Message-Id: <201112170021.pBH0LGWc025053@freebsd-current.sentex.ca> X-Authentication-Warning: freebsd-current.sentex.ca: tinderbox set sender to FreeBSD Tinderbox using -f Sender: FreeBSD Tinderbox From: FreeBSD Tinderbox To: FreeBSD Tinderbox , , Precedence: bulk Cc: Subject: [head tinderbox] failure on powerpc/powerpc X-BeenThere: freebsd-ppc@freebsd.org X-Mailman-Version: 2.1.5 List-Id: Porting FreeBSD to the PowerPC List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 17 Dec 2011 00:21:17 -0000 TB --- 2011-12-16 22:22:36 - tinderbox 2.8 running on freebsd-current.sentex.ca TB --- 2011-12-16 22:22:36 - starting HEAD tinderbox run for powerpc/powerpc TB --- 2011-12-16 22:22:36 - cleaning the object tree TB --- 2011-12-16 22:22:51 - cvsupping the source tree TB --- 2011-12-16 22:22:51 - /usr/bin/csup -z -r 3 -g -L 1 -h cvsup.sentex.ca /tinderbox/HEAD/powerpc/powerpc/supfile TB --- 2011-12-16 22:23:04 - building world TB --- 2011-12-16 22:23:04 - CROSS_BUILD_TESTING=YES TB --- 2011-12-16 22:23:04 - MAKEOBJDIRPREFIX=/obj TB --- 2011-12-16 22:23:04 - PATH=/usr/bin:/usr/sbin:/bin:/sbin TB --- 2011-12-16 22:23:04 - SRCCONF=/dev/null TB --- 2011-12-16 22:23:04 - TARGET=powerpc TB --- 2011-12-16 22:23:04 - TARGET_ARCH=powerpc TB --- 2011-12-16 22:23:04 - TZ=UTC TB --- 2011-12-16 22:23:04 - __MAKE_CONF=/dev/null TB --- 2011-12-16 22:23:04 - cd /src TB --- 2011-12-16 22:23:04 - /usr/bin/make -B buildworld >>> World build started on Fri Dec 16 22:23:05 UTC 2011 >>> Rebuilding the temporary build tree >>> stage 1.1: legacy release compatibility shims >>> stage 1.2: bootstrap tools >>> stage 2.1: cleaning up the object tree >>> stage 2.2: rebuilding the object tree >>> stage 2.3: build tools >>> stage 3: cross tools >>> stage 4.1: building includes >>> stage 4.2: building libraries >>> stage 4.3: make dependencies >>> stage 4.4: building everything [...] cc -O2 -pipe -fno-strict-aliasing -I/src/usr.sbin/rpc.yppasswdd/../../usr.sbin/vipw -I/src/usr.sbin/rpc.yppasswdd/../../usr.sbin/ypserv -I/src/usr.sbin/rpc.yppasswdd/../../libexec/ypxfr -I/src/usr.sbin/rpc.yppasswdd -I. -std=gnu99 -fstack-protector -Wsystem-headers -Werror -Wall -Wno-format-y2k -W -Wno-unused-parameter -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wreturn-type -Wcast-qual -Wwrite-strings -Wswitch -Wshadow -Wunused-parameter -Wcast-align -Wno-pointer-sign -c /src/usr.sbin/rpc.yppasswdd/../../usr.sbin/ypserv/yp_access.c cc -O2 -pipe -fno-strict-aliasing -I/src/usr.sbin/rpc.yppasswdd/../../usr.sbin/vipw -I/src/usr.sbin/rpc.yppasswdd/../../usr.sbin/ypserv -I/src/usr.sbin/rpc.yppasswdd/../../libexec/ypxfr -I/src/usr.sbin/rpc.yppasswdd -I. -std=gnu99 -fstack-protector -Wsystem-headers -Werror -Wall -Wno-format-y2k -W -Wno-unused-parameter -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wreturn-type -Wcast-qual -Wwrite-strings -Wswitch -Wshadow -Wunused-parameter -Wcast-align -Wno-pointer-sign -c /src/usr.sbin/rpc.yppasswdd/../../usr.sbin/ypserv/yp_dblookup.c cc -O2 -pipe -fno-strict-aliasing -I/src/usr.sbin/rpc.yppasswdd/../../usr.sbin/vipw -I/src/usr.sbin/rpc.yppasswdd/../../usr.sbin/ypserv -I/src/usr.sbin/rpc.yppasswdd/../../libexec/ypxfr -I/src/usr.sbin/rpc.yppasswdd -I. -std=gnu99 -fstack-protector -Wsystem-headers -Werror -Wall -Wno-format-y2k -W -Wno-unused-parameter -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wreturn-type -Wcast-qual -Wwrite-strings -Wswitch -Wshadow -Wunused-parameter -Wcast-align -Wno-pointer-sign -c /src/usr.sbin/rpc.yppasswdd/../../libexec/ypxfr/yp_dbwrite.c cc -O2 -pipe -fno-strict-aliasing -I/src/usr.sbin/rpc.yppasswdd/../../usr.sbin/vipw -I/src/usr.sbin/rpc.yppasswdd/../../usr.sbin/ypserv -I/src/usr.sbin/rpc.yppasswdd/../../libexec/ypxfr -I/src/usr.sbin/rpc.yppasswdd -I. -std=gnu99 -fstack-protector -Wsystem-headers -Werror -Wall -Wno-format-y2k -W -Wno-unused-parameter -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wreturn-type -Wcast-qual -Wwrite-strings -Wswitch -Wshadow -Wunused-parameter -Wcast-align -Wno-pointer-sign -c /src/usr.sbin/rpc.yppasswdd/../../usr.sbin/ypserv/yp_error.c cc -O2 -pipe -fno-strict-aliasing -I/src/usr.sbin/rpc.yppasswdd/../../usr.sbin/vipw -I/src/usr.sbin/rpc.yppasswdd/../../usr.sbin/ypserv -I/src/usr.sbin/rpc.yppasswdd/../../libexec/ypxfr -I/src/usr.sbin/rpc.yppasswdd -I. -std=gnu99 -fstack-protector -Wsystem-headers -Werror -Wall -Wno-format-y2k -W -Wno-unused-parameter -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wreturn-type -Wcast-qual -Wwrite-strings -Wswitch -Wshadow -Wunused-parameter -Wcast-align -Wno-pointer-sign -c /src/usr.sbin/rpc.yppasswdd/yppasswdd_main.c In file included from /src/usr.sbin/rpc.yppasswdd/yppasswdd_main.c:65: /src/usr.sbin/rpc.yppasswdd/../../usr.sbin/ypserv/yp_extern.h:73: error: conflicting types for 'yp_errno' /src/usr.sbin/rpc.yppasswdd/../../libexec/ypxfr/ypxfr_extern.h:49: error: previous declaration of 'yp_errno' was here *** Error code 1 Stop in /src/usr.sbin/rpc.yppasswdd. *** Error code 1 Stop in /src/usr.sbin. *** Error code 1 Stop in /src. *** Error code 1 Stop in /src. *** Error code 1 Stop in /src. TB --- 2011-12-17 00:21:15 - WARNING: /usr/bin/make returned exit code 1 TB --- 2011-12-17 00:21:15 - ERROR: failed to build world TB --- 2011-12-17 00:21:15 - 5796.08 user 956.13 system 7118.87 real http://tinderbox.freebsd.org/tinderbox-head-HEAD-powerpc-powerpc.full From owner-freebsd-ppc@FreeBSD.ORG Sat Dec 17 15:33:05 2011 Return-Path: Delivered-To: powerpc@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 57350106566C; Sat, 17 Dec 2011 15:33:05 +0000 (UTC) (envelope-from nwhitehorn@freebsd.org) Received: from argol.doit.wisc.edu (argol.doit.wisc.edu [144.92.197.212]) by mx1.freebsd.org (Postfix) with ESMTP id 1DB0B8FC14; Sat, 17 Dec 2011 15:33:04 +0000 (UTC) MIME-version: 1.0 Content-transfer-encoding: 7BIT Content-type: text/plain; CHARSET=US-ASCII; format=flowed Received: from avs-daemon.smtpauth3.wiscmail.wisc.edu by smtpauth3.wiscmail.wisc.edu (Sun Java(tm) System Messaging Server 7u2-7.05 32bit (built Jul 30 2009)) id <0LWC00G00TV4E200@smtpauth3.wiscmail.wisc.edu>; Sat, 17 Dec 2011 09:33:04 -0600 (CST) Received: from comporellon.tachypleus.net ([unknown] [76.210.77.223]) by smtpauth3.wiscmail.wisc.edu (Sun Java(tm) System Messaging Server 7u2-7.05 32bit (built Jul 30 2009)) with ESMTPSA id <0LWC00ENNTV1D500@smtpauth3.wiscmail.wisc.edu>; Sat, 17 Dec 2011 09:33:02 -0600 (CST) Date: Sat, 17 Dec 2011 09:33:01 -0600 From: Nathan Whitehorn In-reply-to: <4EECB0A4.504@freebsd.org> To: Konstantin Belousov Message-id: <4EECB62D.2070608@freebsd.org> X-Spam-Report: AuthenticatedSender=yes, SenderIP=76.210.77.223 X-Spam-PmxInfo: Server=avs-9, Version=5.6.1.2065439, Antispam-Engine: 2.7.2.376379, Antispam-Data: 2011.12.17.152414, SenderIP=76.210.77.223 References: <201112121103.pBCB3FuT097580@svn.freebsd.org> <4EECB0A4.504@freebsd.org> User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:8.0) Gecko/20111113 Thunderbird/8.0 Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org, powerpc@freebsd.org Subject: Re: svn commit: r228435 - in head/libexec/rtld-elf: . amd64 arm i386 ia64 mips powerpc powerpc64 sparc64 X-BeenThere: freebsd-ppc@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting FreeBSD to the PowerPC List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 17 Dec 2011 15:33:05 -0000 Fixed in r228635. -Nathan On 12/17/11 09:09, Nathan Whitehorn wrote: > This broke PowerPC really, really badly. Basically every > dynamically-linked executable dies with an illegal instruction trap. > -Nathan > > On 12/12/11 05:03, Konstantin Belousov wrote: >> Author: kib >> Date: Mon Dec 12 11:03:14 2011 >> New Revision: 228435 >> URL: http://svn.freebsd.org/changeset/base/228435 >> >> Log: >> Add support for STT_GNU_IFUNC and R_MACHINE_IRELATIVE GNU >> extensions to >> rtld on 386 and amd64. This adds runtime bits neccessary for the use >> of the dispatch functions from the dynamically-linked executables and >> shared libraries. >> >> To allow use of external references from the dispatch function, >> resolution >> of the R_MACHINE_IRESOLVE relocations in PLT is postponed until >> GOT entries >> for PLT are prepared, and normal resolution of the GOT entries is >> finished. >> Similar to how it is done by GNU, IRELATIVE relocations are >> resolved in >> advance, instead of normal lazy handling for PLT. >> >> Move the init_pltgot() call before the relocations for the object are >> processed. >> >> MFC after: 3 weeks >> >> Modified: >> head/libexec/rtld-elf/amd64/reloc.c >> head/libexec/rtld-elf/arm/reloc.c >> head/libexec/rtld-elf/i386/reloc.c >> head/libexec/rtld-elf/ia64/reloc.c >> head/libexec/rtld-elf/mips/reloc.c >> head/libexec/rtld-elf/powerpc/reloc.c >> head/libexec/rtld-elf/powerpc64/reloc.c >> head/libexec/rtld-elf/rtld.c >> head/libexec/rtld-elf/rtld.h >> head/libexec/rtld-elf/sparc64/reloc.c >> >> Modified: head/libexec/rtld-elf/amd64/reloc.c >> ============================================================================== >> >> --- head/libexec/rtld-elf/amd64/reloc.c Mon Dec 12 10:10:49 >> 2011 (r228434) >> +++ head/libexec/rtld-elf/amd64/reloc.c Mon Dec 12 11:03:14 >> 2011 (r228435) >> @@ -344,11 +344,22 @@ reloc_plt(Obj_Entry *obj) >> for (rela = obj->pltrela; rela< relalim; rela++) { >> Elf_Addr *where; >> >> - assert(ELF_R_TYPE(rela->r_info) == R_X86_64_JMP_SLOT); >> - >> - /* Relocate the GOT slot pointing into the PLT. */ >> - where = (Elf_Addr *)(obj->relocbase + rela->r_offset); >> - *where += (Elf_Addr)obj->relocbase; >> + switch(ELF_R_TYPE(rela->r_info)) { >> + case R_X86_64_JMP_SLOT: >> + /* Relocate the GOT slot pointing into the PLT. */ >> + where = (Elf_Addr *)(obj->relocbase + rela->r_offset); >> + *where += (Elf_Addr)obj->relocbase; >> + break; >> + >> + case R_X86_64_IRELATIVE: >> + obj->irelative = true; >> + break; >> + >> + default: >> + _rtld_error("Unknown relocation type %x in PLT", >> + (unsigned int)ELF_R_TYPE(rela->r_info)); >> + return (-1); >> + } >> } >> return 0; >> } >> @@ -368,19 +379,91 @@ reloc_jmpslots(Obj_Entry *obj, RtldLockS >> const Elf_Sym *def; >> const Obj_Entry *defobj; >> >> - assert(ELF_R_TYPE(rela->r_info) == R_X86_64_JMP_SLOT); >> - where = (Elf_Addr *)(obj->relocbase + rela->r_offset); >> - def = find_symdef(ELF_R_SYM(rela->r_info), obj,&defobj, true, NULL, >> - lockstate); >> - if (def == NULL) >> - return -1; >> - target = (Elf_Addr)(defobj->relocbase + def->st_value + >> rela->r_addend); >> - reloc_jmpslot(where, target, defobj, obj, (const Elf_Rel *)rela); >> + switch (ELF_R_TYPE(rela->r_info)) { >> + case R_X86_64_JMP_SLOT: >> + where = (Elf_Addr *)(obj->relocbase + rela->r_offset); >> + def = find_symdef(ELF_R_SYM(rela->r_info), obj,&defobj, true, >> NULL, >> + lockstate); >> + if (def == NULL) >> + return (-1); >> + if (ELF_ST_TYPE(def->st_info) == STT_GNU_IFUNC) { >> + obj->gnu_ifunc = true; >> + continue; >> + } >> + target = (Elf_Addr)(defobj->relocbase + def->st_value + >> rela->r_addend); >> + reloc_jmpslot(where, target, defobj, obj, (const Elf_Rel *)rela); >> + break; >> + >> + case R_X86_64_IRELATIVE: >> + break; >> + >> + default: >> + _rtld_error("Unknown relocation type %x in PLT", >> + (unsigned int)ELF_R_TYPE(rela->r_info)); >> + return (-1); >> + } >> } >> obj->jmpslots_done = true; >> return 0; >> } >> >> +int >> +reloc_iresolve(Obj_Entry *obj, RtldLockState *lockstate) >> +{ >> + const Elf_Rela *relalim; >> + const Elf_Rela *rela; >> + >> + relalim = (const Elf_Rela *)((char *)obj->pltrela + >> obj->pltrelasize); >> + for (rela = obj->pltrela; rela< relalim; rela++) { >> + Elf_Addr *where, target, *ptr; >> + >> + switch (ELF_R_TYPE(rela->r_info)) { >> + case R_X86_64_JMP_SLOT: >> + break; >> + >> + case R_X86_64_IRELATIVE: >> + ptr = (Elf_Addr *)(obj->relocbase + rela->r_addend); >> + where = (Elf_Addr *)(obj->relocbase + rela->r_offset); >> + target = ((Elf_Addr (*)(void))ptr)(); >> + *where = target; >> + break; >> + } >> + } >> + return (0); >> +} >> + >> +int >> +reloc_gnu_ifunc(Obj_Entry *obj, RtldLockState *lockstate) >> +{ >> + const Elf_Rela *relalim; >> + const Elf_Rela *rela; >> + >> + if (!obj->gnu_ifunc) >> + return (0); >> + relalim = (const Elf_Rela *)((char *)obj->pltrela + >> obj->pltrelasize); >> + for (rela = obj->pltrela; rela< relalim; rela++) { >> + Elf_Addr *where, target; >> + const Elf_Sym *def; >> + const Obj_Entry *defobj; >> + >> + switch (ELF_R_TYPE(rela->r_info)) { >> + case R_X86_64_JMP_SLOT: >> + where = (Elf_Addr *)(obj->relocbase + rela->r_offset); >> + def = find_symdef(ELF_R_SYM(rela->r_info), obj,&defobj, true, >> NULL, >> + lockstate); >> + if (def == NULL) >> + return (-1); >> + if (ELF_ST_TYPE(def->st_info) != STT_GNU_IFUNC) >> + continue; >> + target = (Elf_Addr)rtld_resolve_ifunc(defobj, def); >> + reloc_jmpslot(where, target, defobj, obj, (const Elf_Rel *)rela); >> + break; >> + } >> + } >> + obj->gnu_ifunc = false; >> + return 0; >> +} >> + >> void >> allocate_initial_tls(Obj_Entry *objs) >> { >> >> Modified: head/libexec/rtld-elf/arm/reloc.c >> ============================================================================== >> >> --- head/libexec/rtld-elf/arm/reloc.c Mon Dec 12 10:10:49 2011 >> (r228434) >> +++ head/libexec/rtld-elf/arm/reloc.c Mon Dec 12 11:03:14 2011 >> (r228435) >> @@ -337,6 +337,22 @@ reloc_jmpslots(Obj_Entry *obj, RtldLockS >> return (0); >> } >> >> +int >> +reloc_iresolve(Obj_Entry *obj, struct Struct_RtldLockState *lockstate) >> +{ >> + >> + /* XXX not implemented */ >> + return (0); >> +} >> + >> +int >> +reloc_gnu_ifunc(Obj_Entry *obj, struct Struct_RtldLockState *lockstate) >> +{ >> + >> + /* XXX not implemented */ >> + return (0); >> +} >> + >> Elf_Addr >> reloc_jmpslot(Elf_Addr *where, Elf_Addr target, const Obj_Entry >> *defobj, >> const Obj_Entry *obj, const Elf_Rel *rel) >> >> Modified: head/libexec/rtld-elf/i386/reloc.c >> ============================================================================== >> >> --- head/libexec/rtld-elf/i386/reloc.c Mon Dec 12 10:10:49 2011 >> (r228434) >> +++ head/libexec/rtld-elf/i386/reloc.c Mon Dec 12 11:03:14 2011 >> (r228435) >> @@ -298,13 +298,24 @@ reloc_plt(Obj_Entry *obj) >> >> rellim = (const Elf_Rel *)((char *)obj->pltrel + obj->pltrelsize); >> for (rel = obj->pltrel; rel< rellim; rel++) { >> - Elf_Addr *where; >> + Elf_Addr *where/*, val*/; >> >> - assert(ELF_R_TYPE(rel->r_info) == R_386_JMP_SLOT); >> - >> - /* Relocate the GOT slot pointing into the PLT. */ >> - where = (Elf_Addr *)(obj->relocbase + rel->r_offset); >> - *where += (Elf_Addr)obj->relocbase; >> + switch (ELF_R_TYPE(rel->r_info)) { >> + case R_386_JMP_SLOT: >> + /* Relocate the GOT slot pointing into the PLT. */ >> + where = (Elf_Addr *)(obj->relocbase + rel->r_offset); >> + *where += (Elf_Addr)obj->relocbase; >> + break; >> + >> + case R_386_IRELATIVE: >> + obj->irelative = true; >> + break; >> + >> + default: >> + _rtld_error("Unknown relocation type %x in PLT", >> + ELF_R_TYPE(rel->r_info)); >> + return (-1); >> + } >> } >> return 0; >> } >> @@ -324,19 +335,88 @@ reloc_jmpslots(Obj_Entry *obj, RtldLockS >> const Elf_Sym *def; >> const Obj_Entry *defobj; >> >> - assert(ELF_R_TYPE(rel->r_info) == R_386_JMP_SLOT); >> - where = (Elf_Addr *)(obj->relocbase + rel->r_offset); >> - def = find_symdef(ELF_R_SYM(rel->r_info), obj,&defobj, true, NULL, >> - lockstate); >> - if (def == NULL) >> - return -1; >> - target = (Elf_Addr)(defobj->relocbase + def->st_value); >> - reloc_jmpslot(where, target, defobj, obj, rel); >> + switch (ELF_R_TYPE(rel->r_info)) { >> + case R_386_JMP_SLOT: >> + where = (Elf_Addr *)(obj->relocbase + rel->r_offset); >> + def = find_symdef(ELF_R_SYM(rel->r_info), obj,&defobj, true, >> NULL, >> + lockstate); >> + if (def == NULL) >> + return (-1); >> + if (ELF_ST_TYPE(def->st_info) == STT_GNU_IFUNC) { >> + obj->gnu_ifunc = true; >> + continue; >> + } >> + target = (Elf_Addr)(defobj->relocbase + def->st_value); >> + reloc_jmpslot(where, target, defobj, obj, rel); >> + break; >> + >> + case R_386_IRELATIVE: >> + break; >> + >> + default: >> + _rtld_error("Unknown relocation type %x in PLT", >> + ELF_R_TYPE(rel->r_info)); >> + return (-1); >> + } >> } >> + >> obj->jmpslots_done = true; >> return 0; >> } >> >> +int >> +reloc_iresolve(Obj_Entry *obj, RtldLockState *lockstate) >> +{ >> + const Elf_Rel *rellim; >> + const Elf_Rel *rel; >> + Elf_Addr *where, target; >> + >> + rellim = (const Elf_Rel *)((char *)obj->pltrel + obj->pltrelsize); >> + for (rel = obj->pltrel; rel< rellim; rel++) { >> + switch (ELF_R_TYPE(rel->r_info)) { >> + case R_386_IRELATIVE: >> + where = (Elf_Addr *)(obj->relocbase + rel->r_offset); >> + target = ((Elf_Addr (*)(void))(*where))(); >> + *where = target; >> + break; >> + } >> + } >> + return (0); >> +} >> + >> +int >> +reloc_gnu_ifunc(Obj_Entry *obj, RtldLockState *lockstate) >> +{ >> + const Elf_Rel *rellim; >> + const Elf_Rel *rel; >> + >> + if (!obj->gnu_ifunc) >> + return (0); >> + rellim = (const Elf_Rel *)((char *)obj->pltrel + obj->pltrelsize); >> + for (rel = obj->pltrel; rel< rellim; rel++) { >> + Elf_Addr *where, target; >> + const Elf_Sym *def; >> + const Obj_Entry *defobj; >> + >> + switch (ELF_R_TYPE(rel->r_info)) { >> + case R_386_JMP_SLOT: >> + where = (Elf_Addr *)(obj->relocbase + rel->r_offset); >> + def = find_symdef(ELF_R_SYM(rel->r_info), obj,&defobj, true, >> NULL, >> + lockstate); >> + if (def == NULL) >> + return (-1); >> + if (ELF_ST_TYPE(def->st_info) != STT_GNU_IFUNC) >> + continue; >> + target = (Elf_Addr)rtld_resolve_ifunc(defobj, def); >> + reloc_jmpslot(where, target, defobj, obj, rel); >> + break; >> + } >> + } >> + >> + obj->gnu_ifunc = false; >> + return (0); >> +} >> + >> void >> allocate_initial_tls(Obj_Entry *objs) >> { >> >> Modified: head/libexec/rtld-elf/ia64/reloc.c >> ============================================================================== >> >> --- head/libexec/rtld-elf/ia64/reloc.c Mon Dec 12 10:10:49 2011 >> (r228434) >> +++ head/libexec/rtld-elf/ia64/reloc.c Mon Dec 12 11:03:14 2011 >> (r228435) >> @@ -435,6 +435,22 @@ reloc_plt(Obj_Entry *obj) >> return 0; >> } >> >> +int >> +reloc_iresolve(Obj_Entry *obj, struct Struct_RtldLockState *lockstate) >> +{ >> + >> + /* XXX not implemented */ >> + return (0); >> +} >> + >> +int >> +reloc_gnu_ifunc(Obj_Entry *obj, struct Struct_RtldLockState *lockstate) >> +{ >> + >> + /* XXX not implemented */ >> + return (0); >> +} >> + >> /* Relocate the jump slots in an object. */ >> int >> reloc_jmpslots(Obj_Entry *obj, RtldLockState *lockstate) >> >> Modified: head/libexec/rtld-elf/mips/reloc.c >> ============================================================================== >> >> --- head/libexec/rtld-elf/mips/reloc.c Mon Dec 12 10:10:49 2011 >> (r228434) >> +++ head/libexec/rtld-elf/mips/reloc.c Mon Dec 12 11:03:14 2011 >> (r228435) >> @@ -498,6 +498,22 @@ reloc_jmpslots(Obj_Entry *obj, RtldLockS >> return (0); >> } >> >> +int >> +reloc_iresolve(Obj_Entry *obj, struct Struct_RtldLockState *lockstate) >> +{ >> + >> + /* XXX not implemented */ >> + return (0); >> +} >> + >> +int >> +reloc_gnu_ifunc(Obj_Entry *obj, struct Struct_RtldLockState *lockstate) >> +{ >> + >> + /* XXX not implemented */ >> + return (0); >> +} >> + >> Elf_Addr >> reloc_jmpslot(Elf_Addr *where, Elf_Addr target, const Obj_Entry >> *defobj, >> const Obj_Entry *obj, const Elf_Rel *rel) >> >> Modified: head/libexec/rtld-elf/powerpc/reloc.c >> ============================================================================== >> >> --- head/libexec/rtld-elf/powerpc/reloc.c Mon Dec 12 10:10:49 >> 2011 (r228434) >> +++ head/libexec/rtld-elf/powerpc/reloc.c Mon Dec 12 11:03:14 >> 2011 (r228435) >> @@ -504,6 +504,21 @@ reloc_jmpslot(Elf_Addr *wherep, Elf_Addr >> return (target); >> } >> >> +int >> +reloc_iresolve(Obj_Entry *obj, struct Struct_RtldLockState *lockstate) >> +{ >> + >> + /* XXX not implemented */ >> + return (0); >> +} >> + >> +int >> +reloc_gnu_ifunc(Obj_Entry *obj, struct Struct_RtldLockState *lockstate) >> +{ >> + >> + /* XXX not implemented */ >> + return (0); >> +} >> >> /* >> * Setup the plt glue routines. >> >> Modified: head/libexec/rtld-elf/powerpc64/reloc.c >> ============================================================================== >> >> --- head/libexec/rtld-elf/powerpc64/reloc.c Mon Dec 12 10:10:49 >> 2011 (r228434) >> +++ head/libexec/rtld-elf/powerpc64/reloc.c Mon Dec 12 11:03:14 >> 2011 (r228435) >> @@ -456,6 +456,22 @@ reloc_jmpslot(Elf_Addr *wherep, Elf_Addr >> return (target); >> } >> >> +int >> +reloc_iresolve(Obj_Entry *obj, struct Struct_RtldLockState *lockstate) >> +{ >> + >> + /* XXX not implemented */ >> + return (0); >> +} >> + >> +int >> +reloc_gnu_ifunc(Obj_Entry *obj, struct Struct_RtldLockState *lockstate) >> +{ >> + >> + /* XXX not implemented */ >> + return (0); >> +} >> + >> void >> init_pltgot(Obj_Entry *obj) >> { >> >> Modified: head/libexec/rtld-elf/rtld.c >> ============================================================================== >> >> --- head/libexec/rtld-elf/rtld.c Mon Dec 12 10:10:49 2011 >> (r228434) >> +++ head/libexec/rtld-elf/rtld.c Mon Dec 12 11:03:14 2011 >> (r228435) >> @@ -561,6 +561,17 @@ _rtld(Elf_Addr *sp, func_ptr_type *exit_ >> return (func_ptr_type) obj_main->entry; >> } >> >> +void * >> +rtld_resolve_ifunc(const Obj_Entry *obj, const Elf_Sym *def) >> +{ >> + void *ptr; >> + Elf_Addr target; >> + >> + ptr = (void *)make_function_pointer(def, obj); >> + target = ((Elf_Addr (*)(void))ptr)(); >> + return ((void *)target); >> +} >> + >> Elf_Addr >> _rtld_bind(Obj_Entry *obj, Elf_Size reloff) >> { >> @@ -584,8 +595,10 @@ _rtld_bind(Obj_Entry *obj, Elf_Size relo >> &lockstate); >> if (def == NULL) >> die(); >> - >> - target = (Elf_Addr)(defobj->relocbase + def->st_value); >> + if (ELF_ST_TYPE(def->st_info) == STT_GNU_IFUNC) >> + target = (Elf_Addr)rtld_resolve_ifunc(defobj, def); >> + else >> + target = (Elf_Addr)(defobj->relocbase + def->st_value); >> >> dbg("\"%s\" in \"%s\" ==> %p in \"%s\"", >> defobj->strtab + def->st_name, basename(obj->path), >> @@ -1944,6 +1957,10 @@ relocate_objects(Obj_Entry *first, bool >> } >> } >> >> + >> + /* Set the special PLT or GOT entries. */ >> + init_pltgot(obj); >> + >> /* Process the PLT relocations. */ >> if (reloc_plt(obj) == -1) >> return -1; >> @@ -1952,7 +1969,6 @@ relocate_objects(Obj_Entry *first, bool >> if (reloc_jmpslots(obj, lockstate) == -1) >> return -1; >> >> - >> /* >> * Set up the magic number and version in the Obj_Entry. These >> * were checked in the crt1.o from the original ElfKit, so we >> @@ -1960,11 +1976,26 @@ relocate_objects(Obj_Entry *first, bool >> */ >> obj->magic = RTLD_MAGIC; >> obj->version = RTLD_VERSION; >> - >> - /* Set the special PLT or GOT entries. */ >> - init_pltgot(obj); >> } >> >> + /* >> + * The handling of R_MACHINE_IRELATIVE relocations and jumpslots >> + * referencing STT_GNU_IFUNC symbols is postponed till the other >> + * relocations are done. The indirect functions specified as >> + * ifunc are allowed to call other symbols, so we need to have >> + * objects relocated before asking for resolution from indirects. >> + * >> + * The R_MACHINE_IRELATIVE slots are resolved in greedy fashion, >> + * instead of the usual lazy handling of PLT slots. It is >> + * consistent with how GNU does it. >> + */ >> + for (obj = first; obj != NULL; obj = obj->next) { >> + if (obj->irelative&& reloc_iresolve(obj, lockstate) == -1) >> + return (-1); >> + if ((obj->bind_now || bind_now)&& obj->gnu_ifunc&& >> + reloc_gnu_ifunc(obj, lockstate) == -1) >> + return (-1); >> + } >> return 0; >> } >> >> @@ -2376,9 +2407,11 @@ do_dlsym(void *handle, const char *name, >> * the relocated value of the symbol. >> */ >> if (ELF_ST_TYPE(def->st_info) == STT_FUNC) >> - return make_function_pointer(def, defobj); >> + return (make_function_pointer(def, defobj)); >> + else if (ELF_ST_TYPE(def->st_info) == STT_GNU_IFUNC) >> + return (rtld_resolve_ifunc(defobj, def)); >> else >> - return defobj->relocbase + def->st_value; >> + return (defobj->relocbase + def->st_value); >> } >> >> _rtld_error("Undefined symbol \"%s\"", name); >> @@ -2822,6 +2855,8 @@ get_program_var_addr(const char *name, R >> if (ELF_ST_TYPE(req.sym_out->st_info) == STT_FUNC) >> return ((const void **)make_function_pointer(req.sym_out, >> req.defobj_out)); >> + else if (ELF_ST_TYPE(req.sym_out->st_info) == STT_GNU_IFUNC) >> + return ((const void **)rtld_resolve_ifunc(req.defobj_out, >> req.sym_out)); >> else >> return ((const void **)(req.defobj_out->relocbase + >> req.sym_out->st_value)); >> @@ -3088,6 +3123,7 @@ symlook_obj1(SymLook *req, const Obj_Ent >> case STT_FUNC: >> case STT_NOTYPE: >> case STT_OBJECT: >> + case STT_GNU_IFUNC: >> if (symp->st_value == 0) >> continue; >> /* fallthrough */ >> >> Modified: head/libexec/rtld-elf/rtld.h >> ============================================================================== >> >> --- head/libexec/rtld-elf/rtld.h Mon Dec 12 10:10:49 2011 >> (r228434) >> +++ head/libexec/rtld-elf/rtld.h Mon Dec 12 11:03:14 2011 >> (r228435) >> @@ -230,6 +230,8 @@ typedef struct Struct_Obj_Entry { >> bool on_fini_list: 1; /* Object is already on fini list. */ >> bool dag_inited : 1; /* Object has its DAG initialized. */ >> bool filtees_loaded : 1; /* Filtees loaded */ >> + bool irelative : 1; /* Object has R_MACHDEP_IRELATIVE >> relocs */ >> + bool gnu_ifunc : 1; /* Object has references to >> STT_GNU_IFUNC */ >> >> struct link_map linkmap; /* For GDB and dlinfo() */ >> Objlist dldags; /* Object belongs to these dlopened DAGs >> (%) */ >> @@ -317,6 +319,7 @@ void lockdflt_init(void); >> void obj_free(Obj_Entry *); >> Obj_Entry *obj_new(void); >> void _rtld_bind_start(void); >> +void *rtld_resolve_ifunc(const Obj_Entry *obj, const Elf_Sym *def); >> void symlook_init(SymLook *, const char *); >> int symlook_obj(SymLook *, const Obj_Entry *); >> void *tls_get_addr_common(Elf_Addr** dtvp, int index, size_t offset); >> @@ -334,6 +337,8 @@ int do_copy_relocations(Obj_Entry *); >> int reloc_non_plt(Obj_Entry *, Obj_Entry *, struct >> Struct_RtldLockState *); >> int reloc_plt(Obj_Entry *); >> int reloc_jmpslots(Obj_Entry *, struct Struct_RtldLockState *); >> +int reloc_iresolve(Obj_Entry *, struct Struct_RtldLockState *); >> +int reloc_gnu_ifunc(Obj_Entry *, struct Struct_RtldLockState *); >> void allocate_initial_tls(Obj_Entry *); >> >> #endif /* } */ >> >> Modified: head/libexec/rtld-elf/sparc64/reloc.c >> ============================================================================== >> >> --- head/libexec/rtld-elf/sparc64/reloc.c Mon Dec 12 10:10:49 >> 2011 (r228434) >> +++ head/libexec/rtld-elf/sparc64/reloc.c Mon Dec 12 11:03:14 >> 2011 (r228435) >> @@ -550,6 +550,22 @@ reloc_jmpslots(Obj_Entry *obj, RtldLockS >> return (0); >> } >> >> +int >> +reloc_iresolve(Obj_Entry *obj, struct Struct_RtldLockState *lockstate) >> +{ >> + >> + /* XXX not implemented */ >> + return (0); >> +} >> + >> +int >> +reloc_gnu_ifunc(Obj_Entry *obj, struct Struct_RtldLockState *lockstate) >> +{ >> + >> + /* XXX not implemented */ >> + return (0); >> +} >> + >> Elf_Addr >> reloc_jmpslot(Elf_Addr *wherep, Elf_Addr target, const Obj_Entry *obj, >> const Obj_Entry *refobj, const Elf_Rel *rel) > From owner-freebsd-ppc@FreeBSD.ORG Sat Dec 17 16:09:29 2011 Return-Path: Delivered-To: powerpc@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id E6C5D106564A; Sat, 17 Dec 2011 16:09:29 +0000 (UTC) (envelope-from nwhitehorn@freebsd.org) Received: from agogare.doit.wisc.edu (agogare.doit.wisc.edu [144.92.197.211]) by mx1.freebsd.org (Postfix) with ESMTP id B108B8FC0C; Sat, 17 Dec 2011 16:09:29 +0000 (UTC) MIME-version: 1.0 Content-transfer-encoding: 7BIT Content-type: text/plain; CHARSET=US-ASCII; format=flowed Received: from avs-daemon.smtpauth2.wiscmail.wisc.edu by smtpauth2.wiscmail.wisc.edu (Sun Java(tm) System Messaging Server 7u2-7.05 32bit (built Jul 30 2009)) id <0LWC00I00SRRW700@smtpauth2.wiscmail.wisc.edu>; Sat, 17 Dec 2011 09:09:27 -0600 (CST) Received: from comporellon.tachypleus.net ([unknown] [76.210.77.223]) by smtpauth2.wiscmail.wisc.edu (Sun Java(tm) System Messaging Server 7u2-7.05 32bit (built Jul 30 2009)) with ESMTPSA id <0LWC00BZWSRPZ600@smtpauth2.wiscmail.wisc.edu>; Sat, 17 Dec 2011 09:09:26 -0600 (CST) Date: Sat, 17 Dec 2011 09:09:24 -0600 From: Nathan Whitehorn In-reply-to: <201112121103.pBCB3FuT097580@svn.freebsd.org> To: Konstantin Belousov Message-id: <4EECB0A4.504@freebsd.org> X-Spam-Report: AuthenticatedSender=yes, SenderIP=76.210.77.223 X-Spam-PmxInfo: Server=avs-13, Version=5.6.1.2065439, Antispam-Engine: 2.7.2.376379, Antispam-Data: 2011.12.17.145715, SenderIP=76.210.77.223 References: <201112121103.pBCB3FuT097580@svn.freebsd.org> User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:8.0) Gecko/20111113 Thunderbird/8.0 Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org, powerpc@freebsd.org Subject: Re: svn commit: r228435 - in head/libexec/rtld-elf: . amd64 arm i386 ia64 mips powerpc powerpc64 sparc64 X-BeenThere: freebsd-ppc@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting FreeBSD to the PowerPC List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 17 Dec 2011 16:09:30 -0000 This broke PowerPC really, really badly. Basically every dynamically-linked executable dies with an illegal instruction trap. -Nathan On 12/12/11 05:03, Konstantin Belousov wrote: > Author: kib > Date: Mon Dec 12 11:03:14 2011 > New Revision: 228435 > URL: http://svn.freebsd.org/changeset/base/228435 > > Log: > Add support for STT_GNU_IFUNC and R_MACHINE_IRELATIVE GNU extensions to > rtld on 386 and amd64. This adds runtime bits neccessary for the use > of the dispatch functions from the dynamically-linked executables and > shared libraries. > > To allow use of external references from the dispatch function, resolution > of the R_MACHINE_IRESOLVE relocations in PLT is postponed until GOT entries > for PLT are prepared, and normal resolution of the GOT entries is finished. > Similar to how it is done by GNU, IRELATIVE relocations are resolved in > advance, instead of normal lazy handling for PLT. > > Move the init_pltgot() call before the relocations for the object are > processed. > > MFC after: 3 weeks > > Modified: > head/libexec/rtld-elf/amd64/reloc.c > head/libexec/rtld-elf/arm/reloc.c > head/libexec/rtld-elf/i386/reloc.c > head/libexec/rtld-elf/ia64/reloc.c > head/libexec/rtld-elf/mips/reloc.c > head/libexec/rtld-elf/powerpc/reloc.c > head/libexec/rtld-elf/powerpc64/reloc.c > head/libexec/rtld-elf/rtld.c > head/libexec/rtld-elf/rtld.h > head/libexec/rtld-elf/sparc64/reloc.c > > Modified: head/libexec/rtld-elf/amd64/reloc.c > ============================================================================== > --- head/libexec/rtld-elf/amd64/reloc.c Mon Dec 12 10:10:49 2011 (r228434) > +++ head/libexec/rtld-elf/amd64/reloc.c Mon Dec 12 11:03:14 2011 (r228435) > @@ -344,11 +344,22 @@ reloc_plt(Obj_Entry *obj) > for (rela = obj->pltrela; rela< relalim; rela++) { > Elf_Addr *where; > > - assert(ELF_R_TYPE(rela->r_info) == R_X86_64_JMP_SLOT); > - > - /* Relocate the GOT slot pointing into the PLT. */ > - where = (Elf_Addr *)(obj->relocbase + rela->r_offset); > - *where += (Elf_Addr)obj->relocbase; > + switch(ELF_R_TYPE(rela->r_info)) { > + case R_X86_64_JMP_SLOT: > + /* Relocate the GOT slot pointing into the PLT. */ > + where = (Elf_Addr *)(obj->relocbase + rela->r_offset); > + *where += (Elf_Addr)obj->relocbase; > + break; > + > + case R_X86_64_IRELATIVE: > + obj->irelative = true; > + break; > + > + default: > + _rtld_error("Unknown relocation type %x in PLT", > + (unsigned int)ELF_R_TYPE(rela->r_info)); > + return (-1); > + } > } > return 0; > } > @@ -368,19 +379,91 @@ reloc_jmpslots(Obj_Entry *obj, RtldLockS > const Elf_Sym *def; > const Obj_Entry *defobj; > > - assert(ELF_R_TYPE(rela->r_info) == R_X86_64_JMP_SLOT); > - where = (Elf_Addr *)(obj->relocbase + rela->r_offset); > - def = find_symdef(ELF_R_SYM(rela->r_info), obj,&defobj, true, NULL, > - lockstate); > - if (def == NULL) > - return -1; > - target = (Elf_Addr)(defobj->relocbase + def->st_value + rela->r_addend); > - reloc_jmpslot(where, target, defobj, obj, (const Elf_Rel *)rela); > + switch (ELF_R_TYPE(rela->r_info)) { > + case R_X86_64_JMP_SLOT: > + where = (Elf_Addr *)(obj->relocbase + rela->r_offset); > + def = find_symdef(ELF_R_SYM(rela->r_info), obj,&defobj, true, NULL, > + lockstate); > + if (def == NULL) > + return (-1); > + if (ELF_ST_TYPE(def->st_info) == STT_GNU_IFUNC) { > + obj->gnu_ifunc = true; > + continue; > + } > + target = (Elf_Addr)(defobj->relocbase + def->st_value + rela->r_addend); > + reloc_jmpslot(where, target, defobj, obj, (const Elf_Rel *)rela); > + break; > + > + case R_X86_64_IRELATIVE: > + break; > + > + default: > + _rtld_error("Unknown relocation type %x in PLT", > + (unsigned int)ELF_R_TYPE(rela->r_info)); > + return (-1); > + } > } > obj->jmpslots_done = true; > return 0; > } > > +int > +reloc_iresolve(Obj_Entry *obj, RtldLockState *lockstate) > +{ > + const Elf_Rela *relalim; > + const Elf_Rela *rela; > + > + relalim = (const Elf_Rela *)((char *)obj->pltrela + obj->pltrelasize); > + for (rela = obj->pltrela; rela< relalim; rela++) { > + Elf_Addr *where, target, *ptr; > + > + switch (ELF_R_TYPE(rela->r_info)) { > + case R_X86_64_JMP_SLOT: > + break; > + > + case R_X86_64_IRELATIVE: > + ptr = (Elf_Addr *)(obj->relocbase + rela->r_addend); > + where = (Elf_Addr *)(obj->relocbase + rela->r_offset); > + target = ((Elf_Addr (*)(void))ptr)(); > + *where = target; > + break; > + } > + } > + return (0); > +} > + > +int > +reloc_gnu_ifunc(Obj_Entry *obj, RtldLockState *lockstate) > +{ > + const Elf_Rela *relalim; > + const Elf_Rela *rela; > + > + if (!obj->gnu_ifunc) > + return (0); > + relalim = (const Elf_Rela *)((char *)obj->pltrela + obj->pltrelasize); > + for (rela = obj->pltrela; rela< relalim; rela++) { > + Elf_Addr *where, target; > + const Elf_Sym *def; > + const Obj_Entry *defobj; > + > + switch (ELF_R_TYPE(rela->r_info)) { > + case R_X86_64_JMP_SLOT: > + where = (Elf_Addr *)(obj->relocbase + rela->r_offset); > + def = find_symdef(ELF_R_SYM(rela->r_info), obj,&defobj, true, NULL, > + lockstate); > + if (def == NULL) > + return (-1); > + if (ELF_ST_TYPE(def->st_info) != STT_GNU_IFUNC) > + continue; > + target = (Elf_Addr)rtld_resolve_ifunc(defobj, def); > + reloc_jmpslot(where, target, defobj, obj, (const Elf_Rel *)rela); > + break; > + } > + } > + obj->gnu_ifunc = false; > + return 0; > +} > + > void > allocate_initial_tls(Obj_Entry *objs) > { > > Modified: head/libexec/rtld-elf/arm/reloc.c > ============================================================================== > --- head/libexec/rtld-elf/arm/reloc.c Mon Dec 12 10:10:49 2011 (r228434) > +++ head/libexec/rtld-elf/arm/reloc.c Mon Dec 12 11:03:14 2011 (r228435) > @@ -337,6 +337,22 @@ reloc_jmpslots(Obj_Entry *obj, RtldLockS > return (0); > } > > +int > +reloc_iresolve(Obj_Entry *obj, struct Struct_RtldLockState *lockstate) > +{ > + > + /* XXX not implemented */ > + return (0); > +} > + > +int > +reloc_gnu_ifunc(Obj_Entry *obj, struct Struct_RtldLockState *lockstate) > +{ > + > + /* XXX not implemented */ > + return (0); > +} > + > Elf_Addr > reloc_jmpslot(Elf_Addr *where, Elf_Addr target, const Obj_Entry *defobj, > const Obj_Entry *obj, const Elf_Rel *rel) > > Modified: head/libexec/rtld-elf/i386/reloc.c > ============================================================================== > --- head/libexec/rtld-elf/i386/reloc.c Mon Dec 12 10:10:49 2011 (r228434) > +++ head/libexec/rtld-elf/i386/reloc.c Mon Dec 12 11:03:14 2011 (r228435) > @@ -298,13 +298,24 @@ reloc_plt(Obj_Entry *obj) > > rellim = (const Elf_Rel *)((char *)obj->pltrel + obj->pltrelsize); > for (rel = obj->pltrel; rel< rellim; rel++) { > - Elf_Addr *where; > + Elf_Addr *where/*, val*/; > > - assert(ELF_R_TYPE(rel->r_info) == R_386_JMP_SLOT); > - > - /* Relocate the GOT slot pointing into the PLT. */ > - where = (Elf_Addr *)(obj->relocbase + rel->r_offset); > - *where += (Elf_Addr)obj->relocbase; > + switch (ELF_R_TYPE(rel->r_info)) { > + case R_386_JMP_SLOT: > + /* Relocate the GOT slot pointing into the PLT. */ > + where = (Elf_Addr *)(obj->relocbase + rel->r_offset); > + *where += (Elf_Addr)obj->relocbase; > + break; > + > + case R_386_IRELATIVE: > + obj->irelative = true; > + break; > + > + default: > + _rtld_error("Unknown relocation type %x in PLT", > + ELF_R_TYPE(rel->r_info)); > + return (-1); > + } > } > return 0; > } > @@ -324,19 +335,88 @@ reloc_jmpslots(Obj_Entry *obj, RtldLockS > const Elf_Sym *def; > const Obj_Entry *defobj; > > - assert(ELF_R_TYPE(rel->r_info) == R_386_JMP_SLOT); > - where = (Elf_Addr *)(obj->relocbase + rel->r_offset); > - def = find_symdef(ELF_R_SYM(rel->r_info), obj,&defobj, true, NULL, > - lockstate); > - if (def == NULL) > - return -1; > - target = (Elf_Addr)(defobj->relocbase + def->st_value); > - reloc_jmpslot(where, target, defobj, obj, rel); > + switch (ELF_R_TYPE(rel->r_info)) { > + case R_386_JMP_SLOT: > + where = (Elf_Addr *)(obj->relocbase + rel->r_offset); > + def = find_symdef(ELF_R_SYM(rel->r_info), obj,&defobj, true, NULL, > + lockstate); > + if (def == NULL) > + return (-1); > + if (ELF_ST_TYPE(def->st_info) == STT_GNU_IFUNC) { > + obj->gnu_ifunc = true; > + continue; > + } > + target = (Elf_Addr)(defobj->relocbase + def->st_value); > + reloc_jmpslot(where, target, defobj, obj, rel); > + break; > + > + case R_386_IRELATIVE: > + break; > + > + default: > + _rtld_error("Unknown relocation type %x in PLT", > + ELF_R_TYPE(rel->r_info)); > + return (-1); > + } > } > + > obj->jmpslots_done = true; > return 0; > } > > +int > +reloc_iresolve(Obj_Entry *obj, RtldLockState *lockstate) > +{ > + const Elf_Rel *rellim; > + const Elf_Rel *rel; > + Elf_Addr *where, target; > + > + rellim = (const Elf_Rel *)((char *)obj->pltrel + obj->pltrelsize); > + for (rel = obj->pltrel; rel< rellim; rel++) { > + switch (ELF_R_TYPE(rel->r_info)) { > + case R_386_IRELATIVE: > + where = (Elf_Addr *)(obj->relocbase + rel->r_offset); > + target = ((Elf_Addr (*)(void))(*where))(); > + *where = target; > + break; > + } > + } > + return (0); > +} > + > +int > +reloc_gnu_ifunc(Obj_Entry *obj, RtldLockState *lockstate) > +{ > + const Elf_Rel *rellim; > + const Elf_Rel *rel; > + > + if (!obj->gnu_ifunc) > + return (0); > + rellim = (const Elf_Rel *)((char *)obj->pltrel + obj->pltrelsize); > + for (rel = obj->pltrel; rel< rellim; rel++) { > + Elf_Addr *where, target; > + const Elf_Sym *def; > + const Obj_Entry *defobj; > + > + switch (ELF_R_TYPE(rel->r_info)) { > + case R_386_JMP_SLOT: > + where = (Elf_Addr *)(obj->relocbase + rel->r_offset); > + def = find_symdef(ELF_R_SYM(rel->r_info), obj,&defobj, true, NULL, > + lockstate); > + if (def == NULL) > + return (-1); > + if (ELF_ST_TYPE(def->st_info) != STT_GNU_IFUNC) > + continue; > + target = (Elf_Addr)rtld_resolve_ifunc(defobj, def); > + reloc_jmpslot(where, target, defobj, obj, rel); > + break; > + } > + } > + > + obj->gnu_ifunc = false; > + return (0); > +} > + > void > allocate_initial_tls(Obj_Entry *objs) > { > > Modified: head/libexec/rtld-elf/ia64/reloc.c > ============================================================================== > --- head/libexec/rtld-elf/ia64/reloc.c Mon Dec 12 10:10:49 2011 (r228434) > +++ head/libexec/rtld-elf/ia64/reloc.c Mon Dec 12 11:03:14 2011 (r228435) > @@ -435,6 +435,22 @@ reloc_plt(Obj_Entry *obj) > return 0; > } > > +int > +reloc_iresolve(Obj_Entry *obj, struct Struct_RtldLockState *lockstate) > +{ > + > + /* XXX not implemented */ > + return (0); > +} > + > +int > +reloc_gnu_ifunc(Obj_Entry *obj, struct Struct_RtldLockState *lockstate) > +{ > + > + /* XXX not implemented */ > + return (0); > +} > + > /* Relocate the jump slots in an object. */ > int > reloc_jmpslots(Obj_Entry *obj, RtldLockState *lockstate) > > Modified: head/libexec/rtld-elf/mips/reloc.c > ============================================================================== > --- head/libexec/rtld-elf/mips/reloc.c Mon Dec 12 10:10:49 2011 (r228434) > +++ head/libexec/rtld-elf/mips/reloc.c Mon Dec 12 11:03:14 2011 (r228435) > @@ -498,6 +498,22 @@ reloc_jmpslots(Obj_Entry *obj, RtldLockS > return (0); > } > > +int > +reloc_iresolve(Obj_Entry *obj, struct Struct_RtldLockState *lockstate) > +{ > + > + /* XXX not implemented */ > + return (0); > +} > + > +int > +reloc_gnu_ifunc(Obj_Entry *obj, struct Struct_RtldLockState *lockstate) > +{ > + > + /* XXX not implemented */ > + return (0); > +} > + > Elf_Addr > reloc_jmpslot(Elf_Addr *where, Elf_Addr target, const Obj_Entry *defobj, > const Obj_Entry *obj, const Elf_Rel *rel) > > Modified: head/libexec/rtld-elf/powerpc/reloc.c > ============================================================================== > --- head/libexec/rtld-elf/powerpc/reloc.c Mon Dec 12 10:10:49 2011 (r228434) > +++ head/libexec/rtld-elf/powerpc/reloc.c Mon Dec 12 11:03:14 2011 (r228435) > @@ -504,6 +504,21 @@ reloc_jmpslot(Elf_Addr *wherep, Elf_Addr > return (target); > } > > +int > +reloc_iresolve(Obj_Entry *obj, struct Struct_RtldLockState *lockstate) > +{ > + > + /* XXX not implemented */ > + return (0); > +} > + > +int > +reloc_gnu_ifunc(Obj_Entry *obj, struct Struct_RtldLockState *lockstate) > +{ > + > + /* XXX not implemented */ > + return (0); > +} > > /* > * Setup the plt glue routines. > > Modified: head/libexec/rtld-elf/powerpc64/reloc.c > ============================================================================== > --- head/libexec/rtld-elf/powerpc64/reloc.c Mon Dec 12 10:10:49 2011 (r228434) > +++ head/libexec/rtld-elf/powerpc64/reloc.c Mon Dec 12 11:03:14 2011 (r228435) > @@ -456,6 +456,22 @@ reloc_jmpslot(Elf_Addr *wherep, Elf_Addr > return (target); > } > > +int > +reloc_iresolve(Obj_Entry *obj, struct Struct_RtldLockState *lockstate) > +{ > + > + /* XXX not implemented */ > + return (0); > +} > + > +int > +reloc_gnu_ifunc(Obj_Entry *obj, struct Struct_RtldLockState *lockstate) > +{ > + > + /* XXX not implemented */ > + return (0); > +} > + > void > init_pltgot(Obj_Entry *obj) > { > > Modified: head/libexec/rtld-elf/rtld.c > ============================================================================== > --- head/libexec/rtld-elf/rtld.c Mon Dec 12 10:10:49 2011 (r228434) > +++ head/libexec/rtld-elf/rtld.c Mon Dec 12 11:03:14 2011 (r228435) > @@ -561,6 +561,17 @@ _rtld(Elf_Addr *sp, func_ptr_type *exit_ > return (func_ptr_type) obj_main->entry; > } > > +void * > +rtld_resolve_ifunc(const Obj_Entry *obj, const Elf_Sym *def) > +{ > + void *ptr; > + Elf_Addr target; > + > + ptr = (void *)make_function_pointer(def, obj); > + target = ((Elf_Addr (*)(void))ptr)(); > + return ((void *)target); > +} > + > Elf_Addr > _rtld_bind(Obj_Entry *obj, Elf_Size reloff) > { > @@ -584,8 +595,10 @@ _rtld_bind(Obj_Entry *obj, Elf_Size relo > &lockstate); > if (def == NULL) > die(); > - > - target = (Elf_Addr)(defobj->relocbase + def->st_value); > + if (ELF_ST_TYPE(def->st_info) == STT_GNU_IFUNC) > + target = (Elf_Addr)rtld_resolve_ifunc(defobj, def); > + else > + target = (Elf_Addr)(defobj->relocbase + def->st_value); > > dbg("\"%s\" in \"%s\" ==> %p in \"%s\"", > defobj->strtab + def->st_name, basename(obj->path), > @@ -1944,6 +1957,10 @@ relocate_objects(Obj_Entry *first, bool > } > } > > + > + /* Set the special PLT or GOT entries. */ > + init_pltgot(obj); > + > /* Process the PLT relocations. */ > if (reloc_plt(obj) == -1) > return -1; > @@ -1952,7 +1969,6 @@ relocate_objects(Obj_Entry *first, bool > if (reloc_jmpslots(obj, lockstate) == -1) > return -1; > > - > /* > * Set up the magic number and version in the Obj_Entry. These > * were checked in the crt1.o from the original ElfKit, so we > @@ -1960,11 +1976,26 @@ relocate_objects(Obj_Entry *first, bool > */ > obj->magic = RTLD_MAGIC; > obj->version = RTLD_VERSION; > - > - /* Set the special PLT or GOT entries. */ > - init_pltgot(obj); > } > > + /* > + * The handling of R_MACHINE_IRELATIVE relocations and jumpslots > + * referencing STT_GNU_IFUNC symbols is postponed till the other > + * relocations are done. The indirect functions specified as > + * ifunc are allowed to call other symbols, so we need to have > + * objects relocated before asking for resolution from indirects. > + * > + * The R_MACHINE_IRELATIVE slots are resolved in greedy fashion, > + * instead of the usual lazy handling of PLT slots. It is > + * consistent with how GNU does it. > + */ > + for (obj = first; obj != NULL; obj = obj->next) { > + if (obj->irelative&& reloc_iresolve(obj, lockstate) == -1) > + return (-1); > + if ((obj->bind_now || bind_now)&& obj->gnu_ifunc&& > + reloc_gnu_ifunc(obj, lockstate) == -1) > + return (-1); > + } > return 0; > } > > @@ -2376,9 +2407,11 @@ do_dlsym(void *handle, const char *name, > * the relocated value of the symbol. > */ > if (ELF_ST_TYPE(def->st_info) == STT_FUNC) > - return make_function_pointer(def, defobj); > + return (make_function_pointer(def, defobj)); > + else if (ELF_ST_TYPE(def->st_info) == STT_GNU_IFUNC) > + return (rtld_resolve_ifunc(defobj, def)); > else > - return defobj->relocbase + def->st_value; > + return (defobj->relocbase + def->st_value); > } > > _rtld_error("Undefined symbol \"%s\"", name); > @@ -2822,6 +2855,8 @@ get_program_var_addr(const char *name, R > if (ELF_ST_TYPE(req.sym_out->st_info) == STT_FUNC) > return ((const void **)make_function_pointer(req.sym_out, > req.defobj_out)); > + else if (ELF_ST_TYPE(req.sym_out->st_info) == STT_GNU_IFUNC) > + return ((const void **)rtld_resolve_ifunc(req.defobj_out, req.sym_out)); > else > return ((const void **)(req.defobj_out->relocbase + > req.sym_out->st_value)); > @@ -3088,6 +3123,7 @@ symlook_obj1(SymLook *req, const Obj_Ent > case STT_FUNC: > case STT_NOTYPE: > case STT_OBJECT: > + case STT_GNU_IFUNC: > if (symp->st_value == 0) > continue; > /* fallthrough */ > > Modified: head/libexec/rtld-elf/rtld.h > ============================================================================== > --- head/libexec/rtld-elf/rtld.h Mon Dec 12 10:10:49 2011 (r228434) > +++ head/libexec/rtld-elf/rtld.h Mon Dec 12 11:03:14 2011 (r228435) > @@ -230,6 +230,8 @@ typedef struct Struct_Obj_Entry { > bool on_fini_list: 1; /* Object is already on fini list. */ > bool dag_inited : 1; /* Object has its DAG initialized. */ > bool filtees_loaded : 1; /* Filtees loaded */ > + bool irelative : 1; /* Object has R_MACHDEP_IRELATIVE relocs */ > + bool gnu_ifunc : 1; /* Object has references to STT_GNU_IFUNC */ > > struct link_map linkmap; /* For GDB and dlinfo() */ > Objlist dldags; /* Object belongs to these dlopened DAGs (%) */ > @@ -317,6 +319,7 @@ void lockdflt_init(void); > void obj_free(Obj_Entry *); > Obj_Entry *obj_new(void); > void _rtld_bind_start(void); > +void *rtld_resolve_ifunc(const Obj_Entry *obj, const Elf_Sym *def); > void symlook_init(SymLook *, const char *); > int symlook_obj(SymLook *, const Obj_Entry *); > void *tls_get_addr_common(Elf_Addr** dtvp, int index, size_t offset); > @@ -334,6 +337,8 @@ int do_copy_relocations(Obj_Entry *); > int reloc_non_plt(Obj_Entry *, Obj_Entry *, struct Struct_RtldLockState *); > int reloc_plt(Obj_Entry *); > int reloc_jmpslots(Obj_Entry *, struct Struct_RtldLockState *); > +int reloc_iresolve(Obj_Entry *, struct Struct_RtldLockState *); > +int reloc_gnu_ifunc(Obj_Entry *, struct Struct_RtldLockState *); > void allocate_initial_tls(Obj_Entry *); > > #endif /* } */ > > Modified: head/libexec/rtld-elf/sparc64/reloc.c > ============================================================================== > --- head/libexec/rtld-elf/sparc64/reloc.c Mon Dec 12 10:10:49 2011 (r228434) > +++ head/libexec/rtld-elf/sparc64/reloc.c Mon Dec 12 11:03:14 2011 (r228435) > @@ -550,6 +550,22 @@ reloc_jmpslots(Obj_Entry *obj, RtldLockS > return (0); > } > > +int > +reloc_iresolve(Obj_Entry *obj, struct Struct_RtldLockState *lockstate) > +{ > + > + /* XXX not implemented */ > + return (0); > +} > + > +int > +reloc_gnu_ifunc(Obj_Entry *obj, struct Struct_RtldLockState *lockstate) > +{ > + > + /* XXX not implemented */ > + return (0); > +} > + > Elf_Addr > reloc_jmpslot(Elf_Addr *wherep, Elf_Addr target, const Obj_Entry *obj, > const Obj_Entry *refobj, const Elf_Rel *rel) From owner-freebsd-ppc@FreeBSD.ORG Sat Dec 17 17:14:12 2011 Return-Path: Delivered-To: freebsd-ppc@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 6C14A1065672 for ; Sat, 17 Dec 2011 17:14:12 +0000 (UTC) (envelope-from jsarrett@gmail.com) Received: from mail-iy0-f182.google.com (mail-iy0-f182.google.com [209.85.210.182]) by mx1.freebsd.org (Postfix) with ESMTP id 343448FC18 for ; Sat, 17 Dec 2011 17:14:11 +0000 (UTC) Received: by iadj38 with SMTP id j38so3085684iad.13 for ; Sat, 17 Dec 2011 09:14:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=message-id:date:from:user-agent:mime-version:to:cc:subject :references:in-reply-to:content-type:content-transfer-encoding; bh=NRtFhrVJi+IsRROEp8HQ4yrBwLmP2oKM6nAxvyFYBZw=; b=eJORvJsp4EFgd/DzHqvDZN8+SD9zWY8Z7zU+muMhchzODDtHiAVPTvgIf491ubg7KK CMbiCX5U66YVQ/mctWxXhJ3BWIrXdGWm1xSe3VFfFREs3kNoM3EGG3wRVO3lrt0+DYta LXX0WErbJINweyzfJAHPVIsinWPwiaAXOFXv0= Received: by 10.50.186.229 with SMTP id fn5mr15736359igc.58.1324140396306; Sat, 17 Dec 2011 08:46:36 -0800 (PST) Received: from [10.1.0.20] (dsl092-043-139.lax1.dsl.speakeasy.net. [66.92.43.139]) by mx.google.com with ESMTPS id gf6sm9173425igb.1.2011.12.17.08.46.34 (version=TLSv1/SSLv3 cipher=OTHER); Sat, 17 Dec 2011 08:46:35 -0800 (PST) Message-ID: <4EECC769.2010102@gmail.com> Date: Sat, 17 Dec 2011 08:46:33 -0800 From: James Sarrett User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:8.0) Gecko/20111124 Thunderbird/8.0 MIME-Version: 1.0 To: Super Bisquit References: In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: freebsd-ppc@freebsd.org Subject: Re: Xorg, 2 cards, jail, two computers. X-BeenThere: freebsd-ppc@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting FreeBSD to the PowerPC List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 17 Dec 2011 17:14:12 -0000 Probably, give it a shot. The worst is will do is screw up your graphics display, so as long as you cna still ssh in you'll be fine. -James On 12/16/2011 12:27 PM, Super Bisquit wrote: > Is it possible to run "Xorg -configure -retro" from a jail after adding a > second card and commenting out the primary/host card? > In said jail assign a second NIC to it. The card will serve as a dhcp > router and the iMac G4 would be connected to it- with a crossover cable. > Sort of Computer-[jail(matrox card& 2nd monitor, tulip NIC as dhcpserver > for jail)]- network. > > Also usb:A to A data transfer, can this be used for ssh logins between > machines? I know it isn't IP protocol but also want to know if one of the > SunBlades could be added. > > Also can a jail to jail- iMac_jail to separate Quicksilver_jail- be used? > _______________________________________________ > freebsd-ppc@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-ppc > To unsubscribe, send any mail to "freebsd-ppc-unsubscribe@freebsd.org" From owner-freebsd-ppc@FreeBSD.ORG Sat Dec 17 19:25:27 2011 Return-Path: Delivered-To: freebsd-ppc@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 5A40D106564A for ; Sat, 17 Dec 2011 19:25:27 +0000 (UTC) (envelope-from torfinn.ingolfsen@broadpark.no) Received: from thalia-smout.broadpark.no (thalia-smout.broadpark.no [80.202.8.21]) by mx1.freebsd.org (Postfix) with ESMTP id 121E98FC0A for ; Sat, 17 Dec 2011 19:25:26 +0000 (UTC) MIME-version: 1.0 Content-transfer-encoding: 7BIT Content-type: text/plain; CHARSET=US-ASCII Received: from terra-smin.broadpark.no ([80.202.8.13]) by thalia-smout.broadpark.no (Sun Java(tm) System Messaging Server 7u3-15.01 64bit (built Feb 12 2010)) with ESMTP id <0LWD004AH4MDCKA0@thalia-smout.broadpark.no> for freebsd-ppc@freebsd.org; Sat, 17 Dec 2011 20:25:25 +0100 (CET) Received: from kg-v2.kg4.no ([84.48.120.32]) by terra-smin.broadpark.no (Sun Java(tm) System Messaging Server 7u3-15.01 64bit (built Feb 12 2010)) with SMTP id <0LWD000QA4MCW260@terra-smin.broadpark.no> for freebsd-ppc@freebsd.org; Sat, 17 Dec 2011 20:25:25 +0100 (CET) Date: Sat, 17 Dec 2011 20:25:24 +0100 From: Torfinn Ingolfsen To: freebsd-ppc@freebsd.org Message-id: <20111217202524.9d63255e.torfinn.ingolfsen@broadpark.no> In-reply-to: <4EE50C4B.5040901@freebsd.org> References: <20111211195352.3cf2f767.torfinn.ingolfsen@broadpark.no> <4EE50C4B.5040901@freebsd.org> X-Mailer: Sylpheed 3.1.2 (GTK+ 2.24.6; amd64-portbld-freebsd8.2) X-Face: "t9w2,-X@O^I`jVW\sonI3.,36KBLZE*AL[y9lL[PyFD*r_S:dIL9c[8Y>V42R0"!"yb_zN,f#%.[PYYNq; m"_0v; ~rUM2Yy!zmkh)3&U|u!=T(zyv,MHJv"nDH>OJ`t(@mil461d_B'Uo|'nMwlKe0Mv=kvV?Nh@>Hb<3s_z2jYgZhPb@?Wi^x1a~Hplz1.zH Subject: Re: iBook G4: moused doesn't work? X-BeenThere: freebsd-ppc@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting FreeBSD to the PowerPC List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 17 Dec 2011 19:25:27 -0000 On Sun, 11 Dec 2011 14:02:19 -0600 Nathan Whitehorn wrote: > You need to set up moused to point to the touchpad device, atp0. There's > an example in the atp(4) manpage, but all you need to do is to put the > following in rc.conf: > moused_enable="YES" > moused_port="/dev/atp0" Ah! (smacks forehead) I must have been low on ebergy that day. After adding that, the touchpad works. Thanks! One question remains: why does FreeBSD fire up a moused for usb (therer are no usb devices attatched that I know of)? root@kg-ibook# ps ax | grep moused 1380 ?? Is 0:00.00 /usr/sbin/moused -p /dev/ums0 -t auto -I /var/run/moused.ums0.pid 2109 ?? Is 0:00.01 /usr/sbin/moused -p /dev/atp0 -t auto 2150 0 R+ 0:00.00 grep moused (sh) root@kg-ibook# dmesg | grep ums ums0: on usbus0 ums0: 5 buttons and [XY] coordinates ID=0 root@kg-ibook# usbconfig ugen0.1: at usbus0, cfg=0 md=HOST spd=FULL (12Mbps) pwr=SAVE ugen1.1: at usbus1, cfg=0 md=HOST spd=FULL (12Mbps) pwr=SAVE ugen2.1: at usbus2, cfg=0 md=HOST spd=FULL (12Mbps) pwr=SAVE ugen3.1: at usbus3, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=SAVE ugen0.2: at usbus0, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON ugen0.3: at usbus0, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON -- Torfinn From owner-freebsd-ppc@FreeBSD.ORG Sat Dec 17 19:41:14 2011 Return-Path: Delivered-To: freebsd-ppc@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id A3E21106566C for ; Sat, 17 Dec 2011 19:41:14 +0000 (UTC) (envelope-from carrch@mac.com) Received: from asmtpout019.mac.com (asmtpout019.mac.com [17.148.16.94]) by mx1.freebsd.org (Postfix) with ESMTP id 88E1E8FC13 for ; Sat, 17 Dec 2011 19:41:14 +0000 (UTC) MIME-version: 1.0 Content-transfer-encoding: 7BIT Content-type: text/plain; CHARSET=US-ASCII Received: from [10.0.1.3] ([24.11.63.77]) by asmtp019.mac.com (Oracle Communications Messaging Server 7u4-23.01 (7.0.4.23.0) 64bit (built Aug 10 2011)) with ESMTPSA id <0LWD00M5N5C7OI70@asmtp019.mac.com> for freebsd-ppc@freebsd.org; Sat, 17 Dec 2011 19:40:57 +0000 (GMT) X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:5.5.7110,1.0.211,0.0.0000 definitions=2011-12-17_07:2011-12-16, 2011-12-17, 1970-01-01 signatures=0 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 ipscore=0 suspectscore=1 phishscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=6.0.2-1012030000 definitions=main-1112170220 From: Chris Carr In-reply-to: <20111217202524.9d63255e.torfinn.ingolfsen@broadpark.no> Date: Sat, 17 Dec 2011 14:40:54 -0500 Message-id: References: <20111211195352.3cf2f767.torfinn.ingolfsen@broadpark.no> <4EE50C4B.5040901@freebsd.org> <20111217202524.9d63255e.torfinn.ingolfsen@broadpark.no> To: freebsd-ppc@freebsd.org X-Mailer: Apple Mail (2.1251.1) Cc: Subject: Re: iBook G4: moused doesn't work? X-BeenThere: freebsd-ppc@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting FreeBSD to the PowerPC List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 17 Dec 2011 19:41:14 -0000 The trackpad and keyboard of post-2005 Apple portables are internal USB devices, as are the bluetooth, IR sensor, and iSight camera. I think they stopped being internal ADB devices in 2003 or 2004. -Chris On Dec 17, 2011, at 2:25 PM, Torfinn Ingolfsen wrote: > On Sun, 11 Dec 2011 14:02:19 -0600 > Nathan Whitehorn wrote: > >> You need to set up moused to point to the touchpad device, atp0. There's >> an example in the atp(4) manpage, but all you need to do is to put the >> following in rc.conf: >> moused_enable="YES" >> moused_port="/dev/atp0" > > Ah! (smacks forehead) I must have been low on ebergy that day. > After adding that, the touchpad works. Thanks! > > One question remains: why does FreeBSD fire up a moused for usb (therer are no usb devices attatched that I know of)? > root@kg-ibook# ps ax | grep moused > 1380 ?? Is 0:00.00 /usr/sbin/moused -p /dev/ums0 -t auto -I /var/run/moused.ums0.pid > 2109 ?? Is 0:00.01 /usr/sbin/moused -p /dev/atp0 -t auto > 2150 0 R+ 0:00.00 grep moused (sh) > root@kg-ibook# dmesg | grep ums > ums0: on usbus0 > ums0: 5 buttons and [XY] coordinates ID=0 > > root@kg-ibook# usbconfig > ugen0.1: at usbus0, cfg=0 md=HOST spd=FULL (12Mbps) pwr=SAVE > ugen1.1: at usbus1, cfg=0 md=HOST spd=FULL (12Mbps) pwr=SAVE > ugen2.1: at usbus2, cfg=0 md=HOST spd=FULL (12Mbps) pwr=SAVE > ugen3.1: at usbus3, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=SAVE > ugen0.2: at usbus0, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON > ugen0.3: at usbus0, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON > > > > -- > Torfinn From owner-freebsd-ppc@FreeBSD.ORG Sat Dec 17 20:02:38 2011 Return-Path: Delivered-To: freebsd-ppc@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 997791065672 for ; Sat, 17 Dec 2011 20:02:38 +0000 (UTC) (envelope-from nwhitehorn@freebsd.org) Received: from argol.doit.wisc.edu (argol.doit.wisc.edu [144.92.197.212]) by mx1.freebsd.org (Postfix) with ESMTP id 6B5728FC12 for ; Sat, 17 Dec 2011 20:02:38 +0000 (UTC) MIME-version: 1.0 Content-transfer-encoding: 7BIT Content-type: text/plain; CHARSET=US-ASCII; format=flowed Received: from avs-daemon.smtpauth3.wiscmail.wisc.edu by smtpauth3.wiscmail.wisc.edu (Sun Java(tm) System Messaging Server 7u2-7.05 32bit (built Jul 30 2009)) id <0LWD00F006CDD800@smtpauth3.wiscmail.wisc.edu> for freebsd-ppc@freebsd.org; Sat, 17 Dec 2011 14:02:37 -0600 (CST) Received: from comporellon.tachypleus.net ([unknown] [76.210.77.223]) by smtpauth3.wiscmail.wisc.edu (Sun Java(tm) System Messaging Server 7u2-7.05 32bit (built Jul 30 2009)) with ESMTPSA id <0LWD008YM6CCEC10@smtpauth3.wiscmail.wisc.edu>; Sat, 17 Dec 2011 14:02:36 -0600 (CST) Date: Sat, 17 Dec 2011 14:02:35 -0600 From: Nathan Whitehorn In-reply-to: <20111217202524.9d63255e.torfinn.ingolfsen@broadpark.no> To: Torfinn Ingolfsen Message-id: <4EECF55B.4050100@freebsd.org> X-Spam-Report: AuthenticatedSender=yes, SenderIP=76.210.77.223 X-Spam-PmxInfo: Server=avs-13, Version=5.6.1.2065439, Antispam-Engine: 2.7.2.376379, Antispam-Data: 2011.12.17.195119, SenderIP=76.210.77.223 References: <20111211195352.3cf2f767.torfinn.ingolfsen@broadpark.no> <4EE50C4B.5040901@freebsd.org> <20111217202524.9d63255e.torfinn.ingolfsen@broadpark.no> User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:8.0) Gecko/20111113 Thunderbird/8.0 Cc: freebsd-ppc@freebsd.org Subject: Re: iBook G4: moused doesn't work? X-BeenThere: freebsd-ppc@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting FreeBSD to the PowerPC List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 17 Dec 2011 20:02:38 -0000 On 12/17/11 13:25, Torfinn Ingolfsen wrote: > On Sun, 11 Dec 2011 14:02:19 -0600 > Nathan Whitehorn wrote: > >> You need to set up moused to point to the touchpad device, atp0. There's >> an example in the atp(4) manpage, but all you need to do is to put the >> following in rc.conf: >> moused_enable="YES" >> moused_port="/dev/atp0" > Ah! (smacks forehead) I must have been low on ebergy that day. > After adding that, the touchpad works. Thanks! > > One question remains: why does FreeBSD fire up a moused for usb (therer are no usb devices attatched that I know of)? > root@kg-ibook# ps ax | grep moused > 1380 ?? Is 0:00.00 /usr/sbin/moused -p /dev/ums0 -t auto -I /var/run/moused.ums0.pid > 2109 ?? Is 0:00.01 /usr/sbin/moused -p /dev/atp0 -t auto > 2150 0 R+ 0:00.00 grep moused (sh) > root@kg-ibook# dmesg | grep ums > ums0: on usbus0 > ums0: 5 buttons and [XY] coordinates ID=0 > > root@kg-ibook# usbconfig > ugen0.1: at usbus0, cfg=0 md=HOST spd=FULL (12Mbps) pwr=SAVE > ugen1.1: at usbus1, cfg=0 md=HOST spd=FULL (12Mbps) pwr=SAVE > ugen2.1: at usbus2, cfg=0 md=HOST spd=FULL (12Mbps) pwr=SAVE > ugen3.1: at usbus3, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=SAVE > ugen0.2: at usbus0, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON > ugen0.3: at usbus0, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON > > > The ums etc. are the bluetooth controller's HID emulation. -Nathan From owner-freebsd-ppc@FreeBSD.ORG Sat Dec 17 21:29:02 2011 Return-Path: Delivered-To: freebsd-ppc@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 0EAD01065672 for ; Sat, 17 Dec 2011 21:29:02 +0000 (UTC) (envelope-from torfinn.ingolfsen@broadpark.no) Received: from thalia-smout.broadpark.no (thalia-smout.broadpark.no [80.202.8.21]) by mx1.freebsd.org (Postfix) with ESMTP id B93548FC12 for ; Sat, 17 Dec 2011 21:29:01 +0000 (UTC) MIME-version: 1.0 Content-transfer-encoding: 7BIT Content-type: text/plain; CHARSET=US-ASCII Received: from terra-smin.broadpark.no ([80.202.8.13]) by thalia-smout.broadpark.no (Sun Java(tm) System Messaging Server 7u3-15.01 64bit (built Feb 12 2010)) with ESMTP id <0LWD007HLACC4L70@thalia-smout.broadpark.no> for freebsd-ppc@freebsd.org; Sat, 17 Dec 2011 22:29:00 +0100 (CET) Received: from kg-v2.kg4.no ([84.48.120.32]) by terra-smin.broadpark.no (Sun Java(tm) System Messaging Server 7u3-15.01 64bit (built Feb 12 2010)) with SMTP id <0LWD001RUACBMHC0@terra-smin.broadpark.no> for freebsd-ppc@freebsd.org; Sat, 17 Dec 2011 22:29:00 +0100 (CET) Date: Sat, 17 Dec 2011 22:28:59 +0100 From: Torfinn Ingolfsen To: freebsd-ppc@freebsd.org Message-id: <20111217222859.3e0d933f.torfinn.ingolfsen@broadpark.no> In-reply-to: <4EECF55B.4050100@freebsd.org> References: <20111211195352.3cf2f767.torfinn.ingolfsen@broadpark.no> <4EE50C4B.5040901@freebsd.org> <20111217202524.9d63255e.torfinn.ingolfsen@broadpark.no> <4EECF55B.4050100@freebsd.org> X-Mailer: Sylpheed 3.1.2 (GTK+ 2.24.6; amd64-portbld-freebsd8.2) X-Face: "t9w2,-X@O^I`jVW\sonI3.,36KBLZE*AL[y9lL[PyFD*r_S:dIL9c[8Y>V42R0"!"yb_zN,f#%.[PYYNq; m"_0v; ~rUM2Yy!zmkh)3&U|u!=T(zyv,MHJv"nDH>OJ`t(@mil461d_B'Uo|'nMwlKe0Mv=kvV?Nh@>Hb<3s_z2jYgZhPb@?Wi^x1a~Hplz1.zH Subject: Re: iBook G4: moused doesn't work? X-BeenThere: freebsd-ppc@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting FreeBSD to the PowerPC List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 17 Dec 2011 21:29:02 -0000 On Sat, 17 Dec 2011 14:02:35 -0600 Nathan Whitehorn wrote: > > The ums etc. are the bluetooth controller's HID emulation. Aha. And it emulates a connected mouse even when no mouse is connected via bluetooth? I see that it does the same for a bluetooth keyboard: ukbd0: on usbus0 kbd2 at ukbd0 Thanks for the explanation. -- Torfinn