about summary refs log tree commit diff
path: root/arch/x86_64
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2017-01-04 17:08:19 -0500
committerRich Felker <dalias@aerifal.cx>2017-01-04 17:08:19 -0500
commit150747b41e1ecefe82aa45d68c84b9e957b03e29 (patch)
tree90ac2d2b54a61343c926b02d1bce8f5ca84d2c3e /arch/x86_64
parent769f53598e781ffc89191520f3f8a93cb58db91f (diff)
downloadmusl-150747b41e1ecefe82aa45d68c84b9e957b03e29.tar.gz
musl-150747b41e1ecefe82aa45d68c84b9e957b03e29.tar.xz
musl-150747b41e1ecefe82aa45d68c84b9e957b03e29.zip
reduce impact of REG_* namespace pollution in x86[_64] signal.h
when _GNU_SOURCE is defined, which is always the case when compiling
c++ with gcc, these macros for the the indices in gregset_t are
exposed and likely to clash with applications. by using enum constants
rather than macros defined with integer literals, we can make the
clash slightly less likely to break software. the macros are still
defined in case anything checks for them with #ifdef, but they're
defined to expand to themselves so that non-file-scope (e.g.
namespaced) identifiers by the same names still work.

for the sake of avoiding mistakes, the changes were generated with sed
via the command:

sed -i -e 's/#define  *\(REG_[A-Z_0-9]\{1,\}\)  *\([0-9]\{1,\}\)'\
'/enum { \1 = \2 };\n#define \1 \1/' \
arch/i386/bits/signal.h arch/x86_64/bits/signal.h arch/x32/bits/signal.h
Diffstat (limited to 'arch/x86_64')
-rw-r--r--arch/x86_64/bits/signal.h69
1 files changed, 46 insertions, 23 deletions
diff --git a/arch/x86_64/bits/signal.h b/arch/x86_64/bits/signal.h
index e3c31417..c99317d3 100644
--- a/arch/x86_64/bits/signal.h
+++ b/arch/x86_64/bits/signal.h
@@ -7,29 +7,52 @@
 #endif
 
 #ifdef _GNU_SOURCE
-#define REG_R8          0
-#define REG_R9          1
-#define REG_R10         2
-#define REG_R11         3
-#define REG_R12         4
-#define REG_R13         5
-#define REG_R14         6
-#define REG_R15         7
-#define REG_RDI         8
-#define REG_RSI         9
-#define REG_RBP         10
-#define REG_RBX         11
-#define REG_RDX         12
-#define REG_RAX         13
-#define REG_RCX         14
-#define REG_RSP         15
-#define REG_RIP         16
-#define REG_EFL         17
-#define REG_CSGSFS      18
-#define REG_ERR         19
-#define REG_TRAPNO      20
-#define REG_OLDMASK     21
-#define REG_CR2         22
+enum { REG_R8 = 0 };
+#define REG_R8 REG_R8
+enum { REG_R9 = 1 };
+#define REG_R9 REG_R9
+enum { REG_R10 = 2 };
+#define REG_R10 REG_R10
+enum { REG_R11 = 3 };
+#define REG_R11 REG_R11
+enum { REG_R12 = 4 };
+#define REG_R12 REG_R12
+enum { REG_R13 = 5 };
+#define REG_R13 REG_R13
+enum { REG_R14 = 6 };
+#define REG_R14 REG_R14
+enum { REG_R15 = 7 };
+#define REG_R15 REG_R15
+enum { REG_RDI = 8 };
+#define REG_RDI REG_RDI
+enum { REG_RSI = 9 };
+#define REG_RSI REG_RSI
+enum { REG_RBP = 10 };
+#define REG_RBP REG_RBP
+enum { REG_RBX = 11 };
+#define REG_RBX REG_RBX
+enum { REG_RDX = 12 };
+#define REG_RDX REG_RDX
+enum { REG_RAX = 13 };
+#define REG_RAX REG_RAX
+enum { REG_RCX = 14 };
+#define REG_RCX REG_RCX
+enum { REG_RSP = 15 };
+#define REG_RSP REG_RSP
+enum { REG_RIP = 16 };
+#define REG_RIP REG_RIP
+enum { REG_EFL = 17 };
+#define REG_EFL REG_EFL
+enum { REG_CSGSFS = 18 };
+#define REG_CSGSFS REG_CSGSFS
+enum { REG_ERR = 19 };
+#define REG_ERR REG_ERR
+enum { REG_TRAPNO = 20 };
+#define REG_TRAPNO REG_TRAPNO
+enum { REG_OLDMASK = 21 };
+#define REG_OLDMASK REG_OLDMASK
+enum { REG_CR2 = 22 };
+#define REG_CR2 REG_CR2
 #endif
 
 #if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)