Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(16)

Unified Diff: courgette/courgette_flow.cc

Issue 2854113002: [Courgette] Reduce AssemblyProgram to reduce Courgette-apply RAM floor and disk churn. (Closed)
Patch Set: Update courgette_fuzzer in libfuzzer. Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « courgette/courgette_flow.h ('k') | courgette/courgette_tool.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: courgette/courgette_flow.cc
diff --git a/courgette/courgette_flow.cc b/courgette/courgette_flow.cc
index 2fa9810379aeab323f05f33b03a576cf5ffdee44..4a1f7f39a9976073790f69858324cbd8e2f1919d 100644
--- a/courgette/courgette_flow.cc
+++ b/courgette/courgette_flow.cc
@@ -11,6 +11,7 @@
#include "base/memory/ptr_util.h"
#include "base/strings/stringprintf.h"
#include "courgette/assembly_program.h"
+#include "courgette/disassembler.h"
#include "courgette/encoded_program.h"
#include "courgette/program_detector.h"
@@ -86,16 +87,14 @@ void CourgetteFlow::ReadSourceStreamSetFromBuffer(Group group,
}
}
-void CourgetteFlow::ReadAssemblyProgramFromBuffer(Group group,
- const BasicBuffer& buffer,
- bool annotate) {
+void CourgetteFlow::ReadDisassemblerFromBuffer(Group group,
+ const BasicBuffer& buffer) {
if (failed())
return;
Data* d = data(group);
- auto parser = annotate ? ParseDetectedExecutableWithAnnotation
- : ParseDetectedExecutable;
- if (!check(parser(buffer.data(), buffer.length(), &d->program)))
- setMessage("Cannot parse %s (code = %d).", name(group), status_);
+ d->disassembler = DetectDisassembler(buffer.data(), buffer.length());
+ if (!check(d->disassembler.get() != nullptr, C_INPUT_NOT_RECOGNIZED))
+ setMessage("Cannot detect program for %s.", name(group));
}
void CourgetteFlow::ReadEncodedProgramFromSourceStreamSet(
@@ -109,12 +108,27 @@ void CourgetteFlow::ReadEncodedProgramFromSourceStreamSet(
setMessage("Cannot read %s as encoded program.", name(group));
}
-void CourgetteFlow::CreateEncodedProgramFromAssemblyProgram(Group group) {
+void CourgetteFlow::CreateAssemblyProgramFromDisassembler(Group group,
+ bool annotate) {
if (failed())
return;
Data* d = data(group);
- if (!check(Encode(*d->program, &d->encoded)))
- setMessage("Cannot encode %s (code = %d).", name(group), status_);
+ d->program = d->disassembler->CreateProgram(annotate);
+ if (!check(d->program.get() != nullptr, C_DISASSEMBLY_FAILED))
+ setMessage("Cannot create AssemblyProgram for %s.", name(group));
+}
+
+void CourgetteFlow::CreateEncodedProgramFromDisassemblerAndAssemblyProgram(
+ Group group) {
+ if (failed())
+ return;
+ Data* d = data(group);
+ d->encoded.reset(new EncodedProgram());
+ if (!check(d->disassembler->DisassembleAndEncode(d->program.get(),
+ d->encoded.get()))) {
+ setMessage("Cannot disassemble to form EncodedProgram for %s.",
+ name(group));
+ }
}
void CourgetteFlow::WriteSinkStreamFromSinkStreamSet(Group group,
@@ -153,6 +167,12 @@ void CourgetteFlow::AdjustNewAssemblyProgramToMatchOld() {
setMessage("Cannot adjust %s to match %s.", name(OLD), name(NEW));
}
+void CourgetteFlow::DestroyDisassembler(Group group) {
+ if (failed())
+ return;
+ data(group)->disassembler.reset();
+}
+
void CourgetteFlow::DestroyAssemblyProgram(Group group) {
if (failed())
return;
« no previous file with comments | « courgette/courgette_flow.h ('k') | courgette/courgette_tool.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698