diff options
| author | 2012-04-02 02:37:37 +0800 | |
|---|---|---|
| committer | 2012-04-06 17:04:56 -0700 | |
| commit | 937105a220983351695bf4c8924171ba5d17a68c (patch) | |
| tree | 4e259853c80e0d28e12ecf54c6e0ffa178797497 /src/compiler_llvm/upcall_compiler.cc | |
| parent | 0c717dd1c56bd29cf860d0feda8e629dab2cadb3 (diff) | |
Use ELF function index to distinguish generated functions.
We replaced LLVMLongName and LLVMStubName with ElfFuncName,
and we are using the simple name: Art0, Art1, ..., ArtN,
as the function name of every generated functions. This
gives us 3 benefits:
1. We can avoid the ambiguous function name returned by
LLVMLongName() in some special situation.
2. We don't need to have the art::Method object during
the executable linking procedure. Besides, this will
make bootstrapping easier.
3. Reduce the size of the ELF executable, since we don't
have to save a long function name, which usually contains
more than 30 characters.
Change-Id: Ib698062b272458e847ad5545d7acf33a4dc9eb85
Diffstat (limited to 'src/compiler_llvm/upcall_compiler.cc')
| -rw-r--r-- | src/compiler_llvm/upcall_compiler.cc | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/src/compiler_llvm/upcall_compiler.cc b/src/compiler_llvm/upcall_compiler.cc index 20bd94b71d..85bfe241dd 100644 --- a/src/compiler_llvm/upcall_compiler.cc +++ b/src/compiler_llvm/upcall_compiler.cc @@ -24,6 +24,7 @@ #include "logging.h" #include "object.h" #include "runtime_support_func.h" +#include "utils_llvm.h" #include <llvm/Analysis/Verifier.h> #include <llvm/BasicBlock.h> @@ -42,7 +43,8 @@ using namespace runtime_support; UpcallCompiler::UpcallCompiler(CompilationUnit* cunit, Compiler& compiler) : cunit_(cunit), compiler_(&compiler), module_(cunit_->GetModule()), - context_(cunit_->GetLLVMContext()), irb_(*cunit_->GetIRBuilder()) { + context_(cunit_->GetLLVMContext()), irb_(*cunit_->GetIRBuilder()), + elf_func_idx_(cunit_->AcquireUniqueElfFuncIndex()) { } @@ -53,13 +55,7 @@ CompiledInvokeStub* UpcallCompiler::CreateStub(bool is_static, size_t shorty_size = strlen(shorty); // Function name - std::string func_name; - - if (is_static) { - StringAppendF(&func_name, "ArtSUpcall_%s", shorty); - } else { - StringAppendF(&func_name, "ArtUpcall_%s", shorty); - } + std::string func_name(ElfFuncName(elf_func_idx_)); // Get argument types llvm::Type* arg_types[] = { @@ -179,7 +175,7 @@ CompiledInvokeStub* UpcallCompiler::CreateStub(bool is_static, // store ret_addr, and ret_void. Beside, we guess that we have to use // 50 bytes to represent one LLVM instruction. - return new CompiledInvokeStub(cunit_->GetElfIndex()); + return new CompiledInvokeStub(cunit_->GetElfIndex(), elf_func_idx_); } |