ports/179625: x11-servers/xorg-server built with clang does not work, needs USE_GCC=any
Dimitry Andric
dim at FreeBSD.org
Mon Jun 17 21:20:02 UTC 2013
The following reply was made to PR ports/179625; it has been noted by GNATS.
From: Dimitry Andric <dim at FreeBSD.org>
To: mexas at bristol.ac.uk
Cc: bug-followup at FreeBSD.org,
Jung-uk Kim <jkim at FreeBSD.org>,
Niclas Zeising <zeising at FreeBSD.org>
Subject: Re: ports/179625: x11-servers/xorg-server built with clang does not work, needs USE_GCC=any
Date: Mon, 17 Jun 2013 23:18:43 +0200
--Apple-Mail=_C3BEED31-6A73-4D53-9F4C-B6B88549E1BB
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
charset=us-ascii
On Jun 17, 2013, at 14:00, Anton Shterenlikht <mexas at bris.ac.uk> wrote:
> The patch applied cleanly (yes, I'm still on r249781).
> The commands you wrote also run with no problems.
> However, rebuilding xorg-server with patched clang,
> and removing USE_GCC, did not help. The X error
> is still the same:
>=20
> (EE) Jun 17 12:51:23 NVIDIA(0): Failed to initialize default colormap
> (EE) NVIDIA(0): *** Aborting ***
>=20
> Fatal server error:
> AddScreen/ScreenInit failed for driver 0
Okay, so the optimizer was not the issue then. :-)
Luckily I was able to reproduce your error, after realizing you were
using the old X.org server (version 1.7.7). As far as I can tell, this
is the following bug:
https://bugs.freedesktop.org/show_bug.cgi?id=3D18451
which is fixed by this commit:
=
http://cgit.freedesktop.org/xorg/xserver/commit/?id=3D6dae7f3792611aace1df=
0cca63bf50c50d93de43
I'm attaching a diff for our x11-servers/xorg-server port, can you
please try it? E.g. from the root of your ports tree, run:
patch -p0 -f -F0 -i x11-servers__xorg-server__fix-xace-callback-1.diff
which should modify x11-servers/xorg-server/Makefile, and add an
additional patch (extra-Xext-xace.c) to the files subdirectory. Then
rebuild and reinstall the xorg-server port.
-Dimitry
--Apple-Mail=_C3BEED31-6A73-4D53-9F4C-B6B88549E1BB
Content-Disposition: attachment;
filename=x11-servers__xorg-server__fix-xace-callback-1.diff
Content-Type: application/octet-stream;
name="x11-servers__xorg-server__fix-xace-callback-1.diff"
Content-Transfer-Encoding: 7bit
Index: x11-servers/xorg-server/Makefile
===================================================================
--- x11-servers/xorg-server/Makefile (revision 321017)
+++ x11-servers/xorg-server/Makefile (working copy)
@@ -33,7 +33,8 @@
${FILESDIR}/extra-os-utils.c \
${FILESDIR}/extra-Xserver-hw-xfree86-os-support-bsd-sparc64_video.c \
${FILESDIR}/extra-Xserver-os-xprintf.c \
- ${FILESDIR}/extra-servermd.h
+ ${FILESDIR}/extra-servermd.h \
+ ${FILESDIR}/extra-Xext-xace.c
.endif
USE_BZIP2= yes
Index: x11-servers/xorg-server/files/extra-Xext-xace.c
===================================================================
--- x11-servers/xorg-server/files/extra-Xext-xace.c (revision 0)
+++ x11-servers/xorg-server/files/extra-Xext-xace.c (working copy)
@@ -0,0 +1,211 @@
+--- Xext/xace.c.orig 2010-04-21 04:00:26.000000000 +0200
++++ Xext/xace.c 2013-06-17 23:02:08.000000000 +0200
+@@ -87,7 +87,18 @@ void XaceHookAuditEnd(ClientPtr ptr, int
+ */
+ int XaceHook(int hook, ...)
+ {
+- pointer calldata; /* data passed to callback */
++ union {
++ XaceResourceAccessRec res;
++ XaceDeviceAccessRec dev;
++ XaceSendAccessRec send;
++ XaceReceiveAccessRec recv;
++ XaceClientAccessRec client;
++ XaceExtAccessRec ext;
++ XaceServerAccessRec server;
++ XaceScreenAccessRec screen;
++ XaceAuthAvailRec auth;
++ XaceKeyAvailRec key;
++ } u;
+ int *prv = NULL; /* points to return value from callback */
+ va_list ap; /* argument list */
+ va_start(ap, hook);
+@@ -99,117 +110,86 @@ int XaceHook(int hook, ...)
+ */
+ switch (hook)
+ {
+- case XACE_RESOURCE_ACCESS: {
+- XaceResourceAccessRec rec;
+- rec.client = va_arg(ap, ClientPtr);
+- rec.id = va_arg(ap, XID);
+- rec.rtype = va_arg(ap, RESTYPE);
+- rec.res = va_arg(ap, pointer);
+- rec.ptype = va_arg(ap, RESTYPE);
+- rec.parent = va_arg(ap, pointer);
+- rec.access_mode = va_arg(ap, Mask);
+- rec.status = Success; /* default allow */
+- calldata = &rec;
+- prv = &rec.status;
++ case XACE_RESOURCE_ACCESS:
++ u.res.client = va_arg(ap, ClientPtr);
++ u.res.id = va_arg(ap, XID);
++ u.res.rtype = va_arg(ap, RESTYPE);
++ u.res.res = va_arg(ap, pointer);
++ u.res.ptype = va_arg(ap, RESTYPE);
++ u.res.parent = va_arg(ap, pointer);
++ u.res.access_mode = va_arg(ap, Mask);
++ u.res.status = Success; /* default allow */
++ prv = &u.res.status;
++ break;
++ case XACE_DEVICE_ACCESS:
++ u.dev.client = va_arg(ap, ClientPtr);
++ u.dev.dev = va_arg(ap, DeviceIntPtr);
++ u.dev.access_mode = va_arg(ap, Mask);
++ u.dev.status = Success; /* default allow */
++ prv = &u.dev.status;
++ break;
++ case XACE_SEND_ACCESS:
++ u.send.client = va_arg(ap, ClientPtr);
++ u.send.dev = va_arg(ap, DeviceIntPtr);
++ u.send.pWin = va_arg(ap, WindowPtr);
++ u.send.events = va_arg(ap, xEventPtr);
++ u.send.count = va_arg(ap, int);
++ u.send.status = Success; /* default allow */
++ prv = &u.send.status;
++ break;
++ case XACE_RECEIVE_ACCESS:
++ u.recv.client = va_arg(ap, ClientPtr);
++ u.recv.pWin = va_arg(ap, WindowPtr);
++ u.recv.events = va_arg(ap, xEventPtr);
++ u.recv.count = va_arg(ap, int);
++ u.recv.status = Success; /* default allow */
++ prv = &u.recv.status;
++ break;
++ case XACE_CLIENT_ACCESS:
++ u.client.client = va_arg(ap, ClientPtr);
++ u.client.target = va_arg(ap, ClientPtr);
++ u.client.access_mode = va_arg(ap, Mask);
++ u.client.status = Success; /* default allow */
++ prv = &u.client.status;
++ break;
++ case XACE_EXT_ACCESS:
++ u.ext.client = va_arg(ap, ClientPtr);
++ u.ext.ext = va_arg(ap, ExtensionEntry*);
++ u.ext.access_mode = DixGetAttrAccess;
++ u.ext.status = Success; /* default allow */
++ prv = &u.ext.status;
++ break;
++ case XACE_SERVER_ACCESS:
++ u.server.client = va_arg(ap, ClientPtr);
++ u.server.access_mode = va_arg(ap, Mask);
++ u.server.status = Success; /* default allow */
++ prv = &u.server.status;
+ break;
+- }
+- case XACE_DEVICE_ACCESS: {
+- XaceDeviceAccessRec rec;
+- rec.client = va_arg(ap, ClientPtr);
+- rec.dev = va_arg(ap, DeviceIntPtr);
+- rec.access_mode = va_arg(ap, Mask);
+- rec.status = Success; /* default allow */
+- calldata = &rec;
+- prv = &rec.status;
+- break;
+- }
+- case XACE_SEND_ACCESS: {
+- XaceSendAccessRec rec;
+- rec.client = va_arg(ap, ClientPtr);
+- rec.dev = va_arg(ap, DeviceIntPtr);
+- rec.pWin = va_arg(ap, WindowPtr);
+- rec.events = va_arg(ap, xEventPtr);
+- rec.count = va_arg(ap, int);
+- rec.status = Success; /* default allow */
+- calldata = &rec;
+- prv = &rec.status;
+- break;
+- }
+- case XACE_RECEIVE_ACCESS: {
+- XaceReceiveAccessRec rec;
+- rec.client = va_arg(ap, ClientPtr);
+- rec.pWin = va_arg(ap, WindowPtr);
+- rec.events = va_arg(ap, xEventPtr);
+- rec.count = va_arg(ap, int);
+- rec.status = Success; /* default allow */
+- calldata = &rec;
+- prv = &rec.status;
+- break;
+- }
+- case XACE_CLIENT_ACCESS: {
+- XaceClientAccessRec rec;
+- rec.client = va_arg(ap, ClientPtr);
+- rec.target = va_arg(ap, ClientPtr);
+- rec.access_mode = va_arg(ap, Mask);
+- rec.status = Success; /* default allow */
+- calldata = &rec;
+- prv = &rec.status;
+- break;
+- }
+- case XACE_EXT_ACCESS: {
+- XaceExtAccessRec rec;
+- rec.client = va_arg(ap, ClientPtr);
+- rec.ext = va_arg(ap, ExtensionEntry*);
+- rec.access_mode = DixGetAttrAccess;
+- rec.status = Success; /* default allow */
+- calldata = &rec;
+- prv = &rec.status;
+- break;
+- }
+- case XACE_SERVER_ACCESS: {
+- XaceServerAccessRec rec;
+- rec.client = va_arg(ap, ClientPtr);
+- rec.access_mode = va_arg(ap, Mask);
+- rec.status = Success; /* default allow */
+- calldata = &rec;
+- prv = &rec.status;
+- break;
+- }
+ case XACE_SCREEN_ACCESS:
+- case XACE_SCREENSAVER_ACCESS: {
+- XaceScreenAccessRec rec;
+- rec.client = va_arg(ap, ClientPtr);
+- rec.screen = va_arg(ap, ScreenPtr);
+- rec.access_mode = va_arg(ap, Mask);
+- rec.status = Success; /* default allow */
+- calldata = &rec;
+- prv = &rec.status;
+- break;
+- }
+- case XACE_AUTH_AVAIL: {
+- XaceAuthAvailRec rec;
+- rec.client = va_arg(ap, ClientPtr);
+- rec.authId = va_arg(ap, XID);
+- calldata = &rec;
++ case XACE_SCREENSAVER_ACCESS:
++ u.screen.client = va_arg(ap, ClientPtr);
++ u.screen.screen = va_arg(ap, ScreenPtr);
++ u.screen.access_mode = va_arg(ap, Mask);
++ u.screen.status = Success; /* default allow */
++ prv = &u.screen.status;
++ break;
++ case XACE_AUTH_AVAIL:
++ u.auth.client = va_arg(ap, ClientPtr);
++ u.auth.authId = va_arg(ap, XID);
++ break;
++ case XACE_KEY_AVAIL:
++ u.key.event = va_arg(ap, xEventPtr);
++ u.key.keybd = va_arg(ap, DeviceIntPtr);
++ u.key.count = va_arg(ap, int);
+ break;
+- }
+- case XACE_KEY_AVAIL: {
+- XaceKeyAvailRec rec;
+- rec.event = va_arg(ap, xEventPtr);
+- rec.keybd = va_arg(ap, DeviceIntPtr);
+- rec.count = va_arg(ap, int);
+- calldata = &rec;
+- break;
+- }
+- default: {
++ default:
+ va_end(ap);
+ return 0; /* unimplemented hook number */
+- }
+ }
+ va_end(ap);
+
+ /* call callbacks and return result, if any. */
+- CallCallbacks(&XaceHooks[hook], calldata);
++ CallCallbacks(&XaceHooks[hook], &u);
+ return prv ? *prv : Success;
+ }
+
--Apple-Mail=_C3BEED31-6A73-4D53-9F4C-B6B88549E1BB--
More information about the freebsd-x11
mailing list