8306672: support offset in dll_address_to_library_name on AIX
Reviewed-by: stuefe, clanger, mbaesken
This commit is contained in:
parent
83a98c66f1
commit
5d9baa2f93
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1999, 2023, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1999, 2023, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright (c) 2012, 2021 SAP SE. All rights reserved.
|
* Copyright (c) 2012, 2023 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -1077,7 +1077,17 @@ bool os::dll_address_to_library_name(address addr, char* buf,
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return AixSymbols::get_module_name(addr, buf, buflen);
|
address base = nullptr;
|
||||||
|
if (!AixSymbols::get_module_name_and_base(addr, buf, buflen, &base)
|
||||||
|
|| base == nullptr) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
assert(addr >= base && addr <= base + INT_MAX, "address not in library text range");
|
||||||
|
if (offset != nullptr) {
|
||||||
|
*offset = addr - base;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Loads .dll/.so and in case of error it checks if .dll/.so was built
|
// Loads .dll/.so and in case of error it checks if .dll/.so was built
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2012, 2019 SAP SE. All rights reserved.
|
* Copyright (c) 2012, 2023 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -278,6 +278,24 @@ bool AixSymbols::get_module_name(address pc,
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool AixSymbols::get_module_name_and_base(address pc,
|
||||||
|
char* p_name, size_t namelen,
|
||||||
|
address* p_base) {
|
||||||
|
|
||||||
|
if (p_base && p_name && namelen > 0) {
|
||||||
|
p_name[0] = '\0';
|
||||||
|
loaded_module_t lm;
|
||||||
|
if (LoadedLibraries::find_for_text_address(pc, &lm)) {
|
||||||
|
strncpy(p_name, lm.shortname, namelen);
|
||||||
|
p_name[namelen - 1] = '\0';
|
||||||
|
*p_base = (address) lm.text;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// Special implementation of dladdr for Aix based on LoadedLibraries
|
// Special implementation of dladdr for Aix based on LoadedLibraries
|
||||||
// Note: dladdr returns non-zero for ok, 0 for error!
|
// Note: dladdr returns non-zero for ok, 0 for error!
|
||||||
// Note: dladdr is not posix, but a non-standard GNU extension. So this tries to
|
// Note: dladdr is not posix, but a non-standard GNU extension. So this tries to
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2012, 2015 SAP SE. All rights reserved.
|
* Copyright (c) 2012, 2023 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -83,6 +83,14 @@ class AixSymbols {
|
|||||||
char* p_name, size_t namelen // [out] module name
|
char* p_name, size_t namelen // [out] module name
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Given a program counter, returns the name of the module (library and module) the pc points to
|
||||||
|
// and the base address of the module the pc points to
|
||||||
|
static bool get_module_name_and_base (
|
||||||
|
address pc, // [in] program counter
|
||||||
|
char* p_name, size_t namelen, // [out] module name
|
||||||
|
address* p_base // [out] base address of library
|
||||||
|
);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class AixNativeCallstack {
|
class AixNativeCallstack {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user