# Copyright (C) 2002-2023 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.

# Note that we cannot use the default libgcc-glibc.ver file on sh,
# because GLIBC_2.0 does not exist on this architecture, as the first 
# ever glibc release on the platform was GLIBC_2.2.

%exclude {
  __register_frame
  __register_frame_table
  __deregister_frame
  __register_frame_info
  __deregister_frame_info
  __frame_state_for
  __register_frame_info_table
}

%inherit GCC_3.0 GLIBC_2.2
GLIBC_2.2 {
  __register_frame
  __register_frame_table
  __deregister_frame
  __register_frame_info
  __deregister_frame_info
  __frame_state_for
  __register_frame_info_table
}
