diff options
author | 2008-06-04 18:20:09 +0000 | |
---|---|---|
committer | 2008-06-04 18:20:09 +0000 | |
commit | 5fb7e6caf549196ac5eefee3b706c5db643f5d3d (patch) | |
tree | 8c0ebf06368954f4d9314ae7fda5b02cef047634 | |
parent | adderss -> address (diff) | |
download | wireguard-openbsd-5fb7e6caf549196ac5eefee3b706c5db643f5d3d.tar.xz wireguard-openbsd-5fb7e6caf549196ac5eefee3b706c5db643f5d3d.zip |
Fix panic on my i386 box when local variable isnt handled properly.
code from jordan
-rw-r--r-- | sys/dev/acpi/dsdt.c | 18 |
1 files changed, 6 insertions, 12 deletions
diff --git a/sys/dev/acpi/dsdt.c b/sys/dev/acpi/dsdt.c index 7c24ff679c3..c2074744fd3 100644 --- a/sys/dev/acpi/dsdt.c +++ b/sys/dev/acpi/dsdt.c @@ -1,5 +1,5 @@ -/* $OpenBSD: dsdt.c,v 1.116 2008/06/01 17:59:55 marco Exp $ */ +/* $OpenBSD: dsdt.c,v 1.117 2008/06/04 18:20:09 marco Exp $ */ /* * Copyright (c) 2005 Jordan Hargrave <jordan@openbsd.org> * @@ -2940,6 +2940,10 @@ aml_xstore(struct aml_scope *scope, struct aml_value *lhs , int64_t ival, aml_xfldio(scope, rhs, &tmp, ACPI_IOREAD); rhs = &tmp; } + /* Store to LocalX: free value */ + if (lhs->stack >= AMLOP_LOCAL0 && lhs->stack <= AMLOP_LOCAL7) + aml_freevalue(lhs); + while (lhs->type == AML_OBJTYPE_OBJREF) { lhs = lhs->v_objref.ref; } @@ -3758,17 +3762,6 @@ aml_xparse(struct aml_scope *scope, int ret_type, const char *stype) case AMLOP_LOCAL7: my_ret = opargs[0]; aml_xaddref(my_ret, htab->mnem); - if (ret_type == AML_ARG_INTEGER) { - /* Return copy of integer value */ - aml_xconvert(my_ret, &my_ret, AML_OBJTYPE_INTEGER, 0); - ival = my_ret->v_integer; - aml_xdelref(&my_ret, "local.int"); - my_ret = NULL; - } - else if (ret_type == AML_ARG_TARGET) { - /* Store to LocalX: free object */ - aml_freevalue(my_ret); - } break; case AMLOP_ARG0: case AMLOP_ARG1: @@ -4369,6 +4362,7 @@ aml_xparse(struct aml_scope *scope, int ret_type, const char *stype) if (ret_type == 'i' && my_ret && my_ret->type != AML_OBJTYPE_INTEGER) { dnprintf(10,"quick: %.4x convert to integer %s -> %s\n", pc, htab->mnem, stype); + aml_xconvert(my_ret, &my_ret, AML_OBJTYPE_INTEGER, 0); } if (my_ret != NULL) { /* Display result */ |