Disassembler: Update for CondRefOf operator.

The operand for this operator does not ever need to generate an
external declaration. Change the type of the operand from a SuperName
to a simple Namestring. Improves disassembly of this operator if
the operand is a control method.
This commit is contained in:
Robert Moore 2013-08-02 12:09:37 -07:00
parent b5513899b2
commit 64e52a3577
3 changed files with 16 additions and 8 deletions

View File

@ -883,22 +883,17 @@ AcpiDmXrefDescendingOp (
Status = AcpiNsLookup (WalkState->ScopeInfo, Path, ACPI_TYPE_ANY,
ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT | ACPI_NS_DONT_OPEN_SCOPE,
WalkState, &Node);
if (ACPI_SUCCESS (Status) && (Node->Flags & ANOBJ_IS_EXTERNAL))
{
Status = AE_NOT_FOUND;
}
if (ACPI_FAILURE (Status))
{
if (Status == AE_NOT_FOUND)
{
AcpiDmAddToExternalList (Op, Path, (UINT8) ObjectType, 0);
#if 0
/*
* We could install this into the namespace, but we catch duplicate
* externals when they are added to the list.
*/
#if 0
Status = AcpiNsLookup (WalkState->ScopeInfo, Path, ACPI_TYPE_ANY,
ACPI_IMODE_LOAD_PASS1, ACPI_NS_DONT_OPEN_SCOPE,
WalkState, &Node);

View File

@ -464,6 +464,18 @@ AcpiDmAddToExternalList (
return;
}
/* For certain opcodes, we don't need an external */
if (Op && Op->Asl.Parent)
{
if (Op->Asl.Parent->Asl.AmlOpcode == AML_COND_REF_OF_OP)
{
return;
}
}
/* Bit 0x80 of Value used to indicate method resolution status */
if (Type == ACPI_TYPE_METHOD)
{
if (Value & 0x80)
@ -657,6 +669,7 @@ AcpiDmGetExternalsFromFile (
{
fprintf (stderr, "Could not open external reference file \"%s\"\n",
Gbl_ExternalRefFilename);
Gbl_ExternalRefFilename = NULL;
return;
}
@ -1102,7 +1115,7 @@ AcpiDmEmitExternals (
{
AcpiOsPrintf (
" /*\n * External declarations that were imported from\n"
" * the reference file [%s]\n */\n",
" * input reference file [%s]\n */\n",
Gbl_ExternalRefFilename);
NextExternal = AcpiGbl_ExternalList;

View File

@ -165,7 +165,7 @@
#define ARGP_BYTELIST_OP ARGP_LIST1 (ARGP_NAMESTRING)
#define ARGP_CONCAT_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET)
#define ARGP_CONCAT_RES_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET)
#define ARGP_COND_REF_OF_OP ARGP_LIST2 (ARGP_SUPERNAME, ARGP_SUPERNAME)
#define ARGP_COND_REF_OF_OP ARGP_LIST2 (ARGP_NAMESTRING, ARGP_SUPERNAME)
#define ARGP_CONNECTFIELD_OP ARGP_LIST1 (ARGP_NAMESTRING)
#define ARGP_CONTINUE_OP ARG_NONE
#define ARGP_COPY_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_SIMPLENAME)