Commit 0b959cf5 authored by Richard Henderson's avatar Richard Henderson
Browse files

linux-user: Use qemu_getauxval for AT_EXECFD

parent 664d2c44
Loading
Loading
Loading
Loading
+6 −26
Original line number Diff line number Diff line
@@ -3663,26 +3663,6 @@ static int parse_args(int argc, char **argv)
    return optind;
}

static int get_execfd(char **envp)
{
    typedef struct {
        long a_type;
        long a_val;
    } auxv_t;
    auxv_t *auxv;

    while (*envp++ != NULL) {
        ;
    }

    for (auxv = (auxv_t *)envp; auxv->a_type != AT_NULL; auxv++) {
        if (auxv->a_type == AT_EXECFD) {
            return auxv->a_val;
        }
    }
    return -1;
}

int main(int argc, char **argv, char **envp)
{
    struct target_pt_regs regs1, *regs = &regs1;
@@ -3876,14 +3856,14 @@ int main(int argc, char **argv, char **envp)
    env->opaque = ts;
    task_settid(ts);

    execfd = get_execfd(envp);
    if (execfd < 0) {
    execfd = qemu_getauxval(AT_EXECFD);
    if (execfd == 0) {
        execfd = open(filename, O_RDONLY);
    }
        if (execfd < 0) {
        printf("Error while loading %s: %s\n", filename, strerror(-execfd));
            printf("Error while loading %s: %s\n", filename, strerror(errno));
            _exit(1);
        }
    }

    ret = loader_exec(execfd, filename, target_argv, target_environ, regs,
        info, &bprm);