src/os/solaris/vm/os_solaris.cpp

changeset 4889
cc32ccaaf47f
parent 4888
17bf4d428955
child 4891
8be1318fbe77
equal deleted inserted replaced
4888:17bf4d428955 4889:cc32ccaaf47f
5806 } 5806 }
5807 } 5807 }
5808 5808
5809 //--------------------------------------------------------------------------------- 5809 //---------------------------------------------------------------------------------
5810 5810
5811 static address same_page(address x, address y) {
5812 intptr_t page_bits = -os::vm_page_size();
5813 if ((intptr_t(x) & page_bits) == (intptr_t(y) & page_bits))
5814 return x;
5815 else if (x > y)
5816 return (address)(intptr_t(y) | ~page_bits) + 1;
5817 else
5818 return (address)(intptr_t(y) & page_bits);
5819 }
5820
5821 bool os::find(address addr, outputStream* st) { 5811 bool os::find(address addr, outputStream* st) {
5822 Dl_info dlinfo; 5812 Dl_info dlinfo;
5823 memset(&dlinfo, 0, sizeof(dlinfo)); 5813 memset(&dlinfo, 0, sizeof(dlinfo));
5824 if (dladdr(addr, &dlinfo)) { 5814 if (dladdr(addr, &dlinfo)) {
5825 #ifdef _LP64 5815 #ifdef _LP64
5841 #endif 5831 #endif
5842 st->cr(); 5832 st->cr();
5843 5833
5844 if (Verbose) { 5834 if (Verbose) {
5845 // decode some bytes around the PC 5835 // decode some bytes around the PC
5846 address begin = same_page(addr-40, addr); 5836 address begin = clamp_address_in_page(addr-40, addr, os::vm_page_size());
5847 address end = same_page(addr+40, addr); 5837 address end = clamp_address_in_page(addr+40, addr, os::vm_page_size());
5848 address lowest = (address) dlinfo.dli_sname; 5838 address lowest = (address) dlinfo.dli_sname;
5849 if (!lowest) lowest = (address) dlinfo.dli_fbase; 5839 if (!lowest) lowest = (address) dlinfo.dli_fbase;
5850 if (begin < lowest) begin = lowest; 5840 if (begin < lowest) begin = lowest;
5851 Dl_info dlinfo2; 5841 Dl_info dlinfo2;
5852 if (dladdr(end, &dlinfo2) && dlinfo2.dli_saddr != dlinfo.dli_saddr 5842 if (dladdr(end, &dlinfo2) && dlinfo2.dli_saddr != dlinfo.dli_saddr

mercurial