Mercurial > hg > graal-jvmci-8
comparison src/os/solaris/vm/os_solaris.cpp @ 9062:8be1318fbe77
Merge
author | dcubed |
---|---|
date | Fri, 05 Apr 2013 10:38:08 -0700 |
parents | 754c24457b20 cc32ccaaf47f |
children | 89e4d67fdd2a 746b070f5022 e12c9b3740db |
comparison
equal
deleted
inserted
replaced
9055:dcdeb150988c | 9062:8be1318fbe77 |
---|---|
1883 snprintf(buffer, buflen, "lib%s.so", fname); | 1883 snprintf(buffer, buflen, "lib%s.so", fname); |
1884 retval = true; | 1884 retval = true; |
1885 } else if (strchr(pname, *os::path_separator()) != NULL) { | 1885 } else if (strchr(pname, *os::path_separator()) != NULL) { |
1886 int n; | 1886 int n; |
1887 char** pelements = split_path(pname, &n); | 1887 char** pelements = split_path(pname, &n); |
1888 if (pelements == NULL) { | |
1889 return false; | |
1890 } | |
1888 for (int i = 0 ; i < n ; i++) { | 1891 for (int i = 0 ; i < n ; i++) { |
1889 // really shouldn't be NULL but what the heck, check can't hurt | 1892 // really shouldn't be NULL but what the heck, check can't hurt |
1890 if (pelements[i] == NULL || strlen(pelements[i]) == 0) { | 1893 if (pelements[i] == NULL || strlen(pelements[i]) == 0) { |
1891 continue; // skip the empty path values | 1894 continue; // skip the empty path values |
1892 } | 1895 } |
5785 } | 5788 } |
5786 } | 5789 } |
5787 | 5790 |
5788 //--------------------------------------------------------------------------------- | 5791 //--------------------------------------------------------------------------------- |
5789 | 5792 |
5790 static address same_page(address x, address y) { | |
5791 intptr_t page_bits = -os::vm_page_size(); | |
5792 if ((intptr_t(x) & page_bits) == (intptr_t(y) & page_bits)) | |
5793 return x; | |
5794 else if (x > y) | |
5795 return (address)(intptr_t(y) | ~page_bits) + 1; | |
5796 else | |
5797 return (address)(intptr_t(y) & page_bits); | |
5798 } | |
5799 | |
5800 bool os::find(address addr, outputStream* st) { | 5793 bool os::find(address addr, outputStream* st) { |
5801 Dl_info dlinfo; | 5794 Dl_info dlinfo; |
5802 memset(&dlinfo, 0, sizeof(dlinfo)); | 5795 memset(&dlinfo, 0, sizeof(dlinfo)); |
5803 if (dladdr(addr, &dlinfo)) { | 5796 if (dladdr(addr, &dlinfo)) { |
5804 #ifdef _LP64 | 5797 #ifdef _LP64 |
5820 #endif | 5813 #endif |
5821 st->cr(); | 5814 st->cr(); |
5822 | 5815 |
5823 if (Verbose) { | 5816 if (Verbose) { |
5824 // decode some bytes around the PC | 5817 // decode some bytes around the PC |
5825 address begin = same_page(addr-40, addr); | 5818 address begin = clamp_address_in_page(addr-40, addr, os::vm_page_size()); |
5826 address end = same_page(addr+40, addr); | 5819 address end = clamp_address_in_page(addr+40, addr, os::vm_page_size()); |
5827 address lowest = (address) dlinfo.dli_sname; | 5820 address lowest = (address) dlinfo.dli_sname; |
5828 if (!lowest) lowest = (address) dlinfo.dli_fbase; | 5821 if (!lowest) lowest = (address) dlinfo.dli_fbase; |
5829 if (begin < lowest) begin = lowest; | 5822 if (begin < lowest) begin = lowest; |
5830 Dl_info dlinfo2; | 5823 Dl_info dlinfo2; |
5831 if (dladdr(end, &dlinfo2) && dlinfo2.dli_saddr != dlinfo.dli_saddr | 5824 if (dladdr(end, &dlinfo2) && dlinfo2.dli_saddr != dlinfo.dli_saddr |