Home | History | Annotate | Line # | Download | only in misc
badcode.asl revision 1.1
      1  1.1  jruoho /*
      2  1.1  jruoho  * badcode.asl
      3  1.1  jruoho  *
      4  1.1  jruoho  * This file contains examples of the extended error checking and
      5  1.1  jruoho  * typechecking capabilities of the iASL compiler. Other ASL compilers
      6  1.1  jruoho  * may ignore these errors completely. Note - this is not an exhaustive
      7  1.1  jruoho  * list of errors detected by iASL, it shows many of the errors that
      8  1.1  jruoho  * are not detected by other ASL compilers.
      9  1.1  jruoho  *
     10  1.1  jruoho  * To compile, use:
     11  1.1  jruoho  * iasl badcode.asl
     12  1.1  jruoho  */
     13  1.1  jruoho DefinitionBlock ("badcode.aml", "DSDT", 1, "Intel", "Example", 0x00000001)
     14  1.1  jruoho {
     15  1.1  jruoho     Name (INT1, 0)
     16  1.1  jruoho     Name (BUF1, Buffer() {0,1,2,3})
     17  1.1  jruoho     Event (EVT1)
     18  1.1  jruoho 
     19  1.1  jruoho     // Invalid SyncLevel in Mutex declaration
     20  1.1  jruoho 
     21  1.1  jruoho     Mutex (MTX1, 32)
     22  1.1  jruoho 
     23  1.1  jruoho     // Integer beyond the table integer size (32 bits)
     24  1.1  jruoho 
     25  1.1  jruoho     Name (BIG, 0x1234567887654321)
     26  1.1  jruoho 
     27  1.1  jruoho     // CPackage length does not match initializer list length
     28  1.1  jruoho 
     29  1.1  jruoho     Name (PKG1, Package(5) {0,1})
     30  1.1  jruoho 
     31  1.1  jruoho     // Inadvertent use of single backslash in a string
     32  1.1  jruoho 
     33  1.1  jruoho     Name (PATH, Buffer() {"\_SB_.PCI2._CRS"})
     34  1.1  jruoho 
     35  1.1  jruoho     // Invalid hex escape sequence
     36  1.1  jruoho 
     37  1.1  jruoho     Name (ESC1, "abcdefg\x00hijklmn")
     38  1.1  jruoho 
     39  1.1  jruoho     // Field access beyond region bounds
     40  1.1  jruoho 
     41  1.1  jruoho     OperationRegion (OPR1, SystemMemory, 0x2000, 6)
     42  1.1  jruoho     Field (OPR1, DWordAcc, NoLock, Preserve)
     43  1.1  jruoho     {
     44  1.1  jruoho         Offset (4),
     45  1.1  jruoho         FLD1, 8
     46  1.1  jruoho     }
     47  1.1  jruoho 
     48  1.1  jruoho     // Some address spaces support only ByteAcc or BufferAcc
     49  1.1  jruoho 
     50  1.1  jruoho     OperationRegion (OPR2, EmbeddedControl, 0x4000, 8)
     51  1.1  jruoho     Field (OPR2, DWordAcc, NoLock, Preserve)
     52  1.1  jruoho     {
     53  1.1  jruoho         FLD2, 8
     54  1.1  jruoho     }
     55  1.1  jruoho     OperationRegion (OPR3, SMBus, 0x8000, 16)
     56  1.1  jruoho     Field (OPR3, WordAcc, NoLock, Preserve)
     57  1.1  jruoho     {
     58  1.1  jruoho         FLD3, 8
     59  1.1  jruoho     }
     60  1.1  jruoho 
     61  1.1  jruoho     // Invalid SyncLevel in method declaration
     62  1.1  jruoho 
     63  1.1  jruoho     Method (MTH1, 0, NotSerialized, 32)
     64  1.1  jruoho     {
     65  1.1  jruoho         // Invalid arguments and uninitialized locals
     66  1.1  jruoho 
     67  1.1  jruoho         Store (Arg3, Local0)
     68  1.1  jruoho         Store (Local1, Local2)
     69  1.1  jruoho 
     70  1.1  jruoho         // Parameter typechecking (MTX1 is invalid type)
     71  1.1  jruoho 
     72  1.1  jruoho         Subtract (MTX1, 4, Local3)
     73  1.1  jruoho 
     74  1.1  jruoho         // Various invalid parameters
     75  1.1  jruoho 
     76  1.1  jruoho         CreateField (BUF1, 0, Subtract (4, 4), FLD1)
     77  1.1  jruoho 
     78  1.1  jruoho         // Unchecked mutex and event timeouts
     79  1.1  jruoho 
     80  1.1  jruoho         Acquire (MTX1, 100)
     81  1.1  jruoho         Wait (EVT1, 1)
     82  1.1  jruoho 
     83  1.1  jruoho         // Result from operation is not used - statement has no effect
     84  1.1  jruoho 
     85  1.1  jruoho         Add (INT1, 8)
     86  1.1  jruoho 
     87  1.1  jruoho         // Unreachable code
     88  1.1  jruoho 
     89  1.1  jruoho         Return (0)
     90  1.1  jruoho         Store (5, INT1)
     91  1.1  jruoho     }
     92  1.1  jruoho 
     93  1.1  jruoho     Method (MTH2)
     94  1.1  jruoho     {
     95  1.1  jruoho         // Switch with no Case statements
     96  1.1  jruoho 
     97  1.1  jruoho         Switch (ToInteger (INT1))
     98  1.1  jruoho         {
     99  1.1  jruoho             Default
    100  1.1  jruoho             {
    101  1.1  jruoho             }
    102  1.1  jruoho         }
    103  1.1  jruoho 
    104  1.1  jruoho         if (LEqual (INT1, 0))
    105  1.1  jruoho         {
    106  1.1  jruoho             Return (INT1)
    107  1.1  jruoho         }
    108  1.1  jruoho 
    109  1.1  jruoho         // Fallthrough exit path does not return a value
    110  1.1  jruoho     }
    111  1.1  jruoho 
    112  1.1  jruoho     Method (MTH3)
    113  1.1  jruoho     {
    114  1.1  jruoho         // Method MTH2 above does not always return a value
    115  1.1  jruoho 
    116  1.1  jruoho         Store (MTH2 (), Local0)
    117  1.1  jruoho     }
    118  1.1  jruoho 
    119  1.1  jruoho     // Invalid _HID value
    120  1.1  jruoho 
    121  1.1  jruoho     Name (_HID, "*PNP0C0A")
    122  1.1  jruoho 
    123  1.1  jruoho     // Predefined Name typechecking
    124  1.1  jruoho 
    125  1.1  jruoho     Name (_PRW, 4)
    126  1.1  jruoho     Name (_FDI, Buffer () {0})
    127  1.1  jruoho 
    128  1.1  jruoho     // Predefined Name argument count validation
    129  1.1  jruoho     // and return value validation
    130  1.1  jruoho 
    131  1.1  jruoho     Method (_OSC, 5)
    132  1.1  jruoho     {
    133  1.1  jruoho     }
    134  1.1  jruoho 
    135  1.1  jruoho     // Predefined Names that must be implemented as control methods
    136  1.1  jruoho 
    137  1.1  jruoho     Name (_L01, 1)
    138  1.1  jruoho     Name (_E02, 2)
    139  1.1  jruoho     Name (_Q03, 3)
    140  1.1  jruoho     Name (_ON,  0)
    141  1.1  jruoho     Name (_INI, 1)
    142  1.1  jruoho     Name (_PTP, 2)
    143  1.1  jruoho 
    144  1.1  jruoho     /*
    145  1.1  jruoho      * Resource Descriptor error checking
    146  1.1  jruoho      */
    147  1.1  jruoho     Name (RSC1, ResourceTemplate ()
    148  1.1  jruoho     {
    149  1.1  jruoho         // Illegal nested StartDependent macros
    150  1.1  jruoho 
    151  1.1  jruoho 		StartDependentFn (0, 0)
    152  1.1  jruoho 		{
    153  1.1  jruoho 		    StartDependentFn (0, 0)
    154  1.1  jruoho 		    {
    155  1.1  jruoho             }
    156  1.1  jruoho         }
    157  1.1  jruoho 
    158  1.1  jruoho         // Missing EndDependentFn macro
    159  1.1  jruoho     })
    160  1.1  jruoho 
    161  1.1  jruoho     Name (RSC2, ResourceTemplate ()
    162  1.1  jruoho     {
    163  1.1  jruoho         // AddressMin is larger than AddressMax
    164  1.1  jruoho         IO (Decode16,
    165  1.1  jruoho             0x07D0,             // Range Minimum
    166  1.1  jruoho             0x03E8,             // Range Maximum
    167  1.1  jruoho             0x01,               // Alignment
    168  1.1  jruoho             0x20,               // Length
    169  1.1  jruoho             )
    170  1.1  jruoho 
    171  1.1  jruoho         // Length larger than Min/Max window size
    172  1.1  jruoho         Memory32 (ReadOnly,
    173  1.1  jruoho             0x00001000,         // Range Minimum
    174  1.1  jruoho             0x00002000,         // Range Maximum
    175  1.1  jruoho             0x00000004,         // Alignment
    176  1.1  jruoho             0x00002000,         // Length
    177  1.1  jruoho             )
    178  1.1  jruoho 
    179  1.1  jruoho         // Min and Max not multiples of alignment value
    180  1.1  jruoho         Memory32 (ReadOnly,
    181  1.1  jruoho             0x00001001,         // Range Minimum
    182  1.1  jruoho             0x00002002,         // Range Maximum
    183  1.1  jruoho             0x00000004,         // Alignment
    184  1.1  jruoho             0x00000200,         // Length
    185  1.1  jruoho             )
    186  1.1  jruoho 
    187  1.1  jruoho         // 10-bit ISA I/O address has a max of 0x3FF
    188  1.1  jruoho         FixedIO (
    189  1.1  jruoho             0xFFFF,             // Address
    190  1.1  jruoho             0x20,               // Length
    191  1.1  jruoho             )
    192  1.1  jruoho 
    193  1.1  jruoho         // Invalid AccessSize parameter
    194  1.1  jruoho         Register (SystemIO,
    195  1.1  jruoho             0x08,               // Bit Width
    196  1.1  jruoho             0x00,               // Bit Offset
    197  1.1  jruoho             0x0000000000000100, // Address
    198  1.1  jruoho             0x05                // Access Size
    199  1.1  jruoho             )
    200  1.1  jruoho 
    201  1.1  jruoho         // Invalid ResourceType (0xB0)
    202  1.1  jruoho         QWordSpace (0xB0, ResourceConsumer, PosDecode, MinFixed, MaxFixed, 0xA5,
    203  1.1  jruoho             0x0000,             // Granularity
    204  1.1  jruoho             0xA000,             // Range Minimum
    205  1.1  jruoho             0xBFFF,             // Range Maximum
    206  1.1  jruoho             0x0000,             // Translation Offset
    207  1.1  jruoho             0x2000,             // Length
    208  1.1  jruoho             ,, )
    209  1.1  jruoho 
    210  1.1  jruoho         // AddressMin is larger than AddressMax
    211  1.1  jruoho         WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange,
    212  1.1  jruoho             0x0000,             // Granularity
    213  1.1  jruoho             0x0200,             // Range Minimum
    214  1.1  jruoho             0x0100,             // Range Maximum
    215  1.1  jruoho             0x0000,             // Translation Offset
    216  1.1  jruoho             0x0100,             // Length
    217  1.1  jruoho             ,, , TypeStatic)
    218  1.1  jruoho 
    219  1.1  jruoho         // Length larger than Min/Max window size
    220  1.1  jruoho         DWordSpace (0xC3, ResourceConsumer, PosDecode, MinFixed, MaxFixed, 0xA5,
    221  1.1  jruoho             0x00000000,         // Granularity
    222  1.1  jruoho             0x000C8000,         // Range Minimum
    223  1.1  jruoho             0x000C9000,         // Range Maximum
    224  1.1  jruoho             0x00000000,         // Translation Offset
    225  1.1  jruoho             0x00001002,         // Length
    226  1.1  jruoho             ,, )
    227  1.1  jruoho 
    228  1.1  jruoho         // Granularity must be (power-of-two -1)
    229  1.1  jruoho         DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxNotFixed, NonCacheable, ReadWrite,
    230  1.1  jruoho             0x00000010,
    231  1.1  jruoho             0x40000000,
    232  1.1  jruoho             0xFED9FFFF,
    233  1.1  jruoho             0x00000000,
    234  1.1  jruoho             0xBECA0000)
    235  1.1  jruoho 
    236  1.1  jruoho         // Address Min (with zero length) not on granularity boundary
    237  1.1  jruoho         QWordIO (ResourceProducer, MinFixed, MaxNotFixed, PosDecode, EntireRange,
    238  1.1  jruoho             0x0000000000000003, // Granularity
    239  1.1  jruoho             0x0000000000000B02, // Range Minimum
    240  1.1  jruoho             0x0000000000000C00, // Range Maximum
    241  1.1  jruoho             0x0000000000000000, // Translation Offset
    242  1.1  jruoho             0x0000000000000000, // Length
    243  1.1  jruoho             ,, , TypeStatic)
    244  1.1  jruoho 
    245  1.1  jruoho         // Address Max (with zero length) not on (granularity boundary -1)
    246  1.1  jruoho         QWordMemory (ResourceProducer, PosDecode, MinNotFixed, MaxFixed, Cacheable, ReadWrite,
    247  1.1  jruoho             0x0000000000000001, // Granularity
    248  1.1  jruoho             0x0000000000100000, // Range Minimum
    249  1.1  jruoho             0x00000000002FFFFE, // Range Maximum
    250  1.1  jruoho             0x0000000000000000, // Translation Offset
    251  1.1  jruoho             0x0000000000000000, // Length
    252  1.1  jruoho             ,, , AddressRangeMemory, TypeStatic)
    253  1.1  jruoho 
    254  1.1  jruoho         // Invalid combination: zero length, both Min and Max are fixed
    255  1.1  jruoho         DWordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange,
    256  1.1  jruoho             0x00000000,         // Granularity
    257  1.1  jruoho             0x000C8000,         // Range Minimum
    258  1.1  jruoho             0x000C8FFF,         // Range Maximum
    259  1.1  jruoho             0x00000000,         // Translation Offset
    260  1.1  jruoho             0x00000000,         // Length
    261  1.1  jruoho             ,, )
    262  1.1  jruoho 
    263  1.1  jruoho         // Invalid combination: non-zero length, Min Fixed, Max not fixed
    264  1.1  jruoho         DWordIO (ResourceProducer, MinFixed, MaxNotFixed, PosDecode, EntireRange,
    265  1.1  jruoho             0x00000001,         // Granularity
    266  1.1  jruoho             0x000C8000,         // Range Minimum
    267  1.1  jruoho             0x000C8FFF,         // Range Maximum
    268  1.1  jruoho             0x00000000,         // Translation Offset
    269  1.1  jruoho             0x00000100,         // Length
    270  1.1  jruoho             ,, )
    271  1.1  jruoho 
    272  1.1  jruoho         // Invalid combination: non-zero length, Min not Fixed, Max fixed
    273  1.1  jruoho         DWordIO (ResourceProducer, MinNotFixed, MaxFixed, PosDecode, EntireRange,
    274  1.1  jruoho             0x00000001,         // Granularity
    275  1.1  jruoho             0x000C8000,         // Range Minimum
    276  1.1  jruoho             0x000C8FFF,         // Range Maximum
    277  1.1  jruoho             0x00000000,         // Translation Offset
    278  1.1  jruoho             0x00000200,         // Length
    279  1.1  jruoho             ,, )
    280  1.1  jruoho 
    281  1.1  jruoho         // Granularity must be zero if non-zero length, min/max fixed
    282  1.1  jruoho         DWordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange,
    283  1.1  jruoho             0x0000000F,         // Granularity
    284  1.1  jruoho             0x000C8000,         // Range Minimum
    285  1.1  jruoho             0x000C8FFF,         // Range Maximum
    286  1.1  jruoho             0x00000000,         // Translation Offset
    287  1.1  jruoho             0x00001000,         // Length
    288  1.1  jruoho             ,, )
    289  1.1  jruoho 
    290  1.1  jruoho         // Missing StartDependentFn macro
    291  1.1  jruoho 
    292  1.1  jruoho         EndDependentFn ()
    293  1.1  jruoho     })
    294  1.1  jruoho }
    295  1.1  jruoho 
    296