mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-12-01 16:32:17 +00:00
- Fixed: Dehacked must not validate parameters for MBF special functions.
These won't match the conditions. Additionally this adds disassembly output for the synthesized replacement functions for diagnostics purposes.
This commit is contained in:
parent
d425fb2d4a
commit
d18f5eecb4
1 changed files with 15 additions and 1 deletions
|
@ -64,6 +64,7 @@
|
||||||
#include "v_text.h"
|
#include "v_text.h"
|
||||||
#include "backend/vmbuilder.h"
|
#include "backend/vmbuilder.h"
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
|
#include "m_argv.h"
|
||||||
|
|
||||||
// [SO] Just the way Randy said to do it :)
|
// [SO] Just the way Randy said to do it :)
|
||||||
// [RH] Made this CVAR_SERVERINFO
|
// [RH] Made this CVAR_SERVERINFO
|
||||||
|
@ -813,6 +814,16 @@ void SetDehParams(FState *state, int codepointer)
|
||||||
sfunc->ImplicitArgs = numargs;
|
sfunc->ImplicitArgs = numargs;
|
||||||
state->SetAction(sfunc);
|
state->SetAction(sfunc);
|
||||||
sfunc->PrintableName.Format("Dehacked.%s.%d.%d", MBFCodePointers[codepointer].name.GetChars(), value1, value2);
|
sfunc->PrintableName.Format("Dehacked.%s.%d.%d", MBFCodePointers[codepointer].name.GetChars(), value1, value2);
|
||||||
|
|
||||||
|
if (Args->CheckParm("-dumpdisasm"))
|
||||||
|
{
|
||||||
|
FILE *dump = fopen("disasm.txt", "a");
|
||||||
|
if (dump != nullptr)
|
||||||
|
{
|
||||||
|
DumpFunction(dump, sfunc, sfunc->PrintableName.GetChars(), (int)sfunc->PrintableName.Len());
|
||||||
|
}
|
||||||
|
fclose(dump);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2103,12 +2114,15 @@ static int PatchCodePtrs (int dummy)
|
||||||
symname.Format("A_%s", Line2);
|
symname.Format("A_%s", Line2);
|
||||||
|
|
||||||
// Let's consider as aliases some redundant MBF pointer
|
// Let's consider as aliases some redundant MBF pointer
|
||||||
|
bool ismbfcp = false;
|
||||||
for (unsigned int i = 0; i < MBFCodePointers.Size(); i++)
|
for (unsigned int i = 0; i < MBFCodePointers.Size(); i++)
|
||||||
{
|
{
|
||||||
if (!symname.CompareNoCase(MBFCodePointers[i].alias))
|
if (!symname.CompareNoCase(MBFCodePointers[i].alias))
|
||||||
{
|
{
|
||||||
symname = MBFCodePointers[i].name;
|
symname = MBFCodePointers[i].name;
|
||||||
DPrintf(DMSG_SPAMMY, "%s --> %s\n", MBFCodePointers[i].alias, MBFCodePointers[i].name.GetChars());
|
DPrintf(DMSG_SPAMMY, "%s --> %s\n", MBFCodePointers[i].alias, MBFCodePointers[i].name.GetChars());
|
||||||
|
ismbfcp = true;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2119,7 +2133,7 @@ static int PatchCodePtrs (int dummy)
|
||||||
{
|
{
|
||||||
Printf(TEXTCOLOR_RED "Frame %d: Unknown code pointer '%s'\n", frame, Line2);
|
Printf(TEXTCOLOR_RED "Frame %d: Unknown code pointer '%s'\n", frame, Line2);
|
||||||
}
|
}
|
||||||
else
|
else if (!ismbfcp) // MBF special code pointers will produce errors here because they will receive some args and won't match the conditions here.
|
||||||
{
|
{
|
||||||
TArray<uint32_t> &args = sym->Variants[0].ArgFlags;
|
TArray<uint32_t> &args = sym->Variants[0].ArgFlags;
|
||||||
unsigned numargs = sym->GetImplicitArgs();
|
unsigned numargs = sym->GetImplicitArgs();
|
||||||
|
|
Loading…
Reference in a new issue