move OutputStream to ObjectWriter constructor in binaryToObject

This commit is contained in:
Joshua Warner 2012-04-25 09:09:39 -06:00
parent a9ba4782ef
commit ca9b5b2f59
5 changed files with 35 additions and 26 deletions

View File

@ -162,11 +162,13 @@ public:
public:
PlatformInfo::Architecture arch;
OutputStream* out;
ElfObjectWriter(PlatformInfo::Architecture arch):
arch(arch) {}
ElfObjectWriter(PlatformInfo::Architecture arch, OutputStream* out):
arch(arch),
out(out) {}
void writeObject(const uint8_t* data, unsigned size, OutputStream* out,
void writeObject(const uint8_t* data, unsigned size,
const char* startName, const char* endName,
const char* sectionName, unsigned sectionFlags,
unsigned alignment, int machine, int encoding)
@ -334,7 +336,7 @@ public:
out->writeChunk(&endSymbol, sizeof(endSymbol));
}
virtual bool write(uint8_t* data, size_t size, OutputStream* out,
virtual bool write(uint8_t* data, size_t size,
const char* startName, const char* endName,
unsigned alignment, unsigned accessFlags)
{
@ -374,7 +376,7 @@ public:
sectionName = ".rodata";
}
writeObject(data, size, out, startName, endName, sectionName, sectionFlags,
writeObject(data, size, startName, endName, sectionName, sectionFlags,
alignment, machine, encoding);
return true;
@ -388,8 +390,8 @@ public:
ElfPlatform(PlatformInfo::Architecture arch):
Platform(PlatformInfo(PlatformInfo::Linux, arch)) {}
virtual ObjectWriter* makeObjectWriter() {
return new ElfObjectWriter(info.arch);
virtual ObjectWriter* makeObjectWriter(OutputStream* out) {
return new ElfObjectWriter(info.arch, out);
}
};

View File

@ -144,11 +144,13 @@ public:
public:
PlatformInfo::Architecture arch;
OutputStream* out;
MachOObjectWriter(PlatformInfo::Architecture arch):
arch(arch) {}
MachOObjectWriter(PlatformInfo::Architecture arch, OutputStream* out):
arch(arch),
out(out) {}
void writeObject(const uint8_t* data, unsigned size, OutputStream* out,
void writeObject(const uint8_t* data, unsigned size,
const char* startName, const char* endName,
const char* segmentName, const char* sectionName,
unsigned alignment, cpu_type_t cpuType, cpu_subtype_t cpuSubType)
@ -258,7 +260,7 @@ public:
out->writeChunk(endName, endNameLength);
}
virtual bool write(uint8_t* data, size_t size, OutputStream* out,
virtual bool write(uint8_t* data, size_t size,
const char* startName, const char* endName,
unsigned alignment, unsigned accessFlags)
{
@ -307,7 +309,7 @@ public:
myEndName[0] = '_';
memcpy(myEndName + 1, endName, endNameLength + 1);
writeObject(data, size, out, myStartName, myEndName, segmentName,
writeObject(data, size, myStartName, myEndName, segmentName,
sectionName, alignment, cpuType, cpuSubType);
return true;
@ -321,8 +323,8 @@ public:
MachOPlatform(PlatformInfo::Architecture arch):
Platform(PlatformInfo(PlatformInfo::Darwin, arch)) {}
virtual ObjectWriter* makeObjectWriter() {
return new MachOObjectWriter(info.arch);
virtual ObjectWriter* makeObjectWriter(OutputStream* out) {
return new MachOObjectWriter(info.arch, out);
}
};

View File

@ -56,9 +56,9 @@ writeObject(uint8_t* data, unsigned size, OutputStream* out, const char* startNa
return false;
}
ObjectWriter* writer = platform->makeObjectWriter();
ObjectWriter* writer = platform->makeObjectWriter(out);
bool success = writer->write(data, size, out, startName, endName, alignment,
bool success = writer->write(data, size, startName, endName, alignment,
ObjectWriter::Readable | (writable ? ObjectWriter::Writable : 0) | (executable ? ObjectWriter::Executable : 0));
writer->dispose();

View File

@ -172,7 +172,12 @@ public:
class PEObjectWriter : public ObjectWriter {
public:
virtual bool write(uint8_t* data, size_t size, OutputStream* out,
OutputStream* out;
PEObjectWriter(OutputStream* out):
out(out) {}
virtual bool write(uint8_t* data, size_t size,
const char* startName, const char* endName,
unsigned alignment, unsigned accessFlags)
{
@ -237,8 +242,8 @@ public:
};
virtual ObjectWriter* makeObjectWriter() {
return new PEObjectWriter();
virtual ObjectWriter* makeObjectWriter(OutputStream* out) {
return new PEObjectWriter(out);
}
WindowsPlatform():

View File

@ -44,7 +44,7 @@ public:
Executable = 1 << 2
};
virtual bool write(uint8_t* data, size_t size, OutputStream* out,
virtual bool write(uint8_t* data, size_t size,
const char* startName, const char* endName,
unsigned alignment, unsigned accessFlags) = 0;
@ -98,7 +98,7 @@ public:
first = this;
}
virtual ObjectWriter* makeObjectWriter() = 0;
virtual ObjectWriter* makeObjectWriter(OutputStream* out) = 0;
static Platform* getPlatform(PlatformInfo info);
};