summaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@ppc970.osdl.org>2004-09-20 17:15:21 -0700
committerLinus Torvalds <torvalds@ppc970.osdl.org>2004-09-20 17:15:21 -0700
commit3e5ef0c6d466d994b662cbd5fb7444fb949b460b (patch)
tree42e62207bdeb272c2386280e49a6e20765aa95ee /arch
parentbefb173bdb23432483d90e58cc93ab77ab9e2b1d (diff)
parent3b59e61496f04539a50c83b6dc98e8c498aa033f (diff)
Merge bk://are.twiddle.net/axp-2.6/
into ppc970.osdl.org:/home/torvalds/v2.6/linux
Diffstat (limited to 'arch')
-rw-r--r--arch/alpha/kernel/osf_sys.c8
-rw-r--r--arch/alpha/kernel/ptrace.c19
-rw-r--r--arch/alpha/kernel/signal.c6
-rw-r--r--arch/alpha/kernel/srmcons.c12
4 files changed, 26 insertions, 19 deletions
diff --git a/arch/alpha/kernel/osf_sys.c b/arch/alpha/kernel/osf_sys.c
index 6de06dda20a7..66d4d081df86 100644
--- a/arch/alpha/kernel/osf_sys.c
+++ b/arch/alpha/kernel/osf_sys.c
@@ -91,8 +91,8 @@ osf_set_program_attributes(unsigned long text_start, unsigned long text_len,
* braindamage (it can't really handle filesystems where the directory
* offset differences aren't the same as "d_reclen").
*/
-#define NAME_OFFSET(de) ((int) ((de)->d_name - (char __user *) (de)))
-#define ROUND_UP(x) (((x)+3) & ~3)
+#define NAME_OFFSET offsetof (struct osf_dirent, d_name)
+#define ROUND_UP(x) (((x)+3) & ~3)
struct osf_dirent {
unsigned int d_ino;
@@ -114,7 +114,7 @@ osf_filldir(void *__buf, const char *name, int namlen, loff_t offset,
{
struct osf_dirent __user *dirent;
struct osf_dirent_callback *buf = (struct osf_dirent_callback *) __buf;
- unsigned int reclen = ROUND_UP(NAME_OFFSET(dirent) + namlen + 1);
+ unsigned int reclen = ROUND_UP(NAME_OFFSET + namlen + 1);
buf->error = -EINVAL; /* only used if we fail */
if (reclen > buf->count)
@@ -989,7 +989,7 @@ osf_select(int n, fd_set __user *inp, fd_set __user *outp, fd_set __user *exp,
fd_set_bits fds;
char *bits;
size_t size;
- unsigned long timeout;
+ long timeout;
int ret;
timeout = MAX_SCHEDULE_TIMEOUT;
diff --git a/arch/alpha/kernel/ptrace.c b/arch/alpha/kernel/ptrace.c
index aa654cc85369..9c21fbd4f34f 100644
--- a/arch/alpha/kernel/ptrace.c
+++ b/arch/alpha/kernel/ptrace.c
@@ -91,15 +91,15 @@ static int regoff[] = {
PT_REG( pc)
};
-static long zero;
+static unsigned long zero;
/*
* Get address of register REGNO in task TASK.
*/
-static long *
+static unsigned long *
get_reg_addr(struct task_struct * task, unsigned long regno)
{
- long *addr;
+ unsigned long *addr;
if (regno == 30) {
addr = &task->thread_info->pcb.usp;
@@ -109,7 +109,7 @@ get_reg_addr(struct task_struct * task, unsigned long regno)
zero = 0;
addr = &zero;
} else {
- addr = (long *)((long)task->thread_info + regoff[regno]);
+ addr = (void *)task->thread_info + regoff[regno];
}
return addr;
}
@@ -117,7 +117,7 @@ get_reg_addr(struct task_struct * task, unsigned long regno)
/*
* Get contents of register REGNO in task TASK.
*/
-static long
+static unsigned long
get_reg(struct task_struct * task, unsigned long regno)
{
/* Special hack for fpcr -- combine hardware and software bits. */
@@ -135,7 +135,7 @@ get_reg(struct task_struct * task, unsigned long regno)
* Write contents of register REGNO in task TASK.
*/
static int
-put_reg(struct task_struct *task, unsigned long regno, long data)
+put_reg(struct task_struct *task, unsigned long regno, unsigned long data)
{
if (regno == 63) {
task->thread_info->ieee_state
@@ -168,11 +168,11 @@ int
ptrace_set_bpt(struct task_struct * child)
{
int displ, i, res, reg_b, nsaved = 0;
- u32 insn, op_code;
+ unsigned int insn, op_code;
unsigned long pc;
pc = get_reg(child, REG_PC);
- res = read_int(child, pc, &insn);
+ res = read_int(child, pc, (int *) &insn);
if (res < 0)
return res;
@@ -203,7 +203,8 @@ ptrace_set_bpt(struct task_struct * child)
/* install breakpoints: */
for (i = 0; i < nsaved; ++i) {
- res = read_int(child, child->thread_info->bpt_addr[i], &insn);
+ res = read_int(child, child->thread_info->bpt_addr[i],
+ (int *) &insn);
if (res < 0)
return res;
child->thread_info->bpt_insn[i] = insn;
diff --git a/arch/alpha/kernel/signal.c b/arch/alpha/kernel/signal.c
index 202714c53b6e..94ff1b330ce4 100644
--- a/arch/alpha/kernel/signal.c
+++ b/arch/alpha/kernel/signal.c
@@ -228,6 +228,12 @@ struct rt_sigframe
unsigned int retcode[3];
};
+/* If this changes, userland unwinders that Know Things about our signal
+ frame will break. Do not undertake lightly. It also implies an ABI
+ change wrt the size of siginfo_t, which may cause some pain. */
+extern char compile_time_assert
+ [offsetof(struct rt_sigframe, uc.uc_mcontext) == 176 ? 1 : -1];
+
#define INSN_MOV_R30_R16 0x47fe0410
#define INSN_LDI_R0 0x201f0000
#define INSN_CALLSYS 0x00000083
diff --git a/arch/alpha/kernel/srmcons.c b/arch/alpha/kernel/srmcons.c
index 1a9b4c645935..48f408a3bb10 100644
--- a/arch/alpha/kernel/srmcons.c
+++ b/arch/alpha/kernel/srmcons.c
@@ -91,15 +91,15 @@ srmcons_receive_chars(unsigned long data)
/* called with callback_lock held */
static int
-srmcons_do_write(struct tty_struct *tty, const unsigned char *buf, int count)
+srmcons_do_write(struct tty_struct *tty, const char *buf, int count)
{
- unsigned char *str_cr = "\r";
+ static char str_cr[1] = "\r";
long c, remaining = count;
srmcons_result result;
- unsigned char *cur;
+ char *cur;
int need_cr;
- for (cur = (unsigned char *)buf; remaining > 0; ) {
+ for (cur = (char *)buf; remaining > 0; ) {
need_cr = 0;
/*
* Break it up into reasonable size chunks to allow a chance
@@ -138,7 +138,7 @@ srmcons_write(struct tty_struct *tty, int from_user,
unsigned long flags;
if (from_user) {
- unsigned char tmp[512];
+ char tmp[512];
int ret = 0;
size_t c;
@@ -167,7 +167,7 @@ srmcons_write(struct tty_struct *tty, int from_user,
}
spin_lock_irqsave(&srmcons_callback_lock, flags);
- srmcons_do_write(tty, buf, count);
+ srmcons_do_write(tty, (const char *) buf, count);
spin_unlock_irqrestore(&srmcons_callback_lock, flags);
return count;