diff options
author | YASUOKA Masahiko <yasuoka@cvs.openbsd.org> | 2021-03-07 22:53:47 +0000 |
---|---|---|
committer | YASUOKA Masahiko <yasuoka@cvs.openbsd.org> | 2021-03-07 22:53:47 +0000 |
commit | c8b5238b8ee05cbc99fb42022a7fc0529de2678e (patch) | |
tree | 06a5fb045403b7fc92ff5f7b4bbaf361cc98929e /sys/dev/acpi | |
parent | 20d2551b0eefe063c627f168fbf40e3b16b585ed (diff) |
Fix aml_store() to work properly when the lvalue is a reference of
LocalX. In that case, resolving the reference must be done before
resetting the LocalX variable. test daniel
ok kettenis
Diffstat (limited to 'sys/dev/acpi')
-rw-r--r-- | sys/dev/acpi/dsdt.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/sys/dev/acpi/dsdt.c b/sys/dev/acpi/dsdt.c index 461c810a878..0cbeeb43d08 100644 --- a/sys/dev/acpi/dsdt.c +++ b/sys/dev/acpi/dsdt.c @@ -1,4 +1,4 @@ -/* $OpenBSD: dsdt.c,v 1.257 2020/12/17 17:57:19 kettenis Exp $ */ +/* $OpenBSD: dsdt.c,v 1.258 2021/03/07 22:53:46 yasuoka Exp $ */ /* * Copyright (c) 2005 Jordan Hargrave <jordan@openbsd.org> * @@ -2961,11 +2961,12 @@ aml_store(struct aml_scope *scope, struct aml_value *lhs , int64_t ival, aml_rwfield(rhs, 0, rhs->v_field.bitlen, &tmp, ACPI_IOREAD); rhs = &tmp; } + + lhs = aml_gettgt(lhs, AMLOP_STORE); + /* Store to LocalX: free value */ if (lhs->stack >= AMLOP_LOCAL0 && lhs->stack <= AMLOP_LOCAL7) aml_freevalue(lhs); - - lhs = aml_gettgt(lhs, AMLOP_STORE); switch (lhs->type) { case AML_OBJTYPE_UNINITIALIZED: aml_copyvalue(lhs, rhs); |