libtool-version: New version.
2016-12-26 Alexander Ivchenko <alexander.ivchenko@intel.com> * mpxrt/libtool-version: New version. * mpxrt/mpxrt-utils.c (set_mpx_rt_stop_handler): New function. (print_help): Add help for CHKP_RT_STOP_HANDLER environment variable. (__mpxrt_init_env_vars): Add initialization of stop_handler. (__mpxrt_stop_handler): New function. (__mpxrt_stop): Ditto. * mpxrt/mpxrt-utils.h (mpx_rt_stop_mode_handler_t): New enum. * mpxrt/mpxrt.c (handler): Replace exit(255) with __mpxrt_stop function call. From-SVN: r243928
This commit is contained in:
parent
1dc9c11778
commit
dfcbd6b3da
@ -1,3 +1,16 @@
|
|||||||
|
2016-12-26 Alexander Ivchenko <alexander.ivchenko@intel.com>
|
||||||
|
|
||||||
|
* mpxrt/libtool-version: New version.
|
||||||
|
* mpxrt/mpxrt-utils.c (set_mpx_rt_stop_handler): New function.
|
||||||
|
(print_help): Add help for CHKP_RT_STOP_HANDLER environment
|
||||||
|
variable.
|
||||||
|
(__mpxrt_init_env_vars): Add initialization of stop_handler.
|
||||||
|
(__mpxrt_stop_handler): New function.
|
||||||
|
(__mpxrt_stop): Ditto.
|
||||||
|
* mpxrt/mpxrt-utils.h (mpx_rt_stop_mode_handler_t): New enum.
|
||||||
|
* mpxrt/mpxrt.c (handler): Replace exit(255) with __mpxrt_stop
|
||||||
|
function call.
|
||||||
|
|
||||||
2016-11-15 Matthias Klose <doko@ubuntu.com>
|
2016-11-15 Matthias Klose <doko@ubuntu.com>
|
||||||
|
|
||||||
* configure: Regenerate.
|
* configure: Regenerate.
|
||||||
|
@ -3,4 +3,4 @@
|
|||||||
# a separate file so that version updates don't involve re-running
|
# a separate file so that version updates don't involve re-running
|
||||||
# automake.
|
# automake.
|
||||||
# CURRENT:REVISION:AGE
|
# CURRENT:REVISION:AGE
|
||||||
2:0:0
|
2:1:0
|
||||||
|
@ -60,6 +60,9 @@
|
|||||||
#define MPX_RT_MODE "CHKP_RT_MODE"
|
#define MPX_RT_MODE "CHKP_RT_MODE"
|
||||||
#define MPX_RT_MODE_DEFAULT MPX_RT_COUNT
|
#define MPX_RT_MODE_DEFAULT MPX_RT_COUNT
|
||||||
#define MPX_RT_MODE_DEFAULT_STR "count"
|
#define MPX_RT_MODE_DEFAULT_STR "count"
|
||||||
|
#define MPX_RT_STOP_HANDLER "CHKP_RT_STOP_HANDLER"
|
||||||
|
#define MPX_RT_STOP_HANDLER_DEFAULT MPX_RT_STOP_HANDLER_ABORT
|
||||||
|
#define MPX_RT_STOP_HANDLER_DEFAULT_STR "abort"
|
||||||
#define MPX_RT_HELP "CHKP_RT_HELP"
|
#define MPX_RT_HELP "CHKP_RT_HELP"
|
||||||
#define MPX_RT_ADDPID "CHKP_RT_ADDPID"
|
#define MPX_RT_ADDPID "CHKP_RT_ADDPID"
|
||||||
#define MPX_RT_BNDPRESERVE "CHKP_RT_BNDPRESERVE"
|
#define MPX_RT_BNDPRESERVE "CHKP_RT_BNDPRESERVE"
|
||||||
@ -84,6 +87,7 @@ typedef struct {
|
|||||||
static int summary;
|
static int summary;
|
||||||
static int add_pid;
|
static int add_pid;
|
||||||
static mpx_rt_mode_t mode;
|
static mpx_rt_mode_t mode;
|
||||||
|
static mpx_rt_stop_mode_handler_t stop_handler;
|
||||||
static env_var_list_t env_var_list;
|
static env_var_list_t env_var_list;
|
||||||
static verbose_type verbose_val;
|
static verbose_type verbose_val;
|
||||||
static FILE *out;
|
static FILE *out;
|
||||||
@ -226,6 +230,23 @@ set_mpx_rt_mode (const char *env)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static mpx_rt_stop_mode_handler_t
|
||||||
|
set_mpx_rt_stop_handler (const char *env)
|
||||||
|
{
|
||||||
|
if (env == 0)
|
||||||
|
return MPX_RT_STOP_HANDLER_DEFAULT;
|
||||||
|
else if (strcmp (env, "abort") == 0)
|
||||||
|
return MPX_RT_STOP_HANDLER_ABORT;
|
||||||
|
else if (strcmp (env, "exit") == 0)
|
||||||
|
return MPX_RT_STOP_HANDLER_EXIT;
|
||||||
|
{
|
||||||
|
__mpxrt_print (VERB_ERROR, "Illegal value '%s' for %s. Legal values are"
|
||||||
|
"[abort | exit]\nUsing default value %s\n",
|
||||||
|
env, MPX_RT_STOP_HANDLER, MPX_RT_STOP_HANDLER_DEFAULT);
|
||||||
|
return MPX_RT_STOP_HANDLER_DEFAULT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
print_help (void)
|
print_help (void)
|
||||||
{
|
{
|
||||||
@ -244,6 +265,11 @@ print_help (void)
|
|||||||
fprintf (out, "%s \t\t set MPX runtime behavior on #BR exception."
|
fprintf (out, "%s \t\t set MPX runtime behavior on #BR exception."
|
||||||
" [stop | count]\n"
|
" [stop | count]\n"
|
||||||
"\t\t\t [default: %s]\n", MPX_RT_MODE, MPX_RT_MODE_DEFAULT_STR);
|
"\t\t\t [default: %s]\n", MPX_RT_MODE, MPX_RT_MODE_DEFAULT_STR);
|
||||||
|
fprintf (out, "%s \t set the handler function MPX runtime will call\n"
|
||||||
|
"\t\t\t on #BR exception when %s is set to \'stop\'."
|
||||||
|
" [abort | exit]\n"
|
||||||
|
"\t\t\t [default: %s]\n", MPX_RT_STOP_HANDLER, MPX_RT_MODE,
|
||||||
|
MPX_RT_STOP_HANDLER_DEFAULT_STR);
|
||||||
fprintf (out, "%s \t\t generate out,err file for each process.\n"
|
fprintf (out, "%s \t\t generate out,err file for each process.\n"
|
||||||
"\t\t\t generated file will be MPX_RT_{OUT,ERR}_FILE.pid\n"
|
"\t\t\t generated file will be MPX_RT_{OUT,ERR}_FILE.pid\n"
|
||||||
"\t\t\t [default: no]\n", MPX_RT_ADDPID);
|
"\t\t\t [default: no]\n", MPX_RT_ADDPID);
|
||||||
@ -357,6 +383,10 @@ __mpxrt_init_env_vars (int* bndpreserve)
|
|||||||
env_var_list_add (MPX_RT_MODE, env);
|
env_var_list_add (MPX_RT_MODE, env);
|
||||||
mode = set_mpx_rt_mode (env);
|
mode = set_mpx_rt_mode (env);
|
||||||
|
|
||||||
|
env = secure_getenv (MPX_RT_STOP_HANDLER);
|
||||||
|
env_var_list_add (MPX_RT_STOP_HANDLER, env);
|
||||||
|
stop_handler = set_mpx_rt_stop_handler (env);
|
||||||
|
|
||||||
env = secure_getenv (MPX_RT_BNDPRESERVE);
|
env = secure_getenv (MPX_RT_BNDPRESERVE);
|
||||||
env_var_list_add (MPX_RT_BNDPRESERVE, env);
|
env_var_list_add (MPX_RT_BNDPRESERVE, env);
|
||||||
validate_bndpreserve (env, bndpreserve);
|
validate_bndpreserve (env, bndpreserve);
|
||||||
@ -487,6 +517,22 @@ __mpxrt_mode (void)
|
|||||||
return mode;
|
return mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mpx_rt_mode_t
|
||||||
|
__mpxrt_stop_handler (void)
|
||||||
|
{
|
||||||
|
return stop_handler;
|
||||||
|
}
|
||||||
|
|
||||||
|
void __attribute__ ((noreturn))
|
||||||
|
__mpxrt_stop (void)
|
||||||
|
{
|
||||||
|
if (__mpxrt_stop_handler () == MPX_RT_STOP_HANDLER_ABORT)
|
||||||
|
abort ();
|
||||||
|
else if (__mpxrt_stop_handler () == MPX_RT_STOP_HANDLER_EXIT)
|
||||||
|
exit (255);
|
||||||
|
__builtin_unreachable ();
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
__mpxrt_print_summary (uint64_t num_brs, uint64_t l1_size)
|
__mpxrt_print_summary (uint64_t num_brs, uint64_t l1_size)
|
||||||
{
|
{
|
||||||
|
@ -54,6 +54,11 @@ typedef enum {
|
|||||||
MPX_RT_STOP
|
MPX_RT_STOP
|
||||||
} mpx_rt_mode_t;
|
} mpx_rt_mode_t;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
MPX_RT_STOP_HANDLER_ABORT,
|
||||||
|
MPX_RT_STOP_HANDLER_EXIT
|
||||||
|
} mpx_rt_stop_mode_handler_t;
|
||||||
|
|
||||||
void __mpxrt_init_env_vars (int* bndpreserve);
|
void __mpxrt_init_env_vars (int* bndpreserve);
|
||||||
void __mpxrt_write_uint (verbose_type vt, uint64_t val, unsigned base);
|
void __mpxrt_write_uint (verbose_type vt, uint64_t val, unsigned base);
|
||||||
void __mpxrt_write (verbose_type vt, const char* str);
|
void __mpxrt_write (verbose_type vt, const char* str);
|
||||||
|
@ -252,7 +252,7 @@ handler (int sig __attribute__ ((unused)),
|
|||||||
uctxt->uc_mcontext.gregs[REG_IP_IDX] =
|
uctxt->uc_mcontext.gregs[REG_IP_IDX] =
|
||||||
(greg_t)get_next_inst_ip ((uint8_t *)ip);
|
(greg_t)get_next_inst_ip ((uint8_t *)ip);
|
||||||
if (__mpxrt_mode () == MPX_RT_STOP)
|
if (__mpxrt_mode () == MPX_RT_STOP)
|
||||||
exit (255);
|
__mpxrt_stop ();
|
||||||
return;
|
return;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@ -269,7 +269,7 @@ handler (int sig __attribute__ ((unused)),
|
|||||||
__mpxrt_write (VERB_ERROR, ", ip = 0x");
|
__mpxrt_write (VERB_ERROR, ", ip = 0x");
|
||||||
__mpxrt_write_uint (VERB_ERROR, ip, 16);
|
__mpxrt_write_uint (VERB_ERROR, ip, 16);
|
||||||
__mpxrt_write (VERB_ERROR, "\n");
|
__mpxrt_write (VERB_ERROR, "\n");
|
||||||
exit (255);
|
__mpxrt_stop ();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -278,7 +278,7 @@ handler (int sig __attribute__ ((unused)),
|
|||||||
__mpxrt_write (VERB_ERROR, "! at 0x");
|
__mpxrt_write (VERB_ERROR, "! at 0x");
|
||||||
__mpxrt_write_uint (VERB_ERROR, ip, 16);
|
__mpxrt_write_uint (VERB_ERROR, ip, 16);
|
||||||
__mpxrt_write (VERB_ERROR, "\n");
|
__mpxrt_write (VERB_ERROR, "\n");
|
||||||
exit (255);
|
__mpxrt_stop ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user