Test "xpmem: support for fork()" on arm64
Change-Id: I12c628312157f35e239d3c5e67fa38adf156406b Refs #925
This commit is contained in:
committed by
Masamichi Takagi
parent
136b749349
commit
739472bd86
84
test/mng_mod/issues/925/arm64/CT_001.c
Normal file
84
test/mng_mod/issues/925/arm64/CT_001.c
Normal file
@ -0,0 +1,84 @@
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include <sys/mman.h>
|
||||
#include <string.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
#include <sys/wait.h>
|
||||
#include <sys/ipc.h>
|
||||
#include <sys/shm.h>
|
||||
#include <xpmem.h>
|
||||
|
||||
#define TEST_NAME "CT_001"
|
||||
#define CHKANDJUMP(cond, ...) \
|
||||
do { \
|
||||
if (cond) { \
|
||||
fprintf(stderr, " [NG] "); \
|
||||
fprintf(stderr, __VA_ARGS__); \
|
||||
fprintf(stderr, " failed\n"); \
|
||||
goto fn_fail; \
|
||||
} \
|
||||
} while(0);
|
||||
|
||||
#define OKNG(cond, ...) \
|
||||
do { \
|
||||
if (cond) { \
|
||||
CHKANDJUMP(cond, __VA_ARGS__); \
|
||||
} else { \
|
||||
fprintf(stdout, " [OK] "); \
|
||||
fprintf(stdout, __VA_ARGS__); \
|
||||
fprintf(stdout, "\n"); \
|
||||
} \
|
||||
} while(0);
|
||||
|
||||
#define TEST_VAL 0x1129
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
void *mem, *attach;
|
||||
int rc = 0;
|
||||
int status;
|
||||
xpmem_segid_t segid;
|
||||
xpmem_apid_t apid;
|
||||
struct xpmem_addr addr;
|
||||
const unsigned int page_size = sysconf(_SC_PAGESIZE);
|
||||
|
||||
printf("*** %s start *******************************\n", TEST_NAME);
|
||||
|
||||
mem = mmap(0, page_size, PROT_READ|PROT_WRITE, MAP_ANONYMOUS|MAP_PRIVATE, -1, 0);
|
||||
CHKANDJUMP(mem == NULL, "mmap");
|
||||
memset(mem, 0, page_size);
|
||||
|
||||
rc = xpmem_init();
|
||||
CHKANDJUMP(rc != 0, "xpmem_init");
|
||||
|
||||
segid = xpmem_make(mem, page_size, XPMEM_PERMIT_MODE, (void*)0666);
|
||||
OKNG(segid == -1, "xpmem_make");
|
||||
|
||||
apid = xpmem_get(segid, XPMEM_RDWR, XPMEM_PERMIT_MODE, NULL);
|
||||
OKNG(apid == -1, "xpmem_get");
|
||||
|
||||
addr.apid = apid;
|
||||
addr.offset = 0;
|
||||
attach = xpmem_attach(addr, page_size, NULL);
|
||||
OKNG(attach == (void*)-1, "xpmem_attach");
|
||||
|
||||
//*((unsigned long*)attach) = TEST_VAL;
|
||||
|
||||
rc = xpmem_detach(attach);
|
||||
OKNG(rc == -1, "xpmem_detach");
|
||||
|
||||
//OKNG(*((unsigned long*)mem) != TEST_VAL, "validate TEST_VAL");
|
||||
|
||||
rc = xpmem_remove(segid);
|
||||
OKNG(rc == -1, "xpmem_remove");
|
||||
|
||||
printf("*** %s PASSED\n\n", TEST_NAME);
|
||||
return 0;
|
||||
|
||||
fn_fail:
|
||||
printf("*** %s FAILED\n\n", TEST_NAME);
|
||||
|
||||
return -1;
|
||||
}
|
||||
99
test/mng_mod/issues/925/arm64/CT_002.c
Normal file
99
test/mng_mod/issues/925/arm64/CT_002.c
Normal file
@ -0,0 +1,99 @@
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include <sys/mman.h>
|
||||
#include <string.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
#include <sys/wait.h>
|
||||
#include <sys/ipc.h>
|
||||
#include <sys/shm.h>
|
||||
#include <xpmem.h>
|
||||
|
||||
#define TEST_NAME "CT_002"
|
||||
#define CHKANDJUMP(cond, ...) \
|
||||
do { \
|
||||
if (cond) { \
|
||||
fprintf(stderr, " [NG] "); \
|
||||
fprintf(stderr, __VA_ARGS__); \
|
||||
fprintf(stderr, " failed\n"); \
|
||||
goto fn_fail; \
|
||||
} \
|
||||
} while(0);
|
||||
|
||||
#define OKNG(cond, ...) \
|
||||
do { \
|
||||
if (cond) { \
|
||||
CHKANDJUMP(cond, __VA_ARGS__); \
|
||||
} else { \
|
||||
fprintf(stdout, " [OK] "); \
|
||||
fprintf(stdout, __VA_ARGS__); \
|
||||
fprintf(stdout, "\n"); \
|
||||
} \
|
||||
} while(0);
|
||||
|
||||
#define TEST_VAL 0x1129
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
void *mem, *attach;
|
||||
int rc = 0;
|
||||
int status;
|
||||
pid_t pid;
|
||||
xpmem_segid_t segid;
|
||||
xpmem_apid_t apid;
|
||||
struct xpmem_addr addr;
|
||||
const unsigned int page_size = sysconf(_SC_PAGESIZE);
|
||||
|
||||
printf("*** %s start *******************************\n", TEST_NAME);
|
||||
|
||||
mem = mmap(0, page_size, PROT_READ|PROT_WRITE, MAP_ANONYMOUS|MAP_PRIVATE, -1, 0);
|
||||
CHKANDJUMP(mem == NULL, "mmap");
|
||||
memset(mem, 0, page_size);
|
||||
|
||||
fflush(0);
|
||||
pid = fork();
|
||||
CHKANDJUMP(pid == -1, "fork failed\n");
|
||||
|
||||
if (pid == 0) {
|
||||
/* Child process */
|
||||
rc = xpmem_init();
|
||||
CHKANDJUMP(rc != 0, "xpmem_init in child");
|
||||
|
||||
segid = xpmem_make(mem, page_size, XPMEM_PERMIT_MODE, (void*)0666);
|
||||
OKNG(segid == -1, "xpmem_make in child");
|
||||
|
||||
apid = xpmem_get(segid, XPMEM_RDWR, XPMEM_PERMIT_MODE, NULL);
|
||||
OKNG(apid == -1, "xpmem_get in child");
|
||||
|
||||
addr.apid = apid;
|
||||
addr.offset = 0;
|
||||
attach = xpmem_attach(addr, page_size, NULL);
|
||||
OKNG(attach == (void*)-1, "xpmem_attach in child");
|
||||
|
||||
//*((unsigned long*)attach) = TEST_VAL;
|
||||
|
||||
rc = xpmem_detach(attach);
|
||||
OKNG(rc == -1, "xpmem_detach in child");
|
||||
|
||||
rc = xpmem_remove(segid);
|
||||
OKNG(rc == -1, "xpmem_remove in child");
|
||||
|
||||
//OKNG(*((unsigned long*)mem) != TEST_VAL, "validate TEST_VAL");
|
||||
|
||||
fflush(0);
|
||||
_exit(0);
|
||||
} else {
|
||||
/* Parent process */
|
||||
rc = waitpid(pid, &status, 0);
|
||||
CHKANDJUMP(rc == -1, "waitpid failed\n");
|
||||
}
|
||||
|
||||
printf("*** %s PASSED\n\n", TEST_NAME);
|
||||
return 0;
|
||||
|
||||
fn_fail:
|
||||
printf("*** %s FAILED\n\n", TEST_NAME);
|
||||
|
||||
return -1;
|
||||
}
|
||||
99
test/mng_mod/issues/925/arm64/CT_003.c
Normal file
99
test/mng_mod/issues/925/arm64/CT_003.c
Normal file
@ -0,0 +1,99 @@
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include <sys/mman.h>
|
||||
#include <string.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
#include <sys/wait.h>
|
||||
#include <sys/ipc.h>
|
||||
#include <sys/shm.h>
|
||||
#include <xpmem.h>
|
||||
|
||||
#define TEST_NAME "CT_003"
|
||||
#define CHKANDJUMP(cond, ...) \
|
||||
do { \
|
||||
if (cond) { \
|
||||
fprintf(stderr, " [NG] "); \
|
||||
fprintf(stderr, __VA_ARGS__); \
|
||||
fprintf(stderr, " failed\n"); \
|
||||
goto fn_fail; \
|
||||
} \
|
||||
} while(0);
|
||||
|
||||
#define OKNG(cond, ...) \
|
||||
do { \
|
||||
if (cond) { \
|
||||
CHKANDJUMP(cond, __VA_ARGS__); \
|
||||
} else { \
|
||||
fprintf(stdout, " [OK] "); \
|
||||
fprintf(stdout, __VA_ARGS__); \
|
||||
fprintf(stdout, "\n"); \
|
||||
} \
|
||||
} while(0);
|
||||
|
||||
#define TEST_VAL 0x1129
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
void *mem, *attach;
|
||||
int rc = 0;
|
||||
int status;
|
||||
pid_t pid;
|
||||
xpmem_segid_t segid;
|
||||
xpmem_apid_t apid;
|
||||
struct xpmem_addr addr;
|
||||
const unsigned int page_size = sysconf(_SC_PAGESIZE);
|
||||
|
||||
printf("*** %s start *******************************\n", TEST_NAME);
|
||||
|
||||
mem = mmap(0, page_size, PROT_READ|PROT_WRITE, MAP_ANONYMOUS|MAP_PRIVATE, -1, 0);
|
||||
CHKANDJUMP(mem == NULL, "mmap");
|
||||
memset(mem, 0, page_size);
|
||||
|
||||
rc = xpmem_init();
|
||||
CHKANDJUMP(rc != 0, "xpmem_init");
|
||||
|
||||
segid = xpmem_make(mem, page_size, XPMEM_PERMIT_MODE, (void*)0666);
|
||||
OKNG(segid == -1, "xpmem_make");
|
||||
|
||||
fflush(0);
|
||||
pid = fork();
|
||||
CHKANDJUMP(pid == -1, "fork failed\n");
|
||||
|
||||
if (pid == 0) {
|
||||
/* Child process */
|
||||
apid = xpmem_get(segid, XPMEM_RDWR, XPMEM_PERMIT_MODE, NULL);
|
||||
OKNG(apid == -1, "xpmem_get in child");
|
||||
|
||||
addr.apid = apid;
|
||||
addr.offset = 0;
|
||||
attach = xpmem_attach(addr, page_size, NULL);
|
||||
OKNG(attach == (void*)-1, "xpmem_attach in child");
|
||||
|
||||
*((unsigned long*)attach) = TEST_VAL;
|
||||
|
||||
rc = xpmem_detach(attach);
|
||||
OKNG(rc == -1, "xpmem_detach in child");
|
||||
|
||||
fflush(0);
|
||||
_exit(0);
|
||||
} else {
|
||||
/* Parent process */
|
||||
rc = waitpid(pid, &status, 0);
|
||||
CHKANDJUMP(rc == -1, "waitpid failed\n");
|
||||
|
||||
OKNG(*((unsigned long*)mem) != TEST_VAL, "validate TEST_VAL");
|
||||
|
||||
rc = xpmem_remove(segid);
|
||||
OKNG(rc == -1, "xpmem_remove");
|
||||
}
|
||||
|
||||
printf("*** %s PASSED\n\n", TEST_NAME);
|
||||
return 0;
|
||||
|
||||
fn_fail:
|
||||
printf("*** %s FAILED\n\n", TEST_NAME);
|
||||
|
||||
return -1;
|
||||
}
|
||||
126
test/mng_mod/issues/925/arm64/CT_004.c
Normal file
126
test/mng_mod/issues/925/arm64/CT_004.c
Normal file
@ -0,0 +1,126 @@
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include <sys/mman.h>
|
||||
#include <string.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
#include <sys/wait.h>
|
||||
#include <sys/ipc.h>
|
||||
#include <sys/shm.h>
|
||||
#include <xpmem.h>
|
||||
|
||||
#define TEST_NAME "CT_004"
|
||||
#define CHKANDJUMP(cond, ...) \
|
||||
do { \
|
||||
if (cond) { \
|
||||
fprintf(stderr, " [NG] "); \
|
||||
fprintf(stderr, __VA_ARGS__); \
|
||||
fprintf(stderr, " failed\n"); \
|
||||
goto fn_fail; \
|
||||
} \
|
||||
} while(0);
|
||||
|
||||
#define OKNG(cond, ...) \
|
||||
do { \
|
||||
if (cond) { \
|
||||
CHKANDJUMP(cond, __VA_ARGS__); \
|
||||
} else { \
|
||||
fprintf(stdout, " [OK] "); \
|
||||
fprintf(stdout, __VA_ARGS__); \
|
||||
fprintf(stdout, "\n"); \
|
||||
} \
|
||||
} while(0);
|
||||
|
||||
#define TEST_VAL 0x1129
|
||||
#define BUFF_SIZE 1024
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
void *mem, *attach;
|
||||
int rc = 0;
|
||||
int status;
|
||||
pid_t pid;
|
||||
xpmem_segid_t segid;
|
||||
xpmem_apid_t apid;
|
||||
struct xpmem_addr addr;
|
||||
key_t key = ftok(argv[0], 0);
|
||||
int shmid;
|
||||
const unsigned int page_size = sysconf(_SC_PAGESIZE);
|
||||
|
||||
printf("*** %s start *******************************\n", TEST_NAME);
|
||||
shmid = shmget(key, page_size, IPC_CREAT | 0660);
|
||||
CHKANDJUMP(shmid == -1, "shmget");
|
||||
|
||||
mem = mmap(0, page_size, PROT_READ|PROT_WRITE, MAP_ANONYMOUS|MAP_PRIVATE, -1, 0);
|
||||
CHKANDJUMP(mem == NULL, "mmap");
|
||||
memset(mem, 0, page_size);
|
||||
|
||||
fflush(0);
|
||||
pid = fork();
|
||||
CHKANDJUMP(pid == -1, "fork failed\n");
|
||||
|
||||
if (pid == 0) {
|
||||
/* Child process */
|
||||
void *shm = shmat(shmid, NULL, 0);
|
||||
CHKANDJUMP(shm == (void*)-1, "shmat in child");
|
||||
|
||||
while ((segid = *(xpmem_segid_t*)shm) == 0) { };
|
||||
|
||||
rc = shmdt(shm);
|
||||
CHKANDJUMP(rc == -1, "shmdt");
|
||||
|
||||
rc = xpmem_init();
|
||||
CHKANDJUMP(rc != 0, "xpmem_init in child");
|
||||
|
||||
apid = xpmem_get(segid, XPMEM_RDWR, XPMEM_PERMIT_MODE, NULL);
|
||||
OKNG(apid == -1, "xpmem_get in child");
|
||||
|
||||
addr.apid = apid;
|
||||
addr.offset = 0;
|
||||
attach = xpmem_attach(addr, page_size, NULL);
|
||||
OKNG(attach == (void*)-1, "xpmem_attach in child");
|
||||
|
||||
*((unsigned long*)attach) = TEST_VAL;
|
||||
|
||||
rc = xpmem_detach(attach);
|
||||
OKNG(rc == -1, "xpmem_detach in child");
|
||||
|
||||
fflush(0);
|
||||
_exit(0);
|
||||
} else {
|
||||
/* Parent process */
|
||||
void *shm = shmat(shmid, NULL, 0);
|
||||
CHKANDJUMP(shm == (void*)-1, "shmat in parent");
|
||||
rc = xpmem_init();
|
||||
CHKANDJUMP(rc != 0, "xpmem_init");
|
||||
|
||||
segid = xpmem_make(mem, page_size, XPMEM_PERMIT_MODE, (void*)0666);
|
||||
OKNG(segid == -1, "xpmem_make");
|
||||
|
||||
*(xpmem_segid_t*)shm = segid;
|
||||
|
||||
rc = waitpid(pid, &status, 0);
|
||||
CHKANDJUMP(rc == -1, "waitpid failed\n");
|
||||
|
||||
OKNG(*((unsigned long*)mem) != TEST_VAL, "validate TEST_VAL");
|
||||
|
||||
struct shmid_ds buf;
|
||||
rc = shmctl(shmid, IPC_RMID, &buf);
|
||||
CHKANDJUMP(rc == -1, "shmctl");
|
||||
|
||||
rc = shmdt(shm);
|
||||
CHKANDJUMP(rc == -1, "shmdt");
|
||||
|
||||
rc = xpmem_remove(segid);
|
||||
OKNG(rc == -1, "xpmem_remove");
|
||||
}
|
||||
|
||||
printf("*** %s PASSED\n\n", TEST_NAME);
|
||||
return 0;
|
||||
|
||||
fn_fail:
|
||||
printf("*** %s FAILED\n\n", TEST_NAME);
|
||||
|
||||
return -1;
|
||||
}
|
||||
96
test/mng_mod/issues/925/arm64/CT_005.c
Normal file
96
test/mng_mod/issues/925/arm64/CT_005.c
Normal file
@ -0,0 +1,96 @@
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include <sys/mman.h>
|
||||
#include <string.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
#include <sys/wait.h>
|
||||
#include <sys/ipc.h>
|
||||
#include <sys/shm.h>
|
||||
#include <xpmem.h>
|
||||
|
||||
#define TEST_NAME "CT_005"
|
||||
#define CHKANDJUMP(cond, ...) \
|
||||
do { \
|
||||
if (cond) { \
|
||||
fprintf(stderr, " [NG] "); \
|
||||
fprintf(stderr, __VA_ARGS__); \
|
||||
fprintf(stderr, " failed\n"); \
|
||||
goto fn_fail; \
|
||||
} \
|
||||
} while(0);
|
||||
|
||||
#define OKNG(cond, ...) \
|
||||
do { \
|
||||
if (cond) { \
|
||||
CHKANDJUMP(cond, __VA_ARGS__); \
|
||||
} else { \
|
||||
fprintf(stdout, " [OK] "); \
|
||||
fprintf(stdout, __VA_ARGS__); \
|
||||
fprintf(stdout, "\n"); \
|
||||
} \
|
||||
} while(0);
|
||||
|
||||
#define TEST_VAL 0x1129
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
void *mem, *attach;
|
||||
int rc = 0;
|
||||
int status;
|
||||
pid_t pid;
|
||||
xpmem_segid_t segid;
|
||||
xpmem_apid_t apid;
|
||||
struct xpmem_addr addr;
|
||||
const unsigned int page_size = sysconf(_SC_PAGESIZE);
|
||||
|
||||
printf("*** %s start *******************************\n", TEST_NAME);
|
||||
|
||||
mem = mmap(0, page_size, PROT_READ|PROT_WRITE, MAP_ANONYMOUS|MAP_PRIVATE, -1, 0);
|
||||
CHKANDJUMP(mem == NULL, "mmap");
|
||||
memset(mem, 0, page_size);
|
||||
|
||||
rc = xpmem_init();
|
||||
CHKANDJUMP(rc != 0, "xpmem_init");
|
||||
|
||||
segid = xpmem_make(mem, page_size, XPMEM_PERMIT_MODE, (void*)0666);
|
||||
OKNG(segid == -1, "xpmem_make");
|
||||
|
||||
fflush(0);
|
||||
pid = fork();
|
||||
CHKANDJUMP(pid == -1, "fork failed\n");
|
||||
|
||||
if (pid == 0) {
|
||||
/* Child process */
|
||||
apid = xpmem_get(segid, XPMEM_RDWR, XPMEM_PERMIT_MODE, NULL);
|
||||
OKNG(apid == -1, "xpmem_get in child");
|
||||
|
||||
addr.apid = apid;
|
||||
addr.offset = 0;
|
||||
attach = xpmem_attach(addr, page_size, NULL);
|
||||
OKNG(attach == (void*)-1, "xpmem_attach in child");
|
||||
|
||||
*((unsigned long*)attach) = TEST_VAL;
|
||||
|
||||
fflush(0);
|
||||
_exit(0);
|
||||
} else {
|
||||
/* Parent process */
|
||||
rc = waitpid(pid, &status, 0);
|
||||
CHKANDJUMP(rc == -1, "waitpid failed\n");
|
||||
|
||||
OKNG(*((unsigned long*)mem) != TEST_VAL, "validate TEST_VAL");
|
||||
|
||||
rc = xpmem_remove(segid);
|
||||
OKNG(rc == -1, "xpmem_remove");
|
||||
}
|
||||
|
||||
printf("*** %s PASSED\n\n", TEST_NAME);
|
||||
return 0;
|
||||
|
||||
fn_fail:
|
||||
printf("*** %s FAILED\n\n", TEST_NAME);
|
||||
|
||||
return -1;
|
||||
}
|
||||
83
test/mng_mod/issues/925/arm64/CT_006.c
Normal file
83
test/mng_mod/issues/925/arm64/CT_006.c
Normal file
@ -0,0 +1,83 @@
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include <sys/mman.h>
|
||||
#include <string.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
#include <sys/wait.h>
|
||||
#include <sys/ipc.h>
|
||||
#include <sys/shm.h>
|
||||
#include <xpmem.h>
|
||||
|
||||
#define TEST_NAME "CT_006"
|
||||
#define CHKANDJUMP(cond, ...) \
|
||||
do { \
|
||||
if (cond) { \
|
||||
fprintf(stderr, " [NG] "); \
|
||||
fprintf(stderr, __VA_ARGS__); \
|
||||
fprintf(stderr, " failed\n"); \
|
||||
goto fn_fail; \
|
||||
} \
|
||||
} while(0);
|
||||
|
||||
#define OKNG(cond, ...) \
|
||||
do { \
|
||||
if (cond) { \
|
||||
CHKANDJUMP(cond, __VA_ARGS__); \
|
||||
} else { \
|
||||
fprintf(stdout, " [OK] "); \
|
||||
fprintf(stdout, __VA_ARGS__); \
|
||||
fprintf(stdout, "\n"); \
|
||||
} \
|
||||
} while(0);
|
||||
|
||||
#define TEST_VAL 0x1129
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
void *mem, *attach;
|
||||
int rc = 0;
|
||||
int status;
|
||||
pid_t pid;
|
||||
xpmem_segid_t segid;
|
||||
xpmem_apid_t apid;
|
||||
struct xpmem_addr addr;
|
||||
const unsigned int page_size = sysconf(_SC_PAGESIZE);
|
||||
|
||||
printf("*** %s start *******************************\n", TEST_NAME);
|
||||
|
||||
mem = mmap(0, page_size, PROT_READ|PROT_WRITE, MAP_ANONYMOUS|MAP_PRIVATE, -1, 0);
|
||||
CHKANDJUMP(mem == NULL, "mmap");
|
||||
memset(mem, 0, page_size);
|
||||
|
||||
rc = xpmem_init();
|
||||
CHKANDJUMP(rc != 0, "xpmem_init");
|
||||
|
||||
segid = xpmem_make(mem, page_size, XPMEM_PERMIT_MODE, (void*)0666);
|
||||
OKNG(segid == -1, "xpmem_make");
|
||||
|
||||
fflush(0);
|
||||
pid = fork();
|
||||
CHKANDJUMP(pid == -1, "fork failed\n");
|
||||
|
||||
if (pid == 0) {
|
||||
/* Child process */
|
||||
sleep(1); /* wait for parent process exit */
|
||||
apid = xpmem_get(segid, XPMEM_RDWR, XPMEM_PERMIT_MODE, NULL);
|
||||
OKNG(apid != -1, "xpmem_get in child failed (parent process exited already");
|
||||
fflush(0);
|
||||
|
||||
} else {
|
||||
/* Parent process */
|
||||
_exit(0);
|
||||
}
|
||||
|
||||
printf("*** %s PASSED\n\n", TEST_NAME);
|
||||
return 0;
|
||||
|
||||
fn_fail:
|
||||
printf("*** %s FAILED\n\n", TEST_NAME);
|
||||
|
||||
return -1;
|
||||
}
|
||||
106
test/mng_mod/issues/925/arm64/CT_007.c
Normal file
106
test/mng_mod/issues/925/arm64/CT_007.c
Normal file
@ -0,0 +1,106 @@
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include <sys/mman.h>
|
||||
#include <string.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
#include <sys/wait.h>
|
||||
#include <sys/ipc.h>
|
||||
#include <sys/shm.h>
|
||||
#include <xpmem.h>
|
||||
|
||||
#define TEST_NAME "CT_007"
|
||||
#define CHKANDJUMP(cond, ...) \
|
||||
do { \
|
||||
if (cond) { \
|
||||
fprintf(stderr, " [NG] "); \
|
||||
fprintf(stderr, __VA_ARGS__); \
|
||||
fprintf(stderr, " failed\n"); \
|
||||
goto fn_fail; \
|
||||
} \
|
||||
} while(0);
|
||||
|
||||
#define OKNG(cond, ...) \
|
||||
do { \
|
||||
if (cond) { \
|
||||
CHKANDJUMP(cond, __VA_ARGS__); \
|
||||
} else { \
|
||||
fprintf(stdout, " [OK] "); \
|
||||
fprintf(stdout, __VA_ARGS__); \
|
||||
fprintf(stdout, "\n"); \
|
||||
} \
|
||||
} while(0);
|
||||
|
||||
#define TEST_VAL 0x1129
|
||||
#define BAD_ADDRESS (void*)-1
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
void *mem, *attach;
|
||||
int rc = 0;
|
||||
int status;
|
||||
pid_t pid;
|
||||
xpmem_segid_t segid;
|
||||
xpmem_apid_t apid;
|
||||
struct xpmem_addr addr;
|
||||
const unsigned int page_size = sysconf(_SC_PAGESIZE);
|
||||
|
||||
printf("*** %s start *******************************\n", TEST_NAME);
|
||||
|
||||
mem = mmap(0, page_size, PROT_READ|PROT_WRITE, MAP_ANONYMOUS|MAP_PRIVATE, -1, 0);
|
||||
CHKANDJUMP(mem == NULL, "mmap");
|
||||
memset(mem, 0, page_size);
|
||||
|
||||
rc = xpmem_init();
|
||||
CHKANDJUMP(rc != 0, "xpmem_init");
|
||||
|
||||
segid = xpmem_make(BAD_ADDRESS, page_size, XPMEM_PERMIT_MODE, (void*)0666);
|
||||
OKNG(segid != -1, "xpmem_make failed (invalid address)");
|
||||
|
||||
segid = xpmem_make(mem, page_size, XPMEM_PERMIT_MODE, (void*)0666);
|
||||
CHKANDJUMP(segid == -1, "xpmem_make");
|
||||
|
||||
segid = xpmem_make(mem, page_size, XPMEM_PERMIT_MODE, (void*)0666);
|
||||
OKNG(segid == -1, "xpmem_make succeed(do twice to same address)");
|
||||
|
||||
fflush(0);
|
||||
pid = fork();
|
||||
CHKANDJUMP(pid == -1, "fork failed\n");
|
||||
|
||||
if (pid == 0) {
|
||||
/* Child process */
|
||||
apid = xpmem_get(segid, XPMEM_RDWR, XPMEM_PERMIT_MODE, NULL);
|
||||
CHKANDJUMP(apid == -1, "xpmem_get in child");
|
||||
|
||||
addr.apid = apid;
|
||||
addr.offset = 0;
|
||||
attach = xpmem_attach(addr, page_size, NULL);
|
||||
CHKANDJUMP(attach == (void*)-1, "xpmem_attach in child");
|
||||
|
||||
*((unsigned long*)attach) = TEST_VAL;
|
||||
|
||||
rc = xpmem_detach(attach);
|
||||
CHKANDJUMP(rc == -1, "xpmem_detach in child");
|
||||
|
||||
fflush(0);
|
||||
_exit(0);
|
||||
} else {
|
||||
/* Parent process */
|
||||
rc = waitpid(pid, &status, 0);
|
||||
CHKANDJUMP(rc == -1, "waitpid failed\n");
|
||||
|
||||
CHKANDJUMP(*((unsigned long*)mem) != TEST_VAL, "validate TEST_VAL");
|
||||
|
||||
rc = xpmem_remove(segid);
|
||||
CHKANDJUMP(rc == -1, "xpmem_remove");
|
||||
}
|
||||
|
||||
printf("*** %s PASSED\n\n", TEST_NAME);
|
||||
return 0;
|
||||
|
||||
fn_fail:
|
||||
printf("*** %s FAILED\n\n", TEST_NAME);
|
||||
|
||||
return -1;
|
||||
}
|
||||
106
test/mng_mod/issues/925/arm64/CT_008.c
Normal file
106
test/mng_mod/issues/925/arm64/CT_008.c
Normal file
@ -0,0 +1,106 @@
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include <sys/mman.h>
|
||||
#include <string.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
#include <sys/wait.h>
|
||||
#include <sys/ipc.h>
|
||||
#include <sys/shm.h>
|
||||
#include <xpmem.h>
|
||||
|
||||
#define TEST_NAME "CT_008"
|
||||
#define CHKANDJUMP(cond, ...) \
|
||||
do { \
|
||||
if (cond) { \
|
||||
fprintf(stderr, " [NG] "); \
|
||||
fprintf(stderr, __VA_ARGS__); \
|
||||
fprintf(stderr, " failed\n"); \
|
||||
goto fn_fail; \
|
||||
} \
|
||||
} while(0);
|
||||
|
||||
#define OKNG(cond, ...) \
|
||||
do { \
|
||||
if (cond) { \
|
||||
CHKANDJUMP(cond, __VA_ARGS__); \
|
||||
} else { \
|
||||
fprintf(stdout, " [OK] "); \
|
||||
fprintf(stdout, __VA_ARGS__); \
|
||||
fprintf(stdout, "\n"); \
|
||||
} \
|
||||
} while(0);
|
||||
|
||||
#define TEST_VAL 0x1129
|
||||
#define BAD_SEGID -1
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
void *mem, *attach;
|
||||
int rc = 0;
|
||||
int status;
|
||||
pid_t pid;
|
||||
xpmem_segid_t segid;
|
||||
xpmem_apid_t apid;
|
||||
struct xpmem_addr addr;
|
||||
const unsigned int page_size = sysconf(_SC_PAGESIZE);
|
||||
|
||||
printf("*** %s start *******************************\n", TEST_NAME);
|
||||
|
||||
mem = mmap(0, page_size, PROT_READ|PROT_WRITE, MAP_ANONYMOUS|MAP_PRIVATE, -1, 0);
|
||||
CHKANDJUMP(mem == NULL, "mmap");
|
||||
memset(mem, 0, page_size);
|
||||
|
||||
rc = xpmem_init();
|
||||
CHKANDJUMP(rc != 0, "xpmem_init");
|
||||
|
||||
segid = xpmem_make(mem, page_size, XPMEM_PERMIT_MODE, (void*)0666);
|
||||
CHKANDJUMP(segid == -1, "xpmem_make");
|
||||
|
||||
fflush(0);
|
||||
pid = fork();
|
||||
CHKANDJUMP(pid == -1, "fork failed\n");
|
||||
|
||||
if (pid == 0) {
|
||||
/* Child process */
|
||||
apid = xpmem_get(BAD_SEGID, XPMEM_RDWR, XPMEM_PERMIT_MODE, NULL);
|
||||
OKNG(apid != -1, "xpmem_get in child failed (invalid segid)");
|
||||
|
||||
apid = xpmem_get(segid, XPMEM_RDWR, XPMEM_PERMIT_MODE, NULL);
|
||||
CHKANDJUMP(apid == -1, "xpmem_get in child");
|
||||
|
||||
apid = xpmem_get(segid, XPMEM_RDWR, XPMEM_PERMIT_MODE, NULL);
|
||||
OKNG(apid == -1, "xpmem_get in child (do twice to same segid");
|
||||
|
||||
addr.apid = apid;
|
||||
addr.offset = 0;
|
||||
attach = xpmem_attach(addr, page_size, NULL);
|
||||
CHKANDJUMP(attach == (void*)-1, "xpmem_attach in child");
|
||||
|
||||
*((unsigned long*)attach) = TEST_VAL;
|
||||
|
||||
rc = xpmem_detach(attach);
|
||||
CHKANDJUMP(rc == -1, "xpmem_detach in child");
|
||||
|
||||
fflush(0);
|
||||
_exit(0);
|
||||
} else {
|
||||
/* Parent process */
|
||||
rc = waitpid(pid, &status, 0);
|
||||
CHKANDJUMP(rc == -1, "waitpid failed\n");
|
||||
|
||||
CHKANDJUMP(*((unsigned long*)mem) != TEST_VAL, "validate TEST_VAL");
|
||||
|
||||
rc = xpmem_remove(segid);
|
||||
CHKANDJUMP(rc == -1, "xpmem_remove");
|
||||
}
|
||||
|
||||
printf("*** %s PASSED\n\n", TEST_NAME);
|
||||
return 0;
|
||||
|
||||
fn_fail:
|
||||
printf("*** %s FAILED\n\n", TEST_NAME);
|
||||
|
||||
return -1;
|
||||
}
|
||||
109
test/mng_mod/issues/925/arm64/CT_009.c
Normal file
109
test/mng_mod/issues/925/arm64/CT_009.c
Normal file
@ -0,0 +1,109 @@
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include <sys/mman.h>
|
||||
#include <string.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
#include <sys/wait.h>
|
||||
#include <sys/ipc.h>
|
||||
#include <sys/shm.h>
|
||||
#include <xpmem.h>
|
||||
|
||||
#define TEST_NAME "CT_009"
|
||||
#define CHKANDJUMP(cond, ...) \
|
||||
do { \
|
||||
if (cond) { \
|
||||
fprintf(stderr, " [NG] "); \
|
||||
fprintf(stderr, __VA_ARGS__); \
|
||||
fprintf(stderr, " failed\n"); \
|
||||
goto fn_fail; \
|
||||
} \
|
||||
} while(0);
|
||||
|
||||
#define OKNG(cond, ...) \
|
||||
do { \
|
||||
if (cond) { \
|
||||
CHKANDJUMP(cond, __VA_ARGS__); \
|
||||
} else { \
|
||||
fprintf(stdout, " [OK] "); \
|
||||
fprintf(stdout, __VA_ARGS__); \
|
||||
fprintf(stdout, "\n"); \
|
||||
} \
|
||||
} while(0);
|
||||
|
||||
#define TEST_VAL 0x1129
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
void *mem, *attach;
|
||||
int rc = 0;
|
||||
int status;
|
||||
pid_t pid;
|
||||
xpmem_segid_t segid;
|
||||
xpmem_apid_t apid;
|
||||
struct xpmem_addr addr;
|
||||
const unsigned int page_size = sysconf(_SC_PAGESIZE);
|
||||
|
||||
printf("*** %s start *******************************\n", TEST_NAME);
|
||||
|
||||
mem = mmap(0, page_size, PROT_READ|PROT_WRITE, MAP_ANONYMOUS|MAP_PRIVATE, -1, 0);
|
||||
CHKANDJUMP(mem == NULL, "mmap");
|
||||
memset(mem, 0, page_size);
|
||||
|
||||
rc = xpmem_init();
|
||||
CHKANDJUMP(rc != 0, "xpmem_init");
|
||||
|
||||
segid = xpmem_make(mem, page_size, XPMEM_PERMIT_MODE, (void*)0666);
|
||||
CHKANDJUMP(segid == -1, "xpmem_make");
|
||||
|
||||
fflush(0);
|
||||
pid = fork();
|
||||
CHKANDJUMP(pid == -1, "fork failed\n");
|
||||
|
||||
if (pid == 0) {
|
||||
/* Child process */
|
||||
apid = xpmem_get(segid, XPMEM_RDWR, XPMEM_PERMIT_MODE, NULL);
|
||||
CHKANDJUMP(apid == -1, "xpmem_get in child");
|
||||
|
||||
addr.apid = -1;
|
||||
addr.offset = 0;
|
||||
attach = xpmem_attach(addr, page_size, NULL);
|
||||
OKNG(attach != (void*)-1, "xpmem_attach in childi failed (invalid apid)");
|
||||
|
||||
addr.apid = apid;
|
||||
addr.offset = 0;
|
||||
attach = xpmem_attach(addr, page_size, NULL);
|
||||
CHKANDJUMP(attach == (void*)-1, "xpmem_attach in child");
|
||||
|
||||
addr.apid = apid;
|
||||
addr.offset = 0;
|
||||
attach = xpmem_attach(addr, page_size, NULL);
|
||||
OKNG(attach == (void*)-1, "xpmem_attach in child succeed (do twice to same apid)");
|
||||
|
||||
*((unsigned long*)attach) = TEST_VAL;
|
||||
|
||||
rc = xpmem_detach(attach);
|
||||
CHKANDJUMP(rc == -1, "xpmem_detach in child");
|
||||
|
||||
fflush(0);
|
||||
_exit(0);
|
||||
} else {
|
||||
/* Parent process */
|
||||
rc = waitpid(pid, &status, 0);
|
||||
CHKANDJUMP(rc == -1, "waitpid failed\n");
|
||||
|
||||
CHKANDJUMP(*((unsigned long*)mem) != TEST_VAL, "validate TEST_VAL");
|
||||
|
||||
rc = xpmem_remove(segid);
|
||||
CHKANDJUMP(rc == -1, "xpmem_remove");
|
||||
}
|
||||
|
||||
printf("*** %s PASSED\n\n", TEST_NAME);
|
||||
return 0;
|
||||
|
||||
fn_fail:
|
||||
printf("*** %s FAILED\n\n", TEST_NAME);
|
||||
|
||||
return -1;
|
||||
}
|
||||
106
test/mng_mod/issues/925/arm64/CT_010.c
Normal file
106
test/mng_mod/issues/925/arm64/CT_010.c
Normal file
@ -0,0 +1,106 @@
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include <sys/mman.h>
|
||||
#include <string.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
#include <sys/wait.h>
|
||||
#include <sys/ipc.h>
|
||||
#include <sys/shm.h>
|
||||
#include <xpmem.h>
|
||||
|
||||
#define TEST_NAME "CT_010"
|
||||
#define CHKANDJUMP(cond, ...) \
|
||||
do { \
|
||||
if (cond) { \
|
||||
fprintf(stderr, " [NG] "); \
|
||||
fprintf(stderr, __VA_ARGS__); \
|
||||
fprintf(stderr, " failed\n"); \
|
||||
goto fn_fail; \
|
||||
} \
|
||||
} while(0);
|
||||
|
||||
#define OKNG(cond, ...) \
|
||||
do { \
|
||||
if (cond) { \
|
||||
CHKANDJUMP(cond, __VA_ARGS__); \
|
||||
} else { \
|
||||
fprintf(stdout, " [OK] "); \
|
||||
fprintf(stdout, __VA_ARGS__); \
|
||||
fprintf(stdout, "\n"); \
|
||||
} \
|
||||
} while(0);
|
||||
|
||||
#define TEST_VAL 0x1129
|
||||
#define BAD_ADDRESS (void *) -1
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
void *mem, *attach;
|
||||
int rc = 0;
|
||||
int status;
|
||||
pid_t pid;
|
||||
xpmem_segid_t segid;
|
||||
xpmem_apid_t apid;
|
||||
struct xpmem_addr addr;
|
||||
const unsigned int page_size = sysconf(_SC_PAGESIZE);
|
||||
|
||||
printf("*** %s start *******************************\n", TEST_NAME);
|
||||
|
||||
mem = mmap(0, page_size, PROT_READ|PROT_WRITE, MAP_ANONYMOUS|MAP_PRIVATE, -1, 0);
|
||||
CHKANDJUMP(mem == NULL, "mmap");
|
||||
memset(mem, 0, page_size);
|
||||
|
||||
rc = xpmem_init();
|
||||
CHKANDJUMP(rc != 0, "xpmem_init");
|
||||
|
||||
segid = xpmem_make(mem, page_size, XPMEM_PERMIT_MODE, (void*)0666);
|
||||
CHKANDJUMP(segid == -1, "xpmem_make");
|
||||
|
||||
fflush(0);
|
||||
pid = fork();
|
||||
CHKANDJUMP(pid == -1, "fork failed\n");
|
||||
|
||||
if (pid == 0) {
|
||||
/* Child process */
|
||||
apid = xpmem_get(segid, XPMEM_RDWR, XPMEM_PERMIT_MODE, NULL);
|
||||
CHKANDJUMP(apid == -1, "xpmem_get in child");
|
||||
|
||||
addr.apid = apid;
|
||||
addr.offset = 0;
|
||||
attach = xpmem_attach(addr, page_size, NULL);
|
||||
CHKANDJUMP(attach == (void*)-1, "xpmem_attach in child");
|
||||
|
||||
*((unsigned long*)attach) = TEST_VAL;
|
||||
|
||||
rc = xpmem_detach(BAD_ADDRESS);
|
||||
OKNG(rc == -1, "xpmem_detach in child succeed (invalid address)");
|
||||
|
||||
rc = xpmem_detach(attach);
|
||||
CHKANDJUMP(rc == -1, "xpmem_detach in child");
|
||||
|
||||
rc = xpmem_detach(attach);
|
||||
OKNG(rc == -1, "xpmem_detach in child succeed (do twice to same address)");
|
||||
|
||||
fflush(0);
|
||||
_exit(0);
|
||||
} else {
|
||||
/* Parent process */
|
||||
rc = waitpid(pid, &status, 0);
|
||||
CHKANDJUMP(rc == -1, "waitpid failed\n");
|
||||
|
||||
CHKANDJUMP(*((unsigned long*)mem) != TEST_VAL, "validate TEST_VAL");
|
||||
|
||||
rc = xpmem_remove(segid);
|
||||
CHKANDJUMP(rc == -1, "xpmem_remove");
|
||||
}
|
||||
|
||||
printf("*** %s PASSED\n\n", TEST_NAME);
|
||||
return 0;
|
||||
|
||||
fn_fail:
|
||||
printf("*** %s FAILED\n\n", TEST_NAME);
|
||||
|
||||
return -1;
|
||||
}
|
||||
106
test/mng_mod/issues/925/arm64/CT_011.c
Normal file
106
test/mng_mod/issues/925/arm64/CT_011.c
Normal file
@ -0,0 +1,106 @@
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include <sys/mman.h>
|
||||
#include <string.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
#include <sys/wait.h>
|
||||
#include <sys/ipc.h>
|
||||
#include <sys/shm.h>
|
||||
#include <xpmem.h>
|
||||
|
||||
#define TEST_NAME "CT_011"
|
||||
#define CHKANDJUMP(cond, ...) \
|
||||
do { \
|
||||
if (cond) { \
|
||||
fprintf(stderr, " [NG] "); \
|
||||
fprintf(stderr, __VA_ARGS__); \
|
||||
fprintf(stderr, " failed\n"); \
|
||||
goto fn_fail; \
|
||||
} \
|
||||
} while(0);
|
||||
|
||||
#define OKNG(cond, ...) \
|
||||
do { \
|
||||
if (cond) { \
|
||||
CHKANDJUMP(cond, __VA_ARGS__); \
|
||||
} else { \
|
||||
fprintf(stdout, " [OK] "); \
|
||||
fprintf(stdout, __VA_ARGS__); \
|
||||
fprintf(stdout, "\n"); \
|
||||
} \
|
||||
} while(0);
|
||||
|
||||
#define TEST_VAL 0x1129
|
||||
#define BAD_SEGID -1
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
void *mem, *attach;
|
||||
int rc = 0;
|
||||
int status;
|
||||
pid_t pid;
|
||||
xpmem_segid_t segid;
|
||||
xpmem_apid_t apid;
|
||||
struct xpmem_addr addr;
|
||||
const unsigned int page_size = sysconf(_SC_PAGESIZE);
|
||||
|
||||
printf("*** %s start *******************************\n", TEST_NAME);
|
||||
|
||||
mem = mmap(0, page_size, PROT_READ|PROT_WRITE, MAP_ANONYMOUS|MAP_PRIVATE, -1, 0);
|
||||
CHKANDJUMP(mem == NULL, "mmap");
|
||||
memset(mem, 0, page_size);
|
||||
|
||||
rc = xpmem_init();
|
||||
CHKANDJUMP(rc != 0, "xpmem_init");
|
||||
|
||||
segid = xpmem_make(mem, page_size, XPMEM_PERMIT_MODE, (void*)0666);
|
||||
CHKANDJUMP(segid == -1, "xpmem_make");
|
||||
|
||||
fflush(0);
|
||||
pid = fork();
|
||||
CHKANDJUMP(pid == -1, "fork failed\n");
|
||||
|
||||
if (pid == 0) {
|
||||
/* Child process */
|
||||
apid = xpmem_get(segid, XPMEM_RDWR, XPMEM_PERMIT_MODE, NULL);
|
||||
CHKANDJUMP(apid == -1, "xpmem_get in child");
|
||||
|
||||
addr.apid = apid;
|
||||
addr.offset = 0;
|
||||
attach = xpmem_attach(addr, page_size, NULL);
|
||||
CHKANDJUMP(attach == (void*)-1, "xpmem_attach in child");
|
||||
|
||||
*((unsigned long*)attach) = TEST_VAL;
|
||||
|
||||
rc = xpmem_detach(attach);
|
||||
CHKANDJUMP(rc == -1, "xpmem_detach in child");
|
||||
|
||||
fflush(0);
|
||||
_exit(0);
|
||||
} else {
|
||||
/* Parent process */
|
||||
rc = waitpid(pid, &status, 0);
|
||||
CHKANDJUMP(rc == -1, "waitpid failed\n");
|
||||
|
||||
CHKANDJUMP(*((unsigned long*)mem) != TEST_VAL, "validate TEST_VAL");
|
||||
|
||||
rc = xpmem_remove(BAD_SEGID);
|
||||
OKNG(rc != -1, "xpmem_remove failed (invalid segid)");
|
||||
|
||||
rc = xpmem_remove(segid);
|
||||
CHKANDJUMP(rc == -1, "xpmem_remove");
|
||||
|
||||
rc = xpmem_remove(segid);
|
||||
OKNG(rc != -1, "xpmem_remove failed (do twice to same segid)");
|
||||
}
|
||||
|
||||
printf("*** %s PASSED\n\n", TEST_NAME);
|
||||
return 0;
|
||||
|
||||
fn_fail:
|
||||
printf("*** %s FAILED\n\n", TEST_NAME);
|
||||
|
||||
return -1;
|
||||
}
|
||||
50
test/mng_mod/issues/925/arm64/Makefile
Normal file
50
test/mng_mod/issues/925/arm64/Makefile
Normal file
@ -0,0 +1,50 @@
|
||||
## Makefile COPYRIGHT FUJITSU LIMITED 2018 ##
|
||||
CC = gcc
|
||||
XPMEM_DIR=
|
||||
|
||||
TARGET=CT_001 CT_002 CT_003 CT_004 CT_005 CT_006 CT_007 CT_008 CT_009 CT_010 CT_011 rusage012
|
||||
|
||||
CPPFLAGS = -I$(XPMEM_DIR)/include
|
||||
LDFLAGS = -L$(XPMEM_DIR)/lib -lxpmem
|
||||
|
||||
all: $(TARGET)
|
||||
|
||||
CT_001: CT_001.c
|
||||
$(CC) -o $@ $^ $(LDFLAGS)
|
||||
|
||||
CT_002: CT_002.c
|
||||
$(CC) -o $@ $^ $(LDFLAGS)
|
||||
|
||||
CT_003: CT_003.c
|
||||
$(CC) -o $@ $^ $(LDFLAGS)
|
||||
|
||||
CT_004: CT_004.c
|
||||
$(CC) -o $@ $^ $(LDFLAGS)
|
||||
|
||||
CT_005: CT_005.c
|
||||
$(CC) -o $@ $^ $(LDFLAGS)
|
||||
|
||||
CT_006: CT_006.c
|
||||
$(CC) -o $@ $^ $(LDFLAGS)
|
||||
|
||||
CT_007: CT_007.c
|
||||
$(CC) -o $@ $^ $(LDFLAGS)
|
||||
|
||||
CT_008: CT_008.c
|
||||
$(CC) -o $@ $^ $(LDFLAGS)
|
||||
|
||||
CT_009: CT_009.c
|
||||
$(CC) -o $@ $^ $(LDFLAGS)
|
||||
|
||||
CT_010: CT_010.c
|
||||
$(CC) -o $@ $^ $(LDFLAGS)
|
||||
|
||||
CT_011: CT_011.c
|
||||
$(CC) -o $@ $^ $(LDFLAGS)
|
||||
|
||||
test: all
|
||||
./run.sh
|
||||
|
||||
clean:
|
||||
rm -f $(TARGET) *.o
|
||||
|
||||
99
test/mng_mod/issues/925/arm64/README
Normal file
99
test/mng_mod/issues/925/arm64/README
Normal file
@ -0,0 +1,99 @@
|
||||
/* README COPYRIGHT FUJITSU LIMITED 2018 */
|
||||
|
||||
XPMEM ドライバのfork()時の関連オブジェクトコピー機能テストセットREADME
|
||||
|
||||
(1) テストの実行方法
|
||||
以下の手順でテストを実行する
|
||||
1. $HOME/.mck_test_configを用意する
|
||||
当該ファイルは、McKernelをビルドした際に生成されるmck_test_config.sample ファイルを
|
||||
$HOMEにコピーし、適宜編集する
|
||||
2. Makefileの変数XPMEM_DIRの内容を、XPMEMライブラリがインストールされているディレクトリに変更する
|
||||
3. XPMEMドライバをinsmodする
|
||||
4. make test を実行する
|
||||
|
||||
(2) テスト項目詳細
|
||||
1. Issueで報告されたテストプログラムによる確認
|
||||
ISSUE01(rusage012) 親プロセス、子プロセスの間でxpmem領域への書き込み、参照が正しく行えること
|
||||
⇒ テストプログラム実行時に"1234"が出力され、且つ"xpmem_remove failed "が
|
||||
出力されなければOK
|
||||
|
||||
2. McKernelでのXPMEM操作の基本動作確認
|
||||
CT_001: 単一プロセスでのXPMEM操作
|
||||
1. 実行したプロセスがxpmem_make -> xpmem_get -> xpmem_attach -> xpmem_detach -> xpmem_remove
|
||||
|
||||
CT_002: 子プロセスでのXPMEM操作
|
||||
1. 親プロセスがfork()
|
||||
2. 子プロセスがxpmem_make -> xpmem_get -> xpmem_attach -> xpmem_detach ->xpmem_remove
|
||||
3. 子プロセス終了後、親プロセスが終了
|
||||
|
||||
CT_003: 親プロセスがmakeした共有領域への子プロセスによるXPMEM操作
|
||||
1. 親プロセスがxpmem_make
|
||||
2. fork()で子プロセスを作成
|
||||
3. 子プロセスで、xpmem_get -> xpmem_attach -> 値(TEST_VAL)の設定-> xpmem_detach
|
||||
4. 子プロセスが終了
|
||||
5. 親プロセスが、子プロセスによって設定された値(TEST_VAL)を確認
|
||||
6. 親プロセスがxpmem_remove
|
||||
|
||||
CT_004: fork()後に親プロセスがmakeした共有領域への子プロセスによるXPMEM操作
|
||||
1. fork()で子プロセスを作成
|
||||
2. 親プロセスがxpmem_make
|
||||
3. 子プロセスで、xpmem_get -> xpmem_attach -> 値(TEST_VAL)の設定-> xpmem_detach
|
||||
4. 子プロセスが終了
|
||||
5. 親プロセスが、子プロセスによって設定された値(TEST_VAL)を確認
|
||||
6. 親プロセスがxpmem_remove
|
||||
|
||||
CT_005: 子プロセスがxpmem_attach後、xpmem_detachをせずに終了
|
||||
1. 親プロセスがxpmem_make
|
||||
2. fork()で子プロセスを作成
|
||||
3. 子プロセスで、xpmem_get -> xpmem_attach
|
||||
4. 子プロセスが終了
|
||||
5. 親プロセスがxpmem_remove
|
||||
|
||||
CT_006: 子プロセスがXPMEM操作を行う時点で、xpmem_makeをした親プロセスが終了している
|
||||
1. 親プロセスがxpmem_make
|
||||
2. fork()で子プロセスを作成
|
||||
3. 親プロセスが終了
|
||||
4. 子プロセスで、xpmem_get (失敗)
|
||||
5. 子プロセスが終了
|
||||
|
||||
CT_007: xpmem_make 呼び出しの異常系
|
||||
1. xpmem_make の第1引数に不正なアドレスを指定する(失敗)
|
||||
2. 1度xpmem_make を実施したメモリ領域に対して、再度xpmem_make を行う(成功)
|
||||
|
||||
CT_008: xpmem_get 呼び出しの異常系
|
||||
1. xpmem_get の第1引数に不正なsegidを指定する(失敗)
|
||||
2. 1度xpmem_get を実施したsegidで、再度xpmem_get を行う(成功)
|
||||
|
||||
CT_009: xpmem_attach 呼び出しの異常系
|
||||
1. xpmem_attach の第1引数に不正なapidを指定する(失敗)
|
||||
2. 1度xpmem_attach を実施したapidで、再度xpmem_attach を行う(成功)
|
||||
|
||||
CT_010: xpmem_detach 呼び出しの異常系
|
||||
1. xpmem_detach の第1引数に不正なアドレスを指定する(成功)
|
||||
2. 1度xpmem_detach を実施したメモリ領域に対して、再度xpmem_detach を行う(成功)
|
||||
|
||||
CT_011: xpmem_remove 呼び出しの異常系
|
||||
1. xpmem_remove の第1引数に不正なsegidを指定する(失敗)
|
||||
2. 1度xpmem_remove を実施したsegidで、再度xpmem_remove を行う(失敗)
|
||||
|
||||
|
||||
(3) 実行結果ログ
|
||||
result.logファイル内に実行時のログを記載する。
|
||||
実行に利用したIHK/McKernelは、IA版における下記の版数相当の
|
||||
arm64版移植IHK/McKernelである。
|
||||
|
||||
IHK
|
||||
commit d6fcbee8cb91f9ec4b49f97c918e696ac0335aaf
|
||||
Author: Shiratori, Takehiro <fj0300es@aa.jp.fujitsu.com>
|
||||
Date: Tue Oct 16 16:25:33 2018 +0900
|
||||
|
||||
McKernel
|
||||
commit 6f9fef2b13447c74c36d15cf5ebd186f8395ccca
|
||||
Author: Ken Sato <ken.sato.ty@hitachi-solutions.com>
|
||||
Date: Tue Sep 25 10:05:41 2018 +0900
|
||||
|
||||
(4) 備考
|
||||
特になし。
|
||||
|
||||
|
||||
以上。
|
||||
88
test/mng_mod/issues/925/arm64/result.log
Normal file
88
test/mng_mod/issues/925/arm64/result.log
Normal file
@ -0,0 +1,88 @@
|
||||
gcc -o CT_001 CT_001.c -L/opt/xpmem/lib -lxpmem
|
||||
gcc -o CT_002 CT_002.c -L/opt/xpmem/lib -lxpmem
|
||||
gcc -o CT_003 CT_003.c -L/opt/xpmem/lib -lxpmem
|
||||
gcc -o CT_004 CT_004.c -L/opt/xpmem/lib -lxpmem
|
||||
gcc -o CT_005 CT_005.c -L/opt/xpmem/lib -lxpmem
|
||||
gcc -o CT_006 CT_006.c -L/opt/xpmem/lib -lxpmem
|
||||
gcc -o CT_007 CT_007.c -L/opt/xpmem/lib -lxpmem
|
||||
gcc -o CT_008 CT_008.c -L/opt/xpmem/lib -lxpmem
|
||||
gcc -o CT_009 CT_009.c -L/opt/xpmem/lib -lxpmem
|
||||
gcc -o CT_010 CT_010.c -L/opt/xpmem/lib -lxpmem
|
||||
gcc -o CT_011 CT_011.c -L/opt/xpmem/lib -lxpmem
|
||||
gcc -I/opt/xpmem/include -L/opt/xpmem/lib -lxpmem rusage012.c -o rusage012
|
||||
./run.sh
|
||||
mcstop+release.sh ... done
|
||||
mcreboot.sh -c 4-7 -m 2G ... done
|
||||
*** CT_001 start *******************************
|
||||
[OK] xpmem_make
|
||||
[OK] xpmem_get
|
||||
[OK] xpmem_attach
|
||||
[OK] xpmem_detach
|
||||
[OK] xpmem_remove
|
||||
*** CT_001 PASSED
|
||||
|
||||
*** CT_002 start *******************************
|
||||
[OK] xpmem_make in child
|
||||
[OK] xpmem_get in child
|
||||
[OK] xpmem_attach in child
|
||||
[OK] xpmem_detach in child
|
||||
[OK] xpmem_remove in child
|
||||
*** CT_002 PASSED
|
||||
|
||||
*** CT_003 start *******************************
|
||||
[OK] xpmem_make
|
||||
[OK] xpmem_get in child
|
||||
[OK] xpmem_attach in child
|
||||
[OK] xpmem_detach in child
|
||||
[OK] validate TEST_VAL
|
||||
[OK] xpmem_remove
|
||||
*** CT_003 PASSED
|
||||
|
||||
*** CT_004 start *******************************
|
||||
[OK] xpmem_get in child
|
||||
[OK] xpmem_attach in child
|
||||
[OK] xpmem_detach in child
|
||||
[OK] xpmem_make
|
||||
[OK] validate TEST_VAL
|
||||
[OK] xpmem_remove
|
||||
*** CT_004 PASSED
|
||||
|
||||
*** CT_005 start *******************************
|
||||
[OK] xpmem_make
|
||||
[OK] xpmem_get in child
|
||||
[OK] xpmem_attach in child
|
||||
[OK] validate TEST_VAL
|
||||
[OK] xpmem_remove
|
||||
*** CT_005 PASSED
|
||||
|
||||
*** CT_006 start *******************************
|
||||
[OK] xpmem_make
|
||||
[OK] xpmem_get in child failed (parent process exited already
|
||||
*** CT_006 PASSED
|
||||
|
||||
*** CT_007 start *******************************
|
||||
[OK] xpmem_make failed (invalid address)
|
||||
[OK] xpmem_make succeed(do twice to same address)
|
||||
*** CT_007 PASSED
|
||||
|
||||
*** CT_008 start *******************************
|
||||
[OK] xpmem_get in child failed (invalid segid)
|
||||
[OK] xpmem_get in child (do twice to same segid
|
||||
*** CT_008 PASSED
|
||||
|
||||
*** CT_009 start *******************************
|
||||
[OK] xpmem_attach in childi failed (invalid apid)
|
||||
[OK] xpmem_attach in child succeed (do twice to same apid)
|
||||
*** CT_009 PASSED
|
||||
|
||||
*** CT_010 start *******************************
|
||||
[OK] xpmem_detach in child succeed (invalid address)
|
||||
[OK] xpmem_detach in child succeed (do twice to same address)
|
||||
*** CT_010 PASSED
|
||||
|
||||
*** CT_011 start *******************************
|
||||
[OK] xpmem_remove failed (invalid segid)
|
||||
[OK] xpmem_remove failed (do twice to same segid)
|
||||
*** CT_011 PASSED
|
||||
|
||||
1234
|
||||
22
test/mng_mod/issues/925/arm64/run.sh
Executable file
22
test/mng_mod/issues/925/arm64/run.sh
Executable file
@ -0,0 +1,22 @@
|
||||
#!/bin/sh
|
||||
## run.sh COPYRIGHT FUJITSU LIMITED 2018 ##
|
||||
|
||||
USELTP=0
|
||||
USEOSTEST=0
|
||||
|
||||
. ../../../../common.sh
|
||||
|
||||
${MCEXEC} ./CT_001
|
||||
${MCEXEC} ./CT_002
|
||||
${MCEXEC} ./CT_003
|
||||
${MCEXEC} ./CT_004
|
||||
${MCEXEC} ./CT_005
|
||||
${MCEXEC} ./CT_006
|
||||
sleep 2
|
||||
${MCEXEC} ./CT_007
|
||||
${MCEXEC} ./CT_008
|
||||
${MCEXEC} ./CT_009
|
||||
${MCEXEC} ./CT_010
|
||||
${MCEXEC} ./CT_011
|
||||
|
||||
${MCEXEC} ./rusage012
|
||||
107
test/mng_mod/issues/925/arm64/rusage012.c
Normal file
107
test/mng_mod/issues/925/arm64/rusage012.c
Normal file
@ -0,0 +1,107 @@
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include <sys/mman.h>
|
||||
#include <string.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
#include <sys/wait.h>
|
||||
#include <sys/ipc.h>
|
||||
#include <sys/shm.h>
|
||||
#include <xpmem.h>
|
||||
|
||||
#define DEBUG
|
||||
|
||||
#ifdef DEBUG
|
||||
#define dprintf(...) \
|
||||
do { \
|
||||
char msg[1024]; \
|
||||
sprintf(msg, __VA_ARGS__); \
|
||||
fprintf(stderr, "%s,%s", __FUNCTION__, msg); \
|
||||
} while (0);
|
||||
#define eprintf(...) \
|
||||
do { \
|
||||
char msg[1024]; \
|
||||
sprintf(msg, __VA_ARGS__); \
|
||||
fprintf(stderr, "%s,%s", __FUNCTION__, msg); \
|
||||
} while (0);
|
||||
#else
|
||||
#define dprintf(...) do { } while (0)
|
||||
#define eprintf(...) do { } while (0)
|
||||
#endif
|
||||
|
||||
#define CHKANDJUMP(cond, err, ...) \
|
||||
do { \
|
||||
if(cond) { \
|
||||
eprintf(__VA_ARGS__); \
|
||||
ret = err; \
|
||||
goto fn_fail; \
|
||||
} \
|
||||
} while(0)
|
||||
|
||||
#define CONFIG_64K_PAGE
|
||||
#ifdef CONFIG_64K_PAGE
|
||||
int sz_mem[] = {
|
||||
(1ULL << 16), /* 64KiB */
|
||||
(1ULL << 25), /* 32MiB */
|
||||
(1ULL << 29), /* 512MiB */
|
||||
(1ULL << 27)}; /* 128MiB */
|
||||
#else /* CONFIG_4K_PAGE */
|
||||
int sz_mem[] = {
|
||||
4 * (1ULL<<10), /* 4096(4KiB) */
|
||||
2 * (1ULL<<20), /* 2097152(2MiB) */
|
||||
1 * (1ULL<<30), /* 1073741824(1GiB) */
|
||||
134217728}; /* 128MiB */
|
||||
#endif
|
||||
|
||||
#define SZ_INDEX 0
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
void* mem;
|
||||
int ret = 0;
|
||||
pid_t pid;
|
||||
int status;
|
||||
xpmem_segid_t segid;
|
||||
|
||||
mem = mmap(0, sz_mem[SZ_INDEX], PROT_READ|PROT_WRITE, MAP_ANONYMOUS|MAP_PRIVATE, -1, 0);
|
||||
CHKANDJUMP(mem == MAP_FAILED, 255, "mmap failed\n");
|
||||
memset(mem, 0, sz_mem[SZ_INDEX]);
|
||||
|
||||
ret = xpmem_init();
|
||||
CHKANDJUMP(ret != 0, 255, "xpmem_init failed: %s\n", strerror(errno));
|
||||
|
||||
segid = xpmem_make(mem, sz_mem[SZ_INDEX], XPMEM_PERMIT_MODE, (void*)0666);
|
||||
CHKANDJUMP(segid == -1, 255, "xpmem_ioctl failed: %s\n", strerror(errno));
|
||||
|
||||
pid = fork();
|
||||
CHKANDJUMP(pid == -1, 255, "fork failed\n");
|
||||
if(pid == 0) {
|
||||
xpmem_apid_t apid = xpmem_get(segid, XPMEM_RDWR, XPMEM_PERMIT_MODE, NULL);
|
||||
CHKANDJUMP(apid == -1, 255, "xpmem_get failed: %s\n", strerror(errno));
|
||||
|
||||
struct xpmem_addr addr = { .apid = apid, .offset = 0 };
|
||||
void* attach = xpmem_attach(addr, sz_mem[SZ_INDEX], NULL);
|
||||
CHKANDJUMP(attach == (void*)-1, 255, "xpmem_attach failed: %s\n", strerror(errno));
|
||||
|
||||
*((unsigned long*)attach) = 0x1234;
|
||||
|
||||
ret = xpmem_detach(attach);
|
||||
CHKANDJUMP(ret == -1, 255, "xpmem_detach failed\n");
|
||||
|
||||
_exit(123);
|
||||
} else {
|
||||
ret = waitpid(pid, &status, 0);
|
||||
CHKANDJUMP(ret == -1, 255, "waitpid failed\n");
|
||||
|
||||
printf("%lx\n", *((unsigned long*)mem));
|
||||
|
||||
ret = xpmem_remove(segid);
|
||||
CHKANDJUMP(ret == -1, 255, "xpmem_remove failed\n");
|
||||
}
|
||||
|
||||
fn_exit:
|
||||
return ret;
|
||||
fn_fail:
|
||||
goto fn_exit;
|
||||
}
|
||||
Reference in New Issue
Block a user