标签:展开 nta aced 函数声明 ble Stub size 定义 ict
来源:/src/share/vm/runtime/stubRoutines.hpp
static CallStub call_stub() {
return CAST_TO_FN_PTR(CallStub, _call_stub_entry);
}
其中CAST_TO_FN_PTR是宏,定义在/src/share/vm/runtime/utilities/globalDefinitions.hpp文件中,具体定义如下:
#define CAST_TO_FN_PTR(func_type, value) ((func_type)(castable_address(value)))
对call_stub函数进行宏替换和展开后会变为如下的形式:
static CallStub call_stub(){
return (CallStub)(castable_address(_call_stub_entry));
}
CallStub定义在/src/share/vm/runtime/stubRoutines.hpp文件中,具体的定义如下:
// Calls to Java
typedef void (*CallStub)(
address link,
intptr_t* result,
BasicType result_type,
Method* method,
address entry_point,
intptr_t* parameters,
int size_of_parameters,
TRAPS
);
如上定义了一种函数指针类型,指向的函数声明了8个形式参数。
在call_stub()函数中调用的castable_address()函数在globalDefinitions.hpp文件中实现,具体如下:
inline address_word castable_address(address x) {
return address_word(x) ;
}
address_word是一定自定义的类型,具体在globalDefinitions.hpp文件中的定义如下:
// unsigned integer which will hold a pointer
// except for some implementations of a C++
// linkage pointer to function. Should never
// need one of those to be placed in this type anyway.
typedef uintptr_t address_word;
标签:展开 nta aced 函数声明 ble Stub size 定义 ict
原文地址:https://www.cnblogs.com/mazhimazhi/p/11109736.html