Skip to contentSkip to conversation

Fix X server on emenlow when built with gcc 4.7.x

PATCH In review Christopher Hallinan 3 participants 5 messages May 22, 2012

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 Fix X server on emenlow when built with gcc 4.7.x

Quoted 61 lines · Tom Zanussi
Quoted 20 lines · Chris Hallinan
Quoted 9 lines · Tom Zanussi
Quoted 8 lines · Chris Hallinan

Note: this patch has already been submitted against other BSPs, originally submitted to oe-core by Gary Thomas.  I ran into this same issue building MACHINE=emenlow on my own Z530 platform.  There are likely others as well where this needs to be applied.

Upstream is here:
https://bugs.freedesktop.org/show_bug.cgi?id=18451

Quoted 9 lines
Quoted 2 lines

PR has been bumped.

Hi, thanks for the patch - I see the problem and will pull this in as soon as I can build and test it, but am getting a patch failure in the build after pulling it in for testing.  I'll fix it up, but just mentioning it in case you had any ideas why it might work for you but fail here...

Quoted 8 lines

Sorry, Tom.
Odd, I generated the patch using git diff, but didn't actually try to apply it to an unpatched tree.  Looking at it, it isn't obvious why it fails. Someone with more git/patch foo than me could probably explain it ;)

This one works (for me) against current top of tree:

It must be a whitespace problem - I still couldn't apply it, so manually fixed it up here, patch below.

I also added an Upstream-status: section to the patch.

Also, before pulling it in, I'll need to have you send me your
Signed-off-by: line.

Unfortunately, the problem now is that although I am getting a sato desktop, it has no icons or mouse/keyboard and I see this in the Xorg.0.log:

Backtrace:
0: /usr/bin/Xorg (xorg_backtrace+0x37) [0x80e2e37]
1: /usr/bin/Xorg (0x8047000+0x5bda6) [0x80a2da6]
2: linux-gate.so.1 (__kernel_rt_sigreturn+0x0) [0xffffe40c]
3: /usr/lib/xorg/modules/drivers/psb_drv.so (0xb769b000+0x690c)

[0xb76a190c]
4: /usr/lib/xorg/modules/libexa.so (0xb71ab000+0xcd0a) [0xb71b7d0a] 5: /usr/lib/xorg/modules/libexa.so (0xb71ab000+0xd300) [0xb71b8300] 6: /usr/lib/xorg/modules/libexa.so (0xb71ab000+0xb5fd) [0xb71b65fd] 7: /usr/bin/Xorg (0x8047000+0xc60c0) [0x810d0c0]
8: /usr/bin/Xorg (CompositeGlyphs+0xb1) [0x819f131]
9: /usr/bin/Xorg (0x8047000+0xc2e1e) [0x8109e1e]
10: /usr/bin/Xorg (0x8047000+0xbdb2e) [0x8104b2e]
11: /usr/bin/Xorg (0x8047000+0x286cf) [0x806f6cf]
12: /usr/bin/Xorg (0x8047000+0x1bbca) [0x8062bca]
13: /lib/libc.so.6 (__libc_start_main+0xf5) [0x42892ba5] 14: /usr/bin/Xorg (0x8047000+0x1bea1) [0x8062ea1] Segmentation fault at address 0xc

Quoted 5 lines

Fatal server error:
Caught signal 11 (Segmentation fault). Server aborting

Can you tell me which poky commit you're using?

I haven't sync'd lately. I'm using
poky: f39ba520d6f2477c99839a92049b1bb279f092cf
meta-intel: bde31fd7e66faea865d24ff0858a9006b89e4e54

Third time should be a charm. With kergoth's help, I think I got this patch format correct!

---
 .../files/fix-bogus-stack-variables.patch          |  204 ++++++++++++++++++++
 .../xorg-xserver/xserver-psb-1.7.99.2.inc          |    5 +-
 2 files changed, 207 insertions(+), 2 deletions(-)
 create mode 100644 meta-emenlow/recipes-graphics/xorg-xserver/files/fix-bogus-stack-variables.patch
