Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a9d8ea79 authored by Erik Schmauss's avatar Erik Schmauss Committed by Rafael J. Wysocki
Browse files

ACPICA: Disassembler: allow conflicting external declarations to be emitted.

ACPICA commit 0ed9f2e2ccc112439eaa355b5952a05d6fdb7814

An external declaration is a conflicting declaration when a name has
been declared as an external and a named object within the same file.

Link: https://github.com/acpica/acpica/commit/0ed9f2e2


Signed-off-by: default avatarErik Schmauss <erik.schmauss@intel.com>
Signed-off-by: default avatarBob Moore <robert.moore@intel.com>
Signed-off-by: default avatarLv Zheng <lv.zheng@intel.com>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent bdcf4cdb
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -1181,6 +1181,7 @@ struct acpi_external_list {
#define ACPI_EXT_INTERNAL_PATH_ALLOCATED    0x04	/* Deallocate internal path on completion */
#define ACPI_EXT_EXTERNAL_EMITTED           0x08	/* External() statement has been emitted */
#define ACPI_EXT_ORIGIN_FROM_OPCODE         0x10	/* External came from a External() opcode */
#define ACPI_EXT_CONFLICTING_DECLARATION    0x20	/* External has a conflicting declaration within AML */

struct acpi_external_file {
	char *path;
+27 −0
Original line number Diff line number Diff line
@@ -47,6 +47,10 @@
#include "acnamesp.h"
#include "acdispat.h"

#ifdef ACPI_ASL_COMPILER
#include "acdisasm.h"
#endif

#define _COMPONENT          ACPI_NAMESPACE
ACPI_MODULE_NAME("nsaccess")

@@ -580,6 +584,29 @@ acpi_ns_lookup(union acpi_generic_state *scope_info,
						  (char *)&current_node->name,
						  current_node));
			}
#ifdef ACPI_ASL_COMPILER
			/*
			 * If this ACPI name already exists within the namespace as an
			 * external declaration, then mark the external as a conflicting
			 * declaration and proceed to process the current node as if it did
			 * not exist in the namespace. If this node is not processed as
			 * normal, then it could cause improper namespace resolution
			 * by failing to open a new scope.
			 */
			if (acpi_gbl_disasm_flag &&
			    (status == AE_ALREADY_EXISTS) &&
			    ((this_node->flags & ANOBJ_IS_EXTERNAL) ||
			     (walk_state
			      && walk_state->opcode == AML_EXTERNAL_OP))) {
				this_node->flags &= ~ANOBJ_IS_EXTERNAL;
				this_node->type = (u8)this_search_type;
				if (walk_state->opcode != AML_EXTERNAL_OP) {
					acpi_dm_mark_external_conflict
					    (this_node);
				}
				break;
			}
#endif

			*return_node = this_node;
			return_ACPI_STATUS(status);