@@ -84,7 +84,7 @@ lldb::addr_t IRMemoryMap::FindSpace(size_t size) {
84
84
// any allocations. Otherwise start at the beginning of memory.
85
85
86
86
if (m_allocations.empty ()) {
87
- ret = 0x0 ;
87
+ ret = 0 ;
88
88
} else {
89
89
auto back = m_allocations.rbegin ();
90
90
lldb::addr_t addr = back->first ;
@@ -116,10 +116,18 @@ lldb::addr_t IRMemoryMap::FindSpace(size_t size) {
116
116
Status err = process_sp->GetMemoryRegionInfo (ret, region_info);
117
117
if (err.Success ()) {
118
118
while (true ) {
119
- if (region_info.GetReadable () != MemoryRegionInfo::OptionalBool::eNo ||
120
- region_info.GetWritable () != MemoryRegionInfo::OptionalBool::eNo ||
121
- region_info.GetExecutable () !=
122
- MemoryRegionInfo::OptionalBool::eNo) {
119
+ if (region_info.GetRange ().GetRangeBase () == 0 &&
120
+ region_info.GetRange ().GetRangeEnd () < end_of_memory) {
121
+ // Don't use a region that starts at address 0,
122
+ // it can make it harder to debug null dereference crashes
123
+ // in the inferior.
124
+ ret = region_info.GetRange ().GetRangeEnd ();
125
+ } else if (region_info.GetReadable () !=
126
+ MemoryRegionInfo::OptionalBool::eNo ||
127
+ region_info.GetWritable () !=
128
+ MemoryRegionInfo::OptionalBool::eNo ||
129
+ region_info.GetExecutable () !=
130
+ MemoryRegionInfo::OptionalBool::eNo) {
123
131
if (region_info.GetRange ().GetRangeEnd () - 1 >= end_of_memory) {
124
132
ret = LLDB_INVALID_ADDRESS;
125
133
break ;
0 commit comments