Kris Kennaway writes: > I reported this to mux 3 days ago, but haven't heard any > acknowledgement from him of the issue. Could someone else > investigate? This is a reproducible panic. > Can you try this patch please? It causes gcc to emit slightly different code, which deals with storing to aligned 16-bit values. What's happening is that because the u_int32_t link_addr (and rbd_addr) fields preceded the "size" field, gcc was assuming that the rfa struct would be aligned and was cheating. It was using operations which only work on aligned-32 bit values on 16-bit values. Removing the u_int32_t's disabuses gcc of this assumption, therby causing safe code to be emitted. I don't understand why mux changed these fields in rev 1.31, with, so I'm not sure that I want to commit this until mux reviews it. For all I know, it breaks sparc64 or something.. Drew Index: dev/fxp/if_fxpreg.h =================================================================== RCS file: /home/ncvs/src/sys/dev/fxp/if_fxpreg.h,v retrieving revision 1.33 diff -u -r1.33 if_fxpreg.h --- dev/fxp/if_fxpreg.h 6 Apr 2003 21:35:45 -0000 1.33 +++ dev/fxp/if_fxpreg.h 9 May 2003 18:55:10 -0000 _at__at_ -346,8 +346,8 _at__at_ struct fxp_rfa { u_int16_t rfa_status; u_int16_t rfa_control; - u_int32_t link_addr; - u_int32_t rbd_addr; + u_int8_t link_addr[4]; + u_int8_t rbd_addr[4]; u_int16_t actual_size; u_int16_t size;Received on Fri May 09 2003 - 10:29:46 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:37:07 UTC