diff --git a/src/plugins/e-acsl/src/code_generator/global_observer.ml b/src/plugins/e-acsl/src/code_generator/global_observer.ml
index 8468a0177a43b34c12b199c5b5d8f32dab78e72c..a145348a03156fb66ad3a10f3b2eef23cec6c9d7 100644
--- a/src/plugins/e-acsl/src/code_generator/global_observer.ml
+++ b/src/plugins/e-acsl/src/code_generator/global_observer.ml
@@ -23,7 +23,7 @@
 open Cil_types
 open Cil_datatype
 
-let function_name = Functions.RTL.mk_api_name "globals_init"
+let function_init_name = Functions.RTL.mk_api_name "globals_init"
 
 (* Hashtable mapping global variables (as Cil_type.varinfo) to their
    initializers (if any).
@@ -59,12 +59,14 @@ let rec literal_in_initializer env kf = function
   | CompoundInit (_, l) ->
     List.fold_left (fun env (_, i) -> literal_in_initializer env kf i) env l
 
-let mk_init_function () =
-  (* Create [__e_acsl_globals_init] function with definition
-     for initialization of global variables *)
+(* Create a global kernel function named `name`.
+   Return a triple (varinfo * fundec * kernel_function) of the created
+   global function. *)
+let mk_function name =
+  (* Create global function `name` *)
   let vi =
     Cil.makeGlobalVar ~source:true
-      function_name
+      name
       (TFun(Cil.voidType, Some [], false, []))
   in
   vi.vdefined <- true;
@@ -84,11 +86,16 @@ let mk_init_function () =
       sspec = spec }
   in
   let fct = Definition(fundec, Location.unknown) in
-  (* Create and register [__e_acsl_globals_init] as kernel
-     function *)
+  (* Create and register the function as kernel function *)
   let kf = { fundec = fct; spec = spec } in
   Globals.Functions.register kf;
   Globals.Functions.replace_by_definition spec fundec Location.unknown;
+  vi, fundec, kf
+
+let mk_init_function () =
+  (* Create and register [__e_acsl_globals_init] function with definition
+     for initialization of global variables *)
+  let vi, fundec, kf = mk_function function_init_name in
   (* Now generate the statements. The generation is done only now because it
      depends on the local variable [already_run] whose generation required the
      existence of [fundec] *)
@@ -171,7 +178,7 @@ let mk_init_function () =
   in
   let return = Cil.mkStmt ~valid_sid:true (Return (None, loc)) in
   let stmts = [ init_stmt; guard; return ] in
-  blk.bstmts <- stmts;
+  fundec.sbody.bstmts <- stmts;
   vi, fundec
 
 let mk_delete_stmts stmts =
diff --git a/src/plugins/e-acsl/src/code_generator/global_observer.mli b/src/plugins/e-acsl/src/code_generator/global_observer.mli
index e540f43493749c8ddf73450bc4a040f50fff1ada..64667d4f27890da5c1378ae72d742b269fe7e1bc 100644
--- a/src/plugins/e-acsl/src/code_generator/global_observer.mli
+++ b/src/plugins/e-acsl/src/code_generator/global_observer.mli
@@ -24,7 +24,7 @@
 
 open Cil_types
 
-val function_name: string
+val function_init_name: string
 (** Name of the function in which [mk_init_function] (see below) generates the
     code. *)
 
diff --git a/src/plugins/e-acsl/src/code_generator/injector.ml b/src/plugins/e-acsl/src/code_generator/injector.ml
index 1939cabd184c8827aac4c57c5a8b2929fa480466..6d202d8dfb6f23a948ae77389e4a38842bee76aa 100644
--- a/src/plugins/e-acsl/src/code_generator/injector.ml
+++ b/src/plugins/e-acsl/src/code_generator/injector.ml
@@ -713,7 +713,7 @@ let inject_global_initializer file main =
     | None ->
       Kernel.warning "@[no entry point specified:@ \
                       you must call function `%s' and `__e_acsl_memory_clean by yourself.@]"
-        Global_observer.function_name;
+        Global_observer.function_init_name;
       file.globals <- file.globals @ [ cil_fct ]
   end