2ef297af07
Add a new Coccinelle script which replaces uses of the inplace byteswapping functions *_to_cpus() and cpu_to_*s() with their not-in-place equivalents. This is useful for where the swapping is done on members of a packed struct -- taking the address of the member to pass it to an inplace function is undefined behaviour in C. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Eric Blake <eblake@redhat.com> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-id: 20181009181612.10633-1-peter.maydell@linaro.org
66 lines
945 B
Plaintext
66 lines
945 B
Plaintext
// Replace uses of in-place byteswapping functions with calls to the
|
|
// equivalent not-in-place functions. This is necessary to avoid
|
|
// undefined behaviour if the expression being swapped is a field in a
|
|
// packed struct.
|
|
|
|
@@
|
|
expression E;
|
|
@@
|
|
-be16_to_cpus(&E);
|
|
+E = be16_to_cpu(E);
|
|
@@
|
|
expression E;
|
|
@@
|
|
-be32_to_cpus(&E);
|
|
+E = be32_to_cpu(E);
|
|
@@
|
|
expression E;
|
|
@@
|
|
-be64_to_cpus(&E);
|
|
+E = be64_to_cpu(E);
|
|
@@
|
|
expression E;
|
|
@@
|
|
-cpu_to_be16s(&E);
|
|
+E = cpu_to_be16(E);
|
|
@@
|
|
expression E;
|
|
@@
|
|
-cpu_to_be32s(&E);
|
|
+E = cpu_to_be32(E);
|
|
@@
|
|
expression E;
|
|
@@
|
|
-cpu_to_be64s(&E);
|
|
+E = cpu_to_be64(E);
|
|
@@
|
|
expression E;
|
|
@@
|
|
-le16_to_cpus(&E);
|
|
+E = le16_to_cpu(E);
|
|
@@
|
|
expression E;
|
|
@@
|
|
-le32_to_cpus(&E);
|
|
+E = le32_to_cpu(E);
|
|
@@
|
|
expression E;
|
|
@@
|
|
-le64_to_cpus(&E);
|
|
+E = le64_to_cpu(E);
|
|
@@
|
|
expression E;
|
|
@@
|
|
-cpu_to_le16s(&E);
|
|
+E = cpu_to_le16(E);
|
|
@@
|
|
expression E;
|
|
@@
|
|
-cpu_to_le32s(&E);
|
|
+E = cpu_to_le32(E);
|
|
@@
|
|
expression E;
|
|
@@
|
|
-cpu_to_le64s(&E);
|
|
+E = cpu_to_le64(E);
|