Files
mckernel/test/sve/src/common.c
Shiratori, Takehiro 7da5fede8b Test "Scalable Vector Extension (SVE) support." on arm64
Change-Id: I3abaca932985a06b06887b962e769f2eac96c738
2019-02-27 06:26:00 +00:00

84 lines
1.4 KiB
C

/* common.c COPYRIGHT FUJITSU LIMITED 2017-2019 */
#include <sys/types.h>
#include <sys/wait.h>
#include <stdio.h>
#include <sys/ptrace.h>
#include <errno.h>
#include "common.h"
int wait_child_stop(pid_t cpid)
{
int status = 0;
int ret = -1;
pid_t pid = 0;
/* wait child stop */
pid = wait(&status);
if (pid == cpid) {
if (!WIFSTOPPED(status)) {
printf("child is not stopped.\n");
goto out;
}
} else {
perror("wait()");
goto out;
}
ret = 0;
out:
return ret;
}
int wait_child_exit(pid_t cpid)
{
int status = 0;
int ret = -1;
pid_t pid = 0;
pid = wait(&status);
if (pid == cpid) {
if (WIFEXITED(status)) {
if (WEXITSTATUS(status)) {
goto out;
}
} else {
printf("child-process unfinished.\n");
goto out;
}
} else if (pid == -1) {
perror("wait()");
goto out;
} else {
printf("wait() return invalid pid.\n");
goto out;
}
ret = 0;
out:
return ret;
}
int rewrite_brk_inst(pid_t cpid, void *inst_addr)
{
unsigned long addr = 0;
const unsigned long inst = ((NOP_INST << 32UL) | NOP_INST);
/* read child brk address */
addr = ptrace(PTRACE_PEEKDATA, cpid, inst_addr, NULL);
if ((addr == -1) && errno) {
perror("ptrace(PTRACE_PEEKDATA)");
return -1;
}
/* write nop instruction */
if (ptrace(PTRACE_POKETEXT, cpid, addr, inst)) {
perror("ptrace(PTRACE_POKETEXT)");
return -1;
}
return 0;
}
void print_test_overview(int tp_num)
{
printf("# %2d : %s\n", tp_num, usage_messages[tp_num]);
}