  (* Function declaration. *)
  type func_decl = {
    fname : string;       (* function name. *)
-@@ -165,6 +170,7 @@
+@@ -165,6 +170,8 @@
    tf_fdecl   : func_decl;
    tf_is_priv : bool;   (* private or not, see above comment *)
    tf_is_switchless : bool;
 +  tf_is_exception_handler : bool;
++  tf_is_utility : bool;
  }
  
  (* untrust function(aka ocall) declaration. *)
-@@ -190,6 +196,7 @@
+@@ -190,6 +197,7 @@
  type expr =
    | Interface of enclave_func list
    | Composite of composite_type

        Tint8 Tint16 Tint32 Tint64
        Tuint8 Tuint16 Tuint32 Tuint64
-       Tsizet Twchar Tvoid Tlong Tstruct Tunion Tenum
+       Tsizet Twchar Tvoid Tlong Tstruct Tunion Tenum Terrno_list Texception_handler
 %token Tenclave Tfrom Timport Ttrusted Tuntrusted Tallow Tpropagate_errno
 
 %start start_parsing

 }
 
 
diff -Nur psw/uswitchless/sl_workers_untrusted.c psw/uswitchless/sl_workers_untrusted.c
--- psw/uswitchless/sl_workers_untrusted.c
+++ psw/uswitchless/sl_workers_untrusted.c
@@ -206,7 +206,7 @@
     BUG_ON(workers->handle->us_ocall_table == NULL);
     struct sl_uswitchless* handle = workers->handle;
     sgx_ecall(handle->us_enclave_id, ECMD_RUN_SWITCHLESS_TWORKER,
-              handle->us_ocall_table, NULL);
+              handle->us_ocall_table, NULL, /*is_utility=*/false);
     return 0;
 }
 
diff -Nur sdk/edger8r/linux/Ast.ml sdk/edger8r/linux/Ast.ml
--- sdk/edger8r/linux/Ast.ml
+++ sdk/edger8r/linux/Ast.ml
