In tracking this further, I find that _kern_reserve_address_range can
return one of the following values:
directly
B_BAD_ADDRESS
B_BAD_VALUE
from vm_reserve_address_range:
B_BAD_VALUE
B_BAD_TEAM_ID
but in src/system/runtime_loader/images.cpp
if (_kern_reserve_address_range(&reservedAddress, addressSpecifier,
reservedSize) != B_OK)
return B_NO_MEMORY;
In the case of B_BAD_TEAM_ID, it originates from:
src/system/kernel/vm/vm.cpp
vm_reserve_address_range(team_id team, void** _address, uint32 addressSpec,
addr_t size, uint32 flags)
{
if (size == 0)
return B_BAD_VALUE;
AddressSpaceWriteLocker locker(team);
if (!locker.IsLocked())
return B_BAD_TEAM_ID;
Possibly this is important information that is getting lost, even if it
is rarely encountered.
tim