Skip to content

Commit 3af4b2c

Browse files
committed
rt: Call register/deregister_valgrind_stack from the stack con/destructors
1 parent 3406da4 commit 3af4b2c

File tree

3 files changed

+9
-13
lines changed

3 files changed

+9
-13
lines changed

src/rt/rust_stack.h

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,12 @@ const uint8_t stack_canary[] = {0xAB, 0xCD, 0xAB, 0xCD,
1919
0xAB, 0xCD, 0xAB, 0xCD,
2020
0xAB, 0xCD, 0xAB, 0xCD};
2121

22+
void
23+
register_valgrind_stack(stk_seg *stk);
24+
25+
void
26+
deregister_valgrind_stack(stk_seg *stk);
27+
2228
void
2329
add_stack_canary(stk_seg *stk);
2430

@@ -28,26 +34,22 @@ create_stack(T allocer, size_t sz) {
2834
size_t total_sz = sizeof(stk_seg) + sz + sizeof(stack_canary);
2935
stk_seg *stk = (stk_seg *)allocer->malloc(total_sz, "stack");
3036
memset(stk, 0, sizeof(stk_seg));
31-
add_stack_canary(stk);
3237
stk->end = (uintptr_t) &stk->data[sz];
38+
add_stack_canary(stk);
39+
register_valgrind_stack(stk);
3340
return stk;
3441
}
3542

3643
template <class T>
3744
void
3845
destroy_stack(T allocer, stk_seg *stk) {
46+
deregister_valgrind_stack(stk);
3947
allocer->free(stk);
4048
}
4149

42-
void
43-
register_valgrind_stack(stk_seg *stk);
44-
4550
void
4651
prepare_valgrind_stack(stk_seg *stk);
4752

48-
void
49-
deregister_valgrind_stack(stk_seg *stk);
50-
5153
void
5254
check_stack_canary(stk_seg *stk);
5355

src/rt/rust_task.cpp

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -567,7 +567,6 @@ rust_task::new_stack(size_t requested_sz) {
567567
LOG(this, mem, "reusing existing stack");
568568
stk = stk->prev;
569569
A(thread, stk->prev == NULL, "Bogus stack ptr");
570-
register_valgrind_stack(stk);
571570
prepare_valgrind_stack(stk);
572571
return;
573572
} else {
@@ -599,7 +598,6 @@ rust_task::new_stack(size_t requested_sz) {
599598
LOGPTR(thread, "stk end", new_stk->end);
600599

601600
stk = new_stk;
602-
register_valgrind_stack(stk);
603601
prepare_valgrind_stack(stk);
604602
total_stack_sz += user_stack_size(new_stk);
605603
}
@@ -628,7 +626,6 @@ rust_task::del_stack() {
628626
old_stk->prev = NULL;
629627
}
630628

631-
deregister_valgrind_stack(old_stk);
632629
if (delete_stack) {
633630
free_stack(old_stk);
634631
A(thread, total_stack_sz == 0, "Stack size should be 0");

src/rt/rust_task_thread.cpp

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -290,7 +290,6 @@ rust_task_thread::start_main_loop() {
290290

291291
I(this, !extra_c_stack);
292292
if (cached_c_stack) {
293-
deregister_valgrind_stack(cached_c_stack);
294293
destroy_stack(kernel, cached_c_stack);
295294
cached_c_stack = NULL;
296295
}
@@ -372,15 +371,13 @@ rust_task_thread::prepare_c_stack() {
372371
I(this, !extra_c_stack);
373372
if (!cached_c_stack) {
374373
cached_c_stack = create_stack(kernel, C_STACK_SIZE);
375-
register_valgrind_stack(cached_c_stack);
376374
prepare_valgrind_stack(cached_c_stack);
377375
}
378376
}
379377

380378
void
381379
rust_task_thread::unprepare_c_stack() {
382380
if (extra_c_stack) {
383-
deregister_valgrind_stack(extra_c_stack);
384381
destroy_stack(kernel, extra_c_stack);
385382
extra_c_stack = NULL;
386383
}

0 commit comments

Comments
 (0)