- Ubuntu 12.04 x64(pthread_attr_getstack利用可)
- 図の上部側が下位アドレス
- [stack]とあるのは/proc/[PID]/mapsで確認できる[stack]の先頭、末尾アドレス
+--------+ -----------------------------------
| 4KB | | |
[stack] -----------------------------------> +========+ | |
| | 4.th->machine_stack_maxsize |
| | (3.size - 2.space) |
| | | 3.size(pthread_attr_getstack)
+--------+ --- |
| | | |
| | 2.space(1.stackaddr - &local) |
| | | |
[stack] 1.stackaddr -------------------> +========+ -----------------------------------
(pthread_attr_getstack)
[stack] -----------------------------------> +========+
| |
| |
| |
5.th->machine_stack_start ---------------> +--------+
(STACK_END_ADDRESS) |argv, |
|env,etc |
[stack] -----------------------------------> +========+
A < si_addr <= B であること
A --- +--------+ ---
| | | |
si_addr-->| | 6.MIN(th->machine_stack_maxsize / 5, 1MB)
| | | |
B --- +--------+ ---
| | |
[stack] -----------------------------------> +========+ |
| | |
| | 4.th->machine_stack_maxsize
| | |
| | |
| | |
5.th->machine_stack_start ---------------> +--------+ ---
| |
[stack] -----------------------------------> +========+
0x7fffff6ff134: +--------+ ---
| | |
0x7fffff7feff8: si_addr -------------------> | | |
| | 6.MIN(th->machine_stack_maxsize/ 5, 1MB)
0x7fffff7ff000: +--------+ -------------------------------- |
| | | | |
0x7fffff7ff134: +--------+ | | --- [base(in ruby_stack_overflowed_p)]
| | | | |
0x7fffff800000: [stack] +========+ | | |
| | 4.th->machine_stack_maxsize | |
| | | | 4.th->machine_stack_maxsize
| | | | |
0x7fffffffdedc: +--------+ --- 3.size |
| | | | |
| | 2.space | |
| | | | |
0x7fffffffe010: 5.th->machine_stack_start -> +--------+ | | ---
| | | |
0x7ffffffff000: [stack] +========+ -------------------------------