summaryrefslogtreecommitdiff
path: root/repo/chromium/musl-hacks.patch
blob: 93db25a0396a116c38ec6d6e51c8dfec242447ad (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
--- ./base/debug/stack_trace.cc
+++ ./base/debug/stack_trace.cc
@@ -168,7 +168,7 @@
 
 #if BUILDFLAG(CAN_UNWIND_WITH_FRAME_POINTERS)
 uintptr_t GetStackEnd() {
-#if BUILDFLAG(IS_ANDROID)
+#if BUILDFLAG(IS_ANDROID) || (defined(OS_LINUX) && !defined(__GLIBC__))
   // Bionic reads proc/maps on every call to pthread_getattr_np() when called
   // from the main thread. So we need to cache end of stack in that case to get
   // acceptable performance.
@@ -234,8 +234,10 @@
     defined(MEMORY_SANITIZER)
   // Sanitizer configurations (ASan, TSan, MSan) emit unsymbolized stacks.
   return false;
-#else
+#elif defined(__GLIBC__)
   return true;
+#else
+  return false;
 #endif
 }
 
@@ -251,7 +253,9 @@
 }
 
 void StackTrace::OutputToStream(std::ostream* os) const {
+#if defined(__GLIBC__) && !defined(_AIX)
   OutputToStreamWithPrefix(os, nullptr);
+#endif
 }
 
 std::string StackTrace::ToString() const {
@@ -259,7 +263,7 @@
 }
 std::string StackTrace::ToStringWithPrefix(const char* prefix_string) const {
   std::stringstream stream;
-#if !defined(__UCLIBC__) && !defined(_AIX)
+#if defined(__GLIBC__) && !defined(_AIX)
   OutputToStreamWithPrefix(&stream, prefix_string);
 #endif
   return stream.str();
--- ./net/socket/udp_socket_posix.cc
+++ ./net/socket/udp_socket_posix.cc
@@ -1191,7 +1191,7 @@
     msg_iov->push_back({const_cast<char*>(buffer->data()), buffer->length()});
   msgvec->reserve(buffers.size());
   for (size_t j = 0; j < buffers.size(); j++)
-    msgvec->push_back({{nullptr, 0, &msg_iov[j], 1, nullptr, 0, 0}, 0});
+    msgvec->push_back({{nullptr, 0, &msg_iov[j], 1, 0, 0, 0}, 0});
   int result = HANDLE_EINTR(Sendmmsg(fd, &msgvec[0], buffers.size(), 0));
   SendResult send_result(0, 0, std::move(buffers));
   if (result < 0) {
--- ./base/debug/elf_reader.cc.orig
+++ ./base/debug/elf_reader.cc
@@ -149,7 +149,12 @@
         strtab_addr = static_cast<size_t>(dynamic_iter->d_un.d_ptr) +
                       reinterpret_cast<const char*>(relocation_offset);
 #else
-        strtab_addr = reinterpret_cast<const char*>(dynamic_iter->d_un.d_ptr);
+        if (dynamic_iter->d_un.d_ptr < relocation_offset) {
+          strtab_addr = static_cast<size_t>(dynamic_iter->d_un.d_ptr) +
+                        reinterpret_cast<const char*>(relocation_offset);
+        } else {
+          strtab_addr = reinterpret_cast<const char*>(dynamic_iter->d_un.d_ptr);
+        }
 #endif
       } else if (dynamic_iter->d_tag == DT_SONAME) {
         soname_strtab_offset = dynamic_iter->d_un.d_val;
--- ./mojo/public/c/system/thunks.cc.orig
+++ ./mojo/public/c/system/thunks.cc
@@ -100,7 +100,8 @@
     base::ScopedAllowBlocking allow_blocking;
     base::NativeLibraryOptions library_options;
 #if !defined(ADDRESS_SANITIZER) && !defined(THREAD_SANITIZER) && \
-    !defined(MEMORY_SANITIZER) && !defined(LEAK_SANITIZER)
+    !defined(MEMORY_SANITIZER) && !defined(LEAK_SANITIZER) && \
+    defined(RTLD_DEEPBIND)
     // Sanitizer builds cannnot support RTLD_DEEPBIND, but they also disable
     // allocator shims, so it's unnecessary there.
     library_options.prefer_own_symbols = true;
--- ./base/native_library_unittest.cc.orig
+++ ./base/native_library_unittest.cc
@@ -121,6 +121,7 @@
 #if !defined(OS_ANDROID) && !defined(THREAD_SANITIZER) && \
     !defined(MEMORY_SANITIZER)
 
+#if defined(RTLD_DEEPBIND)
 // Verifies that the |prefer_own_symbols| option satisfies its guarantee that
 // a loaded library will always prefer local symbol resolution before
 // considering global symbols.
@@ -156,6 +157,7 @@
   EXPECT_EQ(2, NativeLibraryTestIncrement());
   EXPECT_EQ(3, NativeLibraryTestIncrement());
 }
+#endif // defined(RTLD_DEEPBIND)
 
 #endif  // !defined(OS_ANDROID)