#include <kern/exc_resource.h>
kern/exc_resource.h
EXC_RESOURCE related macros, namespace etc.
macroEXC_RESOURCE_DECODE_RESOURCE_TYPE
EXC_RESOURCE type and flavor decoding routines
#define EXC_RESOURCE_DECODE_RESOURCE_TYPE(code) (((code) >> 61) & 0x7ULL)
macroEXC_RESOURCE_DECODE_FLAVOR
#define EXC_RESOURCE_DECODE_FLAVOR(code) (((code) >> 58) & 0x7ULL)
macroRESOURCE_TYPE_WAKEUPS
#define RESOURCE_TYPE_WAKEUPS 2
macroRESOURCE_TYPE_MEMORY
#define RESOURCE_TYPE_MEMORY 3
macroRESOURCE_TYPE_IO
#define RESOURCE_TYPE_IO 4
macroRESOURCE_TYPE_THREADS
#define RESOURCE_TYPE_THREADS 5
macroRESOURCE_TYPE_PORTS
#define RESOURCE_TYPE_PORTS 6
macroFLAVOR_CPU_MONITOR_FATAL
#define FLAVOR_CPU_MONITOR_FATAL 2
macroEXC_RESOURCE_CPUMONITOR_DECODE_INTERVAL
RESOURCE_TYPE_CPU decoding macros
#define EXC_RESOURCE_CPUMONITOR_DECODE_INTERVAL(code) (((code) >> 7) & 0x1FFFFFFULL)
macroEXC_RESOURCE_CPUMONITOR_DECODE_PERCENTAGE
#define EXC_RESOURCE_CPUMONITOR_DECODE_PERCENTAGE(code) ((code) & 0x7FULL)
macroEXC_RESOURCE_CPUMONITOR_DECODE_PERCENTAGE_OBSERVED
#define EXC_RESOURCE_CPUMONITOR_DECODE_PERCENTAGE_OBSERVED(subcode) ((subcode) & 0x7FULL)
macroEXC_RESOURCE_CPUMONITOR_DECODE_WAKEUPS_PERMITTED
#define EXC_RESOURCE_CPUMONITOR_DECODE_WAKEUPS_PERMITTED(code) ((code) & 0xFFFULL)
macroEXC_RESOURCE_CPUMONITOR_DECODE_OBSERVATION_INTERVAL
#define EXC_RESOURCE_CPUMONITOR_DECODE_OBSERVATION_INTERVAL(code) (((code) >> 20) & 0xFFFFFULL)
macroEXC_RESOURCE_CPUMONITOR_DECODE_WAKEUPS_OBSERVED
#define EXC_RESOURCE_CPUMONITOR_DECODE_WAKEUPS_OBSERVED(subcode) ((subcode) & 0xFFFFFULL)
macroFLAVOR_HIGH_WATERMARK
RESOURCE_TYPE_MEMORY flavors
#define FLAVOR_HIGH_WATERMARK 1
Indicates that the exception is due to memory limit warning
macroFLAVOR_DIAG_MEMLIMIT
#define FLAVOR_DIAG_MEMLIMIT 2
Indicates that the exception is due to a preset diagnostics memory consumption threshold
macroFLAVOR_CONCLAVE_LIMIT
#define FLAVOR_CONCLAVE_LIMIT 3
Indicates that the exception is due to the hard conclave memory limit
macroEXC_RESOURCE_HWM_DECODE_LIMIT
#define EXC_RESOURCE_HWM_DECODE_LIMIT(code) ((code) & EXC_RESOURCE_HWM_LIMIT_MASK)
macroEXC_RESOURCE_HWM_IS_ACTIVE
#define EXC_RESOURCE_HWM_IS_ACTIVE(code) (!!((code) & EXC_RESOURCE_HWM_ACTIVE_BIT))
macroFLAVOR_IO_LOGICAL_WRITES
#define FLAVOR_IO_LOGICAL_WRITES 2
macroEXC_RESOURCE_IO_DECODE_INTERVAL
RESOURCE_TYPE_IO decoding macros
#define EXC_RESOURCE_IO_DECODE_INTERVAL(code) (((code) >> 15) & 0x1FFFFULL)
macroEXC_RESOURCE_IO_DECODE_LIMIT
#define EXC_RESOURCE_IO_DECODE_LIMIT(code) ((code) & 0x7FFFULL)
macroEXC_RESOURCE_IO_OBSERVED
#define EXC_RESOURCE_IO_OBSERVED(subcode) ((subcode) & 0x7FFFULL)
macroEXC_RESOURCE_THREADS_DECODE_THREADS
#define EXC_RESOURCE_THREADS_DECODE_THREADS(code) ((code) & 0x7FFFULL)
macroFLAVOR_THREADS_HIGH_WATERMARK
RESOURCE_TYPE_THREADS flavors
#define FLAVOR_THREADS_HIGH_WATERMARK 1
macroEXC_RESOURCE_THREADS_DECODE_PORTS
RESOURCE_TYPE_PORTS exception code & subcode.
This is sent by the kernel when the process is
leaking ipc ports and has filled its port space
code:
+-----------------------------------------------+
|[63:61] RESOURCE |[60:58] FLAVOR_ |[57:32] |
|_TYPE_PORTS |PORT_SPACE_FULL |Unused |
+-----------------------------------------------+
| [31:24] Unused | [23:0] # of ports |
| | allocated |
+-----------------------------------------------+
subcode:
+-----------------------------------------------+
| | Unused |
| | |
+-----------------------------------------------+
#define EXC_RESOURCE_THREADS_DECODE_PORTS(code) ((code) & 0xFFFFFFULL)
macroEXC_RESOURCE_ENCODE_TYPE
EXC_RESOURCE type and flavor encoding macros
#define EXC_RESOURCE_ENCODE_TYPE(code, type) ((code) |= (((uint64_t)(type) & 0x7ULL) << 61))
macroEXC_RESOURCE_ENCODE_FLAVOR
#define EXC_RESOURCE_ENCODE_FLAVOR(code, flavor) ((code) |= (((uint64_t)(flavor) & 0x7ULL) << 58))
macroEXC_RESOURCE_CPUMONITOR_ENCODE_INTERVAL
RESOURCE_TYPE_CPU::FLAVOR_CPU_MONITOR specific encoding macros
#define EXC_RESOURCE_CPUMONITOR_ENCODE_INTERVAL(code, interval) ((code) |= (((uint64_t)(interval) & 0x1FFFFFFULL) << 7))
macroEXC_RESOURCE_CPUMONITOR_ENCODE_PERCENTAGE
#define EXC_RESOURCE_CPUMONITOR_ENCODE_PERCENTAGE(code, percentage) ((code) |= (((uint64_t)(percentage) & 0x7FULL)))
macroEXC_RESOURCE_CPUMONITOR_ENCODE_WAKEUPS_PERMITTED
RESOURCE_TYPE_WAKEUPS::FLAVOR_WAKEUPS_MONITOR specific encoding macros
#define EXC_RESOURCE_CPUMONITOR_ENCODE_WAKEUPS_PERMITTED(code, num) ((code) |= ((uint64_t)(num) & 0xFFFFFULL))
macroEXC_RESOURCE_CPUMONITOR_ENCODE_OBSERVATION_INTERVAL
#define EXC_RESOURCE_CPUMONITOR_ENCODE_OBSERVATION_INTERVAL(code, num) ((code) |= (((uint64_t)(num) & 0xFFFULL) << 20))
macroEXC_RESOURCE_CPUMONITOR_ENCODE_WAKEUPS_OBSERVED
#define EXC_RESOURCE_CPUMONITOR_ENCODE_WAKEUPS_OBSERVED(subcode, num) ((subcode) |= ((uint64_t)(num) & 0xFFFFFULL))
macroEXC_RESOURCE_HWM_ENCODE_LIMIT
RESOURCE_TYPE_MEMORY::FLAVOR_HIGH_WATERMARK specific encoding macros
#define EXC_RESOURCE_HWM_ENCODE_LIMIT(code, num) ((code) |= ((uint64_t)(num) & EXC_RESOURCE_HWM_LIMIT_MASK))
macroEXC_RESOURCE_IO_ENCODE_INTERVAL
#define EXC_RESOURCE_IO_ENCODE_INTERVAL(code, interval) ((code) |= (((uint64_t)(interval) & 0x1FFFFULL) << 15))
macroEXC_RESOURCE_IO_ENCODE_LIMIT
#define EXC_RESOURCE_IO_ENCODE_LIMIT(code, limit) ((code) |= (((uint64_t)(limit) & 0x7FFFULL)))
macroEXC_RESOURCE_IO_ENCODE_OBSERVED
#define EXC_RESOURCE_IO_ENCODE_OBSERVED(subcode, num) ((subcode) |= (((uint64_t)(num) & 0x7FFFULL)))
macroEXC_RESOURCE_THREADS_ENCODE_THREADS
RESOURCE_TYPE_THREADS specific encoding macros
#define EXC_RESOURCE_THREADS_ENCODE_THREADS(code, threads) ((code) |= (((uint64_t)(threads) & 0x7FFFULL)))
macroEXC_RESOURCE_PORTS_ENCODE_PORTS
RESOURCE_TYPE_PORTS::FLAVOR_PORT_SPACE_FULL specific encoding macros
#define EXC_RESOURCE_PORTS_ENCODE_PORTS(code, num) ((code) |= ((uint64_t)(num) & 0xFFFFFFULL))