annotate libitm/util.cc @ 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: 131
diff changeset
1 /* Copyright (C) 2009-2020 Free Software Foundation, Inc.
111
kono
parents:
diff changeset
2 Contributed by Richard Henderson <rth@redhat.com>.
kono
parents:
diff changeset
3
kono
parents:
diff changeset
4 This file is part of the GNU Transactional Memory Library (libitm).
kono
parents:
diff changeset
5
kono
parents:
diff changeset
6 Libitm is free software; you can redistribute it and/or modify it
kono
parents:
diff changeset
7 under the terms of the GNU General Public License as published by
kono
parents:
diff changeset
8 the Free Software Foundation; either version 3 of the License, or
kono
parents:
diff changeset
9 (at your option) any later version.
kono
parents:
diff changeset
10
kono
parents:
diff changeset
11 Libitm is distributed in the hope that it will be useful, but WITHOUT ANY
kono
parents:
diff changeset
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
kono
parents:
diff changeset
13 FOR A PARTICULAR PURPOSE. See the GNU General Public License for
kono
parents:
diff changeset
14 more details.
kono
parents:
diff changeset
15
kono
parents:
diff changeset
16 Under Section 7 of GPL version 3, you are granted additional
kono
parents:
diff changeset
17 permissions described in the GCC Runtime Library Exception, version
kono
parents:
diff changeset
18 3.1, as published by the Free Software Foundation.
kono
parents:
diff changeset
19
kono
parents:
diff changeset
20 You should have received a copy of the GNU General Public License and
kono
parents:
diff changeset
21 a copy of the GCC Runtime Library Exception along with this program;
kono
parents:
diff changeset
22 see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
kono
parents:
diff changeset
23 <http://www.gnu.org/licenses/>. */
kono
parents:
diff changeset
24
kono
parents:
diff changeset
25 #include "libitm_i.h"
kono
parents:
diff changeset
26 #include <stdarg.h>
kono
parents:
diff changeset
27 #include <stdio.h>
kono
parents:
diff changeset
28
kono
parents:
diff changeset
29 namespace GTM HIDDEN {
kono
parents:
diff changeset
30
kono
parents:
diff changeset
31 static void
kono
parents:
diff changeset
32 gtm_verror (const char *fmt, va_list list)
kono
parents:
diff changeset
33 {
kono
parents:
diff changeset
34 fputs ("\nlibitm: ", stderr);
kono
parents:
diff changeset
35 vfprintf (stderr, fmt, list);
kono
parents:
diff changeset
36 fputc ('\n', stderr);
kono
parents:
diff changeset
37 }
kono
parents:
diff changeset
38
kono
parents:
diff changeset
39 void
kono
parents:
diff changeset
40 GTM_error (const char *fmt, ...)
kono
parents:
diff changeset
41 {
kono
parents:
diff changeset
42 va_list list;
kono
parents:
diff changeset
43
kono
parents:
diff changeset
44 va_start (list, fmt);
kono
parents:
diff changeset
45 gtm_verror (fmt, list);
kono
parents:
diff changeset
46 va_end (list);
kono
parents:
diff changeset
47 }
kono
parents:
diff changeset
48
kono
parents:
diff changeset
49 void
kono
parents:
diff changeset
50 GTM_fatal (const char *fmt, ...)
kono
parents:
diff changeset
51 {
kono
parents:
diff changeset
52 va_list list;
kono
parents:
diff changeset
53
kono
parents:
diff changeset
54 va_start (list, fmt);
kono
parents:
diff changeset
55 gtm_verror (fmt, list);
kono
parents:
diff changeset
56 va_end (list);
kono
parents:
diff changeset
57
kono
parents:
diff changeset
58 exit (EXIT_FAILURE);
kono
parents:
diff changeset
59 }
kono
parents:
diff changeset
60
kono
parents:
diff changeset
61 void *
kono
parents:
diff changeset
62 xmalloc (size_t size, bool separate_cl)
kono
parents:
diff changeset
63 {
kono
parents:
diff changeset
64 void *r;
kono
parents:
diff changeset
65 #ifdef HAVE_POSIX_MEMALIGN
kono
parents:
diff changeset
66 if (separate_cl)
kono
parents:
diff changeset
67 {
kono
parents:
diff changeset
68 if (posix_memalign (&r, HW_CACHELINE_SIZE, size))
kono
parents:
diff changeset
69 GTM_fatal ("Out of memory allocating %lu bytes aligned on cache line",
kono
parents:
diff changeset
70 (unsigned long) size);
kono
parents:
diff changeset
71 }
kono
parents:
diff changeset
72 else
kono
parents:
diff changeset
73 #endif
kono
parents:
diff changeset
74 {
kono
parents:
diff changeset
75 r = malloc (size);
kono
parents:
diff changeset
76 if (r == 0)
kono
parents:
diff changeset
77 GTM_fatal ("Out of memory allocating %lu bytes",
kono
parents:
diff changeset
78 (unsigned long) size);
kono
parents:
diff changeset
79 }
kono
parents:
diff changeset
80 return r;
kono
parents:
diff changeset
81 }
kono
parents:
diff changeset
82
kono
parents:
diff changeset
83 void *
kono
parents:
diff changeset
84 xcalloc (size_t size, bool separate_cl)
kono
parents:
diff changeset
85 {
kono
parents:
diff changeset
86 // TODO Use posix_memalign if separate_cl is true, or some other allocation
kono
parents:
diff changeset
87 // method that will avoid sharing cache lines with data used by other
kono
parents:
diff changeset
88 // threads.
kono
parents:
diff changeset
89 void *r = calloc (1, size);
kono
parents:
diff changeset
90 if (r == 0)
kono
parents:
diff changeset
91 GTM_fatal ("Out of memory allocating %lu bytes", (unsigned long) size);
kono
parents:
diff changeset
92 return r;
kono
parents:
diff changeset
93 }
kono
parents:
diff changeset
94
kono
parents:
diff changeset
95 void *
kono
parents:
diff changeset
96 xrealloc (void *old, size_t size, bool separate_cl)
kono
parents:
diff changeset
97 {
kono
parents:
diff changeset
98 // TODO Use posix_memalign if separate_cl is true, or some other allocation
kono
parents:
diff changeset
99 // method that will avoid sharing cache lines with data used by other
kono
parents:
diff changeset
100 // threads.
kono
parents:
diff changeset
101 void *r = realloc (old, size);
kono
parents:
diff changeset
102 if (r == 0)
kono
parents:
diff changeset
103 GTM_fatal ("Out of memory allocating %lu bytes", (unsigned long) size);
kono
parents:
diff changeset
104 return r;
kono
parents:
diff changeset
105 }
kono
parents:
diff changeset
106
kono
parents:
diff changeset
107 } // namespace GTM