Bug 5360
Summary: | DerefOf doesn't evaluate String to Object | ||
---|---|---|---|
Product: | ACPI | Reporter: | Valery A Podrezov (Valery.A.Podrezov) |
Component: | ACPICA-Core | Assignee: | Valery A Podrezov (Valery.A.Podrezov) |
Status: | CLOSED CODE_FIX | ||
Severity: | normal | CC: | acpi-bugzilla, Robert.Moore |
Priority: | P2 | ||
Hardware: | i386 | ||
OS: | Linux | ||
Kernel Version: | 2.6 | Subsystem: | |
Regression: | --- | Bisected commit-id: | |
Attachments: |
ASL code to reproduce bug.
Proposed patch Proposed patch fixes simultaneously 5360 and 5392 |
Description
Valery A Podrezov
2005-10-04 08:38:10 UTC
Created attachment 6217 [details]
ASL code to reproduce bug.
The name of the Buffer (String) declared in the current
Method is passed to the DerefOf operator. It is expected
that DerefOf evaluate it to the contents of that Buffer
but exception occurs instead.
INTERNAL BUG NUMBER
12
Created attachment 7223 [details] Proposed patch TESTED: The update was tested by the ASLTS test suite runs (all the test cases) on the following systems: - CYGWIN_NT-5.1 1.5.18(0.132/4/2) 2005-07-02 20:30 i686 unknown unknown Cygwin - Linux 2.6.5-7.191-smp #1 SMP Tue Jun 28 14:58:56 UTC 2005 i686 i686 i386 GNU/Linux for the following modes supported by the ASLTS test suite: - 32-bit norm mode - 64-bit norm mode - 64-bit slack mode # 32-bit slack mode (currently impossible to run tests in this mode due to Bug198) The tests were run (on the systems described above) before update, then the tests were run on those systems after update. Then results of two runs were compared. All is Ok (the relevant error fixed, no new errors). SUPPORTED FEATURES (of DerefOf AML operator): 1. If parameter passed to DerefOf is String no matter the way it was delivered to (see examples below) and that String is a valid name (absolute or relative to the current scope) of some Object in the NameSpace the value of that object of NameSpace is returned by DerefOf. Examples: Store(DerefOf("b000"), Local7) Store(DerefOf(Arg0), Local7) Store(DerefOf(Local0), Local7) Store(DerefOf(s000), Local7) Store(DerefOf(m000()), Local7) Store(DerefOf(<other expressions>), Local7) where: "b000" - literal String s000 - Name(s000, "zzzz") Arg0 - contains string Local0 - contains string m000 - Method returning String <other expressions> - any expression resulting in String 2. If parameter passed to DerefOf is an IndexReference to some field (obtained by Index() AML operator) or an ObjectReference to some object (obtained by RefOf AML operator) then DerefOf processes those references. 3. In all other cases - DerefOf(Integer/String/Buffer/Package/Device/Mutex/Event/... etc.) exceptions occur. Created attachment 7259 [details]
Proposed patch fixes simultaneously 5360 and 5392
This patch fixes both 5360 and 5392.
They refer near functionality in exoparg1.c file.
Prefer one patch instead several ones were possible.
Released in ACPICA version 20060210 ACPICA 20060608 shipped in Linux-2.6.17-git9, closed. |