#[derive(Debug)]
pub enum MemoryMapParseError
{
Mismatched
{
explanation: &'static str,
},
CouldNotOpenFile(io::Error),
SmapsFileDoesNotExist,
MissingRequiredField
{
zero_based_line_number: usize,
zero_based_field_index: usize,
name: &'static str,
},
CouldNotParseNumberField
{
zero_based_line_number: usize,
zero_based_field_index: usize,
name: &'static str,
cause: ParseNumberError
},
MemoryPolicyUnrecognised
{
zero_based_line_number: usize,
unrecognised_memory_policy: Box<[u8]>,
},
PermissionsFieldIsWrongLength
{
zero_based_line_number: usize,
zero_based_field_index: usize,
},
PermissionsFieldUnrecognised
{
zero_based_line_number: usize,
zero_based_field_index: usize,
unrecognised: [u8; 3],
},
SharingFieldUnrecognised
{
zero_based_line_number: usize,
zero_based_field_index: usize,
unrecognised: u8,
},
FromAndToAreInvalid
{
zero_based_line_number: usize,
from: VirtualAddress,
to: VirtualAddress,
},
FromTooSmall
{
zero_based_line_number: usize,
from: VirtualAddress,
to: VirtualAddress,
},
UnknownSpecialFileName
{
zero_based_line_number: usize,
special_file_name: Vec<u8>,
},
RepeatedSpecialFileName
{
zero_based_line_number: usize,
special_file_name: MemoryMapEntryKindSpecial,
},
OffsetWasNotZeroForAnonymous
{
zero_based_line_number: usize,
offset: u32,
},
BlockDeviceWasNotZeroZeroForAnonymous
{
zero_based_line_number: usize,
block_device: BlockDevice,
},
InodeWasNotZeroForAnonymous
{
zero_based_line_number: usize,
inode: Inode,
},
OffsetWasNotZeroForSpecialFileName
{
zero_based_line_number: usize,
special_file_name: MemoryMapEntryKindSpecial,
offset: u32,
},
BlockDeviceWasNotZeroZeroForSpecialFileName
{
zero_based_line_number: usize,
special_file_name: MemoryMapEntryKindSpecial,
block_device: BlockDevice,
},
InodeWasNotZeroForSpecialFileName
{
zero_based_line_number: usize,
special_file_name: MemoryMapEntryKindSpecial,
inode: Inode,
},
ProtectionWasNotExpectedForSpecialFileName
{
zero_based_line_number: usize,
special_file_name: MemoryMapEntryKindSpecial,
protection: Protection,
expected_protection: Protection,
},
SharingWasNotPrivateForSpecialFileName
{
zero_based_line_number: usize,
special_file_name: MemoryMapEntryKindSpecial,
sharing: Sharing,
},
MissingStackMapping,
MissingVdsoMapping,
MissingVvarMapping,
ExpectedStatisticLine,
StatisticMissingColon
{
zero_based_line_number: usize,
},
StatisticMissingSpaceAfterColon
{
zero_based_line_number: usize,
},
StatisticWasNotAPageSize
{
zero_based_line_number: usize,
},
StatisticWasNotABoolean
{
zero_based_line_number: usize,
number: u64,
},
DuplicateStatistic
{
zero_based_line_number: usize,
statistic_name: Box<[u8]>,
},
StatisticWasNotKilobyte
{
zero_based_line_number: usize,
statistic_name: Box<[u8]>,
},
StatisticWasNotCount
{
zero_based_line_number: usize,
statistic_name: Box<[u8]>,
},
MissingStatistic(&'static str),
ExceedsSize(&'static str),
#[cfg(not(target_arch = "powerpc64"))] KernelPageSizeAndMemoryManagementUnitPageSizeDiffer,
#[cfg(target_arch = "powerpc64")] KernelPageSizeLessThanMemoryManagementUnitPageSize,
SizeDoesMatchMemoryRange,
#[allow(missing_docs)]
VmFlagsByteLengthNotAMultipleOfThree,
#[allow(missing_docs)]
UnrecognisedVmFlag([u8; 2]),
#[allow(missing_docs)]
DuplicateVmFlagPermission,
#[allow(missing_docs)]
DuplicateVmFlag(VmFlag),
#[allow(missing_docs)]
IllegalCombinationOfVmFlagPermissions,
#[allow(missing_docs)]
InvalidVmFlagProtection,
#[allow(missing_docs)]
InvalidVmFlagSharing,
#[allow(missing_docs)]
NumaMapKeyValueDidNotHaveEqualsSign,
NumaMapMaxValueWasZeroOrOne,
ActiveWasPresentWhenHugePagesArePresent,
#[allow(missing_docs)]
NumaMapMissingKernelPageSize,
#[allow(missing_docs)]
CouldNotParseNumaMapsKeyValueField
{
cause: ParseNumberError
},
#[allow(missing_docs)]
NumaMapKeyRepeated { name: &'static str },
#[allow(missing_docs)]
NumaMapNodeKeyRepeated { numa_node: NumaNode },
#[allow(missing_docs)]
UnknownSetMemoryPolicyHasDetails,
#[allow(missing_docs)]
UnknownSetMemoryPolicyReportedByLinuxIndicatesABugInLinux,
#[allow(missing_docs)]
DefaultOrLocalMemoryPolicyHasNumaNodes,
#[allow(missing_docs)]
PreferredMemoryPolicyHasNoNumaNodes,
#[allow(missing_docs)]
PreferredMemoryPolicyHasMoreThanOneNumaNode,
#[allow(missing_docs)]
UnrecognisedMemoryPolicyDynamism { value: Box<[u8]> },
#[allow(missing_docs)]
CouldNotParseMemoryPolicyNumaNodesList
{
cause: ListParseError
},
HugePagesForVdsoOrVvarMapping,
}
impl Display for MemoryMapParseError
{
#[inline(always)]
fn fmt(&self, f: &mut Formatter) -> fmt::Result
{
Debug::fmt(self, f)
}
}
impl From<ListParseError> for MemoryMapParseError
{
#[inline(always)]
fn from(cause: ListParseError) -> Self
{
MemoryMapParseError::CouldNotParseMemoryPolicyNumaNodesList { cause }
}
}
impl error::Error for MemoryMapParseError
{
#[inline(always)]
fn source(&self) -> Option<&(dyn error::Error + 'static)>
{
use self::MemoryMapParseError::*;
match self
{
&Mismatched { .. } => None,
&CouldNotOpenFile(ref error) => Some(error),
&SmapsFileDoesNotExist => None,
&MissingRequiredField { .. } => None,
&CouldNotParseNumberField { ref cause, .. } => Some(cause),
&MemoryPolicyUnrecognised { .. } => None,
&PermissionsFieldIsWrongLength { .. } => None,
&PermissionsFieldUnrecognised { .. } => None,
&SharingFieldUnrecognised { .. } => None,
&FromAndToAreInvalid { .. } => None,
&FromTooSmall { .. } => None,
&UnknownSpecialFileName { .. } => None,
&RepeatedSpecialFileName { .. } => None,
&OffsetWasNotZeroForAnonymous { .. } => None,
&BlockDeviceWasNotZeroZeroForAnonymous { .. } => None,
&InodeWasNotZeroForAnonymous { .. } => None,
&OffsetWasNotZeroForSpecialFileName { .. } => None,
&BlockDeviceWasNotZeroZeroForSpecialFileName { .. } => None,
&InodeWasNotZeroForSpecialFileName { .. } => None,
&ProtectionWasNotExpectedForSpecialFileName { .. } => None,
&SharingWasNotPrivateForSpecialFileName { .. } => None,
&MissingStackMapping => None,
&MissingVdsoMapping => None,
&MissingVvarMapping => None,
&ExpectedStatisticLine => None,
&StatisticMissingColon { .. } => None,
&StatisticMissingSpaceAfterColon { .. } => None,
&StatisticWasNotAPageSize { .. } => None,
&StatisticWasNotABoolean { .. } => None,
&DuplicateStatistic { .. } => None,
&StatisticWasNotKilobyte { .. } => None,
&StatisticWasNotCount { .. } => None,
&MissingStatistic(..) => None,
&ExceedsSize(..) => None,
#[cfg(not(target_arch = "powerpc64"))] &KernelPageSizeAndMemoryManagementUnitPageSizeDiffer => None,
&SizeDoesMatchMemoryRange => None,
&VmFlagsByteLengthNotAMultipleOfThree => None,
&UnrecognisedVmFlag( .. ) => None,
&DuplicateVmFlagPermission => None,
&DuplicateVmFlag( .. ) => None,
&IllegalCombinationOfVmFlagPermissions => None,
&InvalidVmFlagProtection => None,
&InvalidVmFlagSharing => None,
&NumaMapKeyValueDidNotHaveEqualsSign => None,
&NumaMapMaxValueWasZeroOrOne => None,
&ActiveWasPresentWhenHugePagesArePresent => None,
&NumaMapMissingKernelPageSize => None,
&CouldNotParseNumaMapsKeyValueField { ref cause, .. } => Some(cause),
&NumaMapKeyRepeated { .. } => None,
&NumaMapNodeKeyRepeated { .. } => None,
&UnknownSetMemoryPolicyHasDetails => None,
&UnknownSetMemoryPolicyReportedByLinuxIndicatesABugInLinux => None,
&DefaultOrLocalMemoryPolicyHasNumaNodes => None,
&PreferredMemoryPolicyHasNoNumaNodes => None,
&PreferredMemoryPolicyHasMoreThanOneNumaNode => None,
&UnrecognisedMemoryPolicyDynamism { .. } => None,
&CouldNotParseMemoryPolicyNumaNodesList { ref cause } => Some(cause),
&HugePagesForVdsoOrVvarMapping => None,
}
}
}