Add named constants for si_code values to replace the magic numbers.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@5092 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/coregrind/m_signals.c b/coregrind/m_signals.c
index 80ab4d4..ce06ef8 100644
--- a/coregrind/m_signals.c
+++ b/coregrind/m_signals.c
@@ -1015,8 +1015,8 @@
switch(sigNo) {
case VKI_SIGSEGV:
switch(info->si_code) {
- case 1: event = "Access not within mapped region"; break;
- case 2: event = "Bad permissions for mapped region"; break;
+ case VKI_SEGV_MAPERR: event = "Access not within mapped region"; break;
+ case VKI_SEGV_ACCERR: event = "Bad permissions for mapped region"; break;
case 128:
/* General Protection Fault: The CPU/kernel
isn't telling us anything useful, but this
@@ -1038,35 +1038,35 @@
case VKI_SIGILL:
switch(info->si_code) {
- case 1: event = "Illegal opcode"; break;
- case 2: event = "Illegal operand"; break;
- case 3: event = "Illegal addressing mode"; break;
- case 4: event = "Illegal trap"; break;
- case 5: event = "Privileged opcode"; break;
- case 6: event = "Privileged register"; break;
- case 7: event = "Coprocessor error"; break;
- case 8: event = "Internal stack error"; break;
+ case VKI_ILL_ILLOPC: event = "Illegal opcode"; break;
+ case VKI_ILL_ILLOPN: event = "Illegal operand"; break;
+ case VKI_ILL_ILLADR: event = "Illegal addressing mode"; break;
+ case VKI_ILL_ILLTRP: event = "Illegal trap"; break;
+ case VKI_ILL_PRVOPC: event = "Privileged opcode"; break;
+ case VKI_ILL_PRVREG: event = "Privileged register"; break;
+ case VKI_ILL_COPROC: event = "Coprocessor error"; break;
+ case VKI_ILL_BADSTK: event = "Internal stack error"; break;
}
break;
case VKI_SIGFPE:
switch (info->si_code) {
- case 1: event = "Integer divide by zero"; break;
- case 2: event = "Integer overflow"; break;
- case 3: event = "FP divide by zero"; break;
- case 4: event = "FP overflow"; break;
- case 5: event = "FP underflow"; break;
- case 6: event = "FP inexact"; break;
- case 7: event = "FP invalid operation"; break;
- case 8: event = "FP subscript out of range"; break;
+ case VKI_FPE_INTDIV: event = "Integer divide by zero"; break;
+ case VKI_FPE_INTOVF: event = "Integer overflow"; break;
+ case VKI_FPE_FLTDIV: event = "FP divide by zero"; break;
+ case VKI_FPE_FLTOVF: event = "FP overflow"; break;
+ case VKI_FPE_FLTUND: event = "FP underflow"; break;
+ case VKI_FPE_FLTRES: event = "FP inexact"; break;
+ case VKI_FPE_FLTINV: event = "FP invalid operation"; break;
+ case VKI_FPE_FLTSUB: event = "FP subscript out of range"; break;
}
break;
case VKI_SIGBUS:
switch (info->si_code) {
- case 1: event = "Invalid address alignment"; break;
- case 2: event = "Non-existent physical address"; break;
- case 3: event = "Hardware error"; break;
+ case VKI_BUS_ADRALN: event = "Invalid address alignment"; break;
+ case VKI_BUS_ADRERR: event = "Non-existent physical address"; break;
+ case VKI_BUS_OBJERR: event = "Hardware error"; break;
}
break;
}
@@ -1249,7 +1249,7 @@
vg_assert(VG_(threads)[tid].status == VgTs_Runnable);
info.si_signo = VKI_SIGILL;
- info.si_code = 1; /* jrs: no idea what this should be */
+ info.si_code = VKI_ILL_ILLOPC; /* jrs: no idea what this should be */
info._sifields._sigfault._addr = (void*)addr;
resume_scheduler(tid);
@@ -1563,7 +1563,7 @@
"seg=%p-%p",
info->si_code, fault, tid, esp, seg->start, seg->end);
}
- if (info->si_code == 1 /* SEGV_MAPERR */
+ if (info->si_code == VKI_SEGV_MAPERR
&& seg
&& seg->kind == SkResvn
&& seg->smode == SmUpper
diff --git a/include/vki-linux.h b/include/vki-linux.h
index 4d986c5..f611523 100644
--- a/include/vki-linux.h
+++ b/include/vki-linux.h
@@ -431,6 +431,8 @@
} _sifields;
} vki_siginfo_t;
+#define __VKI_SI_FAULT 0
+
/*
* si_code values
* Digital reserves positive values for kernel-generated signals.
@@ -439,6 +441,43 @@
#define VKI_SI_TKILL -6 /* sent by tkill system call */
/*
+ * SIGILL si_codes
+ */
+#define VKI_ILL_ILLOPC (__VKI_SI_FAULT|1) /* illegal opcode */
+#define VKI_ILL_ILLOPN (__VKI_SI_FAULT|2) /* illegal operand */
+#define VKI_ILL_ILLADR (__VKI_SI_FAULT|3) /* illegal addressing mode */
+#define VKI_ILL_ILLTRP (__VKI_SI_FAULT|4) /* illegal trap */
+#define VKI_ILL_PRVOPC (__VKI_SI_FAULT|5) /* privileged opcode */
+#define VKI_ILL_PRVREG (__VKI_SI_FAULT|6) /* privileged register */
+#define VKI_ILL_COPROC (__VKI_SI_FAULT|7) /* coprocessor error */
+#define VKI_ILL_BADSTK (__VKI_SI_FAULT|8) /* internal stack error */
+
+/*
+ * SIGFPE si_codes
+ */
+#define VKI_FPE_INTDIV (__VKI_SI_FAULT|1) /* integer divide by zero */
+#define VKI_FPE_INTOVF (__VKI_SI_FAULT|2) /* integer overflow */
+#define VKI_FPE_FLTDIV (__VKI_SI_FAULT|3) /* floating point divide by zero */
+#define VKI_FPE_FLTOVF (__VKI_SI_FAULT|4) /* floating point overflow */
+#define VKI_FPE_FLTUND (__VKI_SI_FAULT|5) /* floating point underflow */
+#define VKI_FPE_FLTRES (__VKI_SI_FAULT|6) /* floating point inexact result */
+#define VKI_FPE_FLTINV (__VKI_SI_FAULT|7) /* floating point invalid operation */
+#define VKI_FPE_FLTSUB (__VKI_SI_FAULT|8) /* subscript out of range */
+
+/*
+ * SIGSEGV si_codes
+ */
+#define VKI_SEGV_MAPERR (__VKI_SI_FAULT|1) /* address not mapped to object */
+#define VKI_SEGV_ACCERR (__VKI_SI_FAULT|2) /* invalid permissions for mapped object */
+
+/*
+ * SIGBUS si_codes
+ */
+#define VKI_BUS_ADRALN (__VKI_SI_FAULT|1) /* invalid address alignment */
+#define VKI_BUS_ADRERR (__VKI_SI_FAULT|2) /* non-existant physical address */
+#define VKI_BUS_OBJERR (__VKI_SI_FAULT|3) /* object specific hardware error */
+
+/*
* This works because the alignment is ok on all current architectures
* but we leave open this being overridden in the future
*/