8206173: MallocSiteTable::initialize() doesn't take function descriptors into account
Reviewed-by: stuefe, zgu
This commit is contained in:
parent
41ecacc6a0
commit
7cefb320e9
@ -84,12 +84,18 @@ bool MallocSiteTable::initialize() {
|
||||
// Create pseudo call stack for hashtable entry allocation
|
||||
address pc[3];
|
||||
if (NMT_TrackingStackDepth >= 3) {
|
||||
pc[2] = (address)MallocSiteTable::allocation_at;
|
||||
uintx *fp = (uintx*)MallocSiteTable::allocation_at;
|
||||
// On ppc64, 'fp' is a pointer to a function descriptor which is a struct of
|
||||
// three native pointers where the first pointer is the real function address.
|
||||
// See: http://refspecs.linuxfoundation.org/ELF/ppc64/PPC-elf64abi-1.9.html#FUNC-DES
|
||||
pc[2] = (address)(fp PPC64_ONLY(BIG_ENDIAN_ONLY([0])));
|
||||
}
|
||||
if (NMT_TrackingStackDepth >= 2) {
|
||||
pc[1] = (address)MallocSiteTable::lookup_or_add;
|
||||
uintx *fp = (uintx*)MallocSiteTable::lookup_or_add;
|
||||
pc[1] = (address)(fp PPC64_ONLY(BIG_ENDIAN_ONLY([0])));
|
||||
}
|
||||
pc[0] = (address)MallocSiteTable::new_entry;
|
||||
uintx *fp = (uintx*)MallocSiteTable::new_entry;
|
||||
pc[0] = (address)(fp PPC64_ONLY(BIG_ENDIAN_ONLY([0])));
|
||||
|
||||
// Instantiate NativeCallStack object, have to use placement new operator. (see comments above)
|
||||
NativeCallStack* stack = ::new ((void*)_hash_entry_allocation_stack)
|
||||
|
@ -569,6 +569,14 @@
|
||||
#define NOT_AARCH64(code) code
|
||||
#endif
|
||||
|
||||
#ifdef VM_LITTLE_ENDIAN
|
||||
#define LITTLE_ENDIAN_ONLY(code) code
|
||||
#define BIG_ENDIAN_ONLY(code)
|
||||
#else
|
||||
#define LITTLE_ENDIAN_ONLY(code)
|
||||
#define BIG_ENDIAN_ONLY(code) code
|
||||
#endif
|
||||
|
||||
#define define_pd_global(type, name, value) const type pd_##name = value;
|
||||
|
||||
// Helper macros for constructing file names for includes.
|
||||
|
Loading…
Reference in New Issue
Block a user