summaryrefslogtreecommitdiff
path: root/src/compiler_llvm/upcall_compiler.cc
diff options
context:
space:
mode:
author Logan Chien <loganchien@google.com> 2012-04-02 02:37:37 +0800
committer Shih-wei Liao <sliao@google.com> 2012-04-06 17:04:56 -0700
commit937105a220983351695bf4c8924171ba5d17a68c (patch)
tree4e259853c80e0d28e12ecf54c6e0ffa178797497 /src/compiler_llvm/upcall_compiler.cc
parent0c717dd1c56bd29cf860d0feda8e629dab2cadb3 (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.cc14
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_);
}