1716 if (libjvm_base_addr == (address)dlinfo.dli_fbase) return true;
1717 }
1718
1719 return false;
1720 }
1721
1722 bool os::dll_address_to_function_name(address addr, char *buf,
1723 int buflen, int *offset) {
1724 Dl_info dlinfo;
1725
1726 if (dladdr((void*)addr, &dlinfo) && dlinfo.dli_sname != NULL) {
1727 if (buf != NULL) {
1728 if(!Decoder::demangle(dlinfo.dli_sname, buf, buflen)) {
1729 jio_snprintf(buf, buflen, "%s", dlinfo.dli_sname);
1730 }
1731 }
1732 if (offset != NULL) *offset = addr - (address)dlinfo.dli_saddr;
1733 return true;
1734 } else if (dlinfo.dli_fname != NULL && dlinfo.dli_fbase != 0) {
1735 if (Decoder::decode((address)(addr - (address)dlinfo.dli_fbase),
1736 dlinfo.dli_fname, buf, buflen, offset) == Decoder::no_error) {
1737 return true;
1738 }
1739 }
1740
1741 if (buf != NULL) buf[0] = '\0';
1742 if (offset != NULL) *offset = -1;
1743 return false;
1744 }
1745
1746 struct _address_to_library_name {
1747 address addr; // input : memory address
1748 size_t buflen; // size of fname
1749 char* fname; // output: library name
1750 address base; // library base addr
1751 };
1752
1753 static int address_to_library_name_callback(struct dl_phdr_info *info,
1754 size_t size, void *data) {
1755 int i;
1756 bool found = false;
|
1716 if (libjvm_base_addr == (address)dlinfo.dli_fbase) return true;
1717 }
1718
1719 return false;
1720 }
1721
1722 bool os::dll_address_to_function_name(address addr, char *buf,
1723 int buflen, int *offset) {
1724 Dl_info dlinfo;
1725
1726 if (dladdr((void*)addr, &dlinfo) && dlinfo.dli_sname != NULL) {
1727 if (buf != NULL) {
1728 if(!Decoder::demangle(dlinfo.dli_sname, buf, buflen)) {
1729 jio_snprintf(buf, buflen, "%s", dlinfo.dli_sname);
1730 }
1731 }
1732 if (offset != NULL) *offset = addr - (address)dlinfo.dli_saddr;
1733 return true;
1734 } else if (dlinfo.dli_fname != NULL && dlinfo.dli_fbase != 0) {
1735 if (Decoder::decode((address)(addr - (address)dlinfo.dli_fbase),
1736 buf, buflen, offset, dlinfo.dli_fname)) {
1737 return true;
1738 }
1739 }
1740
1741 if (buf != NULL) buf[0] = '\0';
1742 if (offset != NULL) *offset = -1;
1743 return false;
1744 }
1745
1746 struct _address_to_library_name {
1747 address addr; // input : memory address
1748 size_t buflen; // size of fname
1749 char* fname; // output: library name
1750 address base; // library base addr
1751 };
1752
1753 static int address_to_library_name_callback(struct dl_phdr_info *info,
1754 size_t size, void *data) {
1755 int i;
1756 bool found = false;
|