File tree Expand file tree Collapse file tree 6 files changed +29
-34
lines changed Expand file tree Collapse file tree 6 files changed +29
-34
lines changed Original file line number Diff line number Diff line change 2
2
refs/heads/master: 61b1875c16de39c166b0f4d54bba19f9c6777d1a
3
3
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
4
4
refs/heads/snap-stage3: 4a81779abd786ff22d71434c6d9a5917ea4cdfff
5
- refs/heads/try: b3f77bf92703543793a8073c8319e461e024cb69
5
+ refs/heads/try: 7e9aa6c3c2ae054e32dfcc7c5e4830ce7c4c6921
6
6
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
Original file line number Diff line number Diff line change @@ -59,6 +59,7 @@ class rust_kernel {
59
59
void *malloc (size_t size, const char *tag);
60
60
void *realloc (void *mem, size_t size);
61
61
void free (void *mem);
62
+ memory_region *region () { return &_region; }
62
63
63
64
void fail ();
64
65
Original file line number Diff line number Diff line change 41
41
check_stack_canary (stk_seg *stk) {
42
42
assert (stk->canary == canary_value && " Somebody killed the canary" );
43
43
}
44
+
45
+ stk_seg *
46
+ create_stack (memory_region *region, size_t sz) {
47
+ size_t total_sz = sizeof (stk_seg) + sz;
48
+ stk_seg *stk = (stk_seg *)region->malloc (total_sz, " stack" , false );
49
+ memset (stk, 0 , sizeof (stk_seg));
50
+ stk->end = (uintptr_t ) &stk->data [sz];
51
+ add_stack_canary (stk);
52
+ register_valgrind_stack (stk);
53
+ return stk;
54
+ }
55
+
56
+ void
57
+ destroy_stack (memory_region *region, stk_seg *stk) {
58
+ deregister_valgrind_stack (stk);
59
+ region->free (stk);
60
+ }
Original file line number Diff line number Diff line change 1
1
#ifndef RUST_STACK_H
2
2
#define RUST_STACK_H
3
3
4
+ #include "memory_region.h"
5
+
4
6
struct stk_seg {
5
7
stk_seg * prev ;
6
8
stk_seg * next ;
@@ -15,36 +17,11 @@ struct stk_seg {
15
17
uint8_t data [];
16
18
};
17
19
18
- // Used by create_stack
19
- void
20
- register_valgrind_stack (stk_seg *stk);
21
-
22
- // Used by destroy_stack
23
- void
24
- deregister_valgrind_stack (stk_seg *stk);
25
-
26
- // Used by create_stack
27
- void
28
- add_stack_canary (stk_seg *stk);
29
-
30
- template <class T >
31
20
stk_seg *
32
- create_stack (T allocer, size_t sz) {
33
- size_t total_sz = sizeof (stk_seg) + sz;
34
- stk_seg *stk = (stk_seg *)allocer->malloc (total_sz, " stack" );
35
- memset (stk, 0 , sizeof (stk_seg));
36
- stk->end = (uintptr_t ) &stk->data [sz];
37
- add_stack_canary (stk);
38
- register_valgrind_stack (stk);
39
- return stk;
40
- }
41
-
42
- template <class T >
21
+ create_stack (memory_region * region , size_t sz );
22
+
43
23
void
44
- destroy_stack (T allocer, stk_seg *stk) {
45
- deregister_valgrind_stack (stk);
46
- allocer->free (stk);
47
- }
24
+ destroy_stack (memory_region * region , stk_seg * stk );
48
25
49
26
// Must be called before each time a stack is reused to tell valgrind
50
27
// that the stack is accessible.
Original file line number Diff line number Diff line change 552
552
rust_task::free_stack (stk_seg *stk) {
553
553
LOGPTR (thread, " freeing stk segment" , (uintptr_t )stk);
554
554
total_stack_sz -= user_stack_size (stk);
555
- destroy_stack (this , stk);
555
+ destroy_stack (&local_region , stk);
556
556
}
557
557
558
558
void
@@ -596,7 +596,7 @@ rust_task::new_stack(size_t requested_sz) {
596
596
}
597
597
598
598
size_t sz = rust_stk_sz + RED_ZONE_SIZE;
599
- stk_seg *new_stk = create_stack (this , sz);
599
+ stk_seg *new_stk = create_stack (&local_region , sz);
600
600
LOGPTR (thread, " new stk" , (uintptr_t )new_stk);
601
601
new_stk->prev = NULL ;
602
602
new_stk->next = stk;
Original file line number Diff line number Diff line change @@ -290,7 +290,7 @@ rust_task_thread::start_main_loop() {
290
290
291
291
I (this , !extra_c_stack);
292
292
if (cached_c_stack) {
293
- destroy_stack (kernel, cached_c_stack);
293
+ destroy_stack (kernel-> region () , cached_c_stack);
294
294
cached_c_stack = NULL ;
295
295
}
296
296
}
@@ -369,15 +369,15 @@ void
369
369
rust_task_thread::prepare_c_stack (rust_task *task) {
370
370
I (this , !extra_c_stack);
371
371
if (!cached_c_stack && !task->have_c_stack ()) {
372
- cached_c_stack = create_stack (kernel, C_STACK_SIZE);
372
+ cached_c_stack = create_stack (kernel-> region () , C_STACK_SIZE);
373
373
prepare_valgrind_stack (cached_c_stack);
374
374
}
375
375
}
376
376
377
377
void
378
378
rust_task_thread::unprepare_c_stack () {
379
379
if (extra_c_stack) {
380
- destroy_stack (kernel, extra_c_stack);
380
+ destroy_stack (kernel-> region () , extra_c_stack);
381
381
extra_c_stack = NULL ;
382
382
}
383
383
}
You can’t perform that action at this time.
0 commit comments