107 __ std(r, sp_c_arg_at(jni_arg.number())); |
107 __ std(r, sp_c_arg_at(jni_arg.number())); |
108 } |
108 } |
109 } |
109 } |
110 |
110 |
111 void InterpreterRuntime::SignatureHandlerGenerator::generate(uint64_t fingerprint) { |
111 void InterpreterRuntime::SignatureHandlerGenerator::generate(uint64_t fingerprint) { |
|
112 #if !defined(ABI_ELFv2) |
112 // Emit fd for current codebuffer. Needs patching! |
113 // Emit fd for current codebuffer. Needs patching! |
113 __ emit_fd(); |
114 __ emit_fd(); |
|
115 #endif |
114 |
116 |
115 // Generate code to handle arguments. |
117 // Generate code to handle arguments. |
116 iterate(fingerprint); |
118 iterate(fingerprint); |
117 |
119 |
118 // Return the result handler. |
120 // Return the result handler. |
125 #undef __ |
127 #undef __ |
126 |
128 |
127 // Implementation of SignatureHandlerLibrary |
129 // Implementation of SignatureHandlerLibrary |
128 |
130 |
129 void SignatureHandlerLibrary::pd_set_handler(address handler) { |
131 void SignatureHandlerLibrary::pd_set_handler(address handler) { |
|
132 #if !defined(ABI_ELFv2) |
130 // patch fd here. |
133 // patch fd here. |
131 FunctionDescriptor* fd = (FunctionDescriptor*) handler; |
134 FunctionDescriptor* fd = (FunctionDescriptor*) handler; |
132 |
135 |
133 fd->set_entry(handler + (int)sizeof(FunctionDescriptor)); |
136 fd->set_entry(handler + (int)sizeof(FunctionDescriptor)); |
134 assert(fd->toc() == (address)0xcafe, "need to adjust TOC here"); |
137 assert(fd->toc() == (address)0xcafe, "need to adjust TOC here"); |
|
138 #endif |
135 } |
139 } |
136 |
140 |
137 |
141 |
138 // Access function to get the signature. |
142 // Access function to get the signature. |
139 IRT_ENTRY(address, InterpreterRuntime::get_signature(JavaThread* thread, Method* method)) |
143 IRT_ENTRY(address, InterpreterRuntime::get_signature(JavaThread* thread, Method* method)) |