mirror of
https://github.com/VectorCamp/vectorscan.git
synced 2025-06-28 16:41:01 +03:00
rose: dump lit programs from frag map
This commit is contained in:
parent
c6bf1919d0
commit
bd3357d3ac
@ -1140,35 +1140,29 @@ void dumpProgram(ofstream &os, const RoseEngine *t, const char *pc) {
|
|||||||
#undef PROGRAM_NEXT_INSTRUCTION
|
#undef PROGRAM_NEXT_INSTRUCTION
|
||||||
|
|
||||||
static
|
static
|
||||||
void dumpRoseLitPrograms(const RoseEngine *t, const string &filename) {
|
void dumpRoseLitPrograms(const RoseBuildImpl &build, const RoseEngine *t,
|
||||||
|
const string &filename) {
|
||||||
ofstream os(filename);
|
ofstream os(filename);
|
||||||
|
|
||||||
const u32 *litPrograms =
|
// Collect all programs referenced by a literal fragment.
|
||||||
(const u32 *)loadFromByteCodeOffset(t, t->litProgramOffset);
|
vector<u32> programs;
|
||||||
const u32 *delayRebuildPrograms =
|
programs.reserve(build.final_to_frag_map.size());
|
||||||
(const u32 *)loadFromByteCodeOffset(t, t->litDelayRebuildProgramOffset);
|
|
||||||
|
|
||||||
for (u32 i = 0; i < t->literalCount; i++) {
|
for (const auto &m : build.final_to_frag_map) {
|
||||||
os << "Literal " << i << endl;
|
const auto &frag = m.second;
|
||||||
os << "---------------" << endl;
|
if (frag.lit_program_offset) {
|
||||||
|
programs.push_back(frag.lit_program_offset);
|
||||||
if (litPrograms[i]) {
|
|
||||||
os << "Program @ " << litPrograms[i] << ":" << endl;
|
|
||||||
const char *prog =
|
|
||||||
(const char *)loadFromByteCodeOffset(t, litPrograms[i]);
|
|
||||||
dumpProgram(os, t, prog);
|
|
||||||
} else {
|
|
||||||
os << "<No Program>" << endl;
|
|
||||||
}
|
}
|
||||||
|
if (frag.delay_program_offset) {
|
||||||
if (delayRebuildPrograms[i]) {
|
programs.push_back(frag.delay_program_offset);
|
||||||
os << "Delay Rebuild Program @ " << delayRebuildPrograms[i] << ":"
|
|
||||||
<< endl;
|
|
||||||
const char *prog = (const char *)loadFromByteCodeOffset(
|
|
||||||
t, delayRebuildPrograms[i]);
|
|
||||||
dumpProgram(os, t, prog);
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
sort_and_unique(programs);
|
||||||
|
|
||||||
|
for (u32 prog_offset : programs) {
|
||||||
|
os << "Program @ " << prog_offset << ":" << endl;
|
||||||
|
const char *prog = (const char *)loadFromByteCodeOffset(t, prog_offset);
|
||||||
|
dumpProgram(os, t, prog);
|
||||||
os << endl;
|
os << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1215,30 +1209,6 @@ void dumpRoseReportPrograms(const RoseEngine *t, const string &filename) {
|
|||||||
os.close();
|
os.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
|
||||||
void dumpRoseDelayPrograms(const RoseEngine *t, const string &filename) {
|
|
||||||
ofstream os(filename);
|
|
||||||
|
|
||||||
const u32 *programs =
|
|
||||||
(const u32 *)loadFromByteCodeOffset(t, t->delayProgramOffset);
|
|
||||||
|
|
||||||
for (u32 i = 0; i < t->delay_count; i++) {
|
|
||||||
os << "Delay entry " << i << endl;
|
|
||||||
os << "---------------" << endl;
|
|
||||||
|
|
||||||
if (programs[i]) {
|
|
||||||
os << "Program @ " << programs[i] << ":" << endl;
|
|
||||||
const char *prog =
|
|
||||||
(const char *)loadFromByteCodeOffset(t, programs[i]);
|
|
||||||
dumpProgram(os, t, prog);
|
|
||||||
} else {
|
|
||||||
os << "<No Program>" << endl;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
os.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
static
|
static
|
||||||
void dumpRoseAnchoredPrograms(const RoseEngine *t, const string &filename) {
|
void dumpRoseAnchoredPrograms(const RoseEngine *t, const string &filename) {
|
||||||
ofstream os(filename);
|
ofstream os(filename);
|
||||||
@ -1896,10 +1866,14 @@ void roseDumpComponents(const RoseEngine *t, bool dump_raw,
|
|||||||
dumpAnchored(t, base);
|
dumpAnchored(t, base);
|
||||||
dumpRevComponentInfo(t, base);
|
dumpRevComponentInfo(t, base);
|
||||||
dumpRevNfas(t, dump_raw, base);
|
dumpRevNfas(t, dump_raw, base);
|
||||||
dumpRoseLitPrograms(t, base + "/rose_lit_programs.txt");
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
void roseDumpPrograms(const RoseBuildImpl &build, const RoseEngine *t,
|
||||||
|
const string &base) {
|
||||||
|
dumpRoseLitPrograms(build, t, base + "/rose_lit_programs.txt");
|
||||||
dumpRoseEodPrograms(t, base + "/rose_eod_programs.txt");
|
dumpRoseEodPrograms(t, base + "/rose_eod_programs.txt");
|
||||||
dumpRoseReportPrograms(t, base + "/rose_report_programs.txt");
|
dumpRoseReportPrograms(t, base + "/rose_report_programs.txt");
|
||||||
dumpRoseDelayPrograms(t, base + "/rose_delay_programs.txt");
|
|
||||||
dumpRoseAnchoredPrograms(t, base + "/rose_anchored_programs.txt");
|
dumpRoseAnchoredPrograms(t, base + "/rose_anchored_programs.txt");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1928,6 +1902,7 @@ void dumpRose(const RoseBuild &build_base, const RoseEngine *t,
|
|||||||
fclose(f);
|
fclose(f);
|
||||||
|
|
||||||
roseDumpComponents(t, false, grey.dumpPath);
|
roseDumpComponents(t, false, grey.dumpPath);
|
||||||
|
roseDumpPrograms(build, t, grey.dumpPath);
|
||||||
|
|
||||||
// Graph.
|
// Graph.
|
||||||
dumpRoseGraph(build, t, "rose.dot");
|
dumpRoseGraph(build, t, "rose.dot");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user