abi_ulong end_code;
abi_ulong start_data;
abi_ulong end_data;
- abi_ulong start_brk;
abi_ulong brk;
- abi_ulong reserve_brk;
- abi_ulong start_mmap;
abi_ulong start_stack;
abi_ulong stack_limit;
+ abi_ulong vdso;
abi_ulong entry;
abi_ulong code_offset;
abi_ulong data_offset;
abi_ulong saved_auxv;
abi_ulong auxv_len;
- abi_ulong arg_start;
- abi_ulong arg_end;
- abi_ulong arg_strings;
- abi_ulong env_strings;
+ abi_ulong argc;
+ abi_ulong argv;
+ abi_ulong envc;
+ abi_ulong envp;
abi_ulong file_string;
uint32_t elf_flags;
int personality;
abi_ulong alignment;
+ bool exec_stack;
+
+ /* Generic semihosting knows about these pointers. */
+ abi_ulong arg_strings; /* strings for argv */
+ abi_ulong env_strings; /* strings for envp; ends arg_strings */
/* The fields below are used in FDPIC mode. */
abi_ulong loadmap_addr;
} TaskState;
abi_long do_brk(abi_ulong new_brk);
+int do_guest_openat(CPUArchState *cpu_env, int dirfd, const char *pathname,
+ int flags, mode_t mode, bool safe);
+ssize_t do_guest_readlink(const char *pathname, char *buf, size_t bufsiz);
/* user access */
+#define VERIFY_NONE 0
#define VERIFY_READ PAGE_READ
#define VERIFY_WRITE (PAGE_READ | PAGE_WRITE)
: !guest_range_valid_untagged(addr, size)) {
return false;
}
- return page_check_range((target_ulong)addr, size, type) == 0;
+ return page_check_range((target_ulong)addr, size, type);
}
static inline bool access_ok(CPUState *cpu, int type,