This is the mail archive of the fortran@gcc.gnu.org mailing list for the GNU Fortran project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Patch,fortran] PR 27740 Symbol versioning for libgfortran


Hi,

the attached patch implements symbol versioning for libgfortran. At the same time it does some namespace cleanup, so that all the exported symbols have names beginning with _gfortran_.

Originally my plan was to wait for the ISO_C_BINDING to do the namespace cleanup of the intrinsics that are written in Fortran (the problem is that standard Fortran does not allow symbol names to begin with "_"), but after discussing this with FX on #gcc we agreed that there is a risk that ISO_C_BINDING won't be ready to get into 4.3, especially if we want to follow the normal gcc rules. So instead we decided to implement a (undocumented, for gfortran internal use only) command line option -fallow-leading-underscore. FX implemented this as well as the namespace cleanup, but I don't think he ever submitted the patch to the mailing list, so it's included here as part of this patch.

In addition to the patch, I'm attaching the new file libgfortran/gfortran.map, as well as the script I used to create the map file.

The F2C stuff is versioned separately, the idea being that the F2C ABI should not change even though we certainly want to improve the gfortran ABI in the future.

Ok for trunk? 4.2?

--
Janne Blomqvist
gfortran ChangeLog:
	
2006-11-04  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>

	PR fortran/27740
	* gfortran.h: New variable flag_allow_leading_underscore.
	* lang.opt: New command line option -fallow-leading-underscore
	* trans-decl.c (gfc_get_extern_function_decl): Use symbol names
	starting with _gfortran_
	* match.c (gfc_match_name): Match allow-leading-underscore
	* options.c: Init new variable.
	(gfc_handle_option): Handle new option.

libgfortran:
	
2006-05-23  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
	    Janne Blomqvist  <jb@gcc.gnu.org>

	PR fortran/27740
	* configure.ac: New test to determine if symbol versioning is
	supported.
	* Makefile.am: Use result of above test to add appropriate linker
	flags.
	* gfortran.map: New file.
	* libtool-version: Increase major version.
	* m4/misc_specifics.m4: Add _gfortran_ to symbol names.
	* m4/specific2.m4: Likewise.
	* m4/specific.m4: Likewise.
	* intrinsics/selected_int_kind.f90: Likewise.
	* intrinsics/selected_real_kind.f90: Likewise.
	* intrinsics/f2c_specifics.F90: Likewise.
	* intrinsics/dprod_r8.f90: Likewise.
	* configure: Regenerated.
	* Makefile.in: Regenerated.
	* generated/...: Regenerated specifics.

	

Attachment: createmap.sh
Description: application/shellscript

