OpenJDK / jdk9 / jdk9 / hotspot
changeset 10566:80706cc25494
8150688: Fix os_windows siglabel
Summary: Change types to eliminate implicit narrowing, and other cleanups.
Reviewed-by: dholmes, tbenson
author | kbarrett |
---|---|
date | Wed, 09 Mar 2016 11:03:45 -0500 |
parents | 5322bfdc760a |
children | 5c66afad690c |
files | src/os/windows/vm/os_windows.cpp |
diffstat | 1 files changed, 14 insertions(+), 16 deletions(-) [+] |
line wrap: on
line diff
--- a/src/os/windows/vm/os_windows.cpp Wed Mar 09 14:18:12 2016 +0100 +++ b/src/os/windows/vm/os_windows.cpp Wed Mar 09 11:03:45 2016 -0500 @@ -2186,13 +2186,6 @@ // Windows Vista/2008 heap corruption check #define EXCEPTION_HEAP_CORRUPTION 0xC0000374 -#define def_excpt(val) #val, val - -struct siglabel { - char *name; - int number; -}; - // All Visual C++ exceptions thrown from code generated by the Microsoft Visual // C++ compiler contain this error code. Because this is a compiler-generated // error, the code is not listed in the Win32 API header files. @@ -2202,8 +2195,9 @@ #define EXCEPTION_UNCAUGHT_CXX_EXCEPTION 0xE06D7363 - -struct siglabel exceptlabels[] = { +#define def_excpt(val) { #val, (val) } + +static const struct { char* name; uint number; } exceptlabels[] = { def_excpt(EXCEPTION_ACCESS_VIOLATION), def_excpt(EXCEPTION_DATATYPE_MISALIGNMENT), def_excpt(EXCEPTION_BREAKPOINT), @@ -2228,16 +2222,18 @@ def_excpt(EXCEPTION_GUARD_PAGE), def_excpt(EXCEPTION_INVALID_HANDLE), def_excpt(EXCEPTION_UNCAUGHT_CXX_EXCEPTION), - def_excpt(EXCEPTION_HEAP_CORRUPTION), + def_excpt(EXCEPTION_HEAP_CORRUPTION) #ifdef _M_IA64 - def_excpt(EXCEPTION_REG_NAT_CONSUMPTION), + , def_excpt(EXCEPTION_REG_NAT_CONSUMPTION) #endif - NULL, 0 }; +#undef def_excpt + const char* os::exception_name(int exception_code, char *buf, size_t size) { - for (int i = 0; exceptlabels[i].name != NULL; i++) { - if (exceptlabels[i].number == exception_code) { + uint code = static_cast<uint>(exception_code); + for (uint i = 0; i < ARRAY_SIZE(exceptlabels); ++i) { + if (exceptlabels[i].number == code) { jio_snprintf(buf, size, "%s", exceptlabels[i].name); return buf; } @@ -5638,9 +5634,11 @@ "TERM", SIGTERM, // software term signal from kill "BREAK", SIGBREAK, // Ctrl-Break sequence "ILL", SIGILL}; // illegal instruction - for(int i=0;i<sizeof(siglabels)/sizeof(struct siglabel);i++) - if(!strcmp(name, siglabels[i].name)) + for (unsigned i = 0; i < ARRAY_SIZE(siglabels); ++i) { + if (strcmp(name, siglabels[i].name) == 0) { return siglabels[i].number; + } + } return -1; }