Merge "Fix elftls_dl#dtv_resize with HWASan"
diff --git a/tests/elftls_dl_test.cpp b/tests/elftls_dl_test.cpp
index 56736e7..e2fa3a0 100644
--- a/tests/elftls_dl_test.cpp
+++ b/tests/elftls_dl_test.cpp
@@ -154,7 +154,6 @@
 }
 
 TEST(elftls_dl, dtv_resize) {
-  SKIP_WITH_HWASAN; // TODO(b/271243811): Fix for new toolchain
 #if defined(__BIONIC__)
 #define LOAD_LIB(soname) ({                           \
     auto lib = dlopen(soname, RTLD_LOCAL | RTLD_NOW); \
@@ -167,11 +166,12 @@
   static_assert(sizeof(TlsDtv) == 3 * sizeof(void*),
                 "This test assumes that the Dtv has a 3-word header");
 
-  // Initially there are 4 modules:
+  // Initially there are 4 modules (5 w/ hwasan):
   //  - the main test executable
   //  - libc
   //  - libtest_elftls_shared_var
   //  - libtest_elftls_tprel
+  //  - w/ hwasan: libclang_rt.hwasan
 
   // The initial DTV is an empty DTV with no generation and a size of 0.
   TlsDtv* zero_dtv = dtv();
@@ -179,25 +179,25 @@
   ASSERT_EQ(nullptr, zero_dtv->next);
   ASSERT_EQ(kTlsGenerationNone, zero_dtv->generation);
 
-  // Load the fifth module.
+  // Load module 5 (6 w/ hwasan).
   auto func1 = LOAD_LIB("libtest_elftls_dynamic_filler_1.so");
   ASSERT_EQ(101, func1());
 
   // After loading one module, the DTV should be initialized to the next
   // power-of-2 size (including the header).
   TlsDtv* initial_dtv = dtv();
-  ASSERT_EQ(5u, initial_dtv->count);
+  ASSERT_EQ(running_with_hwasan() ? 13u : 5u, dtv()->count);
   ASSERT_EQ(zero_dtv, initial_dtv->next);
   ASSERT_LT(0u, initial_dtv->generation);
 
-  // Load module 6.
+  // Load module 6 (7 w/ hwasan).
   auto func2 = LOAD_LIB("libtest_elftls_dynamic_filler_2.so");
   ASSERT_EQ(102, func1());
 
 #if defined(__aarch64__)
   // The arm64 TLSDESC resolver doesn't update the DTV if it is new enough for
   // the given access.
-  ASSERT_EQ(5u, dtv()->count);
+  ASSERT_EQ(running_with_hwasan() ? 13u : 5u, dtv()->count);
 #else
   // __tls_get_addr updates the DTV anytime the generation counter changes.
   ASSERT_EQ(13u, dtv()->count);
@@ -205,11 +205,13 @@
 
   ASSERT_EQ(201, func2());
   TlsDtv* new_dtv = dtv();
-  ASSERT_NE(initial_dtv, new_dtv);
-  ASSERT_EQ(initial_dtv, new_dtv->next);
+  if (!running_with_hwasan()) {
+    ASSERT_NE(initial_dtv, new_dtv);
+    ASSERT_EQ(initial_dtv, new_dtv->next);
+  }
   ASSERT_EQ(13u, new_dtv->count);
 
-  // Load module 7.
+  // Load module 7 (8 w/ hwasan).
   auto func3 = LOAD_LIB("libtest_elftls_dynamic_filler_3.so");
   ASSERT_EQ(103, func1());
   ASSERT_EQ(202, func2());