mirror of
https://github.com/corda/corda.git
synced 2025-01-04 04:04:27 +00:00
begin work on audit-codegen
This commit is contained in:
parent
24c0fab9bf
commit
46029939d3
92
makefile
92
makefile
@ -994,6 +994,8 @@ all-assembler-sources = \
|
|||||||
native-assembler-sources = $($(target-asm)-assembler-sources)
|
native-assembler-sources = $($(target-asm)-assembler-sources)
|
||||||
native-assembler-objects = $($(target-asm)-assembler-objects)
|
native-assembler-objects = $($(target-asm)-assembler-objects)
|
||||||
|
|
||||||
|
audit-codegen-sources = $(wildcard $(src)/tools/audit-codegen/*.cpp)
|
||||||
|
|
||||||
all-codegen-target-sources = \
|
all-codegen-target-sources = \
|
||||||
$(compiler-sources) \
|
$(compiler-sources) \
|
||||||
$(native-assembler-sources)
|
$(native-assembler-sources)
|
||||||
@ -1154,6 +1156,7 @@ dynamic-library = $(build)/$(so-prefix)jvm$(so-suffix)
|
|||||||
executable-dynamic = $(build)/$(name)-dynamic$(exe-suffix)
|
executable-dynamic = $(build)/$(name)-dynamic$(exe-suffix)
|
||||||
|
|
||||||
unittest-executable = $(build)/$(name)-unittest${exe-suffix}
|
unittest-executable = $(build)/$(name)-unittest${exe-suffix}
|
||||||
|
audit-codegen-executable = $(build)/audit-codegen${exe-suffix}
|
||||||
|
|
||||||
ifneq ($(classpath),avian)
|
ifneq ($(classpath),avian)
|
||||||
# Assembler, ConstantPool, and Stream are not technically needed for a
|
# Assembler, ConstantPool, and Stream are not technically needed for a
|
||||||
@ -1304,6 +1307,14 @@ else
|
|||||||
ssh -p$(remote-test-port) $(remote-test-user)@$(remote-test-host) sh "$(remote-test-dir)/$(platform)-$(arch)$(options)/run-tests.sh"
|
ssh -p$(remote-test-port) $(remote-test-user)@$(remote-test-host) sh "$(remote-test-dir)/$(platform)-$(arch)$(options)/run-tests.sh"
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
PHONY: audit-baseline
|
||||||
|
audit-baseline: $(audit-codegen-executable)
|
||||||
|
$(<) -output $(build)/codegen-audit-output/baseline.o -format macho
|
||||||
|
|
||||||
|
PHONY: audit
|
||||||
|
audit: $(audit-codegen-executable)
|
||||||
|
$(<) -output $(build)/codegen-audit-output/baseline.o -format macho
|
||||||
|
|
||||||
.PHONY: tarball
|
.PHONY: tarball
|
||||||
tarball:
|
tarball:
|
||||||
@echo "creating build/avian-$(version).tar.bz2"
|
@echo "creating build/avian-$(version).tar.bz2"
|
||||||
@ -1412,6 +1423,9 @@ endif
|
|||||||
$(unittest-objects): $(build)/unittest/%.o: $(unittest)/%.cpp $(vm-depends) $(unittest-depends)
|
$(unittest-objects): $(build)/unittest/%.o: $(unittest)/%.cpp $(vm-depends) $(unittest-depends)
|
||||||
$(compile-unittest-object)
|
$(compile-unittest-object)
|
||||||
|
|
||||||
|
$(build)/tools/audit-codegen/main.o: $(build)/%.o: $(src)/%.cpp $(vm-depends)
|
||||||
|
$(compile-object)
|
||||||
|
|
||||||
$(test-cpp-objects): $(test-build)/%.o: $(test)/%.cpp $(vm-depends)
|
$(test-cpp-objects): $(test-build)/%.o: $(test)/%.cpp $(vm-depends)
|
||||||
$(compile-object)
|
$(compile-object)
|
||||||
|
|
||||||
@ -1590,43 +1604,53 @@ ifeq ($(process),interpret)
|
|||||||
unittest-executable-objects += $(all-codegen-target-objects)
|
unittest-executable-objects += $(all-codegen-target-objects)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
$(executable): $(executable-objects)
|
audit-codegen-objects = $(call cpp-objects,$(audit-codegen-sources),$(src),$(build))
|
||||||
@echo "linking $(@)"
|
audit-codegen-executable-objects = $(audit-codegen-objects) $(vm-objects) $(build)/util/arg-parser.o
|
||||||
ifeq ($(platform),windows)
|
|
||||||
ifdef ms_cl_compiler
|
|
||||||
$(ld) $(lflags) $(executable-objects) -out:$(@) \
|
|
||||||
-debug -PDB:$(subst $(exe-suffix),.pdb,$(@)) $(manifest-flags)
|
|
||||||
ifdef mt
|
|
||||||
$(mt) -nologo -manifest $(@).manifest -outputresource:"$(@);1"
|
|
||||||
endif
|
|
||||||
else
|
|
||||||
$(dlltool) -z $(@).def $(executable-objects)
|
|
||||||
$(dlltool) -d $(@).def -e $(@).exp
|
|
||||||
$(ld) $(@).exp $(executable-objects) $(lflags) -o $(@)
|
|
||||||
endif
|
|
||||||
else
|
|
||||||
$(ld) $(executable-objects) $(rdynamic) $(lflags) $(bootimage-lflags) -o $(@)
|
|
||||||
endif
|
|
||||||
$(strip) $(strip-all) $(@)
|
|
||||||
|
|
||||||
|
.PHONY: print
|
||||||
|
print:
|
||||||
|
@echo $(audit-codegen-objects)
|
||||||
|
|
||||||
|
# apparently, make does poorly with ifs inside of defines, and indented defines.
|
||||||
|
# I suggest re-indenting the following before making edits (and unindenting afterwards):
|
||||||
|
ifneq ($(platform),windows)
|
||||||
|
define link-executable
|
||||||
|
@echo linking $(@)
|
||||||
|
$(ld) $(^) $(rdynamic) $(lflags) $(bootimage-lflags) -o $(@)
|
||||||
|
endef
|
||||||
|
else
|
||||||
|
ifdef ms_cl_compiler
|
||||||
|
ifdef mt
|
||||||
|
define link-executable
|
||||||
|
@echo linking $(@)
|
||||||
|
$(ld) $(lflags) $(^) -out:$(@) \
|
||||||
|
-debug -PDB:$(subst $(exe-suffix),.pdb,$(@)) $(manifest-flags)
|
||||||
|
$(mt) -nologo -manifest $(@).manifest -outputresource:"$(@);1"
|
||||||
|
endef
|
||||||
|
else
|
||||||
|
define link-executable
|
||||||
|
@echo linking $(@)
|
||||||
|
$(mt) -nologo -manifest $(@).manifest -outputresource:"$(@);1"
|
||||||
|
endef
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
define link-executable
|
||||||
|
@echo linking $(@)
|
||||||
|
$(dlltool) -z $(@).def $(^)
|
||||||
|
$(dlltool) -d $(@).def -e $(@).exp
|
||||||
|
$(ld) $(@).exp $(^) $(lflags) -o $(@)
|
||||||
|
endef
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
$(executable): $(executable-objects)
|
||||||
|
$(link-executable)
|
||||||
|
|
||||||
$(unittest-executable): $(unittest-executable-objects)
|
$(unittest-executable): $(unittest-executable-objects)
|
||||||
@echo "linking $(@)"
|
$(link-executable)
|
||||||
ifeq ($(platform),windows)
|
|
||||||
ifdef ms_cl_compiler
|
$(audit-codegen-executable): $(audit-codegen-executable-objects)
|
||||||
$(ld) $(lflags) $(unittest-executable-objects) -out:$(@) \
|
$(link-executable)
|
||||||
-debug -PDB:$(subst $(exe-suffix),.pdb,$(@)) $(manifest-flags)
|
|
||||||
ifdef mt
|
|
||||||
$(mt) -nologo -manifest $(@).manifest -outputresource:"$(@);1"
|
|
||||||
endif
|
|
||||||
else
|
|
||||||
$(dlltool) -z $(@).def $(unittest-executable-objects)
|
|
||||||
$(dlltool) -d $(@).def -e $(@).exp
|
|
||||||
$(ld) $(@).exp $(unittest-executable-objects) $(lflags) -o $(@)
|
|
||||||
endif
|
|
||||||
else
|
|
||||||
$(ld) $(unittest-executable-objects) $(rdynamic) $(lflags) $(bootimage-lflags) -o $(@)
|
|
||||||
endif
|
|
||||||
|
|
||||||
$(bootimage-generator): $(bootimage-generator-objects)
|
$(bootimage-generator): $(bootimage-generator-objects)
|
||||||
echo building $(bootimage-generator) arch=$(build-arch) platform=$(bootimage-platform)
|
echo building $(bootimage-generator) arch=$(build-arch) platform=$(bootimage-platform)
|
||||||
|
63
src/tools/audit-codegen/main.cpp
Normal file
63
src/tools/audit-codegen/main.cpp
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
/* Copyright (c) 2008-2012, Avian Contributors
|
||||||
|
|
||||||
|
Permission to use, copy, modify, and/or distribute this software
|
||||||
|
for any purpose with or without fee is hereby granted, provided
|
||||||
|
that the above copyright notice and this permission notice appear
|
||||||
|
in all copies.
|
||||||
|
|
||||||
|
There is NO WARRANTY for this software. See license.txt for
|
||||||
|
details. */
|
||||||
|
|
||||||
|
#include "system.h"
|
||||||
|
|
||||||
|
#include "util/arg-parser.h"
|
||||||
|
|
||||||
|
#include "codegen/lir.h"
|
||||||
|
#include "codegen/assembler.h"
|
||||||
|
#include "codegen/targets.h"
|
||||||
|
|
||||||
|
// since we aren't linking against libstdc++, we must implement this
|
||||||
|
// ourselves:
|
||||||
|
extern "C" void __cxa_pure_virtual(void) { abort(); }
|
||||||
|
|
||||||
|
using namespace avian::codegen;
|
||||||
|
using namespace avian::util;
|
||||||
|
|
||||||
|
void generateCode(Assembler::Architecture* arch) {
|
||||||
|
for()
|
||||||
|
}
|
||||||
|
|
||||||
|
class Arguments {
|
||||||
|
public:
|
||||||
|
const char* output;
|
||||||
|
const char* outputFormat;
|
||||||
|
|
||||||
|
Arguments(int argc, char** argv) {
|
||||||
|
ArgParser parser;
|
||||||
|
Arg out(parser, true, "output", "<output object file>");
|
||||||
|
Arg format(parser, true, "format", "<format of output object file>");
|
||||||
|
|
||||||
|
if(!parser.parse(argc, argv)) {
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
output = out.value;
|
||||||
|
outputFormat = format.value;
|
||||||
|
|
||||||
|
// TODO: sanitize format values
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
int main(int argc, char** argv) {
|
||||||
|
Arguments args(argc, argv);
|
||||||
|
|
||||||
|
vm::System* s = vm::makeSystem(0);
|
||||||
|
Assembler::Architecture* arch = makeArchitectureNative(s, true);
|
||||||
|
arch->acquire();
|
||||||
|
|
||||||
|
generateCode(arch);
|
||||||
|
|
||||||
|
arch->release();
|
||||||
|
s->dispose();
|
||||||
|
return 0;
|
||||||
|
}
|
@ -31,7 +31,7 @@ ArgParser::ArgParser():
|
|||||||
first(0),
|
first(0),
|
||||||
last(&first) {}
|
last(&first) {}
|
||||||
|
|
||||||
bool ArgParser::parse(int ac, const char** av) {
|
bool ArgParser::parse(int ac, const char* const* av) {
|
||||||
Arg* state = 0;
|
Arg* state = 0;
|
||||||
|
|
||||||
for(int i = 1; i < ac; i++) {
|
for(int i = 1; i < ac; i++) {
|
||||||
|
@ -23,7 +23,7 @@ public:
|
|||||||
|
|
||||||
ArgParser();
|
ArgParser();
|
||||||
|
|
||||||
bool parse(int ac, const char** av);
|
bool parse(int ac, const char* const* av);
|
||||||
void printUsage(const char* exe);
|
void printUsage(const char* exe);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user