view src/build-msvctools/libgfortran-msvcinit.c @ 5579:2734b3818171

Avoid double-free with librsb (bug #58957). * src/librsb.mk: Add work-around to avoid double-free (provided by Michele Martone). * src/mingw-of-sparsersb-1-no-render.patch: Remove patch. * dist-files.mk: Remove file from list.
author Markus Mützel <markus.muetzel@gmx.de>
date Mon, 02 Nov 2020 08:55:18 +0100
parents f8299bb6c872
children
line wrap: on
line source

#include <stdlib.h>
#include <stdio.h>

extern void _gfortrani_init_variables (void);
extern void _gfortrani_init_units (void);
extern void _gfortrani_close_units (void);
extern void _gfortrani_set_fpu (void);
extern void _gfortrani_init_compile_options (void);
extern void _gfortran_random_seed_i4 (void *a, void *b, void *c);
extern int _gfortrani_big_endian;

extern void __msvc_free_exe_path (void);

#pragma section(".CRT$XCU", read)
static void __cdecl __msvc_init (void);
static void __cdecl __msvc_cleanup (void);
__declspec(allocate(".CRT$XCU")) void (__cdecl *__msvc_init_) (void) = __msvc_init;

static void __cdecl __msvc_init (void)
{
  _gfortrani_big_endian = 0;
  _gfortrani_init_variables ();
  _gfortrani_init_units ();
  _gfortrani_set_fpu ();
  _gfortrani_init_compile_options ();
  _gfortran_random_seed_i4 (NULL, NULL, NULL);

  atexit (__msvc_cleanup);
}

static void __cdecl __msvc_cleanup (void)
{
  _gfortrani_close_units ();
  __msvc_free_exe_path ();
}

void __msvc_stupid_function_name_for_static_linking (void)
{
  return;
}