Skip to content
This repository has been archived by the owner on Sep 21, 2021. It is now read-only.

[WIP] pthread support #48

Open
wants to merge 28 commits into
base: development
Choose a base branch
from
Open
Changes from 1 commit
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
89253e7
Support multiple context version (between 2 and latest)
roblabla Dec 20, 2017
e8ab45b
Add pthread support
roblabla Dec 6, 2017
0b14593
Various small fixes
roblabla Dec 6, 2017
f12f698
Remove two useless files, fix PHONY
roblabla Dec 7, 2017
abcc4a0
various changes
roblabla Dec 8, 2017
e288f9f
More fixes
roblabla Dec 8, 2017
d84e329
Return enosys when using shared semaphore. Fix semaphores
roblabla Dec 9, 2017
e813293
Set guard_size to 0 for now
roblabla Dec 9, 2017
3116576
Fix various tests
roblabla Dec 9, 2017
c05bbcc
Fix pthread under mephisto
roblabla Dec 9, 2017
fd75d19
Properly handle timeout in semaphores
roblabla Dec 11, 2017
139e943
Properly figure out if the thread has died already
roblabla Dec 11, 2017
378b315
Set the default priority to 0x1F for new threads
roblabla Dec 11, 2017
73e8366
Close handle on thread release
roblabla Dec 11, 2017
ff8c3d5
Implement assert_eq
roblabla Dec 20, 2017
0dd01fb
Use gettimeofday, and sweeping fixes to pthread pointer tests
roblabla Dec 20, 2017
68746b4
Implement mutex with semaphores
roblabla Dec 20, 2017
b8a905b
Properly dealloc thread, closing handles and freeing stack
roblabla Dec 20, 2017
06bf3ce
Implement condvars using semaphores
roblabla Dec 20, 2017
ae44eba
Implement sem_timedwait
roblabla Dec 20, 2017
5254fc9
Fix up some mutex tests
roblabla Dec 20, 2017
97927b9
Activate a lot more tests
roblabla Dec 20, 2017
fbb5c6a
Super debugging redux
roblabla Dec 20, 2017
1cfa2ca
Implement pthread_setcancelstate
roblabla Dec 28, 2017
21e1b86
Fix syscalls signatures
roblabla Jan 6, 2018
8099b79
Implement __getreent
roblabla Jan 6, 2018
3867c1e
Various fixes in pthread test suite
roblabla Jan 6, 2018
191a901
Properly bubble errors in _rthread_cond_timedwait
roblabla Jan 6, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
Support multiple context version (between 2 and latest)
  • Loading branch information
roblabla committed Jan 4, 2018
commit 89253e71424ebd2268c0cc480de787492094460f
32 changes: 20 additions & 12 deletions lib/crt0_common.c
Original file line number Diff line number Diff line change
@@ -181,24 +181,23 @@ int _libtransistor_start(libtransistor_context_t *ctx, void *aslr_base) {
dbg_printf("invalid context magic");
return -2;
}


if(ctx->version < 2 || ctx->version > LIBTRANSISTOR_CONTEXT_VERSION) {
dbg_printf("mismatched context version");
return -2;
}

ctx->log_buffer = log_buffer;
ctx->log_length = &log_length;
ctx->return_flags = 0;

argv = ctx->argv;
argc = (int) ctx->argc;

if(ctx->version != LIBTRANSISTOR_CONTEXT_VERSION) {
dbg_printf("mismatched context version");
return -2;
}

if(ctx->size != sizeof(libtransistor_context_t)) {
dbg_printf("mismatched context size");
return -3;
}
memcpy(&libtransistor_context, ctx, ctx->size);

if (ctx->version == 2)
libtransistor_context.main_thread = 0;
} else {
dbg_printf("no context");

@@ -248,7 +247,16 @@ int _libtransistor_start(libtransistor_context_t *ctx, void *aslr_base) {
init_array[i]();
}
}


dbg_printf("init threads");
if (libtransistor_context.main_thread != 0) {
phal_tid maintid;
maintid.id = libtransistor_context.main_thread;
maintid.stack = NULL;
_rthread_internal_init(maintid);
} else
dbg_printf("Ctx version doesn't support threading.");

int ret;
if (setjmp(exit_jmpbuf) == 0) {
ret = main(argc, argv);