annotate libgomp/affinity-fmt.c @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents
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 /* Copyright (C) 2018-2020 Free Software Foundation, Inc.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
2 Contributed by Jakub Jelinek <jakub@redhat.com>.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
3
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
4 This file is part of the GNU Offloading and Multi Processing Library
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
5 (libgomp).
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
6
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
7 Libgomp is free software; you can redistribute it and/or modify it
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
8 under the terms of the GNU General Public License as published by
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
9 the Free Software Foundation; either version 3, or (at your option)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
10 any later version.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
11
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
12 Libgomp is distributed in the hope that it will be useful, but WITHOUT ANY
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
14 FOR A PARTICULAR PURPOSE. See the GNU General Public License for
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
15 more details.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
16
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
17 Under Section 7 of GPL version 3, you are granted additional
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
18 permissions described in the GCC Runtime Library Exception, version
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
19 3.1, as published by the Free Software Foundation.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
20
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
21 You should have received a copy of the GNU General Public License and
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
22 a copy of the GCC Runtime Library Exception along with this program;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
23 see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
24 <http://www.gnu.org/licenses/>. */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
25
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
26 #include "libgomp.h"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
27 #include <string.h>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
28 #include <stdio.h>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
29 #include <stdlib.h>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
30 #ifdef HAVE_UNISTD_H
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
31 #include <unistd.h>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
32 #endif
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
33 #ifdef HAVE_INTTYPES_H
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
34 # include <inttypes.h> /* For PRIx64. */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
35 #endif
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
36 #ifdef HAVE_UNAME
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
37 #include <sys/utsname.h>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
38 #endif
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
39
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
40 bool
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
41 gomp_print_string (const char *str, size_t len)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
42 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
43 return fwrite (str, 1, len, stderr) != len;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
44 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
45
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
46 void
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
47 gomp_set_affinity_format (const char *format, size_t len)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
48 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
49 if (len < gomp_affinity_format_len)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
50 memcpy (gomp_affinity_format_var, format, len);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
51 else
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
52 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
53 char *p;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
54 if (gomp_affinity_format_len)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
55 p = gomp_realloc (gomp_affinity_format_var, len + 1);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
56 else
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
57 p = gomp_malloc (len + 1);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
58 memcpy (p, format, len);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
59 gomp_affinity_format_var = p;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
60 gomp_affinity_format_len = len + 1;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
61 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
62 gomp_affinity_format_var[len] = '\0';
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
63 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
64
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
65 void
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
66 omp_set_affinity_format (const char *format)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
67 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
68 gomp_set_affinity_format (format, strlen (format));
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
69 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
70
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
71 size_t
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
72 omp_get_affinity_format (char *buffer, size_t size)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
73 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
74 size_t len = strlen (gomp_affinity_format_var);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
75 if (size)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
76 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
77 if (len < size)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
78 memcpy (buffer, gomp_affinity_format_var, len + 1);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
79 else
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
80 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
81 memcpy (buffer, gomp_affinity_format_var, size - 1);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
82 buffer[size - 1] = '\0';
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
83 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
84 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
85 return len;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
86 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
87
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
88 void
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
89 gomp_display_string (char *buffer, size_t size, size_t *ret,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
90 const char *str, size_t len)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
91 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
92 size_t r = *ret;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
93 if (size && r < size)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
94 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
95 size_t l = len;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
96 if (size - r < len)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
97 l = size - r;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
98 memcpy (buffer + r, str, l);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
99 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
100 *ret += len;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
101 if (__builtin_expect (r > *ret, 0))
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
102 gomp_fatal ("overflow in omp_capture_affinity");
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
103 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
104
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
105 static void
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
106 gomp_display_repeat (char *buffer, size_t size, size_t *ret,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
107 char c, size_t len)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
108 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
109 size_t r = *ret;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
110 if (size && r < size)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
111 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
112 size_t l = len;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
113 if (size - r < len)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
114 l = size - r;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
115 memset (buffer + r, c, l);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
116 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
117 *ret += len;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
118 if (__builtin_expect (r > *ret, 0))
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
119 gomp_fatal ("overflow in omp_capture_affinity");
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
120 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
121
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
122 static void
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
123 gomp_display_num (char *buffer, size_t size, size_t *ret,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
124 bool zero, bool right, size_t sz, char *buf)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
125 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
126 size_t l = strlen (buf);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
127 if (sz == (size_t) -1 || l >= sz)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
128 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
129 gomp_display_string (buffer, size, ret, buf, l);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
130 return;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
131 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
132 if (zero)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
133 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
134 if (buf[0] == '-')
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
135 gomp_display_string (buffer, size, ret, buf, 1);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
136 else if (buf[0] == '0' && buf[1] == 'x')
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
137 gomp_display_string (buffer, size, ret, buf, 2);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
138 gomp_display_repeat (buffer, size, ret, '0', sz - l);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
139 if (buf[0] == '-')
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
140 gomp_display_string (buffer, size, ret, buf + 1, l - 1);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
141 else if (buf[0] == '0' && buf[1] == 'x')
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
142 gomp_display_string (buffer, size, ret, buf + 2, l - 2);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
143 else
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
144 gomp_display_string (buffer, size, ret, buf, l);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
145 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
146 else if (right)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
147 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
148 gomp_display_repeat (buffer, size, ret, ' ', sz - l);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
149 gomp_display_string (buffer, size, ret, buf, l);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
150 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
151 else
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
152 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
153 gomp_display_string (buffer, size, ret, buf, l);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
154 gomp_display_repeat (buffer, size, ret, ' ', sz - l);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
155 }
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 static void
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
159 gomp_display_int (char *buffer, size_t size, size_t *ret,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
160 bool zero, bool right, size_t sz, int num)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
161 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
162 char buf[3 * sizeof (int) + 2];
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
163 sprintf (buf, "%d", num);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
164 gomp_display_num (buffer, size, ret, zero, right, sz, buf);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
165 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
166
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
167 static void
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
168 gomp_display_string_len (char *buffer, size_t size, size_t *ret,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
169 bool right, size_t sz, char *str, size_t len)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
170 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
171 if (sz == (size_t) -1 || len >= sz)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
172 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
173 gomp_display_string (buffer, size, ret, str, len);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
174 return;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
175 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
176
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
177 if (right)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
178 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
179 gomp_display_repeat (buffer, size, ret, ' ', sz - len);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
180 gomp_display_string (buffer, size, ret, str, len);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
181 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
182 else
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
183 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
184 gomp_display_string (buffer, size, ret, str, len);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
185 gomp_display_repeat (buffer, size, ret, ' ', sz - len);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
186 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
187 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
188
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
189 static void
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
190 gomp_display_hostname (char *buffer, size_t size, size_t *ret,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
191 bool right, size_t sz)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
192 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
193 #ifdef HAVE_GETHOSTNAME
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
194 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
195 char buf[256];
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
196 char *b = buf;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
197 size_t len = 256;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
198 do
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
199 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
200 b[len - 1] = '\0';
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
201 if (gethostname (b, len - 1) == 0)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
202 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
203 size_t l = strlen (b);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
204 if (l < len - 1)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
205 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
206 gomp_display_string_len (buffer, size, ret,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
207 right, sz, b, l);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
208 if (b != buf)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
209 free (b);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
210 return;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
211 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
212 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
213 if (len == 1048576)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
214 break;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
215 len = len * 2;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
216 if (len == 512)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
217 b = gomp_malloc (len);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
218 else
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
219 b = gomp_realloc (b, len);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
220 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
221 while (1);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
222 if (b != buf)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
223 free (b);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
224 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
225 #endif
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
226 #ifdef HAVE_UNAME
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
227 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
228 struct utsname buf;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
229 if (uname (&buf) == 0)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
230 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
231 gomp_display_string_len (buffer, size, ret, right, sz,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
232 buf.nodename, strlen (buf.nodename));
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
233 return;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
234 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
235 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
236 #endif
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
237 gomp_display_string_len (buffer, size, ret, right, sz, "node", 4);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
238 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
239
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
240 struct affinity_types_struct {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
241 char long_str[18];
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
242 char long_len;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
243 char short_c; };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
244
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
245 static struct affinity_types_struct affinity_types[] =
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
246 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
247 #define AFFINITY_TYPE(l, s) \
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
248 { #l, sizeof (#l) - 1, s }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
249 AFFINITY_TYPE (team_num, 't'),
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
250 AFFINITY_TYPE (num_teams, 'T'),
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
251 AFFINITY_TYPE (nesting_level, 'L'),
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
252 AFFINITY_TYPE (thread_num, 'n'),
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
253 AFFINITY_TYPE (num_threads, 'N'),
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
254 AFFINITY_TYPE (ancestor_tnum, 'a'),
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
255 AFFINITY_TYPE (host, 'H'),
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
256 AFFINITY_TYPE (process_id, 'P'),
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
257 AFFINITY_TYPE (native_thread_id, 'i'),
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
258 AFFINITY_TYPE (thread_affinity, 'A')
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
259 #undef AFFINITY_TYPE
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
260 };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
261
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
262 size_t
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
263 gomp_display_affinity (char *buffer, size_t size,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
264 const char *format, gomp_thread_handle handle,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
265 struct gomp_team_state *ts, unsigned int place)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
266 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
267 size_t ret = 0;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
268 do
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
269 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
270 const char *p = strchr (format, '%');
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
271 bool zero = false;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
272 bool right = false;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
273 size_t sz = -1;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
274 char c;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
275 int val;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
276 if (p == NULL)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
277 p = strchr (format, '\0');
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
278 if (p != format)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
279 gomp_display_string (buffer, size, &ret,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
280 format, p - format);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
281 if (*p == '\0')
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
282 break;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
283 p++;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
284 if (*p == '%')
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
285 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
286 gomp_display_string (buffer, size, &ret, "%", 1);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
287 format = p + 1;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
288 continue;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
289 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
290 if (*p == '0')
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
291 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
292 zero = true;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
293 p++;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
294 if (*p != '.')
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
295 gomp_fatal ("leading zero not followed by dot in affinity format");
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
296 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
297 if (*p == '.')
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
298 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
299 right = true;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
300 p++;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
301 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
302 if (*p >= '1' && *p <= '9')
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
303 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
304 char *end;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
305 sz = strtoul (p, &end, 10);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
306 p = end;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
307 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
308 else if (zero || right)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
309 gomp_fatal ("leading zero or right justification in affinity format "
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
310 "requires size");
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
311 c = *p;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
312 if (c == '{')
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
313 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
314 int i;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
315 for (i = 0;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
316 i < sizeof (affinity_types) / sizeof (affinity_types[0]); ++i)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
317 if (strncmp (p + 1, affinity_types[i].long_str,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
318 affinity_types[i].long_len) == 0
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
319 && p[affinity_types[i].long_len + 1] == '}')
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
320 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
321 c = affinity_types[i].short_c;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
322 p += affinity_types[i].long_len + 1;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
323 break;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
324 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
325 if (c == '{')
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
326 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
327 char *q = strchr (p + 1, '}');
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
328 if (q)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
329 gomp_fatal ("unsupported long type name '%.*s' in affinity "
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
330 "format", (int) (q - (p + 1)), p + 1);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
331 else
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
332 gomp_fatal ("unterminated long type name '%s' in affinity "
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
333 "format", p + 1);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
334 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
335 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
336 switch (c)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
337 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
338 case 't':
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
339 val = omp_get_team_num ();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
340 goto do_int;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
341 case 'T':
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
342 val = omp_get_num_teams ();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
343 goto do_int;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
344 case 'L':
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
345 val = ts->level;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
346 goto do_int;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
347 case 'n':
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
348 val = ts->team_id;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
349 goto do_int;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
350 case 'N':
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
351 val = ts->team ? ts->team->nthreads : 1;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
352 goto do_int;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
353 case 'a':
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
354 val = ts->team ? ts->team->prev_ts.team_id : -1;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
355 goto do_int;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
356 case 'H':
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
357 gomp_display_hostname (buffer, size, &ret, right, sz);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
358 break;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
359 case 'P':
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
360 #ifdef HAVE_GETPID
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
361 val = getpid ();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
362 #else
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
363 val = 0;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
364 #endif
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
365 goto do_int;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
366 case 'i':
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
367 #if defined(LIBGOMP_USE_PTHREADS) && defined(__GNUC__)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
368 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
369 char buf[3 * (sizeof (handle) + sizeof (uintptr_t) + sizeof (int))
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
370 + 4];
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
371 /* This macro returns expr unmodified for integral or pointer
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
372 types and 0 for anything else (e.g. aggregates). */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
373 #define gomp_nonaggregate(expr) \
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
374 __builtin_choose_expr (__builtin_classify_type (expr) == 1 \
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
375 || __builtin_classify_type (expr) == 5, expr, 0)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
376 /* This macro returns expr unmodified for integral types,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
377 (uintptr_t) (expr) for pointer types and 0 for anything else
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
378 (e.g. aggregates). */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
379 #define gomp_integral(expr) \
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
380 __builtin_choose_expr (__builtin_classify_type (expr) == 5, \
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
381 (uintptr_t) gomp_nonaggregate (expr), \
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
382 gomp_nonaggregate (expr))
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
383
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
384 if (sizeof (gomp_integral (handle)) == sizeof (unsigned long))
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
385 sprintf (buf, "0x%lx", (unsigned long) gomp_integral (handle));
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
386 #if defined (HAVE_INTTYPES_H) && defined (PRIx64)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
387 else if (sizeof (gomp_integral (handle)) == sizeof (uint64_t))
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
388 sprintf (buf, "0x%" PRIx64, (uint64_t) gomp_integral (handle));
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
389 #else
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
390 else if (sizeof (gomp_integral (handle))
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
391 == sizeof (unsigned long long))
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
392 sprintf (buf, "0x%llx",
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
393 (unsigned long long) gomp_integral (handle));
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
394 #endif
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
395 else
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
396 sprintf (buf, "0x%x", (unsigned int) gomp_integral (handle));
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
397 gomp_display_num (buffer, size, &ret, zero, right, sz, buf);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
398 break;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
399 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
400 #else
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
401 val = 0;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
402 goto do_int;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
403 #endif
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
404 case 'A':
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
405 if (sz == (size_t) -1)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
406 gomp_display_affinity_place (buffer, size, &ret,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
407 place - 1);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
408 else if (right)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
409 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
410 size_t len = 0;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
411 gomp_display_affinity_place (NULL, 0, &len, place - 1);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
412 if (len < sz)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
413 gomp_display_repeat (buffer, size, &ret, ' ', sz - len);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
414 gomp_display_affinity_place (buffer, size, &ret, place - 1);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
415 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
416 else
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
417 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
418 size_t start = ret;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
419 gomp_display_affinity_place (buffer, size, &ret, place - 1);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
420 if (ret - start < sz)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
421 gomp_display_repeat (buffer, size, &ret, ' ', sz - (ret - start));
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
422 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
423 break;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
424 do_int:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
425 gomp_display_int (buffer, size, &ret, zero, right, sz, val);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
426 break;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
427 default:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
428 gomp_fatal ("unsupported type %c in affinity format", c);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
429 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
430 format = p + 1;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
431 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
432 while (1);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
433 return ret;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
434 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
435
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
436 size_t
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
437 omp_capture_affinity (char *buffer, size_t size, const char *format)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
438 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
439 struct gomp_thread *thr = gomp_thread ();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
440 size_t ret
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
441 = gomp_display_affinity (buffer, size,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
442 format && *format
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
443 ? format : gomp_affinity_format_var,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
444 gomp_thread_self (), &thr->ts, thr->place);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
445 if (size)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
446 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
447 if (ret >= size)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
448 buffer[size - 1] = '\0';
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
449 else
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
450 buffer[ret] = '\0';
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
451 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
452 return ret;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
453 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
454 ialias (omp_capture_affinity)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
455
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
456 void
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
457 omp_display_affinity (const char *format)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
458 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
459 char buf[512];
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
460 char *b;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
461 size_t ret = ialias_call (omp_capture_affinity) (buf, sizeof buf, format);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
462 if (ret < sizeof buf)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
463 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
464 buf[ret] = '\n';
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
465 gomp_print_string (buf, ret + 1);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
466 return;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
467 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
468 b = gomp_malloc (ret + 1);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
469 ialias_call (omp_capture_affinity) (b, ret + 1, format);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
470 b[ret] = '\n';
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
471 gomp_print_string (b, ret + 1);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
472 free (b);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
473 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
474
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
475 void
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
476 gomp_display_affinity_thread (gomp_thread_handle handle,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
477 struct gomp_team_state *ts, unsigned int place)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
478 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
479 char buf[512];
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
480 char *b;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
481 size_t ret = gomp_display_affinity (buf, sizeof buf, gomp_affinity_format_var,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
482 handle, ts, place);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
483 if (ret < sizeof buf)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
484 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
485 buf[ret] = '\n';
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
486 gomp_print_string (buf, ret + 1);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
487 return;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
488 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
489 b = gomp_malloc (ret + 1);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
490 gomp_display_affinity (b, ret + 1, gomp_affinity_format_var,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
491 handle, ts, place);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
492 b[ret] = '\n';
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
493 gomp_print_string (b, ret + 1);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
494 free (b);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
495 }