NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: kern/50038: udl (DisplayLink GX-DVI_U2B) alignment fault on earmv6hf NETWALKER



The following reply was made to PR kern/50038; it has been noted by GNATS.

From: MOCHIDA Shuji <mochid%netside.co.jp@localhost>
To: skrll%netbsd.org@localhost
Cc: gnats-bugs%NetBSD.org@localhost, kern-bug-people%netbsd.org@localhost,
 gnats-admin%netbsd.org@localhost, netbsd-bugs%netbsd.org@localhost
Subject: Re: kern/50038: udl (DisplayLink GX-DVI_U2B) alignment fault on
 earmv6hf NETWALKER
Date: Thu, 10 Nov 2016 23:46:41 +0900 (JST)

 over 1 year passed..
 Same error occured on my RPI2 with udl(GX-DVI_U2B).
 
 > First thing to mention is that earmv7hf is the best MACHINE_ARCH for Cortex-A8
 
 Using earmv7hf/earmv6hf/earm/arm kernel 7.99.42 RPI2.201611040530Z from
 nyftp NetBSD-daily, produce same error at netbsd:udl_fill_rect+0xc.
 
 I set up kgdb environment, and got:
 
 Program received signal SIGINT, Interrupt.
 udl_fill_line (width=<optimized out>, off=0, rgb16=<optimized out>, 
     sc=0xb8065008)
     at /.../src/sys/dev/usb/udl.c:1333
 1333            udl_cmd_add_4(sc, ((off * 2) << 8) | (width & 0xff));
 (gdb) bt
 #0  udl_fill_line (width=<optimized out>, off=0, rgb16=<optimized out>, 
     sc=0xb8065008)
     at /.../src/sys/dev/usb/udl.c:1333
 #1  udl_fill_rect (sc=sc@entry=0xb8065008, rgb16=<optimized out>, x=0, 
     y=<optimized out>, width=<optimized out>, height=480)
     at /.../src/sys/dev/usb/udl.c:1241
     :
 
 And comment out some 'inline', nbmake-evbarm DEFCOPTS='-O0' udl.o, then:
 
 Program received signal SIGINT, Interrupt.
 0x800b7f68 in be32enc (dst=0xcb026002, u=0)
     at /.../src/sys/sys/endian.h:204
 204     __GEN_ENDIAN_ENC(32, be)
 (gdb) bt
 #0  0x800b7f68 in be32enc (dst=0xcb026002, u=0)
     at /.../src/sys/sys/endian.h:204
 #1  0x800b80c4 in udl_cmd_add_4 (sc=0xb68b1008, val=0)
     at /.../src/sys/dev/usb/udl.c:208
 #2  0x800ba908 in udl_fill_line (sc=0xb68b1008, rgb16=0, off=0, width=256)
     at /.../src/sys/dev/usb/udl.c:1335
     :
 
 (gdb) l
 199             u = hto ## endian ## bits (u); \
 200             __builtin_memcpy(dst, &u, sizeof(u)); \
 201     }
 202     
 203     __GEN_ENDIAN_ENC(16, be)
 204     __GEN_ENDIAN_ENC(32, be)
 205     __GEN_ENDIAN_ENC(64, be)
 206     __GEN_ENDIAN_ENC(16, le)
 207     __GEN_ENDIAN_ENC(32, le)
 208     __GEN_ENDIAN_ENC(64, le)
 
 
 Replace be32enc(), be16enc() to use !(GCC >= 2.95) version, then the device
 works good.
 Something wrong with __builtin_memcpy()? or compiler optimization?
 
 -mochid
 



Home | Main Index | Thread Index | Old Index