cvs commit: src/sys/dev/kbdmux kbdmux.c
Ruslan Ermilov
ru at FreeBSD.org
Tue Sep 19 12:48:23 PDT 2006
On Tue, Sep 19, 2006 at 12:36:38PM -0700, Maksim Yevmenkin wrote:
> nope, same crash. the only thing that seems to help is to reverting
> back to (int *) cast just like other keyboard drivers do. then it
> works.
>
> i'm in the process of getting amd64 snapshot iso to try it on a couple
> of boxes. if it will work then i'm going to back (int *) -> (intptr_t
> *) changes introduced in rev 1.8.
>
Why? amd64 and i386 are unaffected (both of my i386 and amd64 work
with the committed revision), and on sparc64 we need to find a proper
fix. It cannot work properly with (intptr_t *) removed as demonstrated
by the test program I sent to you. Here it's again for reference:
: $ cat Makefile
: PROG= bubu
: NO_MAN=
: SRCS= main.c ioctl.c
: WARNS?=3
:
: .include <bsd.prog.mk>
: $ cat main.c
: #include <sys/types.h>
:
: int ioctl(int, u_long, ...);
:
: int
: main(void)
: {
:
: ioctl(1, 2, 3);
: return (0);
: }
: $ cat ioctl.c
: #include <sys/types.h>
: #include <stdio.h>
:
: void ioctl(int, u_long, caddr_t);
:
: /*
: * This emulates what kernel's ioctl() does with IOC_VOID
: * type ioctls.
: */
: void
: ioctl(int fd, u_long req, caddr_t argp)
: {
: caddr_t data = (void *)&argp;
:
: printf("fd=%d req=%lu ", fd, req);
: printf("(int)(*(intptr_t *)data)=%d ", (int)(*(intptr_t *)data));
: printf("*(int *)data=%d\n", *(int *)data);
: }
On sparc64, it prints:
fd=1 req=2 (int)(*(intptr_t *)data)=3 *(int *)data=0
On i386 and amd64, it prints:
fd=1 req=2 (int)(*(intptr_t *)data)=3 *(int *)data=3
Cheers,
--
Ruslan Ermilov
ru at FreeBSD.org
FreeBSD committer
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 187 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/cvs-src/attachments/20060919/2f6e6570/attachment.pgp
More information about the cvs-src
mailing list