@@ -312,15 +312,21 @@ static bool my_disclaim64(char* addr, size_t size) {
312
312
313
313
for (unsigned int i = 0 ; i < numFullDisclaimsNeeded; i ++) {
314
314
if (::disclaim (p, maxDisclaimSize, DISCLAIM_ZEROMEM) != 0 ) {
315
- trcVerbose (" Cannot disclaim %p - %p (errno %d)\n " , p, p + maxDisclaimSize, errno);
315
+ ErrnoPreserver ep;
316
+ log_trace (os, map)(" disclaim failed: " RANGEFMT " errno=(%s)" ,
317
+ RANGEFMTARGS (p, maxDisclaimSize),
318
+ os::strerror (ep.saved_errno ()));
316
319
return false ;
317
320
}
318
321
p += maxDisclaimSize;
319
322
}
320
323
321
324
if (lastDisclaimSize > 0 ) {
322
325
if (::disclaim (p, lastDisclaimSize, DISCLAIM_ZEROMEM) != 0 ) {
323
- trcVerbose (" Cannot disclaim %p - %p (errno %d)\n " , p, p + lastDisclaimSize, errno);
326
+ ErrnoPreserver ep;
327
+ log_trace (os, map)(" disclaim failed: " RANGEFMT " errno=(%s)" ,
328
+ RANGEFMTARGS (p, lastDisclaimSize),
329
+ os::strerror (ep.saved_errno ()));
324
330
return false ;
325
331
}
326
332
}
@@ -1505,15 +1511,12 @@ struct vmembk_t {
1505
1511
// also check that range is fully page aligned to the page size if the block.
1506
1512
void assert_is_valid_subrange (char * p, size_t s) const {
1507
1513
if (!contains_range (p, s)) {
1508
- trcVerbose (" [" PTR_FORMAT " - " PTR_FORMAT " ] is not a sub "
1509
- " range of [" PTR_FORMAT " - " PTR_FORMAT " ]." ,
1510
- p2i (p), p2i (p + s), p2i (addr), p2i (addr + size));
1511
- guarantee0 (false );
1514
+ fatal (RANGEFMT " is not a sub range of " RANGEFMT, RANGEFMTARGS (p, s),
1515
+ RANGEFMTARGS (addr, size));
1512
1516
}
1513
1517
if (!is_aligned_to (p, pagesize) || !is_aligned_to (p + s, pagesize)) {
1514
- trcVerbose (" range [" PTR_FORMAT " - " PTR_FORMAT " ] is not"
1515
- " aligned to pagesize (%lu)" , p2i (p), p2i (p + s), (unsigned long ) pagesize);
1516
- guarantee0 (false );
1518
+ fatal (" range " RANGEFMT " is not aligned to pagesize (%lu)" ,
1519
+ RANGEFMTARGS (p, s), (unsigned long )pagesize);
1517
1520
}
1518
1521
}
1519
1522
};
@@ -1580,7 +1583,9 @@ static char* reserve_shmated_memory (size_t bytes, char* requested_addr) {
1580
1583
// We must prevent anyone from attaching too close to the
1581
1584
// BRK because that may cause malloc OOM.
1582
1585
if (requested_addr != nullptr && is_close_to_brk ((address)requested_addr)) {
1583
- trcVerbose (" Wish address " PTR_FORMAT " is too close to the BRK segment." , p2i (requested_addr));
1586
+ log_info (os, map)(" Wish address " PTR_FORMAT
1587
+ " is too close to the BRK segment." ,
1588
+ p2i (requested_addr));
1584
1589
// Since we treat an attach to the wrong address as an error later anyway,
1585
1590
// we return null here
1586
1591
return nullptr ;
@@ -1598,7 +1603,9 @@ static char* reserve_shmated_memory (size_t bytes, char* requested_addr) {
1598
1603
// Reserve the shared segment.
1599
1604
int shmid = shmget (IPC_PRIVATE, size, IPC_CREAT | S_IRUSR | S_IWUSR);
1600
1605
if (shmid == -1 ) {
1601
- trcVerbose (" shmget(.., " UINTX_FORMAT " , ..) failed (errno: %d)." , size, errno);
1606
+ ErrnoPreserver ep;
1607
+ log_trace (os, map)(" shmget(.., " UINTX_FORMAT " , ..) failed (errno=%s)." ,
1608
+ size, os::strerror (ep.saved_errno ()));
1602
1609
return nullptr ;
1603
1610
}
1604
1611
@@ -1612,10 +1619,10 @@ static char* reserve_shmated_memory (size_t bytes, char* requested_addr) {
1612
1619
memset (&shmbuf, 0 , sizeof (shmbuf));
1613
1620
shmbuf.shm_pagesize = 64 *K;
1614
1621
if (shmctl (shmid, SHM_PAGESIZE, &shmbuf) != 0 ) {
1615
- trcVerbose ( " Failed to set page size (need " UINTX_FORMAT " 64K pages) - shmctl failed with %d. " ,
1616
- size / ( 64 *K), errno);
1617
- // I want to know if this ever happens.
1618
- assert ( false , " failed to set page size for shmat " );
1622
+ assert ( false ,
1623
+ " Failed to set page size (need " UINTX_FORMAT
1624
+ " 64K pages) - shmctl failed. (errno=%s). " ,
1625
+ size / ( 64 * K), os::strerror ( os::get_last_error ()) );
1619
1626
}
1620
1627
1621
1628
// Now attach the shared segment.
@@ -1630,31 +1637,44 @@ static char* reserve_shmated_memory (size_t bytes, char* requested_addr) {
1630
1637
1631
1638
// (A) Right after shmat and before handing shmat errors delete the shm segment.
1632
1639
if (::shmctl (shmid, IPC_RMID, nullptr ) == -1 ) {
1633
- trcVerbose (" shmctl(%u, IPC_RMID) failed (%d)\n " , shmid, errno);
1640
+ ErrnoPreserver ep;
1641
+ log_trace (os, map)(" shmctl(%u, IPC_RMID) failed (errno=%s)\n " ,
1642
+ shmid,
1643
+ os::strerror (ep.saved_errno ()));
1634
1644
assert (false , " failed to remove shared memory segment!" );
1635
1645
}
1636
1646
1637
1647
// Handle shmat error. If we failed to attach, just return.
1638
1648
if (addr == (char *)-1 ) {
1639
- trcVerbose (" Failed to attach segment at " PTR_FORMAT " (%d)." , p2i (requested_addr), errno_shmat);
1649
+ ErrnoPreserver ep;
1650
+ log_trace (os, map)(" Failed to attach segment at " PTR_FORMAT " (errno=%s)." ,
1651
+ p2i (requested_addr),
1652
+ os::strerror (ep.saved_errno ()));
1640
1653
return nullptr ;
1641
1654
}
1642
1655
1643
1656
// Just for info: query the real page size. In case setting the page size did not
1644
1657
// work (see above), the system may have given us something other then 4K (LDR_CNTRL).
1645
1658
const size_t real_pagesize = os::Aix::query_pagesize (addr);
1646
1659
if (real_pagesize != (size_t )shmbuf.shm_pagesize ) {
1647
- trcVerbose (" pagesize is, surprisingly, " SIZE_FORMAT, real_pagesize);
1660
+ log_trace (os, map)(" pagesize is, surprisingly, " SIZE_FORMAT,
1661
+ real_pagesize);
1648
1662
}
1649
1663
1650
1664
if (addr) {
1651
- trcVerbose (" shm-allocated " PTR_FORMAT " .. " PTR_FORMAT " (" UINTX_FORMAT " bytes, " UINTX_FORMAT " %s pages)" ,
1652
- p2i (addr), p2i (addr + size - 1 ), size, size/real_pagesize, describe_pagesize (real_pagesize));
1665
+ log_trace (os, map)(" shm-allocated succeeded: " RANGEFMT
1666
+ " (" UINTX_FORMAT " %s pages)" ,
1667
+ RANGEFMTARGS (addr, size),
1668
+ size / real_pagesize,
1669
+ describe_pagesize (real_pagesize));
1653
1670
} else {
1654
1671
if (requested_addr != nullptr ) {
1655
- trcVerbose (" failed to shm-allocate " UINTX_FORMAT " bytes at with address " PTR_FORMAT " ." , size, p2i (requested_addr));
1672
+ log_trace (os, map)(" shm-allocate failed: " RANGEFMT,
1673
+ RANGEFMTARGS (requested_addr, size));
1656
1674
} else {
1657
- trcVerbose (" failed to shm-allocate " UINTX_FORMAT " bytes at any address." , size);
1675
+ log_trace (os, map)(" failed to shm-allocate " UINTX_FORMAT
1676
+ " bytes at any address." ,
1677
+ size);
1658
1678
}
1659
1679
}
1660
1680
@@ -1674,9 +1694,13 @@ static bool release_shmated_memory(char* addr, size_t size) {
1674
1694
1675
1695
// TODO: is there a way to verify shm size without doing bookkeeping?
1676
1696
if (::shmdt (addr) != 0 ) {
1677
- trcVerbose (" error (%d)." , errno);
1697
+ ErrnoPreserver ep;
1698
+ log_trace (os, map)(" shmdt failed: " RANGEFMT " errno=(%s)" ,
1699
+ RANGEFMTARGS (addr, size),
1700
+ os::strerror (ep.saved_errno ()));
1678
1701
} else {
1679
- trcVerbose (" ok." );
1702
+ log_trace (os, map)(" shmdt succeded: " RANGEFMT,
1703
+ RANGEFMTARGS (addr, size));
1680
1704
rc = true ;
1681
1705
}
1682
1706
return rc;
@@ -1705,14 +1729,18 @@ static char* reserve_mmaped_memory(size_t bytes, char* requested_addr) {
1705
1729
bytes, p2i (requested_addr));
1706
1730
1707
1731
if (requested_addr && !is_aligned_to (requested_addr, os::vm_page_size ()) != 0 ) {
1708
- trcVerbose (" Wish address " PTR_FORMAT " not aligned to page boundary." , p2i (requested_addr));
1732
+ log_trace (os, map)(" Wish address " PTR_FORMAT
1733
+ " not aligned to page boundary." ,
1734
+ p2i (requested_addr));
1709
1735
return nullptr ;
1710
1736
}
1711
1737
1712
1738
// We must prevent anyone from attaching too close to the
1713
1739
// BRK because that may cause malloc OOM.
1714
1740
if (requested_addr != nullptr && is_close_to_brk ((address)requested_addr)) {
1715
- trcVerbose (" Wish address " PTR_FORMAT " is too close to the BRK segment." , p2i (requested_addr));
1741
+ log_trace (os, map)(" Wish address " PTR_FORMAT
1742
+ " is too close to the BRK segment." ,
1743
+ p2i (requested_addr));
1716
1744
// Since we treat an attach to the wrong address as an error later anyway,
1717
1745
// we return null here
1718
1746
return nullptr ;
@@ -1755,11 +1783,17 @@ static char* reserve_mmaped_memory(size_t bytes, char* requested_addr) {
1755
1783
PROT_READ|PROT_WRITE|PROT_EXEC, flags, -1 , 0 );
1756
1784
1757
1785
if (addr == MAP_FAILED) {
1758
- trcVerbose (" mmap(" PTR_FORMAT " , " UINTX_FORMAT " , ..) failed (%d)" , p2i (requested_addr), size, errno);
1786
+ ErrnoPreserver ep;
1787
+ log_trace (os, map)(" mmap failed: " RANGEFMT " errno=(%s)" ,
1788
+ RANGEFMTARGS (requested_addr, size),
1789
+ os::strerror (ep.saved_errno ()));
1759
1790
return nullptr ;
1760
1791
} else if (requested_addr != nullptr && addr != requested_addr) {
1761
- trcVerbose (" mmap(" PTR_FORMAT " , " UINTX_FORMAT " , ..) succeeded, but at a different address than requested (" PTR_FORMAT " ), will unmap" ,
1762
- p2i (requested_addr), size, p2i (addr));
1792
+ log_trace (os, map)(" mmap succeeded: " RANGEFMT
1793
+ " , but at a different address than"
1794
+ " requested (" PTR_FORMAT " ), will unmap" ,
1795
+ RANGEFMTARGS (requested_addr, size),
1796
+ p2i (addr));
1763
1797
::munmap (addr, extra_size);
1764
1798
return nullptr ;
1765
1799
}
@@ -1798,10 +1832,14 @@ static bool release_mmaped_memory(char* addr, size_t size) {
1798
1832
bool rc = false ;
1799
1833
1800
1834
if (::munmap (addr, size) != 0 ) {
1801
- trcVerbose (" failed (%d)\n " , errno);
1835
+ ErrnoPreserver ep;
1836
+ log_trace (os, map)(" munmap failed: " RANGEFMT " errno=(%s)" ,
1837
+ RANGEFMTARGS (addr, size),
1838
+ os::strerror (ep.saved_errno ()));
1802
1839
rc = false ;
1803
1840
} else {
1804
- trcVerbose (" ok." );
1841
+ log_trace (os, map)(" munmap succeeded: " RANGEFMT,
1842
+ RANGEFMTARGS (addr, size));
1805
1843
rc = true ;
1806
1844
}
1807
1845
@@ -1819,10 +1857,14 @@ static bool uncommit_mmaped_memory(char* addr, size_t size) {
1819
1857
1820
1858
// Uncommit mmap memory with msync MS_INVALIDATE.
1821
1859
if (::msync (addr, size, MS_INVALIDATE) != 0 ) {
1822
- trcVerbose (" failed (%d)\n " , errno);
1860
+ ErrnoPreserver ep;
1861
+ log_trace (os, map)(" msync failed: " RANGEFMT " errno=(%s)" ,
1862
+ RANGEFMTARGS (addr, size),
1863
+ os::strerror (ep.saved_errno ()));
1823
1864
rc = false ;
1824
1865
} else {
1825
- trcVerbose (" ok." );
1866
+ log_trace (os, map)(" msync succeeded: " RANGEFMT,
1867
+ RANGEFMTARGS (addr, size));
1826
1868
rc = true ;
1827
1869
}
1828
1870
0 commit comments