GFORTRAN_1.0 {
  global:
    _fini;
    _gfortran_abort;
    _gfortran_access_func;
    _gfortran_adjustl;
    _gfortran_adjustr;
    _gfortran_alarm_sub;
    _gfortran_alarm_sub_int;
    _gfortran_all_l4;
    _gfortran_all_l8;
    _gfortran_allocate;
    _gfortran_allocate64;
    _gfortran_allocate64_array;
    _gfortran_allocate_array;
    _gfortran_any_l4;
    _gfortran_any_l8;
    _gfortran_arandom_r10;
    _gfortran_arandom_r4;
    _gfortran_arandom_r8;
    _gfortran_associated;
    _gfortran_chdir_i4;
    _gfortran_chdir_i4_sub;
    _gfortran_chdir_i8;
    _gfortran_chdir_i8_sub;
    _gfortran_chmod_func;
    _gfortran_chmod_i4_sub;
    _gfortran_chmod_i8_sub;
    _gfortran_compare_string;
    _gfortran_concat_string;
    _gfortran_count_4_l4;
    _gfortran_count_4_l8;
    _gfortran_count_8_l4;
    _gfortran_count_8_l8;
    _gfortran_cpu_time_10;
    _gfortran_cpu_time_4;
    _gfortran_cpu_time_8;
    _gfortran_cshift0_1;
    _gfortran_cshift0_1_char;
    _gfortran_cshift0_2;
    _gfortran_cshift0_2_char;
    _gfortran_cshift0_4;
    _gfortran_cshift0_4_char;
    _gfortran_cshift0_8;
    _gfortran_cshift0_8_char;
    _gfortran_cshift1_4;
    _gfortran_cshift1_4_char;
    _gfortran_cshift1_8;
    _gfortran_cshift1_8_char;
    _gfortran_ctime;
    _gfortran_ctime_sub;
    _gfortran_date_and_time;
    _gfortran_deallocate;
    _gfortran_eoshift0_1;
    _gfortran_eoshift0_1_char;
    _gfortran_eoshift0_2;
    _gfortran_eoshift0_2_char;
    _gfortran_eoshift0_4;
    _gfortran_eoshift0_4_char;
    _gfortran_eoshift0_8;
    _gfortran_eoshift0_8_char;
    _gfortran_eoshift1_4;
    _gfortran_eoshift1_4_char;
    _gfortran_eoshift1_8;
    _gfortran_eoshift1_8_char;
    _gfortran_eoshift2_1;
    _gfortran_eoshift2_1_char;
    _gfortran_eoshift2_2;
    _gfortran_eoshift2_2_char;
    _gfortran_eoshift2_4;
    _gfortran_eoshift2_4_char;
    _gfortran_eoshift2_8;
    _gfortran_eoshift2_8_char;
    _gfortran_eoshift3_4;
    _gfortran_eoshift3_4_char;
    _gfortran_eoshift3_8;
    _gfortran_eoshift3_8_char;
    _gfortran_etime;
    _gfortran_etime_sub;
    _gfortran_exit_i4;
    _gfortran_exit_i8;
    _gfortran_exponent_r10;
    _gfortran_exponent_r4;
    _gfortran_exponent_r8;
    _gfortran_fdate;
    _gfortran_fdate_sub;
    _gfortran_fget;
    _gfortran_fget_i1_sub;
    _gfortran_fget_i2_sub;
    _gfortran_fget_i4_sub;
    _gfortran_fget_i8_sub;
    _gfortran_fgetc;
    _gfortran_fgetc_i1_sub;
    _gfortran_fgetc_i2_sub;
    _gfortran_fgetc_i4_sub;
    _gfortran_fgetc_i8_sub;
    _gfortran_flush_i4;
    _gfortran_flush_i8;
    _gfortran_fnum_i4;
    _gfortran_fnum_i8;
    _gfortran_fput;
    _gfortran_fput_i1_sub;
    _gfortran_fput_i2_sub;
    _gfortran_fput_i4_sub;
    _gfortran_fput_i8_sub;
    _gfortran_fputc;
    _gfortran_fputc_i1_sub;
    _gfortran_fputc_i2_sub;
    _gfortran_fputc_i4_sub;
    _gfortran_fputc_i8_sub;
    _gfortran_fraction_r10;
    _gfortran_fraction_r4;
    _gfortran_fraction_r8;
    _gfortran_free;
    _gfortran_fstat_i4;
    _gfortran_fstat_i4_sub;
    _gfortran_fstat_i8;
    _gfortran_fstat_i8_sub;
    _gfortran_ftell;
    _gfortran_ftell_i1_sub;
    _gfortran_ftell_i2_sub;
    _gfortran_ftell_i4_sub;
    _gfortran_ftell_i8_sub;
    _gfortran_gerror;
    _gfortran_get_command_argument_i4;
    _gfortran_get_command_argument_i8;
    _gfortran_get_command_i4;
    _gfortran_get_command_i8;
    _gfortran_get_environment_variable_i4;
    _gfortran_get_environment_variable_i8;
    _gfortran_getarg_i4;
    _gfortran_getarg_i8;
    _gfortran_getcwd;
    _gfortran_getcwd_i4_sub;
    _gfortran_getcwd_i8_sub;
    _gfortran_getenv;
    _gfortran_getgid;
    _gfortran_getlog;
    _gfortran_getpid;
    _gfortran_getuid;
    _gfortran_gmtime_i4;
    _gfortran_gmtime_i8;
    _gfortran_hostnm;
    _gfortran_hostnm_i4_sub;
    _gfortran_hostnm_i8_sub;
    _gfortran_iargc;
    _gfortran_idate_i4;
    _gfortran_idate_i8;
    _gfortran_ierrno_i4;
    _gfortran_ierrno_i8;
    _gfortran_internal_free;
    _gfortran_internal_malloc;
    _gfortran_internal_malloc64;
    _gfortran_internal_pack;
    _gfortran_internal_realloc;
    _gfortran_internal_realloc64;
    _gfortran_internal_unpack;
    _gfortran_irand;
    _gfortran_isatty_l4;
    _gfortran_isatty_l8;
    _gfortran_ishftc4;
    _gfortran_ishftc8;
    _gfortran_itime_i4;
    _gfortran_itime_i8;
    _gfortran_kill_i4;
    _gfortran_kill_i4_sub;
    _gfortran_kill_i8;
    _gfortran_kill_i8_sub;
    _gfortran_link_i4;
    _gfortran_link_i4_sub;
    _gfortran_link_i8;
    _gfortran_link_i8_sub;
    _gfortran_lstat_i4;
    _gfortran_lstat_i4_sub;
    _gfortran_lstat_i8;
    _gfortran_lstat_i8_sub;
    _gfortran_ltime_i4;
    _gfortran_ltime_i8;
    _gfortran_malloc;
    _gfortran_matmul_c10;
    _gfortran_matmul_c4;
    _gfortran_matmul_c8;
    _gfortran_matmul_i4;
    _gfortran_matmul_i8;
    _gfortran_matmul_l4;
    _gfortran_matmul_l8;
    _gfortran_matmul_r10;
    _gfortran_matmul_r4;
    _gfortran_matmul_r8;
    _gfortran_maxloc0_4_i4;
    _gfortran_maxloc0_4_i8;
    _gfortran_maxloc0_4_r10;
    _gfortran_maxloc0_4_r4;
    _gfortran_maxloc0_4_r8;
    _gfortran_maxloc0_8_i4;
    _gfortran_maxloc0_8_i8;
    _gfortran_maxloc0_8_r10;
    _gfortran_maxloc0_8_r4;
    _gfortran_maxloc0_8_r8;
    _gfortran_maxloc1_4_i4;
    _gfortran_maxloc1_4_i8;
    _gfortran_maxloc1_4_r10;
    _gfortran_maxloc1_4_r4;
    _gfortran_maxloc1_4_r8;
    _gfortran_maxloc1_8_i4;
    _gfortran_maxloc1_8_i8;
    _gfortran_maxloc1_8_r10;
    _gfortran_maxloc1_8_r4;
    _gfortran_maxloc1_8_r8;
    _gfortran_maxval_i4;
    _gfortran_maxval_i8;
    _gfortran_maxval_r10;
    _gfortran_maxval_r4;
    _gfortran_maxval_r8;
    _gfortran_mclock;
    _gfortran_mclock8;
    _gfortran_minloc0_4_i4;
    _gfortran_minloc0_4_i8;
    _gfortran_minloc0_4_r10;
    _gfortran_minloc0_4_r4;
    _gfortran_minloc0_4_r8;
    _gfortran_minloc0_8_i4;
    _gfortran_minloc0_8_i8;
    _gfortran_minloc0_8_r10;
    _gfortran_minloc0_8_r4;
    _gfortran_minloc0_8_r8;
    _gfortran_minloc1_4_i4;
    _gfortran_minloc1_4_i8;
    _gfortran_minloc1_4_r10;
    _gfortran_minloc1_4_r4;
    _gfortran_minloc1_4_r8;
    _gfortran_minloc1_8_i4;
    _gfortran_minloc1_8_i8;
    _gfortran_minloc1_8_r10;
    _gfortran_minloc1_8_r4;
    _gfortran_minloc1_8_r8;
    _gfortran_minval_i4;
    _gfortran_minval_i8;
    _gfortran_minval_r10;
    _gfortran_minval_r4;
    _gfortran_minval_r8;
    _gfortran_mmaxloc0_4_i4;
    _gfortran_mmaxloc0_4_i8;
    _gfortran_mmaxloc0_4_r10;
    _gfortran_mmaxloc0_4_r4;
    _gfortran_mmaxloc0_4_r8;
    _gfortran_mmaxloc0_8_i4;
    _gfortran_mmaxloc0_8_i8;
    _gfortran_mmaxloc0_8_r10;
    _gfortran_mmaxloc0_8_r4;
    _gfortran_mmaxloc0_8_r8;
    _gfortran_mmaxloc1_4_i4;
    _gfortran_mmaxloc1_4_i8;
    _gfortran_mmaxloc1_4_r10;
    _gfortran_mmaxloc1_4_r4;
    _gfortran_mmaxloc1_4_r8;
    _gfortran_mmaxloc1_8_i4;
    _gfortran_mmaxloc1_8_i8;
    _gfortran_mmaxloc1_8_r10;
    _gfortran_mmaxloc1_8_r4;
    _gfortran_mmaxloc1_8_r8;
    _gfortran_mmaxval_i4;
    _gfortran_mmaxval_i8;
    _gfortran_mmaxval_r10;
    _gfortran_mmaxval_r4;
    _gfortran_mmaxval_r8;
    _gfortran_mminloc0_4_i4;
    _gfortran_mminloc0_4_i8;
    _gfortran_mminloc0_4_r10;
    _gfortran_mminloc0_4_r4;
    _gfortran_mminloc0_4_r8;
    _gfortran_mminloc0_8_i4;
    _gfortran_mminloc0_8_i8;
    _gfortran_mminloc0_8_r10;
    _gfortran_mminloc0_8_r4;
    _gfortran_mminloc0_8_r8;
    _gfortran_mminloc1_4_i4;
    _gfortran_mminloc1_4_i8;
    _gfortran_mminloc1_4_r10;
    _gfortran_mminloc1_4_r4;
    _gfortran_mminloc1_4_r8;
    _gfortran_mminloc1_8_i4;
    _gfortran_mminloc1_8_i8;
    _gfortran_mminloc1_8_r10;
    _gfortran_mminloc1_8_r4;
    _gfortran_mminloc1_8_r8;
    _gfortran_mminval_i4;
    _gfortran_mminval_i8;
    _gfortran_mminval_r10;
    _gfortran_mminval_r4;
    _gfortran_mminval_r8;
    _gfortran_move_alloc;
    _gfortran_move_alloc_c;
    _gfortran_mproduct_c10;
    _gfortran_mproduct_c4;
    _gfortran_mproduct_c8;
    _gfortran_mproduct_i4;
    _gfortran_mproduct_i8;
    _gfortran_mproduct_r10;
    _gfortran_mproduct_r4;
    _gfortran_mproduct_r8;
    _gfortran_msum_c10;
    _gfortran_msum_c4;
    _gfortran_msum_c8;
    _gfortran_msum_i4;
    _gfortran_msum_i8;
    _gfortran_msum_r10;
    _gfortran_msum_r4;
    _gfortran_msum_r8;
    _gfortran_mvbits_i1;
    _gfortran_mvbits_i2;
    _gfortran_mvbits_i4;
    _gfortran_mvbits_i8;
    _gfortran_nearest_r10;
    _gfortran_nearest_r4;
    _gfortran_nearest_r8;
    _gfortran_pack;
    _gfortran_pack_char;
    _gfortran_pack_s;
    _gfortran_pack_s_char;
    _gfortran_pause_numeric;
    _gfortran_pause_string;
    _gfortran_perror_sub;
    _gfortran_pow_c10_i4;
    _gfortran_pow_c10_i8;
    _gfortran_pow_c4_i4;
    _gfortran_pow_c4_i8;
    _gfortran_pow_c8_i4;
    _gfortran_pow_c8_i8;
    _gfortran_pow_i4_i4;
    _gfortran_pow_i4_i8;
    _gfortran_pow_i8_i4;
    _gfortran_pow_i8_i8;
    _gfortran_pow_r10_i4;
    _gfortran_pow_r10_i8;
    _gfortran_pow_r4_i4;
    _gfortran_pow_r4_i8;
    _gfortran_pow_r8_i4;
    _gfortran_pow_r8_i8;
    _gfortran_product_c10;
    _gfortran_product_c4;
    _gfortran_product_c8;
    _gfortran_product_i4;
    _gfortran_product_i8;
    _gfortran_product_r10;
    _gfortran_product_r4;
    _gfortran_product_r8;
    _gfortran_rand;
    _gfortran_random_r10;
    _gfortran_random_r4;
    _gfortran_random_r8;
    _gfortran_random_seed;
    _gfortran_rename_i4;
    _gfortran_rename_i4_sub;
    _gfortran_rename_i8;
    _gfortran_rename_i8_sub;
    _gfortran_reshape;
    _gfortran_reshape_4;
    _gfortran_reshape_8;
    _gfortran_reshape_c10;
    _gfortran_reshape_c4;
    _gfortran_reshape_c8;
    _gfortran_reshape_char;
    _gfortran_reshape_r10;
    _gfortran_reshape_r4;
    _gfortran_reshape_r8;
    _gfortran_rrspacing_r10;
    _gfortran_rrspacing_r4;
    _gfortran_rrspacing_r8;
    _gfortran_runtime_error;
    _gfortran_secnds;
    _gfortran_second;
    _gfortran_second_sub;
    _gfortran_select_string;
    _gfortran_selected_int_kind;
    _gfortran_selected_real_kind;
    _gfortran_set_args;
    _gfortran_set_convert;
    _gfortran_set_exponent_r10;
    _gfortran_set_exponent_r4;
    _gfortran_set_exponent_r8;
    _gfortran_set_fpe;
    _gfortran_set_record_marker;
    _gfortran_set_std;
    _gfortran_shape_4;
    _gfortran_shape_8;
    _gfortran_signal_func;
    _gfortran_signal_func_int;
    _gfortran_signal_sub;
    _gfortran_signal_sub_int;
    _gfortran_size0;
    _gfortran_size1;
    _gfortran_sleep_i4_sub;
    _gfortran_sleep_i8_sub;
    _gfortran_smaxloc0_4_i4;
    _gfortran_smaxloc0_4_i8;
    _gfortran_smaxloc0_4_r10;
    _gfortran_smaxloc0_4_r4;
    _gfortran_smaxloc0_4_r8;
    _gfortran_smaxloc0_8_i4;
    _gfortran_smaxloc0_8_i8;
    _gfortran_smaxloc0_8_r10;
    _gfortran_smaxloc0_8_r4;
    _gfortran_smaxloc0_8_r8;
    _gfortran_smaxloc1_4_i4;
    _gfortran_smaxloc1_4_i8;
    _gfortran_smaxloc1_4_r10;
    _gfortran_smaxloc1_4_r4;
    _gfortran_smaxloc1_4_r8;
    _gfortran_smaxloc1_8_i4;
    _gfortran_smaxloc1_8_i8;
    _gfortran_smaxloc1_8_r10;
    _gfortran_smaxloc1_8_r4;
    _gfortran_smaxloc1_8_r8;
    _gfortran_smaxval_i4;
    _gfortran_smaxval_i8;
    _gfortran_smaxval_r10;
    _gfortran_smaxval_r4;
    _gfortran_smaxval_r8;
    _gfortran_sminloc0_4_i4;
    _gfortran_sminloc0_4_i8;
    _gfortran_sminloc0_4_r10;
    _gfortran_sminloc0_4_r4;
    _gfortran_sminloc0_4_r8;
    _gfortran_sminloc0_8_i4;
    _gfortran_sminloc0_8_i8;
    _gfortran_sminloc0_8_r10;
    _gfortran_sminloc0_8_r4;
    _gfortran_sminloc0_8_r8;
    _gfortran_sminloc1_4_i4;
    _gfortran_sminloc1_4_i8;
    _gfortran_sminloc1_4_r10;
    _gfortran_sminloc1_4_r4;
    _gfortran_sminloc1_4_r8;
    _gfortran_sminloc1_8_i4;
    _gfortran_sminloc1_8_i8;
    _gfortran_sminloc1_8_r10;
    _gfortran_sminloc1_8_r4;
    _gfortran_sminloc1_8_r8;
    _gfortran_sminval_i4;
    _gfortran_sminval_i8;
    _gfortran_sminval_r10;
    _gfortran_sminval_r4;
    _gfortran_sminval_r8;
    _gfortran_spacing_r10;
    _gfortran_spacing_r4;
    _gfortran_spacing_r8;
    _gfortran_specific__abs_c10;
    _gfortran_specific__abs_c4;
    _gfortran_specific__abs_c8;
    _gfortran_specific__abs_i4;
    _gfortran_specific__abs_i8;
    _gfortran_specific__abs_r10;
    _gfortran_specific__abs_r4;
    _gfortran_specific__abs_r8;
    _gfortran_specific__acos_r10;
    _gfortran_specific__acos_r4;
    _gfortran_specific__acos_r8;
    _gfortran_specific__acosh_r10;
    _gfortran_specific__acosh_r4;
    _gfortran_specific__acosh_r8;
    _gfortran_specific__aimag_c10;
    _gfortran_specific__aimag_c4;
    _gfortran_specific__aimag_c8;
    _gfortran_specific__aint_r10;
    _gfortran_specific__aint_r4;
    _gfortran_specific__aint_r8;
    _gfortran_specific__anint_r10;
    _gfortran_specific__anint_r4;
    _gfortran_specific__anint_r8;
    _gfortran_specific__asin_r10;
    _gfortran_specific__asin_r4;
    _gfortran_specific__asin_r8;
    _gfortran_specific__asinh_r10;
    _gfortran_specific__asinh_r4;
    _gfortran_specific__asinh_r8;
    _gfortran_specific__atan2_r10;
    _gfortran_specific__atan2_r4;
    _gfortran_specific__atan2_r8;
    _gfortran_specific__atan_r10;
    _gfortran_specific__atan_r4;
    _gfortran_specific__atan_r8;
    _gfortran_specific__atanh_r10;
    _gfortran_specific__atanh_r4;
    _gfortran_specific__atanh_r8;
    _gfortran_specific__char_1_i4;
    _gfortran_specific__char_1_i8;
    _gfortran_specific__conjg_10;
    _gfortran_specific__conjg_4;
    _gfortran_specific__conjg_8;
    _gfortran_specific__cos_c10;
    _gfortran_specific__cos_c4;
    _gfortran_specific__cos_c8;
    _gfortran_specific__cos_r10;
    _gfortran_specific__cos_r4;
    _gfortran_specific__cos_r8;
    _gfortran_specific__cosh_r10;
    _gfortran_specific__cosh_r4;
    _gfortran_specific__cosh_r8;
    _gfortran_specific__dim_i4;
    _gfortran_specific__dim_i8;
    _gfortran_specific__dim_r10;
    _gfortran_specific__dim_r4;
    _gfortran_specific__dim_r8;
    _gfortran_specific__dprod_r8;
    _gfortran_specific__exp_c10;
    _gfortran_specific__exp_c4;
    _gfortran_specific__exp_c8;
    _gfortran_specific__exp_r10;
    _gfortran_specific__exp_r4;
    _gfortran_specific__exp_r8;
    _gfortran_specific__index_1_i4;
    _gfortran_specific__index_1_i8;
    _gfortran_specific__len_1_i4;
    _gfortran_specific__len_1_i8;
    _gfortran_specific__log10_r10;
    _gfortran_specific__log10_r4;
    _gfortran_specific__log10_r8;
    _gfortran_specific__log_c10;
    _gfortran_specific__log_c4;
    _gfortran_specific__log_c8;
    _gfortran_specific__log_r10;
    _gfortran_specific__log_r4;
    _gfortran_specific__log_r8;
    _gfortran_specific__mod_i4;
    _gfortran_specific__mod_i8;
    _gfortran_specific__mod_r10;
    _gfortran_specific__mod_r4;
    _gfortran_specific__mod_r8;
    _gfortran_specific__nint_4_10;
    _gfortran_specific__nint_4_4;
    _gfortran_specific__nint_4_8;
    _gfortran_specific__nint_8_10;
    _gfortran_specific__nint_8_4;
    _gfortran_specific__nint_8_8;
    _gfortran_specific__sign_i4;
    _gfortran_specific__sign_i8;
    _gfortran_specific__sign_r10;
    _gfortran_specific__sign_r4;
    _gfortran_specific__sign_r8;
    _gfortran_specific__sin_c10;
    _gfortran_specific__sin_c4;
    _gfortran_specific__sin_c8;
    _gfortran_specific__sin_r10;
    _gfortran_specific__sin_r4;
    _gfortran_specific__sin_r8;
    _gfortran_specific__sinh_r10;
    _gfortran_specific__sinh_r4;
    _gfortran_specific__sinh_r8;
    _gfortran_specific__sqrt_c10;
    _gfortran_specific__sqrt_c4;
    _gfortran_specific__sqrt_c8;
    _gfortran_specific__sqrt_r10;
    _gfortran_specific__sqrt_r4;
    _gfortran_specific__sqrt_r8;
    _gfortran_specific__tan_r10;
    _gfortran_specific__tan_r4;
    _gfortran_specific__tan_r8;
    _gfortran_specific__tanh_r10;
    _gfortran_specific__tanh_r4;
    _gfortran_specific__tanh_r8;
    _gfortran_spread;
    _gfortran_spread_char;
    _gfortran_spread_char_scalar;
    _gfortran_spread_scalar;
    _gfortran_sproduct_c10;
    _gfortran_sproduct_c4;
    _gfortran_sproduct_c8;
    _gfortran_sproduct_i4;
    _gfortran_sproduct_i8;
    _gfortran_sproduct_r10;
    _gfortran_sproduct_r4;
    _gfortran_sproduct_r8;
    _gfortran_srand;
    _gfortran_ssum_c10;
    _gfortran_ssum_c4;
    _gfortran_ssum_c8;
    _gfortran_ssum_i4;
    _gfortran_ssum_i8;
    _gfortran_ssum_r10;
    _gfortran_ssum_r4;
    _gfortran_ssum_r8;
    _gfortran_st_backspace;
    _gfortran_st_close;
    _gfortran_st_endfile;
    _gfortran_st_flush;
    _gfortran_st_inquire;
    _gfortran_st_iolength;
    _gfortran_st_iolength_done;
    _gfortran_st_open;
    _gfortran_st_read;
    _gfortran_st_read_done;
    _gfortran_st_rewind;
    _gfortran_st_set_nml_var;
    _gfortran_st_set_nml_var_dim;
    _gfortran_st_write;
    _gfortran_st_write_done;
    _gfortran_stat_i4;
    _gfortran_stat_i4_sub;
    _gfortran_stat_i8;
    _gfortran_stat_i8_sub;
    _gfortran_stop_numeric;
    _gfortran_stop_string;
    _gfortran_string_index;
    _gfortran_string_len_trim;
    _gfortran_string_repeat;
    _gfortran_string_scan;
    _gfortran_string_trim;
    _gfortran_string_verify;
    _gfortran_sum_c10;
    _gfortran_sum_c4;
    _gfortran_sum_c8;
    _gfortran_sum_i4;
    _gfortran_sum_i8;
    _gfortran_sum_r10;
    _gfortran_sum_r4;
    _gfortran_sum_r8;
    _gfortran_symlnk_i4;
    _gfortran_symlnk_i4_sub;
    _gfortran_symlnk_i8;
    _gfortran_symlnk_i8_sub;
    _gfortran_system;
    _gfortran_system_clock_4;
    _gfortran_system_clock_8;
    _gfortran_system_sub;
    _gfortran_time8_func;
    _gfortran_time_func;
    _gfortran_transfer_array;
    _gfortran_transfer_character;
    _gfortran_transfer_complex;
    _gfortran_transfer_integer;
    _gfortran_transfer_logical;
    _gfortran_transfer_real;
    _gfortran_transpose;
    _gfortran_transpose_c10;
    _gfortran_transpose_c4;
    _gfortran_transpose_c8;
    _gfortran_transpose_char;
    _gfortran_transpose_i4;
    _gfortran_transpose_i8;
    _gfortran_transpose_r10;
    _gfortran_transpose_r4;
    _gfortran_transpose_r8;
    _gfortran_ttynam;
    _gfortran_ttynam_sub;
    _gfortran_umask_i4;
    _gfortran_umask_i4_sub;
    _gfortran_umask_i8;
    _gfortran_umask_i8_sub;
    _gfortran_unlink;
    _gfortran_unlink_i4_sub;
    _gfortran_unlink_i8_sub;
    _gfortran_unpack0;
    _gfortran_unpack0_char;
    _gfortran_unpack1;
    _gfortran_unpack1_char;
    _init;
  local:
    *;
};

