diff options
author | Bruce Ashfield <bruce.ashfield@windriver.com> | 2019-01-07 09:33:46 -0500 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2019-01-08 11:16:44 +0000 |
commit | e185ff92e03429142739376b6a05a5faddd773d4 (patch) | |
tree | aa76f750ad88a1e7b0c3f51e16a82d236168aea1 /meta/recipes-kernel/linux-libc-headers/linux-libc-headers/0003-arm64-sve-Disentangle-uapi-asm-ptrace.h-from-uapi-as.patch | |
parent | 7abac94d38579c13173abc64242e2458f4f0b855 (diff) | |
download | poky-e185ff92e03429142739376b6a05a5faddd773d4.tar.gz |
linux-libc-headers: update to v4.19
Updating the linux-libc-headers to match the latest reference
kernel in oe-core.
We addtionally add three patches (identified by Khem) to fix muslc
aarch64 build issues.
(From OE-Core rev: 11f02b7c6f9854eecd3a49ea47833c8cbffb1581)
Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/recipes-kernel/linux-libc-headers/linux-libc-headers/0003-arm64-sve-Disentangle-uapi-asm-ptrace.h-from-uapi-as.patch')
-rw-r--r-- | meta/recipes-kernel/linux-libc-headers/linux-libc-headers/0003-arm64-sve-Disentangle-uapi-asm-ptrace.h-from-uapi-as.patch | 289 |
1 files changed, 289 insertions, 0 deletions
diff --git a/meta/recipes-kernel/linux-libc-headers/linux-libc-headers/0003-arm64-sve-Disentangle-uapi-asm-ptrace.h-from-uapi-as.patch b/meta/recipes-kernel/linux-libc-headers/linux-libc-headers/0003-arm64-sve-Disentangle-uapi-asm-ptrace.h-from-uapi-as.patch new file mode 100644 index 0000000000..0423f0f2cc --- /dev/null +++ b/meta/recipes-kernel/linux-libc-headers/linux-libc-headers/0003-arm64-sve-Disentangle-uapi-asm-ptrace.h-from-uapi-as.patch | |||
@@ -0,0 +1,289 @@ | |||
1 | From 1114697c04b9699112e78dd8fc6ec849609ca1cb Mon Sep 17 00:00:00 2001 | ||
2 | From: Dave Martin <Dave.Martin@arm.com> | ||
3 | Date: Tue, 11 Dec 2018 19:26:47 +0000 | ||
4 | Subject: [PATCH 3/3] arm64/sve: Disentangle <uapi/asm/ptrace.h> from | ||
5 | <uapi/asm/sigcontext.h> | ||
6 | |||
7 | Currently, <uapi/asm/sigcontext.h> provides common definitions for | ||
8 | describing SVE context structures that are also used by the ptrace | ||
9 | definitions in <uapi/asm/ptrace.h>. | ||
10 | |||
11 | For this reason, a #include of <asm/sigcontext.h> was added in | ||
12 | ptrace.h, but it this turns out that this can interact badly with | ||
13 | userspace code that tries to include ptrace.h on top of the libc | ||
14 | headers (which may provide their own shadow definitions for | ||
15 | sigcontext.h). | ||
16 | |||
17 | To make the headers easier for userspace to consume, this patch | ||
18 | bounces the common definitions into an __SVE_* namespace and moves | ||
19 | them to a backend header <uapi/asm/sve_context.h> that can be | ||
20 | included by the other headers as appropriate. This should allow | ||
21 | ptrace.h to be used alongside libc's sigcontext.h (if any) without | ||
22 | ill effects. | ||
23 | |||
24 | This should make the situation unambiguous: <asm/sigcontext.h> is | ||
25 | the header to include for the sigframe-specific definitions, while | ||
26 | <asm/ptrace.h> is the header to include for ptrace-specific | ||
27 | definitions. | ||
28 | |||
29 | To avoid conflicting with existing usage, <asm/sigcontext.h> | ||
30 | remains the canonical way to get the common definitions for | ||
31 | SVE_VQ_MIN, sve_vq_from_vl() etc., both in userspace and in the | ||
32 | kernel: relying on these being defined as a side effect of | ||
33 | including just <asm/ptrace.h> was never intended to be safe. | ||
34 | |||
35 | Signed-off-by: Dave Martin <Dave.Martin@arm.com> | ||
36 | Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com> | ||
37 | |||
38 | Upstream-Status: Submitted [https://www.spinics.net/lists/arm-kernel/msg694800.html] | ||
39 | --- | ||
40 | arch/arm64/include/uapi/asm/ptrace.h | 39 ++++++++++----------- | ||
41 | arch/arm64/include/uapi/asm/sigcontext.h | 56 +++++++++++++++---------------- | ||
42 | arch/arm64/include/uapi/asm/sve_context.h | 50 +++++++++++++++++++++++++++ | ||
43 | 3 files changed, 96 insertions(+), 49 deletions(-) | ||
44 | create mode 100644 arch/arm64/include/uapi/asm/sve_context.h | ||
45 | |||
46 | diff --git a/arch/arm64/include/uapi/asm/ptrace.h b/arch/arm64/include/uapi/asm/ptrace.h | ||
47 | index ad64d2c92ef5..81547c3a95a3 100644 | ||
48 | --- a/arch/arm64/include/uapi/asm/ptrace.h | ||
49 | +++ b/arch/arm64/include/uapi/asm/ptrace.h | ||
50 | @@ -23,7 +23,7 @@ | ||
51 | #include <linux/types.h> | ||
52 | |||
53 | #include <asm/hwcap.h> | ||
54 | -#include <asm/sigcontext.h> | ||
55 | +#include <asm/sve_context.h> | ||
56 | |||
57 | |||
58 | /* | ||
59 | @@ -129,9 +129,9 @@ struct user_sve_header { | ||
60 | */ | ||
61 | |||
62 | /* Offset from the start of struct user_sve_header to the register data */ | ||
63 | -#define SVE_PT_REGS_OFFSET \ | ||
64 | - ((sizeof(struct user_sve_header) + (SVE_VQ_BYTES - 1)) \ | ||
65 | - / SVE_VQ_BYTES * SVE_VQ_BYTES) | ||
66 | +#define SVE_PT_REGS_OFFSET \ | ||
67 | + ((sizeof(struct user_sve_header) + (__SVE_VQ_BYTES - 1)) \ | ||
68 | + / __SVE_VQ_BYTES * __SVE_VQ_BYTES) | ||
69 | |||
70 | /* | ||
71 | * The register data content and layout depends on the value of the | ||
72 | @@ -177,39 +177,36 @@ struct user_sve_header { | ||
73 | * Additional data might be appended in the future. | ||
74 | */ | ||
75 | |||
76 | -#define SVE_PT_SVE_ZREG_SIZE(vq) SVE_SIG_ZREG_SIZE(vq) | ||
77 | -#define SVE_PT_SVE_PREG_SIZE(vq) SVE_SIG_PREG_SIZE(vq) | ||
78 | -#define SVE_PT_SVE_FFR_SIZE(vq) SVE_SIG_FFR_SIZE(vq) | ||
79 | +#define SVE_PT_SVE_ZREG_SIZE(vq) __SVE_ZREG_SIZE(vq) | ||
80 | +#define SVE_PT_SVE_PREG_SIZE(vq) __SVE_PREG_SIZE(vq) | ||
81 | +#define SVE_PT_SVE_FFR_SIZE(vq) __SVE_FFR_SIZE(vq) | ||
82 | #define SVE_PT_SVE_FPSR_SIZE sizeof(__u32) | ||
83 | #define SVE_PT_SVE_FPCR_SIZE sizeof(__u32) | ||
84 | |||
85 | -#define __SVE_SIG_TO_PT(offset) \ | ||
86 | - ((offset) - SVE_SIG_REGS_OFFSET + SVE_PT_REGS_OFFSET) | ||
87 | - | ||
88 | #define SVE_PT_SVE_OFFSET SVE_PT_REGS_OFFSET | ||
89 | |||
90 | #define SVE_PT_SVE_ZREGS_OFFSET \ | ||
91 | - __SVE_SIG_TO_PT(SVE_SIG_ZREGS_OFFSET) | ||
92 | + (SVE_PT_REGS_OFFSET + __SVE_ZREGS_OFFSET) | ||
93 | #define SVE_PT_SVE_ZREG_OFFSET(vq, n) \ | ||
94 | - __SVE_SIG_TO_PT(SVE_SIG_ZREG_OFFSET(vq, n)) | ||
95 | + (SVE_PT_REGS_OFFSET + __SVE_ZREG_OFFSET(vq, n)) | ||
96 | #define SVE_PT_SVE_ZREGS_SIZE(vq) \ | ||
97 | - (SVE_PT_SVE_ZREG_OFFSET(vq, SVE_NUM_ZREGS) - SVE_PT_SVE_ZREGS_OFFSET) | ||
98 | + (SVE_PT_SVE_ZREG_OFFSET(vq, __SVE_NUM_ZREGS) - SVE_PT_SVE_ZREGS_OFFSET) | ||
99 | |||
100 | #define SVE_PT_SVE_PREGS_OFFSET(vq) \ | ||
101 | - __SVE_SIG_TO_PT(SVE_SIG_PREGS_OFFSET(vq)) | ||
102 | + (SVE_PT_REGS_OFFSET + __SVE_PREGS_OFFSET(vq)) | ||
103 | #define SVE_PT_SVE_PREG_OFFSET(vq, n) \ | ||
104 | - __SVE_SIG_TO_PT(SVE_SIG_PREG_OFFSET(vq, n)) | ||
105 | + (SVE_PT_REGS_OFFSET + __SVE_PREG_OFFSET(vq, n)) | ||
106 | #define SVE_PT_SVE_PREGS_SIZE(vq) \ | ||
107 | - (SVE_PT_SVE_PREG_OFFSET(vq, SVE_NUM_PREGS) - \ | ||
108 | + (SVE_PT_SVE_PREG_OFFSET(vq, __SVE_NUM_PREGS) - \ | ||
109 | SVE_PT_SVE_PREGS_OFFSET(vq)) | ||
110 | |||
111 | #define SVE_PT_SVE_FFR_OFFSET(vq) \ | ||
112 | - __SVE_SIG_TO_PT(SVE_SIG_FFR_OFFSET(vq)) | ||
113 | + (SVE_PT_REGS_OFFSET + __SVE_FFR_OFFSET(vq)) | ||
114 | |||
115 | #define SVE_PT_SVE_FPSR_OFFSET(vq) \ | ||
116 | ((SVE_PT_SVE_FFR_OFFSET(vq) + SVE_PT_SVE_FFR_SIZE(vq) + \ | ||
117 | - (SVE_VQ_BYTES - 1)) \ | ||
118 | - / SVE_VQ_BYTES * SVE_VQ_BYTES) | ||
119 | + (__SVE_VQ_BYTES - 1)) \ | ||
120 | + / __SVE_VQ_BYTES * __SVE_VQ_BYTES) | ||
121 | #define SVE_PT_SVE_FPCR_OFFSET(vq) \ | ||
122 | (SVE_PT_SVE_FPSR_OFFSET(vq) + SVE_PT_SVE_FPSR_SIZE) | ||
123 | |||
124 | @@ -220,8 +217,8 @@ struct user_sve_header { | ||
125 | |||
126 | #define SVE_PT_SVE_SIZE(vq, flags) \ | ||
127 | ((SVE_PT_SVE_FPCR_OFFSET(vq) + SVE_PT_SVE_FPCR_SIZE \ | ||
128 | - - SVE_PT_SVE_OFFSET + (SVE_VQ_BYTES - 1)) \ | ||
129 | - / SVE_VQ_BYTES * SVE_VQ_BYTES) | ||
130 | + - SVE_PT_SVE_OFFSET + (__SVE_VQ_BYTES - 1)) \ | ||
131 | + / __SVE_VQ_BYTES * __SVE_VQ_BYTES) | ||
132 | |||
133 | #define SVE_PT_SIZE(vq, flags) \ | ||
134 | (((flags) & SVE_PT_REGS_MASK) == SVE_PT_REGS_SVE ? \ | ||
135 | diff --git a/arch/arm64/include/uapi/asm/sigcontext.h b/arch/arm64/include/uapi/asm/sigcontext.h | ||
136 | index dca8f8b5168b..5f3c0cec5af9 100644 | ||
137 | --- a/arch/arm64/include/uapi/asm/sigcontext.h | ||
138 | +++ b/arch/arm64/include/uapi/asm/sigcontext.h | ||
139 | @@ -130,6 +130,8 @@ struct sve_context { | ||
140 | |||
141 | #endif /* !__ASSEMBLY__ */ | ||
142 | |||
143 | +#include <asm/sve_context.h> | ||
144 | + | ||
145 | /* | ||
146 | * The SVE architecture leaves space for future expansion of the | ||
147 | * vector length beyond its initial architectural limit of 2048 bits | ||
148 | @@ -138,21 +140,20 @@ struct sve_context { | ||
149 | * See linux/Documentation/arm64/sve.txt for a description of the VL/VQ | ||
150 | * terminology. | ||
151 | */ | ||
152 | -#define SVE_VQ_BYTES 16 /* number of bytes per quadword */ | ||
153 | +#define SVE_VQ_BYTES __SVE_VQ_BYTES /* bytes per quadword */ | ||
154 | |||
155 | -#define SVE_VQ_MIN 1 | ||
156 | -#define SVE_VQ_MAX 512 | ||
157 | +#define SVE_VQ_MIN __SVE_VQ_MIN | ||
158 | +#define SVE_VQ_MAX __SVE_VQ_MAX | ||
159 | |||
160 | -#define SVE_VL_MIN (SVE_VQ_MIN * SVE_VQ_BYTES) | ||
161 | -#define SVE_VL_MAX (SVE_VQ_MAX * SVE_VQ_BYTES) | ||
162 | +#define SVE_VL_MIN __SVE_VL_MIN | ||
163 | +#define SVE_VL_MAX __SVE_VL_MAX | ||
164 | |||
165 | -#define SVE_NUM_ZREGS 32 | ||
166 | -#define SVE_NUM_PREGS 16 | ||
167 | +#define SVE_NUM_ZREGS __SVE_NUM_ZREGS | ||
168 | +#define SVE_NUM_PREGS __SVE_NUM_PREGS | ||
169 | |||
170 | -#define sve_vl_valid(vl) \ | ||
171 | - ((vl) % SVE_VQ_BYTES == 0 && (vl) >= SVE_VL_MIN && (vl) <= SVE_VL_MAX) | ||
172 | -#define sve_vq_from_vl(vl) ((vl) / SVE_VQ_BYTES) | ||
173 | -#define sve_vl_from_vq(vq) ((vq) * SVE_VQ_BYTES) | ||
174 | +#define sve_vl_valid(vl) __sve_vl_valid(vl) | ||
175 | +#define sve_vq_from_vl(vl) __sve_vq_from_vl(vl) | ||
176 | +#define sve_vl_from_vq(vq) __sve_vl_from_vq(vq) | ||
177 | |||
178 | /* | ||
179 | * If the SVE registers are currently live for the thread at signal delivery, | ||
180 | @@ -205,34 +206,33 @@ struct sve_context { | ||
181 | * Additional data might be appended in the future. | ||
182 | */ | ||
183 | |||
184 | -#define SVE_SIG_ZREG_SIZE(vq) ((__u32)(vq) * SVE_VQ_BYTES) | ||
185 | -#define SVE_SIG_PREG_SIZE(vq) ((__u32)(vq) * (SVE_VQ_BYTES / 8)) | ||
186 | -#define SVE_SIG_FFR_SIZE(vq) SVE_SIG_PREG_SIZE(vq) | ||
187 | +#define SVE_SIG_ZREG_SIZE(vq) __SVE_ZREG_SIZE(vq) | ||
188 | +#define SVE_SIG_PREG_SIZE(vq) __SVE_PREG_SIZE(vq) | ||
189 | +#define SVE_SIG_FFR_SIZE(vq) __SVE_FFR_SIZE(vq) | ||
190 | |||
191 | #define SVE_SIG_REGS_OFFSET \ | ||
192 | - ((sizeof(struct sve_context) + (SVE_VQ_BYTES - 1)) \ | ||
193 | - / SVE_VQ_BYTES * SVE_VQ_BYTES) | ||
194 | + ((sizeof(struct sve_context) + (__SVE_VQ_BYTES - 1)) \ | ||
195 | + / __SVE_VQ_BYTES * __SVE_VQ_BYTES) | ||
196 | |||
197 | -#define SVE_SIG_ZREGS_OFFSET SVE_SIG_REGS_OFFSET | ||
198 | +#define SVE_SIG_ZREGS_OFFSET \ | ||
199 | + (SVE_SIG_REGS_OFFSET + __SVE_ZREGS_OFFSET) | ||
200 | #define SVE_SIG_ZREG_OFFSET(vq, n) \ | ||
201 | - (SVE_SIG_ZREGS_OFFSET + SVE_SIG_ZREG_SIZE(vq) * (n)) | ||
202 | -#define SVE_SIG_ZREGS_SIZE(vq) \ | ||
203 | - (SVE_SIG_ZREG_OFFSET(vq, SVE_NUM_ZREGS) - SVE_SIG_ZREGS_OFFSET) | ||
204 | + (SVE_SIG_REGS_OFFSET + __SVE_ZREG_OFFSET(vq, n)) | ||
205 | +#define SVE_SIG_ZREGS_SIZE(vq) __SVE_ZREGS_SIZE(vq) | ||
206 | |||
207 | #define SVE_SIG_PREGS_OFFSET(vq) \ | ||
208 | - (SVE_SIG_ZREGS_OFFSET + SVE_SIG_ZREGS_SIZE(vq)) | ||
209 | + (SVE_SIG_REGS_OFFSET + __SVE_PREGS_OFFSET(vq)) | ||
210 | #define SVE_SIG_PREG_OFFSET(vq, n) \ | ||
211 | - (SVE_SIG_PREGS_OFFSET(vq) + SVE_SIG_PREG_SIZE(vq) * (n)) | ||
212 | -#define SVE_SIG_PREGS_SIZE(vq) \ | ||
213 | - (SVE_SIG_PREG_OFFSET(vq, SVE_NUM_PREGS) - SVE_SIG_PREGS_OFFSET(vq)) | ||
214 | + (SVE_SIG_REGS_OFFSET + __SVE_PREG_OFFSET(vq, n)) | ||
215 | +#define SVE_SIG_PREGS_SIZE(vq) __SVE_PREGS_SIZE(vq) | ||
216 | |||
217 | #define SVE_SIG_FFR_OFFSET(vq) \ | ||
218 | - (SVE_SIG_PREGS_OFFSET(vq) + SVE_SIG_PREGS_SIZE(vq)) | ||
219 | + (SVE_SIG_REGS_OFFSET + __SVE_FFR_OFFSET(vq)) | ||
220 | |||
221 | #define SVE_SIG_REGS_SIZE(vq) \ | ||
222 | - (SVE_SIG_FFR_OFFSET(vq) + SVE_SIG_FFR_SIZE(vq) - SVE_SIG_REGS_OFFSET) | ||
223 | - | ||
224 | -#define SVE_SIG_CONTEXT_SIZE(vq) (SVE_SIG_REGS_OFFSET + SVE_SIG_REGS_SIZE(vq)) | ||
225 | + (__SVE_FFR_OFFSET(vq) + __SVE_FFR_SIZE(vq)) | ||
226 | |||
227 | +#define SVE_SIG_CONTEXT_SIZE(vq) \ | ||
228 | + (SVE_SIG_REGS_OFFSET + SVE_SIG_REGS_SIZE(vq)) | ||
229 | |||
230 | #endif /* _UAPI__ASM_SIGCONTEXT_H */ | ||
231 | diff --git a/arch/arm64/include/uapi/asm/sve_context.h b/arch/arm64/include/uapi/asm/sve_context.h | ||
232 | new file mode 100644 | ||
233 | index 000000000000..140f14c318a5 | ||
234 | --- /dev/null | ||
235 | +++ b/arch/arm64/include/uapi/asm/sve_context.h | ||
236 | @@ -0,0 +1,50 @@ | ||
237 | +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ | ||
238 | +/* Copyright (C) 2017-2018 ARM Limited */ | ||
239 | + | ||
240 | +#if !defined(_UAPI__ASM_PTRACE_H) && !defined(_UAPI__ASM_SIGCONTEXT_H) | ||
241 | +#error "Do not include this header or use its definitions directly." | ||
242 | +#endif | ||
243 | + | ||
244 | +#ifndef _UAPI__ASM_SVE_CONTEXT_H | ||
245 | +#define _UAPI__ASM_SVE_CONTEXT_H | ||
246 | + | ||
247 | +#define __SVE_VQ_BYTES 16 /* number of bytes per quadword */ | ||
248 | + | ||
249 | +#define __SVE_VQ_MIN 1 | ||
250 | +#define __SVE_VQ_MAX 512 | ||
251 | + | ||
252 | +#define __SVE_VL_MIN (__SVE_VQ_MIN * __SVE_VQ_BYTES) | ||
253 | +#define __SVE_VL_MAX (__SVE_VQ_MAX * __SVE_VQ_BYTES) | ||
254 | + | ||
255 | +#define __SVE_NUM_ZREGS 32 | ||
256 | +#define __SVE_NUM_PREGS 16 | ||
257 | + | ||
258 | +#define __sve_vl_valid(vl) \ | ||
259 | + ((vl) % __SVE_VQ_BYTES == 0 && \ | ||
260 | + (vl) >= __SVE_VL_MIN && \ | ||
261 | + (vl) <= __SVE_VL_MAX) | ||
262 | + | ||
263 | +#define __sve_vq_from_vl(vl) ((vl) / __SVE_VQ_BYTES) | ||
264 | +#define __sve_vl_from_vq(vq) ((vq) * __SVE_VQ_BYTES) | ||
265 | + | ||
266 | +#define __SVE_ZREG_SIZE(vq) ((__u32)(vq) * __SVE_VQ_BYTES) | ||
267 | +#define __SVE_PREG_SIZE(vq) ((__u32)(vq) * (__SVE_VQ_BYTES / 8)) | ||
268 | +#define __SVE_FFR_SIZE(vq) __SVE_PREG_SIZE(vq) | ||
269 | + | ||
270 | +#define __SVE_ZREGS_OFFSET 0 | ||
271 | +#define __SVE_ZREG_OFFSET(vq, n) \ | ||
272 | + (__SVE_ZREGS_OFFSET + __SVE_ZREG_SIZE(vq) * (n)) | ||
273 | +#define __SVE_ZREGS_SIZE(vq) \ | ||
274 | + (__SVE_ZREG_OFFSET(vq, __SVE_NUM_ZREGS) - __SVE_ZREGS_OFFSET) | ||
275 | + | ||
276 | +#define __SVE_PREGS_OFFSET(vq) \ | ||
277 | + (__SVE_ZREGS_OFFSET + __SVE_ZREGS_SIZE(vq)) | ||
278 | +#define __SVE_PREG_OFFSET(vq, n) \ | ||
279 | + (__SVE_PREGS_OFFSET(vq) + __SVE_PREG_SIZE(vq) * (n)) | ||
280 | +#define __SVE_PREGS_SIZE(vq) \ | ||
281 | + (__SVE_PREG_OFFSET(vq, __SVE_NUM_PREGS) - __SVE_PREGS_OFFSET(vq)) | ||
282 | + | ||
283 | +#define __SVE_FFR_OFFSET(vq) \ | ||
284 | + (__SVE_PREGS_OFFSET(vq) + __SVE_PREGS_SIZE(vq)) | ||
285 | + | ||
286 | +#endif /* ! _UAPI__ASM_SVE_CONTEXT_H */ | ||
287 | -- | ||
288 | 2.5.0 | ||
289 | |||