diff options
author | Khem Raj <raj.khem@gmail.com> | 2018-04-01 00:19:45 -0700 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2018-04-03 23:53:20 +0100 |
commit | 4f7e90a0afa9ca685d5c4356255df33f95d915b8 (patch) | |
tree | 5f4f3ac323d975435df1f6a72f464ed59c8eef0e /meta/recipes-kernel | |
parent | a36e4bb2f83f006a413571c89bffb0ece3e04b12 (diff) | |
download | poky-4f7e90a0afa9ca685d5c4356255df33f95d915b8.tar.gz |
systemtap: Backport a fix for build with gcc8
(From OE-Core rev: b751e865375b325df4083d85af191da4dc3a27ee)
Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/recipes-kernel')
-rw-r--r-- | meta/recipes-kernel/systemtap/systemtap/0001-Fixes-for-gcc-8.patch | 215 | ||||
-rw-r--r-- | meta/recipes-kernel/systemtap/systemtap_git.inc | 1 |
2 files changed, 216 insertions, 0 deletions
diff --git a/meta/recipes-kernel/systemtap/systemtap/0001-Fixes-for-gcc-8.patch b/meta/recipes-kernel/systemtap/systemtap/0001-Fixes-for-gcc-8.patch new file mode 100644 index 0000000000..a1b0bff02a --- /dev/null +++ b/meta/recipes-kernel/systemtap/systemtap/0001-Fixes-for-gcc-8.patch | |||
@@ -0,0 +1,215 @@ | |||
1 | From 4ffe00f1d9eac332d928f7dc01fe250dc32b1bb8 Mon Sep 17 00:00:00 2001 | ||
2 | From: Stan Cox <scox@redhat.com> | ||
3 | Date: Tue, 13 Feb 2018 22:38:03 -0500 | ||
4 | Subject: [PATCH] Fixes for gcc 8 | ||
5 | |||
6 | * includes/sys/sdt.h (__SDT_COND_SIGNED): Add CT, cast type argument | ||
7 | |||
8 | Author: Will Cohen <wcohen.redhat.com> | ||
9 | |||
10 | * stap-serverd.cxx (generate_mok, handleRequest, handle_connection): | ||
11 | Catch format overflow | ||
12 | |||
13 | * translate.cxx (translate_pass): Use ref in catch. | ||
14 | --- | ||
15 | Upstream-Status: Backport | ||
16 | Signed-off-by: Khem Raj <raj.khem@gmail.com> | ||
17 | |||
18 | includes/sys/sdt.h | 20 ++++++++-------- | ||
19 | stap-serverd.cxx | 67 +++++++++++++++++++++++++++++++++++++++++++++++------- | ||
20 | translate.cxx | 2 +- | ||
21 | 3 files changed, 70 insertions(+), 19 deletions(-) | ||
22 | |||
23 | diff --git a/includes/sys/sdt.h b/includes/sys/sdt.h | ||
24 | index 940f74483..c0c5a492c 100644 | ||
25 | --- a/includes/sys/sdt.h | ||
26 | +++ b/includes/sys/sdt.h | ||
27 | @@ -119,8 +119,8 @@ struct __sdt_type | ||
28 | |||
29 | #define __SDT_ALWAYS_SIGNED(T) \ | ||
30 | template<> struct __sdt_type<T> { static const bool __sdt_signed = true; }; | ||
31 | -#define __SDT_COND_SIGNED(T) \ | ||
32 | -template<> struct __sdt_type<T> { static const bool __sdt_signed = ((T)(-1) < 1); }; | ||
33 | +#define __SDT_COND_SIGNED(T,CT) \ | ||
34 | +template<> struct __sdt_type<T> { static const bool __sdt_signed = ((CT)(-1) < 1); }; | ||
35 | __SDT_ALWAYS_SIGNED(signed char) | ||
36 | __SDT_ALWAYS_SIGNED(short) | ||
37 | __SDT_ALWAYS_SIGNED(int) | ||
38 | @@ -141,14 +141,14 @@ __SDT_ALWAYS_SIGNED(const volatile short) | ||
39 | __SDT_ALWAYS_SIGNED(const volatile int) | ||
40 | __SDT_ALWAYS_SIGNED(const volatile long) | ||
41 | __SDT_ALWAYS_SIGNED(const volatile long long) | ||
42 | -__SDT_COND_SIGNED(char) | ||
43 | -__SDT_COND_SIGNED(wchar_t) | ||
44 | -__SDT_COND_SIGNED(volatile char) | ||
45 | -__SDT_COND_SIGNED(volatile wchar_t) | ||
46 | -__SDT_COND_SIGNED(const char) | ||
47 | -__SDT_COND_SIGNED(const wchar_t) | ||
48 | -__SDT_COND_SIGNED(const volatile char) | ||
49 | -__SDT_COND_SIGNED(const volatile wchar_t) | ||
50 | +__SDT_COND_SIGNED(char, char) | ||
51 | +__SDT_COND_SIGNED(wchar_t, wchar_t) | ||
52 | +__SDT_COND_SIGNED(volatile char, char) | ||
53 | +__SDT_COND_SIGNED(volatile wchar_t, wchar_t) | ||
54 | +__SDT_COND_SIGNED(const char, char) | ||
55 | +__SDT_COND_SIGNED(const wchar_t, wchar_t) | ||
56 | +__SDT_COND_SIGNED(const volatile char, char) | ||
57 | +__SDT_COND_SIGNED(const volatile wchar_t, wchar_t) | ||
58 | #if defined (__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) | ||
59 | /* __SDT_COND_SIGNED(char16_t) */ | ||
60 | /* __SDT_COND_SIGNED(char32_t) */ | ||
61 | diff --git a/stap-serverd.cxx b/stap-serverd.cxx | ||
62 | index 7cf76c617..41f77ee9e 100644 | ||
63 | --- a/stap-serverd.cxx | ||
64 | +++ b/stap-serverd.cxx | ||
65 | @@ -1607,6 +1607,7 @@ generate_mok(string &mok_fingerprint) | ||
66 | char tmpdir[PATH_MAX] = { '\0' }; | ||
67 | string public_cert_path, private_cert_path, destdir; | ||
68 | mode_t old_umask; | ||
69 | + int retlen; | ||
70 | |||
71 | mok_fingerprint.clear (); | ||
72 | |||
73 | @@ -1631,7 +1632,14 @@ generate_mok(string &mok_fingerprint) | ||
74 | } | ||
75 | |||
76 | // Make a temporary directory to store results in. | ||
77 | - snprintf (tmpdir, PATH_MAX, "%s/stap-server.XXXXXX", mok_path.c_str ()); | ||
78 | + retlen = snprintf (tmpdir, PATH_MAX, "%s/stap-server.XXXXXX", mok_path.c_str ()); | ||
79 | + if (retlen < 0 || retlen >= PATH_MAX) | ||
80 | + { | ||
81 | + server_error (_F("Could not create %s name", "temporary directory")); | ||
82 | + tmpdir[0] = '\0'; | ||
83 | + goto cleanup; | ||
84 | + } | ||
85 | + | ||
86 | if (mkdtemp (tmpdir) == NULL) | ||
87 | { | ||
88 | server_error (_F("Could not create temporary directory %s: %s", tmpdir, | ||
89 | @@ -1704,6 +1712,7 @@ handleRequest (const string &requestDirName, const string &responseDirName, stri | ||
90 | unsigned u; | ||
91 | unsigned i; | ||
92 | FILE* f; | ||
93 | + int retlen; | ||
94 | |||
95 | // Save the server version. Do this early, so the client knows what version of the server | ||
96 | // it is dealing with, even if the request is not fully completed. | ||
97 | @@ -1782,7 +1791,12 @@ handleRequest (const string &requestDirName, const string &responseDirName, stri | ||
98 | struct stat st; | ||
99 | char *arg; | ||
100 | |||
101 | - snprintf (stapargfile, PATH_MAX, "%s/argv%d", requestDirName.c_str (), i); | ||
102 | + retlen = snprintf (stapargfile, PATH_MAX, "%s/argv%d", requestDirName.c_str (), i); | ||
103 | + if (retlen < 0 || retlen >= PATH_MAX) | ||
104 | + { | ||
105 | + server_error (_F("Error creating %s name", "path")); | ||
106 | + return; | ||
107 | + } | ||
108 | |||
109 | rc = stat(stapargfile, & st); | ||
110 | if (rc) break; | ||
111 | @@ -1888,7 +1902,15 @@ handleRequest (const string &requestDirName, const string &responseDirName, stri | ||
112 | { | ||
113 | glob_t globber; | ||
114 | char pattern[PATH_MAX]; | ||
115 | - snprintf (pattern, PATH_MAX, "%s/*.ko", new_staptmpdir.c_str()); | ||
116 | + int retlen; | ||
117 | + | ||
118 | + retlen = snprintf (pattern, PATH_MAX, "%s/*.ko", new_staptmpdir.c_str()); | ||
119 | + if (retlen < 0 || retlen >= PATH_MAX) | ||
120 | + { | ||
121 | + server_error (_F("Error creating %s name", "pattern")); | ||
122 | + return; | ||
123 | + } | ||
124 | + | ||
125 | rc = glob (pattern, GLOB_ERR, NULL, &globber); | ||
126 | if (rc) | ||
127 | server_error (_F("Unable to find a module in %s", new_staptmpdir.c_str())); | ||
128 | @@ -2164,6 +2186,7 @@ handle_connection (void *arg) | ||
129 | copy for each connection.*/ | ||
130 | vector<string> argv; | ||
131 | PRInt32 bytesRead; | ||
132 | + int retlen; | ||
133 | |||
134 | /* Detatch to avoid a memory leak */ | ||
135 | if(max_threads > 0) | ||
136 | @@ -2213,7 +2236,13 @@ handle_connection (void *arg) | ||
137 | #endif | ||
138 | |||
139 | secStatus = SECFailure; | ||
140 | - snprintf(tmpdir, PATH_MAX, "%s/stap-server.XXXXXX", getenv("TMPDIR") ?: "/tmp"); | ||
141 | + retlen = snprintf(tmpdir, PATH_MAX, "%s/stap-server.XXXXXX", getenv("TMPDIR") ?: "/tmp"); | ||
142 | + if (retlen < 0 || retlen >= PATH_MAX) | ||
143 | + { | ||
144 | + server_error (_F("Error creating %s name", "temporary directory")); | ||
145 | + tmpdir[0]=0; /* prevent /bin/rm */ | ||
146 | + goto cleanup; | ||
147 | + } | ||
148 | rc1 = mkdtemp(tmpdir); | ||
149 | if (! rc1) | ||
150 | { | ||
151 | @@ -2223,9 +2252,20 @@ handle_connection (void *arg) | ||
152 | } | ||
153 | |||
154 | /* Create a temporary files names and directories. */ | ||
155 | - snprintf (requestFileName, PATH_MAX, "%s/request.zip", tmpdir); | ||
156 | + retlen = snprintf (requestFileName, PATH_MAX, "%s/request.zip", tmpdir); | ||
157 | + if (retlen < 0 || retlen >= PATH_MAX) | ||
158 | + { | ||
159 | + server_error (_F("Error creating %s name", "request.zip path")); | ||
160 | + goto cleanup; | ||
161 | + } | ||
162 | + | ||
163 | + retlen = snprintf (requestDirName, PATH_MAX, "%s/request", tmpdir); | ||
164 | + if (retlen < 0 || retlen >= PATH_MAX) | ||
165 | + { | ||
166 | + server_error (_F("Error creating %s name", "request directory path")); | ||
167 | + goto cleanup; | ||
168 | + } | ||
169 | |||
170 | - snprintf (requestDirName, PATH_MAX, "%s/request", tmpdir); | ||
171 | rc = mkdir(requestDirName, 0700); | ||
172 | if (rc) | ||
173 | { | ||
174 | @@ -2233,7 +2273,13 @@ handle_connection (void *arg) | ||
175 | goto cleanup; | ||
176 | } | ||
177 | |||
178 | - snprintf (responseDirName, PATH_MAX, "%s/response", tmpdir); | ||
179 | + retlen = snprintf (responseDirName, PATH_MAX, "%s/response", tmpdir); | ||
180 | + if (retlen < 0 || retlen >= PATH_MAX) | ||
181 | + { | ||
182 | + server_error (_F("Error creating %s name", "response directory path")); | ||
183 | + goto cleanup; | ||
184 | + } | ||
185 | + | ||
186 | rc = mkdir(responseDirName, 0700); | ||
187 | if (rc) | ||
188 | { | ||
189 | @@ -2243,7 +2289,12 @@ handle_connection (void *arg) | ||
190 | // Set this early, since it gets used for errors to be returned to the client. | ||
191 | stapstderr = string(responseDirName) + "/stderr"; | ||
192 | |||
193 | - snprintf (responseFileName, PATH_MAX, "%s/response.zip", tmpdir); | ||
194 | + retlen = snprintf (responseFileName, PATH_MAX, "%s/response.zip", tmpdir); | ||
195 | + if (retlen < 0 || retlen >= PATH_MAX) | ||
196 | + { | ||
197 | + server_error (_F("Error creating %s name", "response.zip path")); | ||
198 | + goto cleanup; | ||
199 | + } | ||
200 | |||
201 | /* Read data from the socket. | ||
202 | * If the user is requesting/requiring authentication, authenticate | ||
203 | diff --git a/translate.cxx b/translate.cxx | ||
204 | index 1240a80ec..4ade06fdd 100644 | ||
205 | --- a/translate.cxx | ||
206 | +++ b/translate.cxx | ||
207 | @@ -7860,7 +7860,7 @@ translate_pass (systemtap_session& s) | ||
208 | if (versions.size() >= 3 && s.verbose > 1) | ||
209 | clog << _F("ignoring extra parts of compat version: %s", s.compatible.c_str()) << endl; | ||
210 | } | ||
211 | - catch (const runtime_error) | ||
212 | + catch (const runtime_error&) | ||
213 | { | ||
214 | throw SEMANTIC_ERROR(_F("parse error in compatibility version: %s", s.compatible.c_str())); | ||
215 | } | ||
diff --git a/meta/recipes-kernel/systemtap/systemtap_git.inc b/meta/recipes-kernel/systemtap/systemtap_git.inc index f51bd28fd8..4d887ed4d2 100644 --- a/meta/recipes-kernel/systemtap/systemtap_git.inc +++ b/meta/recipes-kernel/systemtap/systemtap_git.inc | |||
@@ -14,6 +14,7 @@ SRC_URI = "git://sourceware.org/git/systemtap.git \ | |||
14 | file://0001-buildrun-remove-quotes-around-I-include-line.patch \ | 14 | file://0001-buildrun-remove-quotes-around-I-include-line.patch \ |
15 | file://0001-staprun-stapbpf-don-t-support-installing-a-non-root.patch \ | 15 | file://0001-staprun-stapbpf-don-t-support-installing-a-non-root.patch \ |
16 | file://0001-Fix-PR22551-by-updating-the-use-of-timers-for-the-4..patch \ | 16 | file://0001-Fix-PR22551-by-updating-the-use-of-timers-for-the-4..patch \ |
17 | file://0001-Fixes-for-gcc-8.patch \ | ||
17 | " | 18 | " |
18 | 19 | ||
19 | COMPATIBLE_HOST = '(x86_64|i.86|powerpc|arm|aarch64|microblazeel|mips).*-linux' | 20 | COMPATIBLE_HOST = '(x86_64|i.86|powerpc|arm|aarch64|microblazeel|mips).*-linux' |