* Re: [Linux-ia64] The 1117 snapshot alignment bug
2001-01-11 21:26 [Linux-ia64] The 1117 snapshot alignment bug H . J . Lu
@ 2001-01-11 22:02 ` H . J . Lu
2001-01-12 2:13 ` Jim Wilson
1 sibling, 0 replies; 3+ messages in thread
From: H . J . Lu @ 2001-01-11 22:02 UTC (permalink / raw)
To: linux-ia64
On Thu, Jan 11, 2001 at 01:26:01PM -0800, H . J . Lu wrote:
> I got a kernel unaligned access bug:
>
> The problem is
>
> struct bar x = { b->f4, 0, {0, 0} };
>
> gcc uses
>
> st8 [rX] = r0
>
> for {0, 0}. But st8 requires 8 byte aligment while
>
> unsigned int f6 [2];
>
> has 4 byte aligment.
>
> BTW, nfs3_proc_create in fs/nfs/nfs3proc.c got miscompiled.
>
Here is a workaround for the compiler bug.
---
--- linux/fs/nfs/nfs3proc.c.align Thu Jan 11 13:27:25 2001
+++ linux/fs/nfs/nfs3proc.c Thu Jan 11 13:40:59 2001
@@ -190,11 +190,17 @@ nfs3_proc_create(struct inode *dir, stru
int flags, struct nfs_fh *fhandle, struct nfs_fattr *fattr)
{
struct nfs_fattr dir_attr;
- struct nfs3_createargs arg = { NFS_FH(dir), name->name, name->len,
- sattr, 0, { 0, 0 } };
+ struct nfs3_createargs arg;
struct nfs3_diropres res = { &dir_attr, fhandle, fattr };
int status;
+ arg.fh = NFS_FH(dir);
+ arg.name = name->name;
+ arg.len = name->len,
+ arg.sattr = sattr;
+ arg.createmode = 0;
+ arg.verifier [0] = 0;
+ arg.verifier [1] = 0;
dprintk("NFS call create %s\n", name->name);
arg.createmode = NFS3_CREATE_UNCHECKED;
if (flags & O_EXCL) {
@@ -362,10 +368,17 @@ nfs3_proc_mkdir(struct inode *dir, struc
struct nfs_fh *fhandle, struct nfs_fattr *fattr)
{
struct nfs_fattr dir_attr;
- struct nfs3_createargs arg = { NFS_FH(dir), name->name, name->len,
- sattr, 0, { 0, 0 } };
+ struct nfs3_createargs arg;
struct nfs3_diropres res = { &dir_attr, fhandle, fattr };
int status;
+
+ arg.fh = NFS_FH(dir);
+ arg.name = name->name;
+ arg.len = name->len,
+ arg.sattr = sattr;
+ arg.createmode = 0;
+ arg.verifier [0] = 0;
+ arg.verifier [1] = 0;
dprintk("NFS call mkdir %s\n", name->name);
dir_attr.valid = 0;
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [Linux-ia64] The 1117 snapshot alignment bug
2001-01-11 21:26 [Linux-ia64] The 1117 snapshot alignment bug H . J . Lu
2001-01-11 22:02 ` H . J . Lu
@ 2001-01-12 2:13 ` Jim Wilson
1 sibling, 0 replies; 3+ messages in thread
From: Jim Wilson @ 2001-01-12 2:13 UTC (permalink / raw)
To: linux-ia64
Yes, it is a compiler bug. It is a generic problem effecting all targets,
though it is more noticable for 64-bit machines. Not clear when it was
introduced, I didn't want to spend that much time looking at the problem.
The bug was independently found and fixed by Richard Kenner last week.
Tue Jan 2 10:47:38 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.
* expr.c (store_constructor_field): Update ALIGN before calling
store_constructor.
Index: expr.c
=================================RCS file: /cvs/cvsfiles/devo/gcc/expr.c,v
retrieving revision 1.425.2.2
diff -p -r1.425.2.2 expr.c
*** expr.c 2000/08/14 20:10:41 1.425.2.2
--- expr.c 2001/01/12 02:04:27
*************** store_constructor_field (target, bitsize
*** 4224,4229 ****
--- 4224,4233 ----
? BLKmode : VOIDmode,
plus_constant (XEXP (target, 0),
bitpos / BITS_PER_UNIT));
+
+ if (bitpos != 0)
+ align = MIN (align, bitpos & - bitpos);
+
store_constructor (exp, target, align, cleared, bitsize / BITS_PER_UNIT);
}
else
^ permalink raw reply [flat|nested] 3+ messages in thread