diff options
| author | 2013-12-16 00:07:23 +0000 | |
|---|---|---|
| committer | 2013-12-16 00:07:24 +0000 | |
| commit | d6beffe76384f569c244352f79a47c684637e2b6 (patch) | |
| tree | b60f99b5d6d5098c0eefec90947e16a626335c9d | |
| parent | 9b14e047380f1ead673da5ba07c2f0d602a8e02d (diff) | |
| parent | 31050c6929b6d83a33ebefa5b8fe0bf3d6389517 (diff) | |
Merge "Make part of the elf_writer_test specific to the portable build."
| -rw-r--r-- | compiler/elf_writer_test.cc | 51 |
1 files changed, 35 insertions, 16 deletions
diff --git a/compiler/elf_writer_test.cc b/compiler/elf_writer_test.cc index eca67a8a6e..95e5f9f73d 100644 --- a/compiler/elf_writer_test.cc +++ b/compiler/elf_writer_test.cc @@ -29,9 +29,19 @@ class ElfWriterTest : public CommonTest { } }; -#define EXPECT_ELF_FILE_ADDRESS(ef, value, name, build_map) \ - EXPECT_EQ(value, reinterpret_cast<void*>(ef->FindSymbolAddress(::llvm::ELF::SHT_DYNSYM, name, build_map))); \ - EXPECT_EQ(value, ef->FindDynamicSymbolAddress(name)); \ +#define EXPECT_ELF_FILE_ADDRESS(ef, expected_value, symbol_name, build_map) \ + do { \ + void* addr = reinterpret_cast<void*>(ef->FindSymbolAddress(::llvm::ELF::SHT_DYNSYM, \ + symbol_name, \ + build_map)); \ + EXPECT_NE(nullptr, addr); \ + EXPECT_LT(static_cast<uintptr_t>(ART_BASE_ADDRESS), reinterpret_cast<uintptr_t>(addr)); \ + if (expected_value == nullptr) { \ + expected_value = addr; \ + } \ + EXPECT_EQ(expected_value, addr); \ + EXPECT_EQ(expected_value, ef->FindDynamicSymbolAddress(symbol_name)); \ + } while (false) TEST_F(ElfWriterTest, dlsym) { std::string elf_filename; @@ -45,22 +55,31 @@ TEST_F(ElfWriterTest, dlsym) { LOG(INFO) << "elf_filename=" << elf_filename; UnreserveImageSpace(); - void* dl_oat_so = dlopen(elf_filename.c_str(), RTLD_NOW); - ASSERT_TRUE(dl_oat_so != NULL) << dlerror(); - void* dl_oatdata = dlsym(dl_oat_so, "oatdata"); - ASSERT_TRUE(dl_oatdata != NULL); + void* dl_oatdata = NULL; + void* dl_oatexec = NULL; + void* dl_oatlastword = NULL; - OatHeader* dl_oat_header = reinterpret_cast<OatHeader*>(dl_oatdata); - ASSERT_TRUE(dl_oat_header->IsValid()); - void* dl_oatexec = dlsym(dl_oat_so, "oatexec"); - ASSERT_TRUE(dl_oatexec != NULL); - ASSERT_LT(dl_oatdata, dl_oatexec); +#if defined(ART_USE_PORTABLE_COMPILER) + { + // We only use dlopen for loading with portable. See OatFile::Open. + void* dl_oat_so = dlopen(elf_filename.c_str(), RTLD_NOW); + ASSERT_TRUE(dl_oat_so != NULL) << dlerror(); + dl_oatdata = dlsym(dl_oat_so, "oatdata"); + ASSERT_TRUE(dl_oatdata != NULL); + + OatHeader* dl_oat_header = reinterpret_cast<OatHeader*>(dl_oatdata); + ASSERT_TRUE(dl_oat_header->IsValid()); + dl_oatexec = dlsym(dl_oat_so, "oatexec"); + ASSERT_TRUE(dl_oatexec != NULL); + ASSERT_LT(dl_oatdata, dl_oatexec); - void* dl_oatlastword = dlsym(dl_oat_so, "oatlastword"); - ASSERT_TRUE(dl_oatlastword != NULL); - ASSERT_LT(dl_oatexec, dl_oatlastword); + dl_oatlastword = dlsym(dl_oat_so, "oatlastword"); + ASSERT_TRUE(dl_oatlastword != NULL); + ASSERT_LT(dl_oatexec, dl_oatlastword); - ASSERT_EQ(0, dlclose(dl_oat_so)); + ASSERT_EQ(0, dlclose(dl_oat_so)); + } +#endif UniquePtr<File> file(OS::OpenFileForReading(elf_filename.c_str())); ASSERT_TRUE(file.get() != NULL); |