Re: Unaligned access fault in fxp on alpha

From: Andrew Gallatin <gallatin_at_cs.duke.edu>
Date: Fri, 9 May 2003 15:29:39 -0400 (EDT)
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