# Copyright (C) 2002-2021 Free Software Foundation, Inc.
#
# This file is part of GCC.
#
# GCC is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3, or (at your option)
# any later version.
#
# GCC is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GCC; see the file COPYING3.  If not see
# <http://www.gnu.org/licenses/>.

# In order to work around the very problems that force us to now generally
# create a libgcc.so, glibc reexported a number of routines from libgcc.a.
# By now choosing the same version tags for these specific routines, we
# maintain enough binary compatibility to allow future versions of glibc
# to defer implementation of these routines to libgcc.so via DT_AUXILIARY.

%exclude {
  __divdi3
  __moddi3
  __udivdi3
  __umoddi3
  __register_frame
  __register_frame_table
  __deregister_frame
  __register_frame_info
  __deregister_frame_info
  __frame_state_for
  __register_frame_info_table
}

%ifdef __arch64__
%define GLIBC_VER GLIBC_2.2
%else
%define GLIBC_VER GLIBC_2.0
%endif
%inherit GCC_3.0 GLIBC_VER
GLIBC_VER {
  # Sampling of DImode arithmetic used by (at least) i386 and m68k.
  __divdi3
  __moddi3
  __udivdi3
  __umoddi3

  # Exception handling support functions used by most everyone.
  __register_frame
  __register_frame_table
  __deregister_frame
  __register_frame_info
  __deregister_frame_info
  __frame_state_for
  __register_frame_info_table
}

%if !defined (__arch64__) && defined (__LONG_DOUBLE_128__)

# long double 128 bit support from 32-bit libgcc_s.so.1 is only available
# when configured with --with-long-double-128.  Make sure all the
# symbols are available at @@GCC_LDBL_* versions to make it clear
# there is a configurable symbol set.

%exclude {
  __fixtfdi
  __fixunstfdi
  __floatditf

  __divtc3
  __multc3
  __powitf2
}

%inherit GCC_LDBL_3.0 GCC_3.0
GCC_LDBL_3.0 {
  __fixtfdi
  __fixunstfdi
  __floatditf
}

%inherit GCC_LDBL_4.0.0 GCC_4.0.0
GCC_LDBL_4.0.0 {
  __divtc3
  __multc3
  __powitf2
}

%endif
