diff options
author | Ralf Baechle <ralf@linux-mips.org> | 1997-09-12 01:29:55 +0000 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 1997-09-12 01:29:55 +0000 |
commit | 545f435ebcfd94a1e7c20b46efe81b4d6ac4e698 (patch) | |
tree | e9ce4bc598d06374bda906f18365984bf22a526a /include/asm-sparc | |
parent | 4291a610eef89d0d5c69d9a10ee6560e1aa36c74 (diff) |
Merge with Linux 2.1.55. More bugfixes and goodies from my private
CVS archive.
Diffstat (limited to 'include/asm-sparc')
-rw-r--r-- | include/asm-sparc/elf.h | 9 | ||||
-rw-r--r-- | include/asm-sparc/namei.h | 65 | ||||
-rw-r--r-- | include/asm-sparc/pgtable.h | 3 |
3 files changed, 42 insertions, 35 deletions
diff --git a/include/asm-sparc/elf.h b/include/asm-sparc/elf.h index 46cd67f37..326d7d8e9 100644 --- a/include/asm-sparc/elf.h +++ b/include/asm-sparc/elf.h @@ -1,4 +1,4 @@ -/* $Id: elf.h,v 1.5 1996/08/08 00:06:13 ecd Exp $ */ +/* $Id: elf.h,v 1.7 1997/08/29 17:04:34 richard Exp $ */ #ifndef __ASMSPARC_ELF_H #define __ASMSPARC_ELF_H @@ -30,5 +30,12 @@ typedef unsigned long elf_fpregset_t; #define USE_ELF_CORE_DUMP #define ELF_EXEC_PAGESIZE 4096 +/* This is the location that an ET_DYN program is loaded if exec'ed. Typical + use of this is to invoke "./ld.so someprog" to test out a new version of + the loader. We need to make sure that it is out of the way of the program + that it will "exec", and that there is sufficient room for the brk. */ + +#define ELF_ET_DYN_BASE (TASK_UNMAPPED_BASE + 0x1000000) + #endif /* !(__ASMSPARC_ELF_H) */ diff --git a/include/asm-sparc/namei.h b/include/asm-sparc/namei.h index 8ce53ae35..d8f559440 100644 --- a/include/asm-sparc/namei.h +++ b/include/asm-sparc/namei.h @@ -1,4 +1,4 @@ -/* $Id: namei.h,v 1.6 1997/07/17 02:24:25 davem Exp $ +/* $Id: namei.h,v 1.8 1997/09/05 12:38:51 jj Exp $ * linux/include/asm-sparc/namei.h * * Routines to handle famous /usr/gnemul/s*. @@ -11,41 +11,40 @@ #define SPARC_BSD_EMUL "usr/gnemul/sunos/" #define SPARC_SOL_EMUL "usr/gnemul/solaris/" -#if 0 /* XXX FIXME */ - -extern int __namei(int, const char *, struct inode *, char *, struct inode **, - struct inode **, struct qstr *, struct dentry **, int *); - -static __inline__ int -__prefix_namei(int retrieve_mode, const char * name, struct inode * base, - char * buf, struct inode ** res_dir, struct inode ** res_inode, - struct qstr * last_name, struct dentry ** last_entry, - int * last_error) +static inline struct dentry * +__sparc_lookup_dentry(const char *name, int follow_link) { int error; - - if (!(current->personality & (PER_BSD|PER_SVR4))) - return -ENOENT; - - while (*name == '/') - name++; - - atomic_inc(¤t->fs->root->i_count); - error = __namei(NAM_FOLLOW_LINK, - current->personality & PER_BSD ? - SPARC_BSD_EMUL : SPARC_SOL_EMUL, current->fs->root, - buf, NULL, &base, NULL, NULL, NULL); - if (error) - return error; - - error = __namei(retrieve_mode, name, base, buf, res_dir, res_inode, - last_name, last_entry, last_error); - if (error) - return error; - - return 0; + struct dentry *base; + + switch (current->personality) { + case PER_BSD: + case PER_SVR4: + break; + default: + return ERR_PTR(-ENOENT); + } + + base = lookup_dentry ((current->personality == PER_BSD) ? + SPARC_BSD_EMUL : SPARC_SOL_EMUL, + dget (current->fs->root), 1); + + if (IS_ERR (base)) return base; + + base = lookup_dentry (name, base, follow_link); + + if (IS_ERR (base)) return base; + + if (!base->d_inode) { + dput(base); + return ERR_PTR(-ENOENT); + } + + return base; } -#endif /* XXX FIXME */ +#define __prefix_lookup_dentry(name, follow_link) \ + dentry = __sparc_lookup_dentry (name, follow_link); \ + if (!IS_ERR (dentry)) return dentry; #endif /* __SPARC_NAMEI_H */ diff --git a/include/asm-sparc/pgtable.h b/include/asm-sparc/pgtable.h index de8ce5687..dd6428edf 100644 --- a/include/asm-sparc/pgtable.h +++ b/include/asm-sparc/pgtable.h @@ -1,4 +1,4 @@ -/* $Id: pgtable.h,v 1.62 1997/06/27 14:55:00 jj Exp $ */ +/* $Id: pgtable.h,v 1.63 1997/08/13 04:44:15 paulus Exp $ */ #ifndef _SPARC_PGTABLE_H #define _SPARC_PGTABLE_H @@ -298,6 +298,7 @@ extern void (*flush_cache_mm)(struct mm_struct *); extern void (*flush_cache_range)(struct mm_struct *, unsigned long start, unsigned long end); extern void (*flush_cache_page)(struct vm_area_struct *, unsigned long address); +#define flush_icache_range(start, end) do { } while (0) extern void (*flush_tlb_all)(void); extern void (*flush_tlb_mm)(struct mm_struct *); |