meta-emenlow/recipes-graphics/xorg-xserver/files/fix-bogus-stack-variables.patch new file +204 -0
new file mode 100644
index 0000000..5c9581a
@@ -0,0 +1,204 @@
+diff --git a/Xext/xace.c b/Xext/xace.c
+index e10d837..c757cad 100644
+--- a/Xext/xace.c
++++ b/Xext/xace.c
+@@ -87,7 +87,18 @@ void XaceHookAuditEnd(ClientPtr ptr, int result)
+  */
+ 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: {
+-	    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;
++	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: {
+-	    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;
++	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: {
+-	    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;
++	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: {
+-	    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;
++	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: {
+-	    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;
++	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: {
+-	    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;
++	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_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;
++	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: {
+-	    XaceAuthAvailRec rec;
+-	    rec.client = va_arg(ap, ClientPtr);
+-	    rec.authId = va_arg(ap, XID);
+-	    calldata = &rec;
++	case XACE_AUTH_AVAIL:
++	    u.auth.client = va_arg(ap, ClientPtr);
++	    u.auth.authId = va_arg(ap, XID);
+ 	    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;
++	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;
+-	}
+-	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;
+ }
meta-emenlow/recipes-graphics/xorg-xserver/xserver-psb-1.7.99.2.inc +3 -2
index 9ee9c97..1fe962b 100644
@@ -1,4 +1,4 @@
-PR = "r5"
+PR = "r6"
 
 PROTO_DEPS += "xf86driproto dri2proto"
 
@@ -8,7 +8,8 @@ SRC_URI += "file://nodolt.patch \
             file://crosscompile.patch \
 	    file://libdrm-poulsbo.patch \
 	    file://werror-address-fix.patch \
-	    file://ptr-to-int-cast-fix.patch"
+	    file://ptr-to-int-cast-fix.patch \
+	    file://fix-bogus-stack-variables.patch"
 
 # Misc build failure for master HEAD
 SRC_URI += "file://fix_open_max_preprocessor_error.patch"
Signature · 1 line
1.7.0.4
#1 lore raw
Quoted 68 lines · Christopher Hallinan
Quoted 61 lines · Tom Zanussi
Quoted 20 lines · Chris Hallinan
Quoted 9 lines · Tom Zanussi
Quoted 8 lines · Chris Hallinan

Note: this patch has already been submitted against other BSPs, originally submitted to oe-core by Gary Thomas. I ran into this same issue building MACHINE=emenlow on my own Z530 platform. There are likely others as well where this needs to be applied.

Upstream is here:
https://bugs.freedesktop.org/show_bug.cgi?id=18451

Quoted 9 lines
Quoted 2 lines

PR has been bumped.

Hi, thanks for the patch - I see the problem and will pull this in as soon as I can build and test it, but am getting a patch failure in the build after pulling it in for testing. I'll fix it up, but just mentioning it in case you had any ideas why it might work for you but fail here...

Quoted 8 lines

Sorry, Tom.
Odd, I generated the patch using git diff, but didn't actually try to apply it to an unpatched tree. Looking at it, it isn't obvious why it fails. Someone with more git/patch foo than me could probably explain it ;)

This one works (for me) against current top of tree:

It must be a whitespace problem - I still couldn't apply it, so manually fixed it up here, patch below.

I also added an Upstream-status: section to the patch.

Also, before pulling it in, I'll need to have you send me your
Signed-off-by: line.

Unfortunately, the problem now is that although I am getting a sato desktop, it has no icons or mouse/keyboard and I see this in the Xorg.0.log:

Backtrace:
0: /usr/bin/Xorg (xorg_backtrace+0x37) [0x80e2e37]
1: /usr/bin/Xorg (0x8047000+0x5bda6) [0x80a2da6]
2: linux-gate.so.1 (__kernel_rt_sigreturn+0x0) [0xffffe40c]
3: /usr/lib/xorg/modules/drivers/psb_drv.so (0xb769b000+0x690c)

[0xb76a190c]
4: /usr/lib/xorg/modules/libexa.so (0xb71ab000+0xcd0a) [0xb71b7d0a] 5: /usr/lib/xorg/modules/libexa.so (0xb71ab000+0xd300) [0xb71b8300] 6: /usr/lib/xorg/modules/libexa.so (0xb71ab000+0xb5fd) [0xb71b65fd] 7: /usr/bin/Xorg (0x8047000+0xc60c0) [0x810d0c0]
8: /usr/bin/Xorg (CompositeGlyphs+0xb1) [0x819f131]
9: /usr/bin/Xorg (0x8047000+0xc2e1e) [0x8109e1e]
10: /usr/bin/Xorg (0x8047000+0xbdb2e) [0x8104b2e]
11: /usr/bin/Xorg (0x8047000+0x286cf) [0x806f6cf]
12: /usr/bin/Xorg (0x8047000+0x1bbca) [0x8062bca]
13: /lib/libc.so.6 (__libc_start_main+0xf5) [0x42892ba5] 14: /usr/bin/Xorg (0x8047000+0x1bea1) [0x8062ea1] Segmentation fault at address 0xc

Quoted 5 lines

Fatal server error:
Caught signal 11 (Segmentation fault). Server aborting

Can you tell me which poky commit you're using?

Quoted 7 lines

I haven't sync'd lately. I'm using
poky: f39ba520d6f2477c99839a92049b1bb279f092cf
meta-intel: bde31fd7e66faea865d24ff0858a9006b89e4e54

Third time should be a charm. With kergoth's help, I think I got this patch format correct!

Yep, third time was the charm - applied cleanly and booted into sato without problem...

Pulled into meta-intel/master.

Thanks!

Tom

Quoted 236 lines
---
 .../files/fix-bogus-stack-variables.patch          |  204 ++++++++++++++++++++
 .../xorg-xserver/xserver-psb-1.7.99.2.inc          |    5 +-
 2 files changed, 207 insertions(+), 2 deletions(-)
 create mode 100644 meta-emenlow/recipes-graphics/xorg-xserver/files/fix-bogus-stack-variables.patch
meta-emenlow/recipes-graphics/xorg-xserver/files/fix-bogus-stack-variables.patch new file +204 -0
new file mode 100644
index 0000000..5c9581a
@@ -0,0 +1,204 @@
+diff --git a/Xext/xace.c b/Xext/xace.c
+index e10d837..c757cad 100644
+--- a/Xext/xace.c
++++ b/Xext/xace.c
+@@ -87,7 +87,18 @@ void XaceHookAuditEnd(ClientPtr ptr, int result)
+  */
+ 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: {
+-	    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;
++	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: {
+-	    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;
++	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: {
+-	    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;
++	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: {
+-	    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;
++	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: {
+-	    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;
++	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: {
+-	    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;
++	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_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;
++	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: {
+-	    XaceAuthAvailRec rec;
+-	    rec.client = va_arg(ap, ClientPtr);
+-	    rec.authId = va_arg(ap, XID);
+-	    calldata = &rec;
++	case XACE_AUTH_AVAIL:
++	    u.auth.client = va_arg(ap, ClientPtr);
++	    u.auth.authId = va_arg(ap, XID);
+ 	    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;
++	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;
+-	}
+-	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;
+ }
meta-emenlow/recipes-graphics/xorg-xserver/xserver-psb-1.7.99.2.inc +3 -2
index 9ee9c97..1fe962b 100644
@@ -1,4 +1,4 @@
-PR = "r5"
+PR = "r6"
 
 PROTO_DEPS += "xf86driproto dri2proto"
 
@@ -8,7 +8,8 @@ SRC_URI += "file://nodolt.patch \
             file://crosscompile.patch \
 	    file://libdrm-poulsbo.patch \
 	    file://werror-address-fix.patch \
-	    file://ptr-to-int-cast-fix.patch"
+	    file://ptr-to-int-cast-fix.patch \
+	    file://fix-bogus-stack-variables.patch"
 
 # Misc build failure for master HEAD
 SRC_URI += "file://fix_open_max_preprocessor_error.patch"
#2 lore raw
Quoted 73 lines · Tom Zanussi
Quoted 72 lines · Christopher Hallinan
Quoted 61 lines · Tom Zanussi
Quoted 20 lines · Chris Hallinan
Quoted 9 lines · Tom Zanussi
Quoted 8 lines · Chris Hallinan

Note: this patch has already been submitted against other BSPs, originally submitted to oe-core by Gary Thomas. I ran into this same issue building MACHINE=emenlow on my own Z530 platform. There are likely others as well where this needs to be applied.

Upstream is here:
https://bugs.freedesktop.org/show_bug.cgi?id=18451

Quoted 9 lines
Quoted 2 lines

PR has been bumped.

Hi, thanks for the patch - I see the problem and will pull this in as soon as I can build and test it, but am getting a patch failure in the build after pulling it in for testing. I'll fix it up, but just mentioning it in case you had any ideas why it might work for you but fail here...

Quoted 8 lines

Sorry, Tom.
Odd, I generated the patch using git diff, but didn't actually try to apply it to an unpatched tree. Looking at it, it isn't obvious why it fails. Someone with more git/patch foo than me could probably explain it ;)

This one works (for me) against current top of tree:

It must be a whitespace problem - I still couldn't apply it, so manually fixed it up here, patch below.

I also added an Upstream-status: section to the patch.

Also, before pulling it in, I'll need to have you send me your
Signed-off-by: line.

Unfortunately, the problem now is that although I am getting a sato desktop, it has no icons or mouse/keyboard and I see this in the Xorg.0.log:

Backtrace:
0: /usr/bin/Xorg (xorg_backtrace+0x37) [0x80e2e37]
1: /usr/bin/Xorg (0x8047000+0x5bda6) [0x80a2da6]
2: linux-gate.so.1 (__kernel_rt_sigreturn+0x0) [0xffffe40c]
3: /usr/lib/xorg/modules/drivers/psb_drv.so (0xb769b000+0x690c)

[0xb76a190c]
4: /usr/lib/xorg/modules/libexa.so (0xb71ab000+0xcd0a) [0xb71b7d0a] 5: /usr/lib/xorg/modules/libexa.so (0xb71ab000+0xd300) [0xb71b8300] 6: /usr/lib/xorg/modules/libexa.so (0xb71ab000+0xb5fd) [0xb71b65fd] 7: /usr/bin/Xorg (0x8047000+0xc60c0) [0x810d0c0]
8: /usr/bin/Xorg (CompositeGlyphs+0xb1) [0x819f131]
9: /usr/bin/Xorg (0x8047000+0xc2e1e) [0x8109e1e]
10: /usr/bin/Xorg (0x8047000+0xbdb2e) [0x8104b2e]
11: /usr/bin/Xorg (0x8047000+0x286cf) [0x806f6cf]
12: /usr/bin/Xorg (0x8047000+0x1bbca) [0x8062bca]
13: /lib/libc.so.6 (__libc_start_main+0xf5) [0x42892ba5] 14: /usr/bin/Xorg (0x8047000+0x1bea1) [0x8062ea1] Segmentation fault at address 0xc

Quoted 5 lines

Fatal server error:
Caught signal 11 (Segmentation fault). Server aborting

Can you tell me which poky commit you're using?

I haven't sync'd lately. I'm using
poky: f39ba520d6f2477c99839a92049b1bb279f092cf
meta-intel: bde31fd7e66faea865d24ff0858a9006b89e4e54

Quoted 8 lines
Quoted 3 lines

Third time should be a charm. With kergoth's help, I think I got this patch format correct!

Yep, third time was the charm - applied cleanly and booted into sato without problem...

Pulled into meta-intel/master.

Why not use patch with proper headers like Upstream-Status? (just copy it oe-core patch properly).

Or does meta-intel have different commit guidelines?

Cheers,

Quoted 247 lines

Thanks!

Tom

Quoted 227 lines
---
 .../files/fix-bogus-stack-variables.patch          |  204 ++++++++++++++++++++
 .../xorg-xserver/xserver-psb-1.7.99.2.inc          |    5 +-
 2 files changed, 207 insertions(+), 2 deletions(-)
 create mode 100644 meta-emenlow/recipes-graphics/xorg-xserver/files/fix-bogus-stack-variables.patch
meta-emenlow/recipes-graphics/xorg-xserver/files/fix-bogus-stack-variables.patch new file +204 -0
new file mode 100644
index 0000000..5c9581a
@@ -0,0 +1,204 @@
+diff --git a/Xext/xace.c b/Xext/xace.c
+index e10d837..c757cad 100644
+--- a/Xext/xace.c
++++ b/Xext/xace.c
+@@ -87,7 +87,18 @@ void XaceHookAuditEnd(ClientPtr ptr, int result)
+  */
+ 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: {
+-	    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;
++	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: {
+-	    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;
++	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: {
+-	    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;
++	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: {
+-	    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;
++	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: {
+-	    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;
++	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: {
+-	    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;
++	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_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;
++	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: {
+-	    XaceAuthAvailRec rec;
+-	    rec.client = va_arg(ap, ClientPtr);
+-	    rec.authId = va_arg(ap, XID);
+-	    calldata = &rec;
++	case XACE_AUTH_AVAIL:
++	    u.auth.client = va_arg(ap, ClientPtr);
++	    u.auth.authId = va_arg(ap, XID);
+ 	    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;
++	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;
+-	}
+-	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;
+ }
meta-emenlow/recipes-graphics/xorg-xserver/xserver-psb-1.7.99.2.inc +1 -1
index 9ee9c97..1fe962b 100644
@@ -1,4 +1,4 @@
-PR = "r5"
+PR = "r6"
 
 PROTO_DEPS += "xf86driproto dri2proto"
 

meta-emenlow/recipes-graphics/xorg-xserver/xserver-psb-1.7.99.2.inc SRC_URI += "file://nodolt.patch \ · line 15

Quoted 9 lines
meta-emenlow/recipes-graphics/xorg-xserver/xserver-psb-1.7.99.2.inc +2 -1
@@ -8,7 +8,8 @@ SRC_URI += "file://nodolt.patch \
             file://crosscompile.patch \
 	    file://libdrm-poulsbo.patch \
 	    file://werror-address-fix.patch \
-	    file://ptr-to-int-cast-fix.patch"
+	    file://ptr-to-int-cast-fix.patch \
+	    file://fix-bogus-stack-variables.patch"
 
 # Misc build failure for master HEAD
 SRC_URI += "file://fix_open_max_preprocessor_error.patch"

_______________________________________________
yocto mailing list
[email protected]
https://lists.yoctoproject.org/listinfo/yocto

Signature · 1 line
Martin 'JaMa' Jansa     jabber: [email protected]
#3 lore raw
Quoted 81 lines · Martin Jansa
Quoted 80 lines · Tom Zanussi
Quoted 68 lines · Christopher Hallinan
Quoted 61 lines · Tom Zanussi
Quoted 20 lines · Chris Hallinan
Quoted 9 lines · Tom Zanussi
Quoted 8 lines · Chris Hallinan

Note: this patch has already been submitted against other BSPs, originally submitted to oe-core by Gary Thomas. I ran into this same issue building MACHINE=emenlow on my own Z530 platform. There are likely others as well where this needs to be applied.

Upstream is here:
https://bugs.freedesktop.org/show_bug.cgi?id=18451

Quoted 9 lines
Quoted 2 lines

PR has been bumped.

Hi, thanks for the patch - I see the problem and will pull this in as soon as I can build and test it, but am getting a patch failure in the build after pulling it in for testing. I'll fix it up, but just mentioning it in case you had any ideas why it might work for you but fail here...

Quoted 8 lines

Sorry, Tom.
Odd, I generated the patch using git diff, but didn't actually try to apply it to an unpatched tree. Looking at it, it isn't obvious why it fails. Someone with more git/patch foo than me could probably explain it ;)

This one works (for me) against current top of tree:

It must be a whitespace problem - I still couldn't apply it, so manually fixed it up here, patch below.

I also added an Upstream-status: section to the patch.

Also, before pulling it in, I'll need to have you send me your
Signed-off-by: line.

Unfortunately, the problem now is that although I am getting a sato desktop, it has no icons or mouse/keyboard and I see this in the Xorg.0.log:

Backtrace:
0: /usr/bin/Xorg (xorg_backtrace+0x37) [0x80e2e37]
1: /usr/bin/Xorg (0x8047000+0x5bda6) [0x80a2da6]
2: linux-gate.so.1 (__kernel_rt_sigreturn+0x0) [0xffffe40c]
3: /usr/lib/xorg/modules/drivers/psb_drv.so (0xb769b000+0x690c)

[0xb76a190c]
4: /usr/lib/xorg/modules/libexa.so (0xb71ab000+0xcd0a) [0xb71b7d0a] 5: /usr/lib/xorg/modules/libexa.so (0xb71ab000+0xd300) [0xb71b8300] 6: /usr/lib/xorg/modules/libexa.so (0xb71ab000+0xb5fd) [0xb71b65fd] 7: /usr/bin/Xorg (0x8047000+0xc60c0) [0x810d0c0]
8: /usr/bin/Xorg (CompositeGlyphs+0xb1) [0x819f131]
9: /usr/bin/Xorg (0x8047000+0xc2e1e) [0x8109e1e]
10: /usr/bin/Xorg (0x8047000+0xbdb2e) [0x8104b2e]
11: /usr/bin/Xorg (0x8047000+0x286cf) [0x806f6cf]
12: /usr/bin/Xorg (0x8047000+0x1bbca) [0x8062bca]
13: /lib/libc.so.6 (__libc_start_main+0xf5) [0x42892ba5] 14: /usr/bin/Xorg (0x8047000+0x1bea1) [0x8062ea1] Segmentation fault at address 0xc

Quoted 5 lines

Fatal server error:
Caught signal 11 (Segmentation fault). Server aborting

Can you tell me which poky commit you're using?

Quoted 7 lines

I haven't sync'd lately. I'm using
poky: f39ba520d6f2477c99839a92049b1bb279f092cf
meta-intel: bde31fd7e66faea865d24ff0858a9006b89e4e54

Third time should be a charm. With kergoth's help, I think I got this patch format correct!

Yep, third time was the charm - applied cleanly and booted into sato without problem...

Quoted 7 lines
Quoted 1 line

Pulled into meta-intel/master.

Why not use patch with proper headers like Upstream-Status? (just copy it oe-core patch properly).

Or does meta-intel have different commit guidelines?

I added an Upstream-status: header when I pulled it in. See repo.

Tom

Quoted 250 lines

Cheers,

Quoted 247 lines

Thanks!

Tom

Quoted 227 lines
---
 .../files/fix-bogus-stack-variables.patch          |  204 ++++++++++++++++++++
 .../xorg-xserver/xserver-psb-1.7.99.2.inc          |    5 +-
 2 files changed, 207 insertions(+), 2 deletions(-)
 create mode 100644 meta-emenlow/recipes-graphics/xorg-xserver/files/fix-bogus-stack-variables.patch
meta-emenlow/recipes-graphics/xorg-xserver/files/fix-bogus-stack-variables.patch new file +204 -0
new file mode 100644
index 0000000..5c9581a
@@ -0,0 +1,204 @@
+diff --git a/Xext/xace.c b/Xext/xace.c
+index e10d837..c757cad 100644
+--- a/Xext/xace.c
++++ b/Xext/xace.c
+@@ -87,7 +87,18 @@ void XaceHookAuditEnd(ClientPtr ptr, int result)
+  */
+ 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: {
+-	    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;
++	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: {
+-	    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;
++	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: {
+-	    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;
++	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: {
+-	    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;
++	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: {
+-	    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;
++	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: {
+-	    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;
++	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_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;
++	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: {
+-	    XaceAuthAvailRec rec;
+-	    rec.client = va_arg(ap, ClientPtr);
+-	    rec.authId = va_arg(ap, XID);
+-	    calldata = &rec;
++	case XACE_AUTH_AVAIL:
++	    u.auth.client = va_arg(ap, ClientPtr);
++	    u.auth.authId = va_arg(ap, XID);
+ 	    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;
++	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;
+-	}
+-	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;
+ }
meta-emenlow/recipes-graphics/xorg-xserver/xserver-psb-1.7.99.2.inc +1 -1
index 9ee9c97..1fe962b 100644
@@ -1,4 +1,4 @@
-PR = "r5"
+PR = "r6"
 
 PROTO_DEPS += "xf86driproto dri2proto"
 

meta-emenlow/recipes-graphics/xorg-xserver/xserver-psb-1.7.99.2.inc SRC_URI += "file://nodolt.patch \ · line 15

Quoted 9 lines
meta-emenlow/recipes-graphics/xorg-xserver/xserver-psb-1.7.99.2.inc +2 -1
@@ -8,7 +8,8 @@ SRC_URI += "file://nodolt.patch \
             file://crosscompile.patch \
 	    file://libdrm-poulsbo.patch \
 	    file://werror-address-fix.patch \
-	    file://ptr-to-int-cast-fix.patch"
+	    file://ptr-to-int-cast-fix.patch \
+	    file://fix-bogus-stack-variables.patch"
 
 # Misc build failure for master HEAD
 SRC_URI += "file://fix_open_max_preprocessor_error.patch"

_______________________________________________
yocto mailing list
[email protected]
https://lists.yoctoproject.org/listinfo/yocto

#4 lore raw
Quoted 84 lines · Tom Zanussi
Quoted 83 lines · Martin Jansa
Quoted 81 lines · Tom Zanussi
Quoted 68 lines · Christopher Hallinan
Quoted 61 lines · Tom Zanussi
Quoted 20 lines · Chris Hallinan
Quoted 9 lines · Tom Zanussi
Quoted 8 lines · Chris Hallinan

Note: this patch has already been submitted against other BSPs, originally submitted to oe-core by Gary Thomas. I ran into this same issue building MACHINE=emenlow on my own Z530 platform. There are likely others as well where this needs to be applied.

Upstream is here:
https://bugs.freedesktop.org/show_bug.cgi?id=18451

Quoted 9 lines
Quoted 2 lines

PR has been bumped.

Hi, thanks for the patch - I see the problem and will pull this in as soon as I can build and test it, but am getting a patch failure in the build after pulling it in for testing. I'll fix it up, but just mentioning it in case you had any ideas why it might work for you but fail here...

Quoted 8 lines

Sorry, Tom.
Odd, I generated the patch using git diff, but didn't actually try to apply it to an unpatched tree. Looking at it, it isn't obvious why it fails. Someone with more git/patch foo than me could probably explain it ;)

This one works (for me) against current top of tree:

It must be a whitespace problem - I still couldn't apply it, so manually fixed it up here, patch below.

I also added an Upstream-status: section to the patch.

Also, before pulling it in, I'll need to have you send me your
Signed-off-by: line.

Unfortunately, the problem now is that although I am getting a sato desktop, it has no icons or mouse/keyboard and I see this in the Xorg.0.log:

Backtrace:
0: /usr/bin/Xorg (xorg_backtrace+0x37) [0x80e2e37]
1: /usr/bin/Xorg (0x8047000+0x5bda6) [0x80a2da6]
2: linux-gate.so.1 (__kernel_rt_sigreturn+0x0) [0xffffe40c]
3: /usr/lib/xorg/modules/drivers/psb_drv.so (0xb769b000+0x690c)

[0xb76a190c]
4: /usr/lib/xorg/modules/libexa.so (0xb71ab000+0xcd0a) [0xb71b7d0a] 5: /usr/lib/xorg/modules/libexa.so (0xb71ab000+0xd300) [0xb71b8300] 6: /usr/lib/xorg/modules/libexa.so (0xb71ab000+0xb5fd) [0xb71b65fd] 7: /usr/bin/Xorg (0x8047000+0xc60c0) [0x810d0c0]
8: /usr/bin/Xorg (CompositeGlyphs+0xb1) [0x819f131]
9: /usr/bin/Xorg (0x8047000+0xc2e1e) [0x8109e1e]
10: /usr/bin/Xorg (0x8047000+0xbdb2e) [0x8104b2e]
11: /usr/bin/Xorg (0x8047000+0x286cf) [0x806f6cf]
12: /usr/bin/Xorg (0x8047000+0x1bbca) [0x8062bca]
13: /lib/libc.so.6 (__libc_start_main+0xf5) [0x42892ba5] 14: /usr/bin/Xorg (0x8047000+0x1bea1) [0x8062ea1] Segmentation fault at address 0xc

Quoted 5 lines

Fatal server error:
Caught signal 11 (Segmentation fault). Server aborting

Can you tell me which poky commit you're using?

Quoted 7 lines

I haven't sync'd lately. I'm using
poky: f39ba520d6f2477c99839a92049b1bb279f092cf
meta-intel: bde31fd7e66faea865d24ff0858a9006b89e4e54

Third time should be a charm. With kergoth's help, I think I got this patch format correct!

Yep, third time was the charm - applied cleanly and booted into sato without problem...

Pulled into meta-intel/master.

Quoted 7 lines
Quoted 5 lines

Why not use patch with proper headers like Upstream-Status? (just copy it oe-core patch properly).

Or does meta-intel have different commit guidelines?

I added an Upstream-status: header when I pulled it in. See repo.

Thanks, it's better then nothing, but still don't understand why not use the same file as oe-core (only difference are patch headers which are better in oe-core - at least original SOB lines from upstream patch).

But that's rather question for author of this patch.. you did good job adding Upstream-status..

Cheers,

Quoted 255 lines

Tom

Quoted 250 lines

Cheers,

Quoted 247 lines

Thanks!

Tom

Quoted 227 lines
---
 .../files/fix-bogus-stack-variables.patch          |  204 ++++++++++++++++++++
 .../xorg-xserver/xserver-psb-1.7.99.2.inc          |    5 +-
 2 files changed, 207 insertions(+), 2 deletions(-)
 create mode 100644 meta-emenlow/recipes-graphics/xorg-xserver/files/fix-bogus-stack-variables.patch
meta-emenlow/recipes-graphics/xorg-xserver/files/fix-bogus-stack-variables.patch new file +204 -0
new file mode 100644
index 0000000..5c9581a
@@ -0,0 +1,204 @@
+diff --git a/Xext/xace.c b/Xext/xace.c
+index e10d837..c757cad 100644
+--- a/Xext/xace.c
++++ b/Xext/xace.c
+@@ -87,7 +87,18 @@ void XaceHookAuditEnd(ClientPtr ptr, int result)
+  */
+ 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: {
+-	    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;
++	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: {
+-	    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;
++	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: {
+-	    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;
++	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: {
+-	    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;
++	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: {
+-	    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;
++	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: {
+-	    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;
++	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_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;
++	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: {
+-	    XaceAuthAvailRec rec;
+-	    rec.client = va_arg(ap, ClientPtr);
+-	    rec.authId = va_arg(ap, XID);
+-	    calldata = &rec;
++	case XACE_AUTH_AVAIL:
++	    u.auth.client = va_arg(ap, ClientPtr);
++	    u.auth.authId = va_arg(ap, XID);
+ 	    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;
++	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;
+-	}
+-	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;
+ }
meta-emenlow/recipes-graphics/xorg-xserver/xserver-psb-1.7.99.2.inc +1 -1
index 9ee9c97..1fe962b 100644
@@ -1,4 +1,4 @@
-PR = "r5"
+PR = "r6"
 
 PROTO_DEPS += "xf86driproto dri2proto"
 

meta-emenlow/recipes-graphics/xorg-xserver/xserver-psb-1.7.99.2.inc SRC_URI += "file://nodolt.patch \ · line 15

Quoted 9 lines
meta-emenlow/recipes-graphics/xorg-xserver/xserver-psb-1.7.99.2.inc +2 -1
@@ -8,7 +8,8 @@ SRC_URI += "file://nodolt.patch \
             file://crosscompile.patch \
 	    file://libdrm-poulsbo.patch \
 	    file://werror-address-fix.patch \
-	    file://ptr-to-int-cast-fix.patch"
+	    file://ptr-to-int-cast-fix.patch \
+	    file://fix-bogus-stack-variables.patch"
 
 # Misc build failure for master HEAD
 SRC_URI += "file://fix_open_max_preprocessor_error.patch"

_______________________________________________
yocto mailing list
[email protected]
https://lists.yoctoproject.org/listinfo/yocto

Signature · 1 line
Martin 'JaMa' Jansa     jabber: [email protected]