23 */
24
25 #include "incls/_precompiled.incl"
26 #include "incls/_assembler_linux_x86_32.cpp.incl"
27
28 void MacroAssembler::int3() {
29 call(RuntimeAddress(CAST_FROM_FN_PTR(address, os::breakpoint)));
30 }
31
32 void MacroAssembler::get_thread(Register thread) {
33 movl(thread, rsp);
34 shrl(thread, PAGE_SHIFT);
35
36 ExternalAddress tls_base((address)ThreadLocalStorage::sp_map_addr());
37 Address index(noreg, thread, Address::times_4);
38 ArrayAddress tls(tls_base, index);
39
40 movptr(thread, tls);
41 }
42
43 bool MacroAssembler::needs_explicit_null_check(int offset) {
44 // Linux kernel guarantees that the first page is always unmapped. Don't
45 // assume anything more than that.
46 bool offset_in_first_page = 0 <= offset && offset < os::vm_page_size();
47 return !offset_in_first_page;
48 }
|
23 */
24
25 #include "incls/_precompiled.incl"
26 #include "incls/_assembler_linux_x86_32.cpp.incl"
27
28 void MacroAssembler::int3() {
29 call(RuntimeAddress(CAST_FROM_FN_PTR(address, os::breakpoint)));
30 }
31
32 void MacroAssembler::get_thread(Register thread) {
33 movl(thread, rsp);
34 shrl(thread, PAGE_SHIFT);
35
36 ExternalAddress tls_base((address)ThreadLocalStorage::sp_map_addr());
37 Address index(noreg, thread, Address::times_4);
38 ArrayAddress tls(tls_base, index);
39
40 movptr(thread, tls);
41 }
42
43 bool MacroAssembler::needs_explicit_null_check(intptr_t offset) {
44 // Linux kernel guarantees that the first page is always unmapped. Don't
45 // assume anything more than that.
46 bool offset_in_first_page = 0 <= offset && offset < os::vm_page_size();
47 return !offset_in_first_page;
48 }
|