107 lines
2.9 KiB
Plaintext
107 lines
2.9 KiB
Plaintext
// Name: Recursive table loads with LoadTable
|
|
// Expect: int => 0
|
|
|
|
DefinitionBlock ("", "DSDT", 2, "uTEST", "TESTTABL", 0xF0F0F0F0)
|
|
{
|
|
External(ITEM, IntObj)
|
|
External(NUMB, IntObj)
|
|
External(NUMA, IntObj)
|
|
External(VISI, IntObj)
|
|
|
|
// All dynamic loads branch into here
|
|
If (CondRefOf(ITEM)) {
|
|
// Recursively start 10 table loads
|
|
If (NUMB < 10) {
|
|
NUMB += 1
|
|
Local0 = NUMB
|
|
|
|
If (NUMB == 3) {
|
|
Local0 = LoadTable("DSDT", "uTEST", "", "", "PARA", Local0)
|
|
VISI += 1
|
|
} ElseIf (NUMB == 5) {
|
|
Local0 = LoadTable("DSDT", "", "", "", "PARA", Local0)
|
|
VISI += 10
|
|
} ElseIf (NUMB == 7) {
|
|
Local0 = LoadTable("DSDT", "", "TESTTABL", "", "", Local0)
|
|
VISI += 100
|
|
} Else {
|
|
Local0 = LoadTable("DSDT", "uTEST", "TESTTABL", "", "PARA", Local0)
|
|
VISI += 1000
|
|
}
|
|
|
|
// The last load is expected to fail, everything before should succeed
|
|
If (!Local0) {
|
|
If (NUMB != 10) {
|
|
NUMA = 0xDEADBEEF
|
|
Printf("Table load %o failed", NUMB)
|
|
}
|
|
} Else {
|
|
NUMA += 1
|
|
}
|
|
|
|
// Return something bogus here to make sure the return value isn't
|
|
// propagated to the caller of Load.
|
|
Return (Package { 1, 2 ,3})
|
|
}
|
|
|
|
// We're the last table load, do something naughty to cause an error
|
|
Local0 = Package { 1 }
|
|
Local1 = RefOf(Local0)
|
|
|
|
// This code specifically attempts to perform a bogus implicit cast
|
|
Local1 = "Hello World"
|
|
}
|
|
|
|
Name (ITEM, 123)
|
|
|
|
// Number of started table loads
|
|
Name (NUMB, 0)
|
|
|
|
// Number of finished table loads
|
|
Name (NUMA, 0)
|
|
|
|
// Visited branches
|
|
Name (VISI, 0)
|
|
|
|
Name (PARA, 0)
|
|
Name (PASS, "FAIL")
|
|
|
|
Method (MAIN, 0, Serialized)
|
|
{
|
|
Local0 = LoadTable("DSDT", "uTEST", "TESTTABL", "", "PASS", 0x53534150)
|
|
Printf("Recursive loads finished!")
|
|
|
|
If (!Local0) {
|
|
Printf("Table load failed!")
|
|
Return (0xCAFEBABE)
|
|
}
|
|
|
|
If (NUMB != 10) {
|
|
Printf("Invalid NUMB value %o", ToDecimalString(NUMB))
|
|
Return (0xEEFFAABB)
|
|
}
|
|
|
|
If (VISI != 7111) {
|
|
Printf("Invalid VISI value %o", ToDecimalString(VISI))
|
|
Return (0xAFFAAFFA)
|
|
}
|
|
|
|
If (NUMA != 9) {
|
|
Printf("Invalid NUMA value %o", ToDecimalString(NUMA))
|
|
Return (0x11223344)
|
|
}
|
|
|
|
If (PARA != 1) {
|
|
Printf("Invalid PARA value %o", ToDecimalString(PARA))
|
|
Return (0xDDFFBBCC)
|
|
}
|
|
|
|
If (PASS != "PASS") {
|
|
Printf("Invalid PASS value %o", PASS)
|
|
Return (0xECECECEC)
|
|
}
|
|
|
|
Return (0)
|
|
}
|
|
}
|