- const std::vector<char*> args2str(*args4argv);
-#endif
- int argc = args4argv->size();
- args4argv->push_back(nullptr);
- char** argv = args4argv->data();
-
-#if SMPI_IFORT
- for_rtl_init_ (&argc, argv);
-#elif SMPI_FLANG
- __io_set_argc(argc);
- __io_set_argv(argv);
-#elif SMPI_GFORTRAN
- _gfortran_set_args(argc, argv);
-#endif
- int res = entry_point(argc, argv);
+ const std::vector<char*> args2str(args4argv);
+
+ try {
+ int argc = static_cast<int>(args4argv.size() - 1);
+ char** argv = args4argv.data();
+ int res = entry_point(argc, argv);
+ if (res != 0) {
+ XBT_WARN("SMPI process did not return 0. Return value : %d", res);
+ if (smpi_exit_status == 0)
+ smpi_exit_status = res;
+ }
+ } catch (simgrid::ForcefulKillException const& e) {
+ XBT_DEBUG("Caught a ForcefulKillException: %s", e.what());
+ }