svn commit: r263214 - in head/sys: compat/freebsd32 kern sys
John-Mark Gurney
jmg at FreeBSD.org
Sun Mar 16 00:53:42 UTC 2014
Author: jmg
Date: Sun Mar 16 00:53:40 2014
New Revision: 263214
URL: http://svnweb.freebsd.org/changeset/base/263214
Log:
change td_retval into a union w/ off_t, with defines to mask the
change... This eliminates a cast, and also forces td_retval
(often 2 32-bit registers) to be aligned so that off_t's can be
stored there on arches with strict alignment requirements like
armeb (AVILA)... On i386, this doesn't change alignment, and on
amd64 it doesn't either, as register_t is already 64bits...
This will also prevent future breakage due to people adding additional
fields to the struct...
This gets AVILA booting a bit farther...
Reviewed by: bde
Modified:
head/sys/compat/freebsd32/freebsd32_misc.c
head/sys/kern/uipc_shm.c
head/sys/kern/vfs_vnops.c
head/sys/sys/proc.h
Modified: head/sys/compat/freebsd32/freebsd32_misc.c
==============================================================================
--- head/sys/compat/freebsd32/freebsd32_misc.c Sun Mar 16 00:22:07 2014 (r263213)
+++ head/sys/compat/freebsd32/freebsd32_misc.c Sun Mar 16 00:53:40 2014 (r263214)
@@ -1504,7 +1504,7 @@ freebsd32_lseek(struct thread *td, struc
ap.whence = uap->whence;
error = sys_lseek(td, &ap);
/* Expand the quad return into two parts for eax and edx */
- pos = *(off_t *)(td->td_retval);
+ pos = td->td_uretoff.tdu_off;
td->td_retval[RETVAL_LO] = pos & 0xffffffff; /* %eax */
td->td_retval[RETVAL_HI] = pos >> 32; /* %edx */
return error;
Modified: head/sys/kern/uipc_shm.c
==============================================================================
--- head/sys/kern/uipc_shm.c Sun Mar 16 00:22:07 2014 (r263213)
+++ head/sys/kern/uipc_shm.c Sun Mar 16 00:53:40 2014 (r263214)
@@ -270,7 +270,7 @@ shm_seek(struct file *fp, off_t offset,
if (offset < 0 || offset > shmfd->shm_size)
error = EINVAL;
else
- *(off_t *)(td->td_retval) = offset;
+ td->td_uretoff.tdu_off = offset;
}
foffset_unlock(fp, offset, error != 0 ? FOF_NOUPDATE : 0);
return (error);
Modified: head/sys/kern/vfs_vnops.c
==============================================================================
--- head/sys/kern/vfs_vnops.c Sun Mar 16 00:22:07 2014 (r263213)
+++ head/sys/kern/vfs_vnops.c Sun Mar 16 00:53:40 2014 (r263214)
@@ -2080,7 +2080,7 @@ vn_seek(struct file *fp, off_t offset, i
if (error != 0)
goto drop;
VFS_KNOTE_UNLOCKED(vp, 0);
- *(off_t *)(td->td_retval) = offset;
+ td->td_uretoff.tdu_off = offset;
drop:
foffset_unlock(fp, offset, error != 0 ? FOF_NOUPDATE : 0);
return (error);
Modified: head/sys/sys/proc.h
==============================================================================
--- head/sys/sys/proc.h Sun Mar 16 00:22:07 2014 (r263213)
+++ head/sys/sys/proc.h Sun Mar 16 00:53:40 2014 (r263214)
@@ -300,7 +300,11 @@ struct thread {
TDS_RUNQ,
TDS_RUNNING
} td_state; /* (t) thread state */
- register_t td_retval[2]; /* (k) Syscall aux returns. */
+ union {
+ register_t tdu_retval[2];
+ off_t tdu_off;
+ } td_uretoff; /* (k) Syscall aux returns. */
+#define td_retval td_uretoff.tdu_retval
struct callout td_slpcallout; /* (h) Callout for sleep. */
struct trapframe *td_frame; /* (k) */
struct vm_object *td_kstack_obj;/* (a) Kstack object. */
More information about the svn-src-head
mailing list