Merge remote-tracking branch 'riku/linux-user-for-upstream' into staging
* riku/linux-user-for-upstream: linux-user: Remove regs parameter of load_elf_binary and load_flt_binary linux-user: Support the accept4 socketcall Message-id: 1389364137-23287-1-git-send-email-riku.voipio@linaro.org Signed-off-by: Anthony Liguori <aliguori@amazon.com>
This commit is contained in:
commit
205b6b6175
@ -1998,8 +1998,7 @@ give_up:
|
||||
free(syms);
|
||||
}
|
||||
|
||||
int load_elf_binary(struct linux_binprm * bprm, struct target_pt_regs * regs,
|
||||
struct image_info * info)
|
||||
int load_elf_binary(struct linux_binprm *bprm, struct image_info *info)
|
||||
{
|
||||
struct image_info interp_info;
|
||||
struct elfhdr elf_ex;
|
||||
|
@ -704,8 +704,7 @@ static int load_flat_shared_library(int id, struct lib_info *libs)
|
||||
|
||||
#endif /* CONFIG_BINFMT_SHARED_FLAT */
|
||||
|
||||
int load_flt_binary(struct linux_binprm * bprm, struct target_pt_regs * regs,
|
||||
struct image_info * info)
|
||||
int load_flt_binary(struct linux_binprm *bprm, struct image_info *info)
|
||||
{
|
||||
struct lib_info libinfo[MAX_SHARED_LIBS];
|
||||
abi_ulong p = bprm->p;
|
||||
|
@ -154,13 +154,13 @@ int loader_exec(int fdexec, const char *filename, char **argv, char **envp,
|
||||
&& bprm->buf[1] == 'E'
|
||||
&& bprm->buf[2] == 'L'
|
||||
&& bprm->buf[3] == 'F') {
|
||||
retval = load_elf_binary(bprm, regs, infop);
|
||||
retval = load_elf_binary(bprm, infop);
|
||||
#if defined(TARGET_HAS_BFLT)
|
||||
} else if (bprm->buf[0] == 'b'
|
||||
&& bprm->buf[1] == 'F'
|
||||
&& bprm->buf[2] == 'L'
|
||||
&& bprm->buf[3] == 'T') {
|
||||
retval = load_flt_binary(bprm,regs,infop);
|
||||
retval = load_flt_binary(bprm, infop);
|
||||
#endif
|
||||
} else {
|
||||
return -ENOEXEC;
|
||||
|
@ -178,10 +178,8 @@ int loader_exec(int fdexec, const char *filename, char **argv, char **envp,
|
||||
struct target_pt_regs * regs, struct image_info *infop,
|
||||
struct linux_binprm *);
|
||||
|
||||
int load_elf_binary(struct linux_binprm * bprm, struct target_pt_regs * regs,
|
||||
struct image_info * info);
|
||||
int load_flt_binary(struct linux_binprm * bprm, struct target_pt_regs * regs,
|
||||
struct image_info * info);
|
||||
int load_elf_binary(struct linux_binprm *bprm, struct image_info *info);
|
||||
int load_flt_binary(struct linux_binprm *bprm, struct image_info *info);
|
||||
|
||||
abi_long memcpy_to_target(abi_ulong dest, const void *src,
|
||||
unsigned long len);
|
||||
|
@ -2245,6 +2245,22 @@ static abi_long do_socketcall(int num, abi_ulong vptr)
|
||||
ret = do_accept4(sockfd, target_addr, target_addrlen, 0);
|
||||
}
|
||||
break;
|
||||
case SOCKOP_accept4:
|
||||
{
|
||||
abi_ulong sockfd;
|
||||
abi_ulong target_addr, target_addrlen;
|
||||
abi_ulong flags;
|
||||
|
||||
if (get_user_ual(sockfd, vptr)
|
||||
|| get_user_ual(target_addr, vptr + n)
|
||||
|| get_user_ual(target_addrlen, vptr + 2 * n)
|
||||
|| get_user_ual(flags, vptr + 3 * n)) {
|
||||
return -TARGET_EFAULT;
|
||||
}
|
||||
|
||||
ret = do_accept4(sockfd, target_addr, target_addrlen, flags);
|
||||
}
|
||||
break;
|
||||
case SOCKOP_getsockname:
|
||||
{
|
||||
abi_ulong sockfd;
|
||||
|
@ -27,6 +27,7 @@
|
||||
#define SOCKOP_getsockopt 15
|
||||
#define SOCKOP_sendmsg 16
|
||||
#define SOCKOP_recvmsg 17
|
||||
#define SOCKOP_accept4 18
|
||||
|
||||
#define IPCOP_semop 1
|
||||
#define IPCOP_semget 2
|
||||
|
Loading…
Reference in New Issue
Block a user