1*d688a01eSAndrew GeisslerFrom 3690dc5f567906c45f057509305fbaa021b33adb Mon Sep 17 00:00:00 2001
2*d688a01eSAndrew GeisslerFrom: Yichao Yu <yyc1992@gmail.com>
3*d688a01eSAndrew GeisslerDate: Tue, 15 Sep 2020 12:35:46 -0700
4*d688a01eSAndrew GeisslerSubject: [PATCH] Fix compilation with -fno-common.
5*d688a01eSAndrew Geissler
6*d688a01eSAndrew GeisslerMaking all other archs consistent with IA64 which should not have this problem.
7*d688a01eSAndrew GeisslerAlso move the FIXME to the correct place.
8*d688a01eSAndrew Geissler
9*d688a01eSAndrew GeisslerAlso add some minimum comments about this...
10*d688a01eSAndrew Geissler
11*d688a01eSAndrew GeisslerUpstream-Status: Backport [https://github.com/libunwind/libunwind/pull/166/commits/29e17d8d2ccbca07c423e3089a6d5ae8a1c9cb6e]
12*d688a01eSAndrew GeisslerSigned-off-by: Khem Raj <raj.khem@gmail.com>
13*d688a01eSAndrew Geissler---
14*d688a01eSAndrew Geissler src/third_party/unwind/dist/src/aarch64/Ginit.c   | 15 +++++++--------
15*d688a01eSAndrew Geissler src/third_party/unwind/dist/src/arm/Ginit.c       | 15 +++++++--------
16*d688a01eSAndrew Geissler .../src/coredump/_UPT_get_dyn_info_list_addr.c    |  5 +++++
17*d688a01eSAndrew Geissler src/third_party/unwind/dist/src/hppa/Ginit.c      | 15 +++++++--------
18*d688a01eSAndrew Geissler src/third_party/unwind/dist/src/ia64/Ginit.c      |  1 +
19*d688a01eSAndrew Geissler .../unwind/dist/src/mi/Gfind_dynamic_proc_info.c  |  1 +
20*d688a01eSAndrew Geissler src/third_party/unwind/dist/src/mips/Ginit.c      | 15 +++++++--------
21*d688a01eSAndrew Geissler src/third_party/unwind/dist/src/ppc32/Ginit.c     | 11 +++++++----
22*d688a01eSAndrew Geissler src/third_party/unwind/dist/src/ppc64/Ginit.c     | 11 +++++++----
23*d688a01eSAndrew Geissler .../dist/src/ptrace/_UPT_get_dyn_info_list_addr.c |  5 +++++
24*d688a01eSAndrew Geissler src/third_party/unwind/dist/src/s390x/Ginit.c     | 15 +++++++--------
25*d688a01eSAndrew Geissler src/third_party/unwind/dist/src/sh/Ginit.c        | 15 +++++++--------
26*d688a01eSAndrew Geissler src/third_party/unwind/dist/src/tilegx/Ginit.c    | 15 +++++++--------
27*d688a01eSAndrew Geissler src/third_party/unwind/dist/src/x86/Ginit.c       | 15 +++++++--------
28*d688a01eSAndrew Geissler src/third_party/unwind/dist/src/x86_64/Ginit.c    | 15 +++++++--------
29*d688a01eSAndrew Geissler 15 files changed, 89 insertions(+), 80 deletions(-)
30*d688a01eSAndrew Geissler
31*d688a01eSAndrew Geisslerdiff --git a/src/third_party/unwind/dist/src/aarch64/Ginit.c b/src/third_party/unwind/dist/src/aarch64/Ginit.c
32*d688a01eSAndrew Geisslerindex dec235c829..35389762f2 100644
33*d688a01eSAndrew Geissler--- a/src/third_party/unwind/dist/src/aarch64/Ginit.c
34*d688a01eSAndrew Geissler+++ b/src/third_party/unwind/dist/src/aarch64/Ginit.c
35*d688a01eSAndrew Geissler@@ -61,13 +61,6 @@ tdep_uc_addr (unw_tdep_context_t *uc, int reg)
36*d688a01eSAndrew Geissler
37*d688a01eSAndrew Geissler # endif /* UNW_LOCAL_ONLY */
38*d688a01eSAndrew Geissler
39*d688a01eSAndrew Geissler-HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
40*d688a01eSAndrew Geissler-
41*d688a01eSAndrew Geissler-/* XXX fix me: there is currently no way to locate the dyn-info list
42*d688a01eSAndrew Geissler-       by a remote unwinder.  On ia64, this is done via a special
43*d688a01eSAndrew Geissler-       unwind-table entry.  Perhaps something similar can be done with
44*d688a01eSAndrew Geissler-       DWARF2 unwind info.  */
45*d688a01eSAndrew Geissler-
46*d688a01eSAndrew Geissler static void
47*d688a01eSAndrew Geissler put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg)
48*d688a01eSAndrew Geissler {
49*d688a01eSAndrew Geissler@@ -78,7 +71,13 @@ static int
50*d688a01eSAndrew Geissler get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
51*d688a01eSAndrew Geissler                         void *arg)
52*d688a01eSAndrew Geissler {
53*d688a01eSAndrew Geissler-  *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list;
54*d688a01eSAndrew Geissler+#ifndef UNW_LOCAL_ONLY
55*d688a01eSAndrew Geissler+# pragma weak _U_dyn_info_list_addr
56*d688a01eSAndrew Geissler+  if (!_U_dyn_info_list_addr)
57*d688a01eSAndrew Geissler+    return -UNW_ENOINFO;
58*d688a01eSAndrew Geissler+#endif
59*d688a01eSAndrew Geissler+  // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
60*d688a01eSAndrew Geissler+  *dyn_info_list_addr = _U_dyn_info_list_addr ();
61*d688a01eSAndrew Geissler   return 0;
62*d688a01eSAndrew Geissler }
63*d688a01eSAndrew Geissler
64*d688a01eSAndrew Geisslerdiff --git a/src/third_party/unwind/dist/src/arm/Ginit.c b/src/third_party/unwind/dist/src/arm/Ginit.c
65*d688a01eSAndrew Geisslerindex 2720d063a2..0bac0d72da 100644
66*d688a01eSAndrew Geissler--- a/src/third_party/unwind/dist/src/arm/Ginit.c
67*d688a01eSAndrew Geissler+++ b/src/third_party/unwind/dist/src/arm/Ginit.c
68*d688a01eSAndrew Geissler@@ -57,18 +57,17 @@ tdep_uc_addr (unw_tdep_context_t *uc, int reg)
69*d688a01eSAndrew Geissler
70*d688a01eSAndrew Geissler # endif /* UNW_LOCAL_ONLY */
71*d688a01eSAndrew Geissler
72*d688a01eSAndrew Geissler-HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
73*d688a01eSAndrew Geissler-
74*d688a01eSAndrew Geissler-/* XXX fix me: there is currently no way to locate the dyn-info list
75*d688a01eSAndrew Geissler-       by a remote unwinder.  On ia64, this is done via a special
76*d688a01eSAndrew Geissler-       unwind-table entry.  Perhaps something similar can be done with
77*d688a01eSAndrew Geissler-       DWARF2 unwind info.  */
78*d688a01eSAndrew Geissler-
79*d688a01eSAndrew Geissler static int
80*d688a01eSAndrew Geissler get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
81*d688a01eSAndrew Geissler                         void *arg)
82*d688a01eSAndrew Geissler {
83*d688a01eSAndrew Geissler-  *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list;
84*d688a01eSAndrew Geissler+#ifndef UNW_LOCAL_ONLY
85*d688a01eSAndrew Geissler+# pragma weak _U_dyn_info_list_addr
86*d688a01eSAndrew Geissler+  if (!_U_dyn_info_list_addr)
87*d688a01eSAndrew Geissler+    return -UNW_ENOINFO;
88*d688a01eSAndrew Geissler+#endif
89*d688a01eSAndrew Geissler+  // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
90*d688a01eSAndrew Geissler+  *dyn_info_list_addr = _U_dyn_info_list_addr ();
91*d688a01eSAndrew Geissler   return 0;
92*d688a01eSAndrew Geissler }
93*d688a01eSAndrew Geissler
94*d688a01eSAndrew Geisslerdiff --git a/src/third_party/unwind/dist/src/coredump/_UPT_get_dyn_info_list_addr.c b/src/third_party/unwind/dist/src/coredump/_UPT_get_dyn_info_list_addr.c
95*d688a01eSAndrew Geisslerindex 0d11905566..739ed0569b 100644
96*d688a01eSAndrew Geissler--- a/src/third_party/unwind/dist/src/coredump/_UPT_get_dyn_info_list_addr.c
97*d688a01eSAndrew Geissler+++ b/src/third_party/unwind/dist/src/coredump/_UPT_get_dyn_info_list_addr.c
98*d688a01eSAndrew Geissler@@ -74,6 +74,11 @@ get_list_addr (unw_addr_space_t as, unw_word_t *dil_addr, void *arg,
99*d688a01eSAndrew Geissler
100*d688a01eSAndrew Geissler #else
101*d688a01eSAndrew Geissler
102*d688a01eSAndrew Geissler+/* XXX fix me: there is currently no way to locate the dyn-info list
103*d688a01eSAndrew Geissler+       by a remote unwinder.  On ia64, this is done via a special
104*d688a01eSAndrew Geissler+       unwind-table entry.  Perhaps something similar can be done with
105*d688a01eSAndrew Geissler+       DWARF2 unwind info.  */
106*d688a01eSAndrew Geissler+
107*d688a01eSAndrew Geissler static inline int
108*d688a01eSAndrew Geissler get_list_addr (unw_addr_space_t as, unw_word_t *dil_addr, void *arg,
109*d688a01eSAndrew Geissler                int *countp)
110*d688a01eSAndrew Geisslerdiff --git a/src/third_party/unwind/dist/src/hppa/Ginit.c b/src/third_party/unwind/dist/src/hppa/Ginit.c
111*d688a01eSAndrew Geisslerindex 461e4b93da..265455a68c 100644
112*d688a01eSAndrew Geissler--- a/src/third_party/unwind/dist/src/hppa/Ginit.c
113*d688a01eSAndrew Geissler+++ b/src/third_party/unwind/dist/src/hppa/Ginit.c
114*d688a01eSAndrew Geissler@@ -64,13 +64,6 @@ _Uhppa_uc_addr (ucontext_t *uc, int reg)
115*d688a01eSAndrew Geissler
116*d688a01eSAndrew Geissler # endif /* UNW_LOCAL_ONLY */
117*d688a01eSAndrew Geissler
118*d688a01eSAndrew Geissler-HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
119*d688a01eSAndrew Geissler-
120*d688a01eSAndrew Geissler-/* XXX fix me: there is currently no way to locate the dyn-info list
121*d688a01eSAndrew Geissler-       by a remote unwinder.  On ia64, this is done via a special
122*d688a01eSAndrew Geissler-       unwind-table entry.  Perhaps something similar can be done with
123*d688a01eSAndrew Geissler-       DWARF2 unwind info.  */
124*d688a01eSAndrew Geissler-
125*d688a01eSAndrew Geissler static void
126*d688a01eSAndrew Geissler put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg)
127*d688a01eSAndrew Geissler {
128*d688a01eSAndrew Geissler@@ -81,7 +74,13 @@ static int
129*d688a01eSAndrew Geissler get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
130*d688a01eSAndrew Geissler                         void *arg)
131*d688a01eSAndrew Geissler {
132*d688a01eSAndrew Geissler-  *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list;
133*d688a01eSAndrew Geissler+#ifndef UNW_LOCAL_ONLY
134*d688a01eSAndrew Geissler+# pragma weak _U_dyn_info_list_addr
135*d688a01eSAndrew Geissler+  if (!_U_dyn_info_list_addr)
136*d688a01eSAndrew Geissler+    return -UNW_ENOINFO;
137*d688a01eSAndrew Geissler+#endif
138*d688a01eSAndrew Geissler+  // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
139*d688a01eSAndrew Geissler+  *dyn_info_list_addr = _U_dyn_info_list_addr ();
140*d688a01eSAndrew Geissler   return 0;
141*d688a01eSAndrew Geissler }
142*d688a01eSAndrew Geissler
143*d688a01eSAndrew Geisslerdiff --git a/src/third_party/unwind/dist/src/ia64/Ginit.c b/src/third_party/unwind/dist/src/ia64/Ginit.c
144*d688a01eSAndrew Geisslerindex b09a2ad57c..8601bb3ca8 100644
145*d688a01eSAndrew Geissler--- a/src/third_party/unwind/dist/src/ia64/Ginit.c
146*d688a01eSAndrew Geissler+++ b/src/third_party/unwind/dist/src/ia64/Ginit.c
147*d688a01eSAndrew Geissler@@ -68,6 +68,7 @@ get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
148*d688a01eSAndrew Geissler   if (!_U_dyn_info_list_addr)
149*d688a01eSAndrew Geissler     return -UNW_ENOINFO;
150*d688a01eSAndrew Geissler #endif
151*d688a01eSAndrew Geissler+  // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
152*d688a01eSAndrew Geissler   *dyn_info_list_addr = _U_dyn_info_list_addr ();
153*d688a01eSAndrew Geissler   return 0;
154*d688a01eSAndrew Geissler }
155*d688a01eSAndrew Geisslerdiff --git a/src/third_party/unwind/dist/src/mi/Gfind_dynamic_proc_info.c b/src/third_party/unwind/dist/src/mi/Gfind_dynamic_proc_info.c
156*d688a01eSAndrew Geisslerindex 98d3501286..2e7c62e5e8 100644
157*d688a01eSAndrew Geissler--- a/src/third_party/unwind/dist/src/mi/Gfind_dynamic_proc_info.c
158*d688a01eSAndrew Geissler+++ b/src/third_party/unwind/dist/src/mi/Gfind_dynamic_proc_info.c
159*d688a01eSAndrew Geissler@@ -49,6 +49,7 @@ local_find_proc_info (unw_addr_space_t as, unw_word_t ip, unw_proc_info_t *pi,
160*d688a01eSAndrew Geissler     return -UNW_ENOINFO;
161*d688a01eSAndrew Geissler #endif
162*d688a01eSAndrew Geissler
163*d688a01eSAndrew Geissler+  // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
164*d688a01eSAndrew Geissler   list = (unw_dyn_info_list_t *) (uintptr_t) _U_dyn_info_list_addr ();
165*d688a01eSAndrew Geissler   for (di = list->first; di; di = di->next)
166*d688a01eSAndrew Geissler     if (ip >= di->start_ip && ip < di->end_ip)
167*d688a01eSAndrew Geisslerdiff --git a/src/third_party/unwind/dist/src/mips/Ginit.c b/src/third_party/unwind/dist/src/mips/Ginit.c
168*d688a01eSAndrew Geisslerindex 3df170c754..bf7a8f5a8f 100644
169*d688a01eSAndrew Geissler--- a/src/third_party/unwind/dist/src/mips/Ginit.c
170*d688a01eSAndrew Geissler+++ b/src/third_party/unwind/dist/src/mips/Ginit.c
171*d688a01eSAndrew Geissler@@ -69,13 +69,6 @@ tdep_uc_addr (ucontext_t *uc, int reg)
172*d688a01eSAndrew Geissler
173*d688a01eSAndrew Geissler # endif /* UNW_LOCAL_ONLY */
174*d688a01eSAndrew Geissler
175*d688a01eSAndrew Geissler-HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
176*d688a01eSAndrew Geissler-
177*d688a01eSAndrew Geissler-/* XXX fix me: there is currently no way to locate the dyn-info list
178*d688a01eSAndrew Geissler-       by a remote unwinder.  On ia64, this is done via a special
179*d688a01eSAndrew Geissler-       unwind-table entry.  Perhaps something similar can be done with
180*d688a01eSAndrew Geissler-       DWARF2 unwind info.  */
181*d688a01eSAndrew Geissler-
182*d688a01eSAndrew Geissler static void
183*d688a01eSAndrew Geissler put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg)
184*d688a01eSAndrew Geissler {
185*d688a01eSAndrew Geissler@@ -86,7 +79,13 @@ static int
186*d688a01eSAndrew Geissler get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
187*d688a01eSAndrew Geissler                         void *arg)
188*d688a01eSAndrew Geissler {
189*d688a01eSAndrew Geissler-  *dyn_info_list_addr = (unw_word_t) (intptr_t) &_U_dyn_info_list;
190*d688a01eSAndrew Geissler+#ifndef UNW_LOCAL_ONLY
191*d688a01eSAndrew Geissler+# pragma weak _U_dyn_info_list_addr
192*d688a01eSAndrew Geissler+  if (!_U_dyn_info_list_addr)
193*d688a01eSAndrew Geissler+    return -UNW_ENOINFO;
194*d688a01eSAndrew Geissler+#endif
195*d688a01eSAndrew Geissler+  // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
196*d688a01eSAndrew Geissler+  *dyn_info_list_addr = _U_dyn_info_list_addr ();
197*d688a01eSAndrew Geissler   return 0;
198*d688a01eSAndrew Geissler }
199*d688a01eSAndrew Geissler
200*d688a01eSAndrew Geisslerdiff --git a/src/third_party/unwind/dist/src/ppc32/Ginit.c b/src/third_party/unwind/dist/src/ppc32/Ginit.c
201*d688a01eSAndrew Geisslerindex ba302448a3..7b45455807 100644
202*d688a01eSAndrew Geissler--- a/src/third_party/unwind/dist/src/ppc32/Ginit.c
203*d688a01eSAndrew Geissler+++ b/src/third_party/unwind/dist/src/ppc32/Ginit.c
204*d688a01eSAndrew Geissler@@ -91,9 +91,6 @@ tdep_uc_addr (ucontext_t *uc, int reg)
205*d688a01eSAndrew Geissler
206*d688a01eSAndrew Geissler # endif /* UNW_LOCAL_ONLY */
207*d688a01eSAndrew Geissler
208*d688a01eSAndrew Geissler-HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
209*d688a01eSAndrew Geissler-
210*d688a01eSAndrew Geissler-
211*d688a01eSAndrew Geissler static void
212*d688a01eSAndrew Geissler put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg)
213*d688a01eSAndrew Geissler {
214*d688a01eSAndrew Geissler@@ -104,7 +101,13 @@ static int
215*d688a01eSAndrew Geissler get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
216*d688a01eSAndrew Geissler                         void *arg)
217*d688a01eSAndrew Geissler {
218*d688a01eSAndrew Geissler-  *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list;
219*d688a01eSAndrew Geissler+#ifndef UNW_LOCAL_ONLY
220*d688a01eSAndrew Geissler+# pragma weak _U_dyn_info_list_addr
221*d688a01eSAndrew Geissler+  if (!_U_dyn_info_list_addr)
222*d688a01eSAndrew Geissler+    return -UNW_ENOINFO;
223*d688a01eSAndrew Geissler+#endif
224*d688a01eSAndrew Geissler+  // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
225*d688a01eSAndrew Geissler+  *dyn_info_list_addr = _U_dyn_info_list_addr ();
226*d688a01eSAndrew Geissler   return 0;
227*d688a01eSAndrew Geissler }
228*d688a01eSAndrew Geissler
229*d688a01eSAndrew Geisslerdiff --git a/src/third_party/unwind/dist/src/ppc64/Ginit.c b/src/third_party/unwind/dist/src/ppc64/Ginit.c
230*d688a01eSAndrew Geisslerindex 4c88cd6e77..7bfb395a79 100644
231*d688a01eSAndrew Geissler--- a/src/third_party/unwind/dist/src/ppc64/Ginit.c
232*d688a01eSAndrew Geissler+++ b/src/third_party/unwind/dist/src/ppc64/Ginit.c
233*d688a01eSAndrew Geissler@@ -95,9 +95,6 @@ tdep_uc_addr (ucontext_t *uc, int reg)
234*d688a01eSAndrew Geissler
235*d688a01eSAndrew Geissler # endif /* UNW_LOCAL_ONLY */
236*d688a01eSAndrew Geissler
237*d688a01eSAndrew Geissler-HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
238*d688a01eSAndrew Geissler-
239*d688a01eSAndrew Geissler-
240*d688a01eSAndrew Geissler static void
241*d688a01eSAndrew Geissler put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg)
242*d688a01eSAndrew Geissler {
243*d688a01eSAndrew Geissler@@ -108,7 +105,13 @@ static int
244*d688a01eSAndrew Geissler get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
245*d688a01eSAndrew Geissler                         void *arg)
246*d688a01eSAndrew Geissler {
247*d688a01eSAndrew Geissler-  *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list;
248*d688a01eSAndrew Geissler+#ifndef UNW_LOCAL_ONLY
249*d688a01eSAndrew Geissler+# pragma weak _U_dyn_info_list_addr
250*d688a01eSAndrew Geissler+  if (!_U_dyn_info_list_addr)
251*d688a01eSAndrew Geissler+    return -UNW_ENOINFO;
252*d688a01eSAndrew Geissler+#endif
253*d688a01eSAndrew Geissler+  // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
254*d688a01eSAndrew Geissler+  *dyn_info_list_addr = _U_dyn_info_list_addr ();
255*d688a01eSAndrew Geissler   return 0;
256*d688a01eSAndrew Geissler }
257*d688a01eSAndrew Geissler
258*d688a01eSAndrew Geisslerdiff --git a/src/third_party/unwind/dist/src/ptrace/_UPT_get_dyn_info_list_addr.c b/src/third_party/unwind/dist/src/ptrace/_UPT_get_dyn_info_list_addr.c
259*d688a01eSAndrew Geisslerindex cc5ed04418..16671d453e 100644
260*d688a01eSAndrew Geissler--- a/src/third_party/unwind/dist/src/ptrace/_UPT_get_dyn_info_list_addr.c
261*d688a01eSAndrew Geissler+++ b/src/third_party/unwind/dist/src/ptrace/_UPT_get_dyn_info_list_addr.c
262*d688a01eSAndrew Geissler@@ -71,6 +71,11 @@ get_list_addr (unw_addr_space_t as, unw_word_t *dil_addr, void *arg,
263*d688a01eSAndrew Geissler
264*d688a01eSAndrew Geissler #else
265*d688a01eSAndrew Geissler
266*d688a01eSAndrew Geissler+/* XXX fix me: there is currently no way to locate the dyn-info list
267*d688a01eSAndrew Geissler+       by a remote unwinder.  On ia64, this is done via a special
268*d688a01eSAndrew Geissler+       unwind-table entry.  Perhaps something similar can be done with
269*d688a01eSAndrew Geissler+       DWARF2 unwind info.  */
270*d688a01eSAndrew Geissler+
271*d688a01eSAndrew Geissler static inline int
272*d688a01eSAndrew Geissler get_list_addr (unw_addr_space_t as, unw_word_t *dil_addr, void *arg,
273*d688a01eSAndrew Geissler                int *countp)
274*d688a01eSAndrew Geisslerdiff --git a/src/third_party/unwind/dist/src/s390x/Ginit.c b/src/third_party/unwind/dist/src/s390x/Ginit.c
275*d688a01eSAndrew Geisslerindex f0886ac933..db01743c06 100644
276*d688a01eSAndrew Geissler--- a/src/third_party/unwind/dist/src/s390x/Ginit.c
277*d688a01eSAndrew Geissler+++ b/src/third_party/unwind/dist/src/s390x/Ginit.c
278*d688a01eSAndrew Geissler@@ -50,8 +50,6 @@ static struct unw_addr_space local_addr_space;
279*d688a01eSAndrew Geissler
280*d688a01eSAndrew Geissler unw_addr_space_t unw_local_addr_space = &local_addr_space;
281*d688a01eSAndrew Geissler
282*d688a01eSAndrew Geissler-HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
283*d688a01eSAndrew Geissler-
284*d688a01eSAndrew Geissler static inline void *
285*d688a01eSAndrew Geissler uc_addr (ucontext_t *uc, int reg)
286*d688a01eSAndrew Geissler {
287*d688a01eSAndrew Geissler@@ -75,11 +73,6 @@ tdep_uc_addr (ucontext_t *uc, int reg)
288*d688a01eSAndrew Geissler
289*d688a01eSAndrew Geissler # endif /* UNW_LOCAL_ONLY */
290*d688a01eSAndrew Geissler
291*d688a01eSAndrew Geissler-/* XXX fix me: there is currently no way to locate the dyn-info list
292*d688a01eSAndrew Geissler-       by a remote unwinder.  On ia64, this is done via a special
293*d688a01eSAndrew Geissler-       unwind-table entry.  Perhaps something similar can be done with
294*d688a01eSAndrew Geissler-       DWARF2 unwind info.  */
295*d688a01eSAndrew Geissler-
296*d688a01eSAndrew Geissler static void
297*d688a01eSAndrew Geissler put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg)
298*d688a01eSAndrew Geissler {
299*d688a01eSAndrew Geissler@@ -90,7 +83,13 @@ static int
300*d688a01eSAndrew Geissler get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
301*d688a01eSAndrew Geissler                         void *arg)
302*d688a01eSAndrew Geissler {
303*d688a01eSAndrew Geissler-  *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list;
304*d688a01eSAndrew Geissler+#ifndef UNW_LOCAL_ONLY
305*d688a01eSAndrew Geissler+# pragma weak _U_dyn_info_list_addr
306*d688a01eSAndrew Geissler+  if (!_U_dyn_info_list_addr)
307*d688a01eSAndrew Geissler+    return -UNW_ENOINFO;
308*d688a01eSAndrew Geissler+#endif
309*d688a01eSAndrew Geissler+  // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
310*d688a01eSAndrew Geissler+  *dyn_info_list_addr = _U_dyn_info_list_addr ();
311*d688a01eSAndrew Geissler   return 0;
312*d688a01eSAndrew Geissler }
313*d688a01eSAndrew Geissler
314*d688a01eSAndrew Geisslerdiff --git a/src/third_party/unwind/dist/src/sh/Ginit.c b/src/third_party/unwind/dist/src/sh/Ginit.c
315*d688a01eSAndrew Geisslerindex 52988a721e..9fe96d2bd4 100644
316*d688a01eSAndrew Geissler--- a/src/third_party/unwind/dist/src/sh/Ginit.c
317*d688a01eSAndrew Geissler+++ b/src/third_party/unwind/dist/src/sh/Ginit.c
318*d688a01eSAndrew Geissler@@ -58,13 +58,6 @@ tdep_uc_addr (ucontext_t *uc, int reg)
319*d688a01eSAndrew Geissler
320*d688a01eSAndrew Geissler # endif /* UNW_LOCAL_ONLY */
321*d688a01eSAndrew Geissler
322*d688a01eSAndrew Geissler-HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
323*d688a01eSAndrew Geissler-
324*d688a01eSAndrew Geissler-/* XXX fix me: there is currently no way to locate the dyn-info list
325*d688a01eSAndrew Geissler-       by a remote unwinder.  On ia64, this is done via a special
326*d688a01eSAndrew Geissler-       unwind-table entry.  Perhaps something similar can be done with
327*d688a01eSAndrew Geissler-       DWARF2 unwind info.  */
328*d688a01eSAndrew Geissler-
329*d688a01eSAndrew Geissler static void
330*d688a01eSAndrew Geissler put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg)
331*d688a01eSAndrew Geissler {
332*d688a01eSAndrew Geissler@@ -75,7 +68,13 @@ static int
333*d688a01eSAndrew Geissler get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
334*d688a01eSAndrew Geissler                         void *arg)
335*d688a01eSAndrew Geissler {
336*d688a01eSAndrew Geissler-  *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list;
337*d688a01eSAndrew Geissler+#ifndef UNW_LOCAL_ONLY
338*d688a01eSAndrew Geissler+# pragma weak _U_dyn_info_list_addr
339*d688a01eSAndrew Geissler+  if (!_U_dyn_info_list_addr)
340*d688a01eSAndrew Geissler+    return -UNW_ENOINFO;
341*d688a01eSAndrew Geissler+#endif
342*d688a01eSAndrew Geissler+  // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
343*d688a01eSAndrew Geissler+  *dyn_info_list_addr = _U_dyn_info_list_addr ();
344*d688a01eSAndrew Geissler   return 0;
345*d688a01eSAndrew Geissler }
346*d688a01eSAndrew Geissler
347*d688a01eSAndrew Geisslerdiff --git a/src/third_party/unwind/dist/src/tilegx/Ginit.c b/src/third_party/unwind/dist/src/tilegx/Ginit.c
348*d688a01eSAndrew Geisslerindex 7564a558be..925e641324 100644
349*d688a01eSAndrew Geissler--- a/src/third_party/unwind/dist/src/tilegx/Ginit.c
350*d688a01eSAndrew Geissler+++ b/src/third_party/unwind/dist/src/tilegx/Ginit.c
351*d688a01eSAndrew Geissler@@ -64,13 +64,6 @@ tdep_uc_addr (ucontext_t *uc, int reg)
352*d688a01eSAndrew Geissler
353*d688a01eSAndrew Geissler # endif /* UNW_LOCAL_ONLY */
354*d688a01eSAndrew Geissler
355*d688a01eSAndrew Geissler-HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
356*d688a01eSAndrew Geissler-
357*d688a01eSAndrew Geissler-/* XXX fix me: there is currently no way to locate the dyn-info list
358*d688a01eSAndrew Geissler-       by a remote unwinder.  On ia64, this is done via a special
359*d688a01eSAndrew Geissler-       unwind-table entry.  Perhaps something similar can be done with
360*d688a01eSAndrew Geissler-       DWARF2 unwind info.  */
361*d688a01eSAndrew Geissler-
362*d688a01eSAndrew Geissler static void
363*d688a01eSAndrew Geissler put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg)
364*d688a01eSAndrew Geissler {
365*d688a01eSAndrew Geissler@@ -81,7 +74,13 @@ static int
366*d688a01eSAndrew Geissler get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
367*d688a01eSAndrew Geissler                         void *arg)
368*d688a01eSAndrew Geissler {
369*d688a01eSAndrew Geissler-  *dyn_info_list_addr = (unw_word_t) (intptr_t) &_U_dyn_info_list;
370*d688a01eSAndrew Geissler+#ifndef UNW_LOCAL_ONLY
371*d688a01eSAndrew Geissler+# pragma weak _U_dyn_info_list_addr
372*d688a01eSAndrew Geissler+  if (!_U_dyn_info_list_addr)
373*d688a01eSAndrew Geissler+    return -UNW_ENOINFO;
374*d688a01eSAndrew Geissler+#endif
375*d688a01eSAndrew Geissler+  // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
376*d688a01eSAndrew Geissler+  *dyn_info_list_addr = _U_dyn_info_list_addr ();
377*d688a01eSAndrew Geissler   return 0;
378*d688a01eSAndrew Geissler }
379*d688a01eSAndrew Geissler
380*d688a01eSAndrew Geisslerdiff --git a/src/third_party/unwind/dist/src/x86/Ginit.c b/src/third_party/unwind/dist/src/x86/Ginit.c
381*d688a01eSAndrew Geisslerindex f6b8dc27d4..3cec74a216 100644
382*d688a01eSAndrew Geissler--- a/src/third_party/unwind/dist/src/x86/Ginit.c
383*d688a01eSAndrew Geissler+++ b/src/third_party/unwind/dist/src/x86/Ginit.c
384*d688a01eSAndrew Geissler@@ -54,13 +54,6 @@ tdep_uc_addr (ucontext_t *uc, int reg)
385*d688a01eSAndrew Geissler
386*d688a01eSAndrew Geissler # endif /* UNW_LOCAL_ONLY */
387*d688a01eSAndrew Geissler
388*d688a01eSAndrew Geissler-HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
389*d688a01eSAndrew Geissler-
390*d688a01eSAndrew Geissler-/* XXX fix me: there is currently no way to locate the dyn-info list
391*d688a01eSAndrew Geissler-       by a remote unwinder.  On ia64, this is done via a special
392*d688a01eSAndrew Geissler-       unwind-table entry.  Perhaps something similar can be done with
393*d688a01eSAndrew Geissler-       DWARF2 unwind info.  */
394*d688a01eSAndrew Geissler-
395*d688a01eSAndrew Geissler static void
396*d688a01eSAndrew Geissler put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg)
397*d688a01eSAndrew Geissler {
398*d688a01eSAndrew Geissler@@ -71,7 +64,13 @@ static int
399*d688a01eSAndrew Geissler get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
400*d688a01eSAndrew Geissler                         void *arg)
401*d688a01eSAndrew Geissler {
402*d688a01eSAndrew Geissler-  *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list;
403*d688a01eSAndrew Geissler+#ifndef UNW_LOCAL_ONLY
404*d688a01eSAndrew Geissler+# pragma weak _U_dyn_info_list_addr
405*d688a01eSAndrew Geissler+  if (!_U_dyn_info_list_addr)
406*d688a01eSAndrew Geissler+    return -UNW_ENOINFO;
407*d688a01eSAndrew Geissler+#endif
408*d688a01eSAndrew Geissler+  // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
409*d688a01eSAndrew Geissler+  *dyn_info_list_addr = _U_dyn_info_list_addr ();
410*d688a01eSAndrew Geissler   return 0;
411*d688a01eSAndrew Geissler }
412*d688a01eSAndrew Geissler
413*d688a01eSAndrew Geisslerdiff --git a/src/third_party/unwind/dist/src/x86_64/Ginit.c b/src/third_party/unwind/dist/src/x86_64/Ginit.c
414*d688a01eSAndrew Geisslerindex 6161da6401..5c4e4269a6 100644
415*d688a01eSAndrew Geissler--- a/src/third_party/unwind/dist/src/x86_64/Ginit.c
416*d688a01eSAndrew Geissler+++ b/src/third_party/unwind/dist/src/x86_64/Ginit.c
417*d688a01eSAndrew Geissler@@ -49,13 +49,6 @@ static struct unw_addr_space local_addr_space;
418*d688a01eSAndrew Geissler
419*d688a01eSAndrew Geissler unw_addr_space_t unw_local_addr_space = &local_addr_space;
420*d688a01eSAndrew Geissler
421*d688a01eSAndrew Geissler-HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
422*d688a01eSAndrew Geissler-
423*d688a01eSAndrew Geissler-/* XXX fix me: there is currently no way to locate the dyn-info list
424*d688a01eSAndrew Geissler-       by a remote unwinder.  On ia64, this is done via a special
425*d688a01eSAndrew Geissler-       unwind-table entry.  Perhaps something similar can be done with
426*d688a01eSAndrew Geissler-       DWARF2 unwind info.  */
427*d688a01eSAndrew Geissler-
428*d688a01eSAndrew Geissler static void
429*d688a01eSAndrew Geissler put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg)
430*d688a01eSAndrew Geissler {
431*d688a01eSAndrew Geissler@@ -66,7 +59,13 @@ static int
432*d688a01eSAndrew Geissler get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
433*d688a01eSAndrew Geissler                         void *arg)
434*d688a01eSAndrew Geissler {
435*d688a01eSAndrew Geissler-  *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list;
436*d688a01eSAndrew Geissler+#ifndef UNW_LOCAL_ONLY
437*d688a01eSAndrew Geissler+# pragma weak _U_dyn_info_list_addr
438*d688a01eSAndrew Geissler+  if (!_U_dyn_info_list_addr)
439*d688a01eSAndrew Geissler+    return -UNW_ENOINFO;
440*d688a01eSAndrew Geissler+#endif
441*d688a01eSAndrew Geissler+  // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
442*d688a01eSAndrew Geissler+  *dyn_info_list_addr = _U_dyn_info_list_addr ();
443*d688a01eSAndrew Geissler   return 0;
444*d688a01eSAndrew Geissler }
445*d688a01eSAndrew Geissler
446*d688a01eSAndrew Geissler--
447*d688a01eSAndrew Geissler2.28.0
448*d688a01eSAndrew Geissler
449