# Exclude libgcc.so symbols for the Synopsys DesignWare ARC CPU.

# Copyright (C) 2007-2021 Free Software Foundation, Inc.
# Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
#              on behalf of Synopsys 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.

# Under Section 7 of GPL version 3, you are granted additional
# permissions described in the GCC Runtime Library Exception, version
# 3.1, as published by the Free Software Foundation.

# You should have received a copy of the GNU General Public License and
# a copy of the GCC Runtime Library Exception along with this program;
# see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
# <http://www.gnu.org/licenses/>.  */

# Exclude various symbols which should not be visible in libgcc.so for ARC.
# Floating point comparisons use a special lightweight ABI which is not
# compatible with calls via a plt.  Moreover, the code is so compact that
# it is better to include a separate copy in each dso.
%exclude {
  __eqsf2
  __eqdf2
  __gtsf2
  __gtdf2
  __gesf2
  __gedf2
  __uneqsf2
  __uneqdf2
  __ordsf2
  __orddf2
}
