0,0 → 1,295 |
/* |
* badcode.asl |
* |
* This file contains examples of the extended error checking and |
* typechecking capabilities of the iASL compiler. Other ASL compilers |
* may ignore these errors completely. Note - this is not an exhaustive |
* list of errors detected by iASL, it shows many of the errors that |
* are not detected by other ASL compilers. |
* |
* To compile, use: |
* iasl badcode.asl |
*/ |
DefinitionBlock ("badcode.aml", "DSDT", 1, "Intel", "Example", 0x00000001) |
{ |
Name (INT1, 0) |
Name (BUF1, Buffer() {0,1,2,3}) |
Event (EVT1) |
|
// Invalid SyncLevel in Mutex declaration |
|
Mutex (MTX1, 32) |
|
// Integer beyond the table integer size (32 bits) |
|
Name (BIG, 0x1234567887654321) |
|
// CPackage length does not match initializer list length |
|
Name (PKG1, Package(5) {0,1}) |
|
// Inadvertent use of single backslash in a string |
|
Name (PATH, Buffer() {"\_SB_.PCI2._CRS"}) |
|
// Invalid hex escape sequence |
|
Name (ESC1, "abcdefg\x00hijklmn") |
|
// Field access beyond region bounds |
|
OperationRegion (OPR1, SystemMemory, 0x2000, 6) |
Field (OPR1, DWordAcc, NoLock, Preserve) |
{ |
Offset (4), |
FLD1, 8 |
} |
|
// Some address spaces support only ByteAcc or BufferAcc |
|
OperationRegion (OPR2, EmbeddedControl, 0x4000, 8) |
Field (OPR2, DWordAcc, NoLock, Preserve) |
{ |
FLD2, 8 |
} |
OperationRegion (OPR3, SMBus, 0x8000, 16) |
Field (OPR3, WordAcc, NoLock, Preserve) |
{ |
FLD3, 8 |
} |
|
// Invalid SyncLevel in method declaration |
|
Method (MTH1, 0, NotSerialized, 32) |
{ |
// Invalid arguments and uninitialized locals |
|
Store (Arg3, Local0) |
Store (Local1, Local2) |
|
// Parameter typechecking (MTX1 is invalid type) |
|
Subtract (MTX1, 4, Local3) |
|
// Various invalid parameters |
|
CreateField (BUF1, 0, Subtract (4, 4), FLD1) |
|
// Unchecked mutex and event timeouts |
|
Acquire (MTX1, 100) |
Wait (EVT1, 1) |
|
// Result from operation is not used - statement has no effect |
|
Add (INT1, 8) |
|
// Unreachable code |
|
Return (0) |
Store (5, INT1) |
} |
|
Method (MTH2) |
{ |
// Switch with no Case statements |
|
Switch (ToInteger (INT1)) |
{ |
Default |
{ |
} |
} |
|
if (LEqual (INT1, 0)) |
{ |
Return (INT1) |
} |
|
// Fallthrough exit path does not return a value |
} |
|
Method (MTH3) |
{ |
// Method MTH2 above does not always return a value |
|
Store (MTH2 (), Local0) |
} |
|
// Invalid _HID value |
|
Name (_HID, "*PNP0C0A") |
|
// Predefined Name typechecking |
|
Name (_PRW, 4) |
Name (_FDI, Buffer () {0}) |
|
// Predefined Name argument count validation |
// and return value validation |
|
Method (_OSC, 5) |
{ |
} |
|
// Predefined Names that must be implemented as control methods |
|
Name (_L01, 1) |
Name (_E02, 2) |
Name (_Q03, 3) |
Name (_ON, 0) |
Name (_INI, 1) |
Name (_PTP, 2) |
|
/* |
* Resource Descriptor error checking |
*/ |
Name (RSC1, ResourceTemplate () |
{ |
// Illegal nested StartDependent macros |
|
StartDependentFn (0, 0) |
{ |
StartDependentFn (0, 0) |
{ |
} |
} |
|
// Missing EndDependentFn macro |
}) |
|
Name (RSC2, ResourceTemplate () |
{ |
// AddressMin is larger than AddressMax |
IO (Decode16, |
0x07D0, // Range Minimum |
0x03E8, // Range Maximum |
0x01, // Alignment |
0x20, // Length |
) |
|
// Length larger than Min/Max window size |
Memory32 (ReadOnly, |
0x00001000, // Range Minimum |
0x00002000, // Range Maximum |
0x00000004, // Alignment |
0x00002000, // Length |
) |
|
// Min and Max not multiples of alignment value |
Memory32 (ReadOnly, |
0x00001001, // Range Minimum |
0x00002002, // Range Maximum |
0x00000004, // Alignment |
0x00000200, // Length |
) |
|
// 10-bit ISA I/O address has a max of 0x3FF |
FixedIO ( |
0xFFFF, // Address |
0x20, // Length |
) |
|
// Invalid AccessSize parameter |
Register (SystemIO, |
0x08, // Bit Width |
0x00, // Bit Offset |
0x0000000000000100, // Address |
0x05 // Access Size |
) |
|
// Invalid ResourceType (0xB0) |
QWordSpace (0xB0, ResourceConsumer, PosDecode, MinFixed, MaxFixed, 0xA5, |
0x0000, // Granularity |
0xA000, // Range Minimum |
0xBFFF, // Range Maximum |
0x0000, // Translation Offset |
0x2000, // Length |
,, ) |
|
// AddressMin is larger than AddressMax |
WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, |
0x0000, // Granularity |
0x0200, // Range Minimum |
0x0100, // Range Maximum |
0x0000, // Translation Offset |
0x0100, // Length |
,, , TypeStatic) |
|
// Length larger than Min/Max window size |
DWordSpace (0xC3, ResourceConsumer, PosDecode, MinFixed, MaxFixed, 0xA5, |
0x00000000, // Granularity |
0x000C8000, // Range Minimum |
0x000C9000, // Range Maximum |
0x00000000, // Translation Offset |
0x00001002, // Length |
,, ) |
|
// Granularity must be (power-of-two -1) |
DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxNotFixed, NonCacheable, ReadWrite, |
0x00000010, |
0x40000000, |
0xFED9FFFF, |
0x00000000, |
0xBECA0000) |
|
// Address Min (with zero length) not on granularity boundary |
QWordIO (ResourceProducer, MinFixed, MaxNotFixed, PosDecode, EntireRange, |
0x0000000000000003, // Granularity |
0x0000000000000B02, // Range Minimum |
0x0000000000000C00, // Range Maximum |
0x0000000000000000, // Translation Offset |
0x0000000000000000, // Length |
,, , TypeStatic) |
|
// Address Max (with zero length) not on (granularity boundary -1) |
QWordMemory (ResourceProducer, PosDecode, MinNotFixed, MaxFixed, Cacheable, ReadWrite, |
0x0000000000000001, // Granularity |
0x0000000000100000, // Range Minimum |
0x00000000002FFFFE, // Range Maximum |
0x0000000000000000, // Translation Offset |
0x0000000000000000, // Length |
,, , AddressRangeMemory, TypeStatic) |
|
// Invalid combination: zero length, both Min and Max are fixed |
DWordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, |
0x00000000, // Granularity |
0x000C8000, // Range Minimum |
0x000C8FFF, // Range Maximum |
0x00000000, // Translation Offset |
0x00000000, // Length |
,, ) |
|
// Invalid combination: non-zero length, Min Fixed, Max not fixed |
DWordIO (ResourceProducer, MinFixed, MaxNotFixed, PosDecode, EntireRange, |
0x00000001, // Granularity |
0x000C8000, // Range Minimum |
0x000C8FFF, // Range Maximum |
0x00000000, // Translation Offset |
0x00000100, // Length |
,, ) |
|
// Invalid combination: non-zero length, Min not Fixed, Max fixed |
DWordIO (ResourceProducer, MinNotFixed, MaxFixed, PosDecode, EntireRange, |
0x00000001, // Granularity |
0x000C8000, // Range Minimum |
0x000C8FFF, // Range Maximum |
0x00000000, // Translation Offset |
0x00000200, // Length |
,, ) |
|
// Granularity must be zero if non-zero length, min/max fixed |
DWordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, |
0x0000000F, // Granularity |
0x000C8000, // Range Minimum |
0x000C8FFF, // Range Maximum |
0x00000000, // Translation Offset |
0x00001000, // Length |
,, ) |
|
// Missing StartDependentFn macro |
|
EndDependentFn () |
}) |
} |
|