Skip to content

Commit

Permalink
ABCD
Browse files Browse the repository at this point in the history
  • Loading branch information
phaubertin committed Jan 26, 2025
1 parent 4b6ea58 commit fbff82d
Show file tree
Hide file tree
Showing 6 changed files with 143 additions and 2 deletions.
2 changes: 1 addition & 1 deletion devel/qemu/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ CMDLINE = \
DEBUG_DUMP_MEMORY_MAP=1 \
DEBUG_DUMP_SYSCALL_IMPLEMENTATION=1 \
DEBUG_DUMP_RAMDISK=1 \
RUN_TEST_ACPI=1 \
RUN_TEST_ABCD=1 \
RUN_TEST_IPC=1

run_log = run-jinue.log
Expand Down
2 changes: 1 addition & 1 deletion userspace/testapp/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
jinue_root = ../..
include $(jinue_root)/header.mk

sources.c = tests/ipc.c debug.c testapp.c utils.c
sources.c = tests/abcd.c tests/ipc.c debug.c testapp.c utils.c
testapp = testapp
stripped = $(testapp)-stripped
temp_ramdisk_fs = ramdisk-tmp
Expand Down
2 changes: 2 additions & 0 deletions userspace/testapp/testapp.c
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include "tests/abcd.h"
#include "tests/ipc.h"
#include "debug.h"
#include "utils.h"
Expand All @@ -61,6 +62,7 @@ int main(int argc, char *argv[]) {
return EXIT_FAILURE;
}

run_abcd_test();
run_ipc_test();

if(bool_getenv("DEBUG_DO_REBOOT")) {
Expand Down
101 changes: 101 additions & 0 deletions userspace/testapp/tests/abcd.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
/*
* Copyright (C) 2025 Philippe Aubertin.
* All rights reserved.
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* 3. Neither the name of the author nor the names of other contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

#include <jinue/utils.h>
#include <pthread.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
#include "../utils.h"
#include "abcd.h"

#define THREADS_NUM 8

static void *thread_func(void *arg) {
while(true) {
jinue_info("%s", (const char *)arg);
}

return NULL;
}

bool start_thread(pthread_t *thread, const char *str) {
pthread_attr_t attr;

int status = pthread_attr_init(&attr);

if(status != 0) {
jinue_error("error: pthread_attr_init() failed: %s", strerror(status));
return EXIT_FAILURE;
}

status = pthread_attr_setstacksize(&attr, PTHREAD_STACK_MIN);

if(status != 0) {
jinue_error("error: pthread_attr_setstacksize() failed: %s", strerror(status));
return EXIT_FAILURE;
}

status = pthread_create(thread, &attr, thread_func, (char *)str);

if(status != 0) {
jinue_error("error: could not create thread: %s", strerror(status));
return EXIT_FAILURE;
}

return EXIT_SUCCESS;
}

void run_abcd_test(void) {
pthread_t threads[THREADS_NUM];
char strs[THREADS_NUM][2 * THREADS_NUM + 1];

if(! bool_getenv("RUN_TEST_ABCD")) {
return;
}

for(int idx = 0; idx < THREADS_NUM; ++idx) {
memset(strs[idx], ' ', sizeof(strs[idx]));
strs[idx][2 * idx] = 'A' + idx;
strs[idx][2 * THREADS_NUM] = '\0';

int status = start_thread(&threads[idx], strs[idx]);

if(status != EXIT_SUCCESS) {
return;
}
}

for(int idx = 0; idx < THREADS_NUM; ++idx) {
void *client_exit_value;
pthread_join(threads[idx], &client_exit_value);
}
}
37 changes: 37 additions & 0 deletions userspace/testapp/tests/abcd.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
/*
* Copyright (C) 2025 Philippe Aubertin.
* All rights reserved.
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* 3. Neither the name of the author nor the names of other contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

#ifndef TESTAPP_TEST_ABCD_H_
#define TESTAPP_TEST_ABCD_H_

void run_abcd_test(void);

#endif
1 change: 1 addition & 0 deletions userspace/testapp/tests/ipc.c
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
#include <pthread.h>
#include <string.h>
#include "../utils.h"
#include "ipc.h"

#define MSG_FUNC_TEST (JINUE_SYS_USER_BASE + 42)

Expand Down

0 comments on commit fbff82d

Please sign in to comment.