F2C_1.0 {
  global:
    _gfortran_f2c_specific__abs_c4;
    _gfortran_f2c_specific__abs_r4;
    _gfortran_f2c_specific__acos_r4;
    _gfortran_f2c_specific__acosh_r4;
    _gfortran_f2c_specific__aimag_c4;
    _gfortran_f2c_specific__aimag_c8;
    _gfortran_f2c_specific__aint_r4;
    _gfortran_f2c_specific__anint_r4;
    _gfortran_f2c_specific__asin_r4;
    _gfortran_f2c_specific__asinh_r4;
    _gfortran_f2c_specific__atan2_r4;
    _gfortran_f2c_specific__atan_r4;
    _gfortran_f2c_specific__atanh_r4;
    _gfortran_f2c_specific__conjg_4;
    _gfortran_f2c_specific__conjg_8;
    _gfortran_f2c_specific__cos_c4;
    _gfortran_f2c_specific__cos_c8;
    _gfortran_f2c_specific__cos_r4;
    _gfortran_f2c_specific__cosh_r4;
    _gfortran_f2c_specific__dim_r4;
    _gfortran_f2c_specific__exp_c4;
    _gfortran_f2c_specific__exp_c8;
    _gfortran_f2c_specific__exp_r4;
    _gfortran_f2c_specific__log10_r4;
    _gfortran_f2c_specific__log_c4;
    _gfortran_f2c_specific__log_c8;
    _gfortran_f2c_specific__log_r4;
    _gfortran_f2c_specific__mod_r4;
    _gfortran_f2c_specific__sign_r4;
    _gfortran_f2c_specific__sin_c4;
    _gfortran_f2c_specific__sin_c8;
    _gfortran_f2c_specific__sin_r4;
    _gfortran_f2c_specific__sinh_r4;
    _gfortran_f2c_specific__sqrt_c4;
    _gfortran_f2c_specific__sqrt_c8;
    _gfortran_f2c_specific__sqrt_r4;
    _gfortran_f2c_specific__tan_r4;
    _gfortran_f2c_specific__tanh_r4;
  local:
    *;
};
Index: gcc/fortran/gfortran.h
===================================================================
--- gcc/fortran/gfortran.h	(revision 118476)
+++ gcc/fortran/gfortran.h	(working copy)
@@ -1648,6 +1648,7 @@ typedef struct
   int flag_f2c;
   int flag_automatic;
   int flag_backslash;
