Bug 7229

Summary: iasl disassembler gets arguments of external methods wrong
Product: ACPI Reporter: Thomas Renninger (trenn)
Component: ACPICA-CoreAssignee: Robert Moore (Robert.Moore)
Status: CLOSED DOCUMENTED    
Severity: normal CC: acpi-bugzilla
Priority: P2    
Hardware: i386   
OS: Linux   
Kernel Version: ACPICA version (20060912) Subsystem:
Regression: --- Bisected commit-id:
Attachments: acpidump of affected BIOS

Description Thomas Renninger 2006-09-29 03:00:51 UTC
Also one External is declared as internal object, but it's a method with one 
argument.

I tried:
iasl -d -e DSDT.dat SSDT2.dat
iasl -sa SSDT2.dsl

There is:
    External (C0E5, MethodObj)    // 6 Arguments
    External (C0E0, IntObj)

But in DSDT those are declared as:

    Method (C0E5, 5, Serialized)
    Method (C0E0, 1, Serialized)

Therefore compiling SSDT2 results in wrong output:

        Store (C0E5 (0x00, 0x00, C333, C334, Local1, Local3), \_SB.C234)
        Local2
        Local3
        Local1
        C331

        Store (C0E0, 0x00)
        C334

I know this is known, I just want to note it down and add a table for 
verification/testing. Tell me how I can help further.
Comment 1 Thomas Renninger 2006-09-29 03:02:02 UTC
Created attachment 9123 [details]
acpidump of affected BIOS
Comment 2 Robert Moore 2006-09-29 14:00:28 UTC
Essentially, since there is no information in the AML that tells the 
disassembler how many arguments there are for an external method, the 
disassembler has to attempt an educated guess.

I'm not sure that there is any way to deterministically glean the number of 
arguments.

Any ideas on this are welcome.
Comment 3 Len Brown 2007-12-28 20:16:07 UTC
iASL issues should be filed 
in the (newly public) acpica bugzilla,
http://acpica.org/bugzilla/
rather than here in the kernel.org (Linux kernel specific) bugzilla.