1 /* 2 * flat.h -- uClinux flat-format executables 3 */ 4 5 #ifndef __M68KNOMMU_FLAT_H__ 6 #define __M68KNOMMU_FLAT_H__ 7 8 #include <linux/uaccess.h> 9 10 #define flat_argvp_envp_on_stack() 1 11 #define flat_old_ram_flag(flags) (flags) 12 #define flat_reloc_valid(reloc, size) ((reloc) <= (size)) 13 static inline int flat_get_addr_from_rp(u32 __user *rp, u32 relval, u32 flags, 14 u32 *addr, u32 *persistent) 15 { 16 #ifdef CONFIG_CPU_HAS_NO_UNALIGNED 17 return copy_from_user(addr, rp, 4) ? -EFAULT : 0; 18 #else 19 return get_user(*addr, rp); 20 #endif 21 } 22 23 static inline int flat_put_addr_at_rp(u32 __user *rp, u32 addr, u32 rel) 24 { 25 #ifdef CONFIG_CPU_HAS_NO_UNALIGNED 26 return copy_to_user(rp, &addr, 4) ? -EFAULT : 0; 27 #else 28 return put_user(addr, rp); 29 #endif 30 } 31 #define flat_get_relocate_addr(rel) (rel) 32 33 static inline int flat_set_persistent(u32 relval, u32 *persistent) 34 { 35 return 0; 36 } 37 38 #define FLAT_PLAT_INIT(regs) \ 39 do { \ 40 if (current->mm) \ 41 (regs)->d5 = current->mm->start_data; \ 42 } while (0) 43 44 #endif /* __M68KNOMMU_FLAT_H__ */ 45