annotate libphobos/m4/druntime/os.m4 @ 158:494b0b89df80 default tip

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 18:13:55 +0900
parents 1830386684a0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
145
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
1 #
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
2 # Contains macros to detect OS features.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
3 #
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
4
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
5
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
6 # DRUNTIME_OS_THREAD_MODEL
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
7 # ------------------------
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
8 # Detect thread model and substitute DCFG_THREAD_MODEL
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
9 AC_DEFUN([DRUNTIME_OS_THREAD_MODEL],
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
10 [
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
11 AC_REQUIRE([AC_PROG_GDC])
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
12 AC_MSG_CHECKING([for thread model used by GDC])
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
13 d_thread_model=`$GDC -v 2>&1 | sed -n 's/^Thread model: //p'`
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
14 AC_MSG_RESULT([$d_thread_model])
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
15
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
16 # Map from thread model to thread interface.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
17 DRUNTIME_CONFIGURE_THREADS([$d_thread_model])
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
18 ])
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
19
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
20
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
21 # DRUNTIME_CONFIGURE_THREADS(thread_model)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
22 # ----------------------------------------
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
23 # Map target os to D version identifier
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
24 AC_DEFUN([DRUNTIME_CONFIGURE_THREADS],
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
25 [
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
26 case $1 in
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
27 aix) DCFG_THREAD_MODEL="Posix" ;;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
28 lynx) DCFG_THREAD_MODEL="Posix" ;;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
29 posix) DCFG_THREAD_MODEL="Posix" ;;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
30 single) DCFG_THREAD_MODEL="Single" ;;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
31 win32) DCFG_THREAD_MODEL="Win32" ;;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
32 # TODO: These targets need porting.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
33 dce|mipssde|rtems|tpf|vxworks)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
34 DCFG_THREAD_MODEL="Single" ;;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
35 *) as_fn_error "Thread implementation '$1' not recognised" "$LINENO" 5 ;;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
36 esac
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
37 AC_SUBST(DCFG_THREAD_MODEL)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
38 ])
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
39
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
40
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
41 # DRUNTIME_OS_DETECT
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
42 # ------------------
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
43 # Set the druntime_cv_target_os variable
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
44 AC_DEFUN([DRUNTIME_OS_DETECT],
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
45 [
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
46 AC_CACHE_CHECK([[for target OS]],
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
47 [[druntime_cv_target_os]],
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
48 [[druntime_cv_target_os=`echo $target_os | sed 's/^\([A-Za-z_]+\)/\1/'`]])
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
49 AS_IF([[test -z "$druntime_cv_target_os"]],
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
50 [AC_MSG_ERROR([[can't detect target OS]])],
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
51 [])
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
52 ])
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
53
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
54
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
55 # DRUNTIME_OS_UNIX
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
56 # ----------------
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
57 # Add --enable-unix option or autodetects if system is unix
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
58 # and create the DRUNTIME_OS_UNIX conditional.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
59 AC_DEFUN([DRUNTIME_OS_UNIX],
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
60 [
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
61 AC_REQUIRE([DRUNTIME_OS_DETECT])
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
62 AC_ARG_ENABLE(unix,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
63 AC_HELP_STRING([--enable-unix],
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
64 [enables Unix runtime (default: yes, for Unix targets)]),
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
65 :,[enable_unix=auto])
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
66
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
67 case "$druntime_cv_target_os" in
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
68 aix*|*bsd*|cygwin*|darwin*|gnu*|linux*|skyos*|*solaris*|sysv*) d_have_unix=1 ;;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
69 esac
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
70 if test -n "$d_have_unix" && test "$enable_unix" = auto ; then
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
71 enable_unix=yes
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
72 fi
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
73 AM_CONDITIONAL([DRUNTIME_OS_UNIX], [test "$enable_unix" = "yes"])
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
74 ])
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
75
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
76
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
77 # DRUNTIME_OS_SOURCES
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
78 # -------------------
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
79 # Detect target OS and add DRUNTIME_OS_AIX DRUNTIME_OS_DARWIN
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
80 # DRUNTIME_OS_FREEBSD DRUNTIME_OS_LINUX DRUNTIME_OS_MINGW
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
81 # DRUNTIME_OS_SOLARIS DRUNTIME_OS_OPENBSD conditionals.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
82 AC_DEFUN([DRUNTIME_OS_SOURCES],
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
83 [
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
84 AC_REQUIRE([DRUNTIME_OS_DETECT])
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
85
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
86 druntime_target_os_parsed=""
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
87 case "$druntime_cv_target_os" in
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
88 aix*) druntime_target_os_parsed="aix"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
89 ;;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
90 *android*)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
91 druntime_target_os_parsed="android"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
92 ;;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
93 darwin*) druntime_target_os_parsed="darwin"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
94 ;;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
95 dragonfly*)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
96 druntime_target_os_parsed="dragonflybsd"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
97 ;;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
98 freebsd*|k*bsd*-gnu)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
99 druntime_target_os_parsed="freebsd"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
100 ;;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
101 openbsd*)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
102 druntime_target_os_parsed="openbsd"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
103 ;;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
104 netbsd*)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
105 druntime_target_os_parsed="netbsd"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
106 ;;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
107 linux*) druntime_target_os_parsed="linux"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
108 ;;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
109 mingw*) druntime_target_os_parsed="mingw"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
110 ;;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
111 *solaris*) druntime_target_os_parsed="solaris"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
112 esac
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
113 AM_CONDITIONAL([DRUNTIME_OS_AIX],
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
114 [test "$druntime_target_os_parsed" = "aix"])
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
115 AM_CONDITIONAL([DRUNTIME_OS_ANDROID],
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
116 [test "$druntime_target_os_parsed" = "android"])
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
117 AM_CONDITIONAL([DRUNTIME_OS_DARWIN],
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
118 [test "$druntime_target_os_parsed" = "darwin"])
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
119 AM_CONDITIONAL([DRUNTIME_OS_DRAGONFLYBSD],
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
120 [test "$druntime_target_os_parsed" = "dragonflybsd"])
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
121 AM_CONDITIONAL([DRUNTIME_OS_FREEBSD],
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
122 [test "$druntime_target_os_parsed" = "freebsd"])
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
123 AM_CONDITIONAL([DRUNTIME_OS_NETBSD],
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
124 [test "$druntime_target_os_parsed" = "netbsd"])
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
125 AM_CONDITIONAL([DRUNTIME_OS_OPENBSD],
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
126 [test "$druntime_target_os_parsed" = "openbsd"])
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
127 AM_CONDITIONAL([DRUNTIME_OS_LINUX],
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
128 [test "$druntime_target_os_parsed" = "linux"])
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
129 AM_CONDITIONAL([DRUNTIME_OS_MINGW],
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
130 [test "$druntime_target_os_parsed" = "mingw"])
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
131 AM_CONDITIONAL([DRUNTIME_OS_SOLARIS],
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
132 [test "$druntime_target_os_parsed" = "solaris"])
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
133 ])
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
134
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
135
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
136 # DRUNTIME_OS_ARM_EABI_UNWINDER
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
137 # ------------------------
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
138 # Check if using ARM unwinder and substitute DCFG_ARM_EABI_UNWINDER
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
139 # and set DRUNTIME_OS_ARM_EABI_UNWINDER conditional.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
140 AC_DEFUN([DRUNTIME_OS_ARM_EABI_UNWINDER],
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
141 [
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
142 AC_LANG_PUSH([C])
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
143 AC_MSG_CHECKING([for ARM unwinder])
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
144 AC_TRY_COMPILE([#include <unwind.h>],[
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
145 #if __ARM_EABI_UNWINDER__
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
146 #error Yes, it is.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
147 #endif
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
148 ],
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
149 [AC_MSG_RESULT([no])
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
150 DCFG_ARM_EABI_UNWINDER=false],
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
151 [AC_MSG_RESULT([yes])
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
152 DCFG_ARM_EABI_UNWINDER=true])
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
153 AC_SUBST(DCFG_ARM_EABI_UNWINDER)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
154 AM_CONDITIONAL([DRUNTIME_OS_ARM_EABI_UNWINDER], [test "$DCFG_ARM_EABI_UNWINDER" = "true"])
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
155 AC_LANG_POP([C])
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
156 ])
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
157
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
158
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
159 # DRUNTIME_OS_MINFO_BRACKETING
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
160 # ----------------------------
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
161 # Check if the linker provides __start_minfo and __stop_minfo symbols and
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
162 # substitute DCFG_MINFO_BRACKETING.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
163 AC_DEFUN([DRUNTIME_OS_MINFO_BRACKETING],
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
164 [
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
165 AC_LANG_PUSH([C])
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
166 AC_MSG_CHECKING([for minfo section bracketing])
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
167 AC_LINK_IFELSE([AC_LANG_SOURCE([
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
168 void* module_info_ptr __attribute__((section ("minfo")));
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
169 extern void* __start_minfo __attribute__((visibility ("hidden")));
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
170 extern void* __stop_minfo __attribute__((visibility ("hidden")));
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
171
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
172 int main()
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
173 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
174 // Never run, just to prevent compiler from optimizing access
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
175 return &__start_minfo == &__stop_minfo;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
176 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
177 ])],
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
178 [AC_MSG_RESULT([yes])
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
179 DCFG_MINFO_BRACKETING=true],
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
180 [AC_MSG_RESULT([no])
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
181 DCFG_MINFO_BRACKETING=false])
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
182 AC_SUBST(DCFG_MINFO_BRACKETING)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
183 AM_CONDITIONAL([DRUNTIME_OS_MINFO_BRACKETING], [test "$DCFG_MINFO_BRACKETING" = "true"])
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
184 AC_LANG_POP([C])
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
185 ])
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
186
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
187 # DRUNTIME_OS_DLPI_TLS_MODID
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
188 # ----------------------------
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
189 # Check if struct dl_phdr_info includes the dlpi_tls_modid member and
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
190 # substitute DCFG_DLPI_TLS_MODID.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
191 AC_DEFUN([DRUNTIME_OS_DLPI_TLS_MODID],
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
192 [
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
193 AC_LANG_PUSH([C])
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
194 AC_CHECK_MEMBER([struct dl_phdr_info.dlpi_tls_modid],
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
195 [DCFG_DLPI_TLS_MODID=true], [DCFG_DLPI_TLS_MODID=false],
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
196 [[#include <link.h>]])
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
197 AC_SUBST(DCFG_DLPI_TLS_MODID)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
198 AC_LANG_POP([C])
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
199 ])
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
200
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
201 # DRUNTIME_OS_LINK_SPEC
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
202 # ---------------------
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
203 # Add target-specific link options to link_spec.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
204 AC_DEFUN([DRUNTIME_OS_LINK_SPEC],
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
205 [
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
206 case $target in
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
207 i?86-*-solaris2.* | x86_64-*-solaris2.*)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
208 # 64-bit Solaris/x86 ld breaks calls to __tls_get_addr with non-TLS
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
209 # relocs. Work around by disabling TLS transitions. Not necessary
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
210 # on 32-bit x86, but cannot be distinguished reliably in specs.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
211 druntime_ld_prog=`$CC -print-prog-name=ld`
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
212 druntime_ld_gld=no
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
213 druntime_ld_relax_transtls=no
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
214 if test -n "$druntime_ld_prog" \
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
215 && $druntime_ld_prog -v 2>&1 | grep GNU > /dev/null 2>&1; then
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
216 druntime_ld_gld=yes
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
217 else
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
218 echo 'int main (void) { return 0; }' > conftest.c
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
219 save_LDFLAGS="$LDFLAGS"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
220 LDFLAGS="$LDFLAGS -Wl,-z,relax=transtls"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
221 if $CC $CFLAGS $LDFLAGS -o conftest conftest.c > /dev/null 2>&1; then
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
222 druntime_ld_relax_transtls=yes
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
223 fi
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
224 LDFLAGS="$save_LDFLAGS"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
225 rm -f conftest.c conftest
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
226 fi
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
227 if test "$druntime_ld_relax_transtls" = "yes"; then
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
228 OS_LINK_SPEC='-z relax=transtls'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
229 fi
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
230 ;;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
231 esac
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
232 AC_SUBST(OS_LINK_SPEC)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
233 ])