Changeset 788e3efa in OpenModelica


Ignore:
Timestamp:
2013-02-27T14:59:56+01:00 (11 years ago)
Author:
Martin Sjölund <martin.sjolund@…>
Branches:
Added-citation-metadata, maintenance/v1.14, maintenance/v1.15, maintenance/v1.16, maintenance/v1.17, maintenance/v1.18, maintenance/v1.19, maintenance/v1.20, maintenance/v1.21, maintenance/v1.22, maintenance/v1.23, master, omlib-staging
Children:
e4eb8d4
Parents:
e5b28d39
Message:
  • Added a nice little signal handler that can gracefully recover from stack overflows, but causes other segmentation faults to make the executable die.
  • Only implemented for the main function of the bootstrapped compiler. We will need to use some more code to make omc recover from a failed CORBA command or model instantiation, etc.

git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@15357 f25d12d1-65f4-0310-ae8a-bbce733d8d8e

Location:
SimulationRuntime/c
Files:
2 added
2 edited

Legend:

Unmodified
Added
Removed
  • SimulationRuntime/c/Makefile.common

    r07b9c815 r788e3efa  
    2525./meta/meta_modelica.h \
    2626./meta/meta_modelica_real.h \
     27./meta/meta_modelica_segv.h \
    2728./meta/meta_modelica_string_lit.h \
    2829./openmodelica_func.h \
  • SimulationRuntime/c/meta/meta_modelica.h

    r4418a89 r788e3efa  
    4747#include "meta_modelica_string_lit.h"
    4848#include "meta_modelica_builtin.h"
     49#include "meta_modelica_segv.h"
    4950#include <stdio.h>
    5051#include <stdlib.h>
     
    632633*/
    633634extern jmp_buf *mmc_jumper;
    634 #define MMC_TRY() { jmp_buf new_mmc_jumper, *old_jumper; old_jumper = mmc_jumper; mmc_jumper = &new_mmc_jumper; if (setjmp(new_mmc_jumper) == 0) {
     635#define MMC_TRY_INTERNAL(X) { jmp_buf new_mmc_jumper, *old_jumper; old_jumper = X; X = &new_mmc_jumper; if (setjmp(new_mmc_jumper) == 0) {
     636#define MMC_TRY() MMC_TRY_INTERNAL(mmc_jumper)
     637
    635638#if !defined(_MSC_VER)
    636 #define MMC_CATCH() } mmc_jumper = old_jumper; mmc_GC_unwind_roots_state(mmc_GC_local_state); mmc_catch_dummy_fn();}
     639#define MMC_CATCH_INTERNAL(X) } X = old_jumper; mmc_GC_unwind_roots_state(mmc_GC_local_state); mmc_catch_dummy_fn();}
    637640#else
    638 #define MMC_CATCH() } mmc_jumper = old_jumper; mmc_GC_unwind_roots_state(mmc_GC_local_state);}
    639 #endif
     641#define MMC_CATCH_INTERNAL(X) } X = old_jumper; mmc_GC_unwind_roots_state(mmc_GC_local_state);}
     642#endif
     643#define MMC_CATCH() MMC_CATCH_INTERNAL(mmc_jumper)
     644
    640645#define MMC_THROW() longjmp(*mmc_jumper,1)
    641646#define MMC_ELSE() } else {
Note: See TracChangeset for help on using the changeset viewer.