+  int flag_allow_leading_underscore;
   int flag_external_blas;
   int blas_matmul_limit;
   int flag_cray_pointer;
Index: gcc/fortran/lang.opt
===================================================================
--- gcc/fortran/lang.opt	(revision 118476)
+++ gcc/fortran/lang.opt	(working copy)
@@ -77,6 +77,10 @@ fall-intrinsics
 Fortran RejectNegative
 All intrinsics procedures are available regardless of selected standard
 
+fallow-leading-underscore
+Fortran Undocumented
+; For internal use only: allow the first character of symbol names to be an underscore
+
 fautomatic
 Fortran
 Do not treat local variables and COMMON blocks as if they were named in SAVE statements
Index: gcc/fortran/trans-decl.c
===================================================================
--- gcc/fortran/trans-decl.c	(revision 118476)
+++ gcc/fortran/trans-decl.c	(working copy)
@@ -1052,7 +1052,7 @@ gfc_get_extern_function_decl (gfc_symbol
   gfc_expr e;
   gfc_intrinsic_sym *isym;
   gfc_expr argexpr;
-  char s[GFC_MAX_SYMBOL_LEN + 13]; /* "f2c_specific" and '\0'.  */
+  char s[GFC_MAX_SYMBOL_LEN + 23]; /* "_gfortran_f2c_specific" and '\0'.  */
   tree name;
   tree mangled_name;
 
@@ -1100,10 +1100,10 @@ gfc_get_extern_function_decl (gfc_symbol
 	{
 	  /* Specific which needs a different implementation if f2c
 	     calling conventions are used.  */
-	  sprintf (s, "f2c_specific%s", e.value.function.name);
+	  sprintf (s, "_gfortran_f2c_specific%s", e.value.function.name);
 	}
       else
-	sprintf (s, "specific%s", e.value.function.name);
+	sprintf (s, "_gfortran_specific%s", e.value.function.name);
 
       name = get_identifier (s);
       mangled_name = name;
@@ -2071,13 +2071,15 @@ gfc_build_intrinsic_function_decls (void
 				     gfc_charlen_type_node, pchar_type_node);
 
   gfor_fndecl_si_kind =
-    gfc_build_library_function_decl (get_identifier ("selected_int_kind"),
+    gfc_build_library_function_decl (get_identifier
+					(PREFIX("selected_int_kind")),
                                      gfc_int4_type_node,
                                      1,
                                      pvoid_type_node);
 
   gfor_fndecl_sr_kind =
-    gfc_build_library_function_decl (get_identifier ("selected_real_kind"),
+    gfc_build_library_function_decl (get_identifier 
+					(PREFIX("selected_real_kind")),
                                      gfc_int4_type_node,
                                      2, pvoid_type_node,
                                      pvoid_type_node);
Index: gcc/fortran/match.c
===================================================================
--- gcc/fortran/match.c	(revision 118476)
+++ gcc/fortran/match.c	(working copy)
@@ -394,7 +394,7 @@ gfc_match_name (char *buffer)
   gfc_gobble_whitespace ();
 
   c = gfc_next_char ();
-  if (!ISALPHA (c))
+  if (!(ISALPHA (c) || (c == '_' && gfc_option.flag_allow_leading_underscore)))
     {
       gfc_current_locus = old_loc;
       return MATCH_NO;
Index: gcc/fortran/options.c
===================================================================
--- gcc/fortran/options.c	(revision 118476)
+++ gcc/fortran/options.c	(working copy)
@@ -80,6 +80,7 @@ gfc_init_options (unsigned int argc ATTR
   gfc_option.flag_preprocessed = 0;
   gfc_option.flag_automatic = 1;
   gfc_option.flag_backslash = 1;
+  gfc_option.flag_allow_leading_underscore = 0;
   gfc_option.flag_external_blas = 0;
   gfc_option.blas_matmul_limit = 30;
   gfc_option.flag_cray_pointer = 0;
@@ -436,6 +437,10 @@ gfc_handle_option (size_t scode, const c
       gfc_option.flag_automatic = value;
       break;
 
+    case OPT_fallow_leading_underscore:
+      gfc_option.flag_allow_leading_underscore = value;
+      break;
+      
     case OPT_fbackslash:
       gfc_option.flag_backslash = value;
       break;
Index: libgfortran/configure.ac
===================================================================
--- libgfortran/configure.ac	(revision 118476)
+++ libgfortran/configure.ac	(working copy)
@@ -123,6 +123,20 @@ fi
 AC_SUBST(AM_FCFLAGS)
 AC_SUBST(AM_CFLAGS)
 
+# Check for symbol versioning (copied from libssp).
+AC_MSG_CHECKING([whether symbol versioning is supported])
+cat > conftest.map <<EOF
+FOO_1.0 {
+  global: *foo*; bar; local: *;
+};
+EOF
+save_LDFLAGS="$LDFLAGS"
+LDFLAGS="$LDFLAGS -fPIC -shared -Wl,--version-script,./conftest.map"
+AC_TRY_LINK([int foo;],[],[gfortran_use_symver=yes],[gfortran_use_symver=no])
+LDFLAGS="$save_LDFLAGS"
+AC_MSG_RESULT($gfortran_use_symver)
+AM_CONDITIONAL(LIBGFOR_USE_SYMVER, [test "x$gfortran_use_symver" = xyes])
+
 # Find other programs we need.
 AC_CHECK_TOOL(AS, as)
 AC_CHECK_TOOL(AR, ar)
Index: libgfortran/Makefile.am
===================================================================
--- libgfortran/Makefile.am	(revision 118476)
+++ libgfortran/Makefile.am	(working copy)
@@ -6,8 +6,15 @@ ACLOCAL_AMFLAGS = -I ../config
 ## May be used by toolexeclibdir.
 gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER)
 
+## Symbol versioning (copied from libssp).
+if LIBGFOR_USE_SYMVER
+version_arg = -Wl,--version-script=$(srcdir)/gfortran.map
+else
+version_arg =
+endif
+
 toolexeclib_LTLIBRARIES = libgfortran.la
-libgfortran_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` -lm $(extra_ldflags_libgfortran)
+libgfortran_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` -lm $(extra_ldflags_libgfortran) $(version_arg)
 
 myexeclib_LTLIBRARIES = libgfortranbegin.la
 myexeclibdir = $(libdir)/gcc/$(target_alias)/$(gcc_version)$(MULTISUBDIR)
@@ -603,6 +610,10 @@ $(patsubst %.c,%.lo,$(notdir $(i_matmul_
 # Logical matmul doesn't vectorize.
 $(patsubst %.c,%.lo,$(notdir $(i_matmull_c))): AM_CFLAGS += -funroll-loops
 
+# Add the -fallow-leading-underscore option when needed
+$(patsubst %.F90,%.lo,$(patsubst %.f90,%.lo,$(notdir $(gfor_specific_src)))): AM_FCFLAGS += -fallow-leading-underscore
+selected_real_kind.lo selected_int_kind.lo: AM_FCFLAGS += -fallow-leading-underscore
+
 BUILT_SOURCES=$(gfor_built_src) $(gfor_built_specific_src) \
     $(gfor_built_specific2_src) $(gfor_misc_specifics)
 libgfortran_la_SOURCES = $(gfor_src) $(gfor_built_src) $(gfor_io_src) \
Index: libgfortran/libtool-version
===================================================================
--- libgfortran/libtool-version	(revision 118476)
+++ libgfortran/libtool-version	(working copy)
@@ -3,4 +3,4 @@
 # This is a separate file so that version updates don't involve re-running
 # automake.
 # CURRENT:REVISION:AGE
-2:0:0
+3:0:0
Index: libgfortran/m4/misc_specifics.m4
===================================================================
--- libgfortran/m4/misc_specifics.m4	(revision 118476)
+++ libgfortran/m4/misc_specifics.m4	(working copy)
@@ -22,10 +22,10 @@ divert
 dnl   NINT specifics
 foreach(`ikind', `(4, 8, 16)', `foreach(`rkind', `(4, 8, 10, 16)', `
 `#if defined (HAVE_GFC_REAL_'rkind`) && defined (HAVE_GFC_INTEGER_'ikind`)'
-elemental function specific__nint_`'ikind`_'rkind (parm)
+elemental function _gfortran_specific__nint_`'ikind`_'rkind (parm)
    real (kind=rkind) , intent (in) :: parm
-   integer (kind=ikind) :: specific__nint_`'ikind`_'rkind
-   specific__nint_`'ikind`_'rkind = nint (parm)
+   integer (kind=ikind) :: _gfortran_specific__nint_`'ikind`_'rkind
+   _gfortran_specific__nint_`'ikind`_'rkind = nint (parm)
 end function
 #endif
 ')')
@@ -33,10 +33,10 @@ end function
 dnl   CHAR specifics
 foreach(`ckind', `(1)', `foreach(`ikind', `(4, 8, 16)', `
 `#if defined (HAVE_GFC_INTEGER_'ikind`)'
-elemental function specific__char_`'ckind`_i'ikind (parm)
+elemental function _gfortran_specific__char_`'ckind`_i'ikind (parm)
    integer (kind=ikind) , intent (in) :: parm
-   character (kind=ckind,len=1) :: specific__char_`'ckind`_i'ikind
-   specific__char_`'ckind`_i'ikind` = char (parm, kind='ckind`)'
+   character (kind=ckind,len=1) :: _gfortran_specific__char_`'ckind`_i'ikind
+   _gfortran_specific__char_`'ckind`_i'ikind` = char (parm, kind='ckind`)'
 end function
 #endif
 ')')
@@ -44,10 +44,10 @@ end function
 dnl   LEN specifics
 foreach(`ckind', `(1)', `foreach(`ikind', `(4, 8, 16)', `
 `#if defined (HAVE_GFC_INTEGER_'ikind`)'
-elemental function specific__len_`'ckind`_i'ikind (parm)
+elemental function _gfortran_specific__len_`'ckind`_i'ikind (parm)
    character (kind=ckind,len=*) , intent (in) :: parm
-   integer (kind=ikind) :: specific__len_`'ckind`_i'ikind
-   specific__len_`'ckind`_i'ikind` = len (parm)'
+   integer (kind=ikind) :: _gfortran_specific__len_`'ckind`_i'ikind
+   _gfortran_specific__len_`'ckind`_i'ikind` = len (parm)'
 end function
 #endif
 ')')
@@ -55,10 +55,10 @@ end function
 dnl   INDEX specifics
 foreach(`ckind', `(1)', `foreach(`ikind', `(4, 8, 16)', `
 `#if defined (HAVE_GFC_INTEGER_'ikind`)'
-elemental function specific__index_`'ckind`_i'ikind (parm1, parm2)
+elemental function _gfortran_specific__index_`'ckind`_i'ikind (parm1, parm2)
    character (kind=ckind,len=*) , intent (in) :: parm1, parm2
-   integer (kind=ikind) :: specific__index_`'ckind`_i'ikind
-   specific__index_`'ckind`_i'ikind` = index (parm1, parm2)'
+   integer (kind=ikind) :: _gfortran_specific__index_`'ckind`_i'ikind
+   _gfortran_specific__index_`'ckind`_i'ikind` = index (parm1, parm2)'
 end function
 #endif
 ')')
Index: libgfortran/m4/specific2.m4
===================================================================
--- libgfortran/m4/specific2.m4	(revision 118476)
+++ libgfortran/m4/specific2.m4	(working copy)
@@ -6,7 +6,7 @@ define(get_typename2, `$1 (kind=$2)')dnl
 define(get_typename, `get_typename2(ifelse($1,i,integer,ifelse($1,r,real,ifelse($1,l,logical,ifelse($1,c,complex,unknown)))),`$2')')dnl
 define(atype_name, get_typename(atype_letter,atype_kind))dnl
 define(name, regexp(regexp(file, `[^/]*$', `\&'), `^_\([^_]*\)_', `\1'))dnl
-define(function_name,`specific__'name`_'atype_code)dnl
+define(function_name,`_gfortran_specific__'name`_'atype_code)dnl
 
 define(Q,ifelse(atype_kind,4,F,ifelse(atype_kind,8,`',ifelse(atype_kind,10,L,ifelse(atype_kind,16,L,`_'atype_kind)))))dnl
 
Index: libgfortran/m4/specific.m4
===================================================================
--- libgfortran/m4/specific.m4	(revision 118476)
+++ libgfortran/m4/specific.m4	(working copy)
@@ -7,7 +7,7 @@ define(get_typename, `get_typename2(ifel
 define(atype_name, get_typename(atype_letter,atype_kind))dnl
 define(name, regexp(regexp(file, `[^/]*$', `\&'), `^_\([^_]*\)_', `\1'))dnl
 define(rtype_name,get_typename(ifelse(name,abs,ifelse(atype_letter,c,r,atype_letter),ifelse(name,aimag,ifelse(atype_letter,c,r,atype_letter),atype_letter)),atype_kind))dnl
-define(function_name,ifelse(name,conjg,`specific__conjg_'atype_kind,`specific__'name`_'atype_code))dnl
+define(function_name,ifelse(name,conjg,`_gfortran_specific__conjg_'atype_kind,`_gfortran_specific__'name`_'atype_code))dnl
 
 define(type,ifelse(atype_letter,l,LOGICAL,ifelse(atype_letter,i,INTEGER,ifelse(atype_letter,r,REAL,ifelse(atype_letter,c,COMPLEX,UNKNOW)))))dnl
 define(Q,ifelse(atype_kind,4,F,ifelse(atype_kind,8,`',ifelse(atype_kind,10,L,ifelse(atype_kind,16,L,`_'atype_kind)))))dnl
Index: libgfortran/intrinsics/selected_int_kind.f90
===================================================================
--- libgfortran/intrinsics/selected_int_kind.f90	(revision 118476)
+++ libgfortran/intrinsics/selected_int_kind.f90	(working copy)
@@ -19,10 +19,10 @@
 !Boston, MA 02110-1301, USA.
 !
 
-function selected_int_kind (r)
+function _gfortran_selected_int_kind (r)
   implicit none
   integer, intent (in) :: r
-  integer :: selected_int_kind
+  integer :: _gfortran_selected_int_kind
   integer :: i
   ! Integer kind_range table
   type :: int_info
@@ -34,10 +34,10 @@ function selected_int_kind (r)
 
   do i = 1, c
     if (r <= int_infos (i) % range) then
-      selected_int_kind = int_infos (i) % kind
+      _gfortran_selected_int_kind = int_infos (i) % kind
       return
     end if
   end do
-  selected_int_kind = -1
+  _gfortran_selected_int_kind = -1
   return
 end function
Index: libgfortran/intrinsics/selected_real_kind.f90
===================================================================
--- libgfortran/intrinsics/selected_real_kind.f90	(revision 118476)
+++ libgfortran/intrinsics/selected_real_kind.f90	(working copy)
@@ -19,10 +19,10 @@
 !Boston, MA 02110-1301, USA.
 !
 
-function selected_real_kind (p, r)
+function _gfortran_selected_real_kind (p, r)
   implicit none
   integer, optional, intent (in) :: p, r
-  integer :: selected_real_kind
+  integer :: _gfortran_selected_real_kind
   integer :: i, p2, r2
   logical :: found_p, found_r
   ! Real kind_precision_range table
@@ -34,7 +34,7 @@ function selected_real_kind (p, r)
 
   include "selected_real_kind.inc"
 
-  selected_real_kind = 0
+  _gfortran_selected_real_kind = 0
   p2 = 0
   r2 = 0
   found_p = .false.
@@ -49,13 +49,13 @@ function selected_real_kind (p, r)
     if (p2 <= real_infos (i) % precision) found_p = .true.
     if (r2 <= real_infos (i) % range) found_r = .true.
     if (found_p .and. found_r) then
-      selected_real_kind = real_infos (i) % kind
+      _gfortran_selected_real_kind = real_infos (i) % kind
       return
     end if
   end do
 
-  if (.not. (found_p)) selected_real_kind = selected_real_kind - 1
-  if (.not. (found_r)) selected_real_kind = selected_real_kind - 2
+  if (.not. (found_p)) _gfortran_selected_real_kind = _gfortran_selected_real_kind - 1
+  if (.not. (found_r)) _gfortran_selected_real_kind = _gfortran_selected_real_kind - 2
 
   return
 end function
Index: libgfortran/intrinsics/f2c_specifics.F90
===================================================================
--- libgfortran/intrinsics/f2c_specifics.F90	(revision 118476)
+++ libgfortran/intrinsics/f2c_specifics.F90	(working copy)
@@ -41,7 +41,7 @@
 
 ! one argument functions
 #define REAL_HEAD(NAME) \
-elemental function f2c_specific__/**/NAME/**/_r4 (parm) result(res);
+elemental function _gfortran_f2c_specific__/**/NAME/**/_r4 (parm) result(res);
 
 #define REAL_BODY(NAME) \
   REAL, intent (in) :: parm; \
@@ -50,7 +50,7 @@ elemental function f2c_specific__/**/NAM
 end function
 
 #define COMPLEX_HEAD(NAME) \
-subroutine f2c_specific__/**/NAME/**/_c4 (res, parm);
+subroutine _gfortran_f2c_specific__/**/NAME/**/_c4 (res, parm);
 
 #define COMPLEX_BODY(NAME) \
   COMPLEX, intent (in) :: parm; \
@@ -59,7 +59,7 @@ subroutine f2c_specific__/**/NAME/**/_c4
 end subroutine
 
 #define DCOMPLEX_HEAD(NAME) \
-subroutine f2c_specific__/**/NAME/**/_c8 (res, parm);
+subroutine _gfortran_f2c_specific__/**/NAME/**/_c8 (res, parm);
 
 #define DCOMPLEX_BODY(NAME) \
   DOUBLE COMPLEX, intent (in) :: parm; \
@@ -71,7 +71,7 @@ REAL_HEAD(abs)
 REAL_BODY(abs)
 
 ! abs is special in that the result is real
-elemental function f2c_specific__abs_c4 (parm) result (res)
+elemental function _gfortran_f2c_specific__abs_c4 (parm) result (res)
   COMPLEX, intent(in) :: parm
   DOUBLE PRECISION :: res
   res = abs(parm)
@@ -79,16 +79,16 @@ end function
 
 
 ! aimag is special in that the result is real
-elemental function f2c_specific__aimag_c4 (parm)
+elemental function _gfortran_f2c_specific__aimag_c4 (parm)
   complex(kind=4), intent(in) :: parm
-  double precision :: f2c_specific__aimag_c4
-  f2c_specific__aimag_c4 = aimag(parm)
+  double precision :: _gfortran_f2c_specific__aimag_c4
+  _gfortran_f2c_specific__aimag_c4 = aimag(parm)
 end function
 
-elemental function f2c_specific__aimag_c8 (parm)
+elemental function _gfortran_f2c_specific__aimag_c8 (parm)
   complex(kind=8), intent(in) :: parm
-  double precision :: f2c_specific__aimag_c8
-  f2c_specific__aimag_c8 = aimag(parm)
+  double precision :: _gfortran_f2c_specific__aimag_c8
+  _gfortran_f2c_specific__aimag_c8 = aimag(parm)
 end function
 
 
@@ -168,7 +168,7 @@ REAL_BODY(anint)
 
 ! two argument functions
 #define REAL2_HEAD(NAME) \
-elemental function f2c_specific__/**/NAME/**/_r4 (p1, p2) result(res);
+elemental function _gfortran_f2c_specific__/**/NAME/**/_r4 (p1, p2) result(res);
 
 #define REAL2_BODY(NAME) \
   REAL, intent (in) :: p1, p2; \
@@ -189,12 +189,12 @@ REAL2_HEAD(mod)
 REAL2_BODY(mod)
 
 ! conjg is special-cased because it is not suffixed _c4 but _4
-subroutine f2c_specific__conjg_4 (res, parm)
+subroutine _gfortran_f2c_specific__conjg_4 (res, parm)
   COMPLEX, intent (in) :: parm
   COMPLEX, intent (out) :: res
   res = conjg (parm)
 end subroutine
-subroutine f2c_specific__conjg_8 (res, parm)
+subroutine _gfortran_f2c_specific__conjg_8 (res, parm)
   DOUBLE COMPLEX, intent (in) :: parm
   DOUBLE COMPLEX, intent (out) :: res
   res = conjg (parm)
Index: libgfortran/intrinsics/dprod_r8.f90
===================================================================
--- libgfortran/intrinsics/dprod_r8.f90	(revision 118476)
+++ libgfortran/intrinsics/dprod_r8.f90	(working copy)
@@ -19,9 +19,9 @@
 !Boston, MA 02110-1301, USA.
 
 
-elemental function specific__dprod_r8 (p1, p2)
+elemental function _gfortran_specific__dprod_r8 (p1, p2)
    real (kind=4), intent (in) :: p1, p2
-   real (kind=8) :: specific__dprod_r8
+   real (kind=8) :: _gfortran_specific__dprod_r8
 
-   specific__dprod_r8 = dprod (p1, p2)
+   _gfortran_specific__dprod_r8 = dprod (p1, p2)
 end function

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]