105 set_code_section(cs);
106 }
107
108 void AbstractAssembler::flush() {
109 ICache::invalidate_range(addr_at(0), offset());
110 }
111
112 void AbstractAssembler::bind(Label& L) {
113 if (L.is_bound()) {
114 // Assembler can bind a label more than once to the same place.
115 guarantee(L.loc() == locator(), "attempt to redefine label");
116 return;
117 }
118 L.bind_loc(locator());
119 L.patch_instructions((MacroAssembler*)this);
120 }
121
122 void AbstractAssembler::generate_stack_overflow_check( int frame_size_in_bytes) {
123 if (UseStackBanging) {
124 // Each code entry causes one stack bang n pages down the stack where n
125 // is configurable by StackBangPages. The setting depends on the maximum
126 // depth of VM call stack or native before going back into java code,
127 // since only java code can raise a stack overflow exception using the
128 // stack banging mechanism. The VM and native code does not detect stack
129 // overflow.
130 // The code in JavaCalls::call() checks that there is at least n pages
131 // available, so all entry code needs to do is bang once for the end of
132 // this shadow zone.
133 // The entry code may need to bang additional pages if the framesize
134 // is greater than a page.
135
136 const int page_size = os::vm_page_size();
137 int bang_end = StackShadowPages*page_size;
138
139 // This is how far the previous frame's stack banging extended.
140 const int bang_end_safe = bang_end;
141
142 if (frame_size_in_bytes > page_size) {
143 bang_end += frame_size_in_bytes;
144 }
145
|
105 set_code_section(cs);
106 }
107
108 void AbstractAssembler::flush() {
109 ICache::invalidate_range(addr_at(0), offset());
110 }
111
112 void AbstractAssembler::bind(Label& L) {
113 if (L.is_bound()) {
114 // Assembler can bind a label more than once to the same place.
115 guarantee(L.loc() == locator(), "attempt to redefine label");
116 return;
117 }
118 L.bind_loc(locator());
119 L.patch_instructions((MacroAssembler*)this);
120 }
121
122 void AbstractAssembler::generate_stack_overflow_check( int frame_size_in_bytes) {
123 if (UseStackBanging) {
124 // Each code entry causes one stack bang n pages down the stack where n
125 // is configurable by StackShadowPages. The setting depends on the maximum
126 // depth of VM call stack or native before going back into java code,
127 // since only java code can raise a stack overflow exception using the
128 // stack banging mechanism. The VM and native code does not detect stack
129 // overflow.
130 // The code in JavaCalls::call() checks that there is at least n pages
131 // available, so all entry code needs to do is bang once for the end of
132 // this shadow zone.
133 // The entry code may need to bang additional pages if the framesize
134 // is greater than a page.
135
136 const int page_size = os::vm_page_size();
137 int bang_end = StackShadowPages*page_size;
138
139 // This is how far the previous frame's stack banging extended.
140 const int bang_end_safe = bang_end;
141
142 if (frame_size_in_bytes > page_size) {
143 bang_end += frame_size_in_bytes;
144 }
145
|