summaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorRalf Baechle <ralf@linux-mips.org>1994-12-01 08:00:00 +0000
committer <ralf@linux-mips.org>1994-12-01 08:00:00 +0000
commit90ecc248e200fee448001248dde0ca540dd3ef64 (patch)
treea3fe89494ce63b4835f0f9cf5c45e74cde88252b /fs
parent1513ff9b7899ab588401c89db0e99903dbf5f886 (diff)
Import of Linux/MIPS 1.1.68
Diffstat (limited to 'fs')
-rw-r--r--fs/binfmt_elf.c5
-rw-r--r--fs/buffer.c2
-rw-r--r--fs/exec.c30
-rw-r--r--fs/ext2/inode.c2
-rw-r--r--fs/minix/bitmap.c4
-rw-r--r--fs/minix/namei.c4
-rw-r--r--fs/namei.c14
-rw-r--r--fs/xiafs/bitmap.c2
8 files changed, 55 insertions, 8 deletions
diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c
index c2dc5cbca..fd5e41cdc 100644
--- a/fs/binfmt_elf.c
+++ b/fs/binfmt_elf.c
@@ -638,8 +638,13 @@ load_elf_binary(struct linux_binprm * bprm, struct pt_regs * regs)
error = do_mmap(NULL, 0, 4096, PROT_READ | PROT_EXEC,
MAP_FIXED | MAP_PRIVATE, 0);
+#if defined (__i386__)
regs->eip = elf_entry; /* eip, magic happens :-) */
regs->esp = bprm->p; /* stack pointer */
+#elif defined (__mips__)
+ regs->cp0_epc = elf_entry; /* eip, magic happens :-) */
+ regs->reg29 = bprm->p; /* stack pointer */
+#endif
if (current->flags & PF_PTRACED)
send_sig(SIGTRAP, current, 0);
#ifndef CONFIG_BINFMT_ELF
diff --git a/fs/buffer.c b/fs/buffer.c
index 6416a1f71..9ee47cee6 100644
--- a/fs/buffer.c
+++ b/fs/buffer.c
@@ -1134,7 +1134,7 @@ unsigned long bread_page(unsigned long address, dev_t dev, int b[], int size, in
for (i=0, j=0; j<PAGE_SIZE ; i++, j += size, where += size) {
if (bh[i]) {
if (bh[i]->b_uptodate)
- memcpy((void *) where, bh[i]->b_data, size);
+ memcpy((void *)where, bh[i]->b_data, size);
brelse(bh[i]);
}
}
diff --git a/fs/exec.c b/fs/exec.c
index 586098cd0..fe59a15ab 100644
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -209,7 +209,11 @@ static int aout_core_dump(long signr, struct pt_regs * regs)
/* changed the size calculations - should hopefully work better. lbt */
dump.magic = CMAGIC;
dump.start_code = 0;
+#if defined (__i386__)
dump.start_stack = regs->esp & ~(PAGE_SIZE - 1);
+#elif defined (__mips__)
+ dump.start_stack = regs->reg29 & ~(PAGE_SIZE - 1);
+#endif
dump.u_tsize = ((unsigned long) current->mm->end_code) >> 12;
dump.u_dsize = ((unsigned long) (current->mm->brk + (PAGE_SIZE-1))) >> 12;
dump.u_dsize -= dump.u_tsize;
@@ -230,6 +234,7 @@ static int aout_core_dump(long signr, struct pt_regs * regs)
dump.u_ar0 = (struct pt_regs *)(((int)(&dump.regs)) -((int)(&dump)));
dump.signal = signr;
dump.regs = *regs;
+#if defined (__i386__)
/* Flag indicating the math stuff is valid. We don't support this for the
soft-float routines yet */
if (hard_math) {
@@ -244,6 +249,12 @@ static int aout_core_dump(long signr, struct pt_regs * regs)
convert it into standard 387 format first.. */
dump.u_fpvalid = 0;
}
+#elif defined (__mips__)
+ /*
+ * Dump the MIPS fpa.
+ * FIXME: not implemented yet.
+ */
+#endif
set_fs(KERNEL_DS);
/* struct user */
DUMP_WRITE(&dump,sizeof(dump));
@@ -551,6 +562,7 @@ void flush_old_exec(struct linux_binprm * bprm)
mpnt = mpnt1;
}
+#if defined (__i386__)
/* Flush the old ldt stuff... */
if (current->ldt) {
free_page((unsigned long) current->ldt);
@@ -565,6 +577,11 @@ void flush_old_exec(struct linux_binprm * bprm)
}
for (i=0 ; i<8 ; i++) current->debugreg[i] = 0;
+#elif defined (__mips__)
+ /*
+ * Do MIPS specific magic
+ */
+#endif
if (bprm->e_uid != current->euid || bprm->e_gid != current->egid ||
!permission(bprm->inode,MAY_READ))
@@ -598,8 +615,10 @@ int do_execve(char * filename, char ** argv, char ** envp, struct pt_regs * regs
int retval;
int sh_bang = 0;
+#if defined (__i386__)
if (regs->cs != USER_CS)
return -EINVAL;
+#endif
bprm.p = PAGE_SIZE*MAX_ARG_PAGES-4;
for (i=0 ; i<MAX_ARG_PAGES ; i++) /* clear page-table */
bprm.page[i] = 0;
@@ -768,10 +787,14 @@ asmlinkage int sys_execve(struct pt_regs regs)
int error;
char * filename;
+#if defined (__i386__)
error = getname((char *) regs.ebx, &filename);
+#elif defined (__mips__)
+ error = getname((char *) regs.reg3, &filename);
+#endif
if (error)
return error;
- error = do_execve(filename, (char **) regs.ecx, (char **) regs.edx, &regs);
+ error = do_execve(filename, (char **) regs.reg4, (char **) regs.reg5, &regs);
putname(filename);
return error;
}
@@ -898,8 +921,13 @@ beyond_if:
bprm->argc, bprm->envc,
current->personality != PER_LINUX);
current->mm->start_stack = p;
+#if defined (__i386__)
regs->eip = ex.a_entry; /* eip, magic happens :-) */
regs->esp = p; /* stack pointer */
+#elif defined (__mips__)
+ regs->cp0_epc = ex.a_entry; /* eip, magic happens :-) */
+ regs->reg29 = p; /* stack pointer */
+#endif
if (current->flags & PF_PTRACED)
send_sig(SIGTRAP, current, 0);
return 0;
diff --git a/fs/ext2/inode.c b/fs/ext2/inode.c
index 633c33e4f..7a3c37b79 100644
--- a/fs/ext2/inode.c
+++ b/fs/ext2/inode.c
@@ -99,7 +99,7 @@ static int ext2_alloc_block (struct inode * inode, unsigned long goal)
"cannot get block %lu", result);
return 0;
}
- memset(bh->b_data, 0, inode->i_sb->s_blocksize);
+ memset (bh->b_data, 0, inode->i_sb->s_blocksize);
bh->b_uptodate = 1;
mark_buffer_dirty(bh, 1);
brelse (bh);
diff --git a/fs/minix/bitmap.c b/fs/minix/bitmap.c
index d42b86eea..64fe09f87 100644
--- a/fs/minix/bitmap.c
+++ b/fs/minix/bitmap.c
@@ -88,7 +88,7 @@ repeat:
j = 8192;
for (i=0 ; i<8 ; i++)
if ((bh=sb->u.minix_sb.s_zmap[i]) != NULL)
- if ((j=find_first_zero_bit(bh->b_data, 8192)) < 8192)
+ if ((j=find_first_zero_bit(bh->b_data,8192)) < 8192)
break;
if (i>=8 || !bh || j>=8192)
return 0;
@@ -171,7 +171,7 @@ struct inode * minix_new_inode(const struct inode * dir)
j = 8192;
for (i=0 ; i<8 ; i++)
if ((bh = inode->i_sb->u.minix_sb.s_imap[i]) != NULL)
- if ((j=find_first_zero_bit(bh->b_data, 8192)) < 8192)
+ if ((j=find_first_zero_bit(bh->b_data,8192)) < 8192)
break;
if (!bh || j >= 8192) {
iput(inode);
diff --git a/fs/minix/namei.c b/fs/minix/namei.c
index 8246e3ce7..dd60e4602 100644
--- a/fs/minix/namei.c
+++ b/fs/minix/namei.c
@@ -23,11 +23,11 @@
static inline int namecompare(int len, int maxlen,
const char * name, const char * buffer)
{
- if (len > maxlen)
+ if (len >= maxlen)
return 0;
if (len < maxlen && buffer[len])
return 0;
- return !memcmp(name, buffer, len);
+ return !memcmp(name,buffer,len);
}
/*
diff --git a/fs/namei.c b/fs/namei.c
index f5f8b5c14..e383dff93 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -37,13 +37,27 @@ static inline int get_max_filename(unsigned long address)
if (vma->vm_end > address)
break;
}
+#if defined (__i386__)
if (vma->vm_start > address || !(vma->vm_page_prot & PAGE_USER))
+#elif defined (__mips__)
+ if (vma->vm_start > address ||
+ vma->vm_start >= 0x80000000 || vma->vm_end >= 0x80000000)
+#else
+#error "Architecture not supported."
+#endif
return -EFAULT;
+
address = vma->vm_end - address;
if (address > PAGE_SIZE)
return 0;
if (vma->vm_next && vma->vm_next->vm_start == vma->vm_end &&
+#if defined (__i386__)
(vma->vm_next->vm_page_prot & PAGE_USER))
+#elif defined (__mips__)
+ (vma->vm_start >= 0x80000000 || vma->vm_end >= 0x80000000))
+#else
+#error "Architecture not supported."
+#endif
return 0;
return address;
}
diff --git a/fs/xiafs/bitmap.c b/fs/xiafs/bitmap.c
index 4dee5cfbb..ca93d1546 100644
--- a/fs/xiafs/bitmap.c
+++ b/fs/xiafs/bitmap.c
@@ -54,7 +54,7 @@ zone_found:
for (j=0; j < 32; j++)
if (tmp & (1 << j))
break;
- if (set_bit(j,bmap+i)) {
+ if (set_bit(j, bmap+i)) {
start_bit=j + (i << 5) + 1;
goto repeat;
}