diff options
author | Ralf Baechle <ralf@linux-mips.org> | 1994-12-01 08:00:00 +0000 |
---|---|---|
committer | <ralf@linux-mips.org> | 1994-12-01 08:00:00 +0000 |
commit | 90ecc248e200fee448001248dde0ca540dd3ef64 (patch) | |
tree | a3fe89494ce63b4835f0f9cf5c45e74cde88252b /fs | |
parent | 1513ff9b7899ab588401c89db0e99903dbf5f886 (diff) |
Import of Linux/MIPS 1.1.68
Diffstat (limited to 'fs')
-rw-r--r-- | fs/binfmt_elf.c | 5 | ||||
-rw-r--r-- | fs/buffer.c | 2 | ||||
-rw-r--r-- | fs/exec.c | 30 | ||||
-rw-r--r-- | fs/ext2/inode.c | 2 | ||||
-rw-r--r-- | fs/minix/bitmap.c | 4 | ||||
-rw-r--r-- | fs/minix/namei.c | 4 | ||||
-rw-r--r-- | fs/namei.c | 14 | ||||
-rw-r--r-- | fs/xiafs/bitmap.c | 2 |
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]); } } @@ -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, ®s); + error = do_execve(filename, (char **) regs.reg4, (char **) regs.reg5, ®s); 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; } |