Make part of the elf_writer_test specific to the portable build.

Change-Id: Ic24d04b71a0267ed3a7c7fe4e7b167644b8c96e0
diff --git a/compiler/elf_writer_test.cc b/compiler/elf_writer_test.cc
index eca67a8..95e5f9f 100644
--- a/compiler/elf_writer_test.cc
+++ b/compiler/elf_writer_test.cc
@@ -29,9 +29,19 @@
   }
 };
 
-#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 @@
   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);
 
-  void* dl_oatlastword = dlsym(dl_oat_so, "oatlastword");
-  ASSERT_TRUE(dl_oatlastword != NULL);
-  ASSERT_LT(dl_oatexec, dl_oatlastword);
+    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);
 
-  ASSERT_EQ(0, dlclose(dl_oat_so));
+    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));
+  }
+#endif
 
   UniquePtr<File> file(OS::OpenFileForReading(elf_filename.c_str()));
   ASSERT_TRUE(file.get() != NULL);