(root)/
gcc-13.2.0/
libstdc++-v3/
config/
os/
hpux/
os_defines.h
       1  // Specific definitions for HPUX  -*- C++ -*-
       2  
       3  // Copyright (C) 2000-2023 Free Software Foundation, Inc.
       4  //
       5  // This file is part of the GNU ISO C++ Library.  This library is free
       6  // software; you can redistribute it and/or modify it under the
       7  // terms of the GNU General Public License as published by the
       8  // Free Software Foundation; either version 3, or (at your option)
       9  // any later version.
      10  
      11  // This library is distributed in the hope that it will be useful,
      12  // but WITHOUT ANY WARRANTY; without even the implied warranty of
      13  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      14  // GNU General Public License for more details.
      15  
      16  // Under Section 7 of GPL version 3, you are granted additional
      17  // permissions described in the GCC Runtime Library Exception, version
      18  // 3.1, as published by the Free Software Foundation.
      19  
      20  // You should have received a copy of the GNU General Public License and
      21  // a copy of the GCC Runtime Library Exception along with this program;
      22  // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
      23  // <http://www.gnu.org/licenses/>.
      24  
      25  /** @file bits/os_defines.h
      26   *  This is an internal header file, included by other library headers.
      27   *  Do not attempt to use it directly. @headername{iosfwd}
      28   */
      29  
      30  #ifndef _GLIBCXX_OS_DEFINES
      31  #define _GLIBCXX_OS_DEFINES 1
      32  
      33  // System-specific #define, typedefs, corrections, etc, go here.  This
      34  // file will come before all others.
      35  
      36  // Use macro form of ctype functions to ensure __SB_masks is defined.
      37  #define _SB_CTYPE_MACROS 1
      38  
      39  /* HP-UX, for reasons unknown choose to use a different name for
      40     the string to [unsigned] long long conversion routines.
      41  
      42     Furthermore, instead of having the prototypes in stdlib.h like
      43     everyone else, they put them into a non-standard header
      44     <inttypes.h>.  Ugh.
      45  
      46     <inttypes.h> defines a variety of things, some of which we
      47     probably do not want.  So we don't want to include it here.
      48  
      49     Luckily we can just declare strtoll and strtoull with the
      50     __asm extension which effectively renames calls at the
      51     source level without namespace pollution.
      52  
      53     Also note that the compiler defines _INCLUDE_LONGLONG for C++
      54     unconditionally, which makes intmax_t and uintmax_t long long
      55     types.
      56  
      57     We also force _GLIBCXX_USE_LONG_LONG here so that we don't have
      58     to bastardize configure to deal with this sillyness.  */
      59  
      60  #ifdef __cplusplus
      61  namespace std
      62  {
      63    extern "C"
      64    {
      65  #ifndef __LP64__
      66    __extension__ long long strtoll (const char *, char **, int)
      67      __asm  ("__strtoll");
      68    __extension__ unsigned long long strtoull (const char *, char **, int)
      69      __asm  ("__strtoull");
      70  #else
      71    __extension__ long long strtoll (const char *, char **, int)
      72      __asm  ("strtol");
      73    __extension__ unsigned long long strtoull (const char *, char **, int)
      74      __asm  ("strtoul");
      75  #endif
      76    }
      77  } // namespace std
      78  #endif // __cplusplus
      79  
      80  #define _GLIBCXX_USE_LONG_LONG 1
      81  
      82  // HPUX on IA64 requires vtable to be 64 bit aligned even at 32 bit
      83  // mode.  We need to pad the vtable structure to achieve this.
      84  #if !defined(_LP64) && defined (__ia64__)
      85  #define _GLIBCXX_VTABLE_PADDING 8
      86  typedef long int __padding_type;
      87  #endif
      88  
      89  // GCC on IA64 HP-UX uses the HP-UX system unwind library,
      90  // it does not have the _Unwind_Resume_or_Rethrow entry point
      91  // because that is not part of the standard IA64 Unwind ABI.
      92  #if defined (__ia64__)
      93  #define _LIBUNWIND_STD_ABI 1
      94  #endif
      95  
      96  /* Don't use pragma weak in gthread headers.  HP-UX rejects programs
      97     with unsatisfied external references even if all of those references
      98     are weak; gthread relies on such unsatisfied references being resolved
      99     to null pointers when weak symbol support is on.  */
     100  #define _GLIBCXX_GTHREAD_USE_WEAK 0
     101  
     102  // No support for referencing weak symbols without a definition.
     103  #define _GLIBCXX_USE_WEAK_REF 0
     104  
     105  // The strtold function is obsolete and not C99 conformant on PA HP-UX.
     106  // It returns plus or minus _LDBL_MAX instead of plus or minus HUGE_VALL
     107  // if the correct value would cause overflow.  It doesn't handle "inf",
     108  // "infinity" and "nan".  It is not thread safe.
     109  #if defined (__hppa__)
     110  #define _GLIBCXX_HAVE_BROKEN_STRTOLD 1
     111  #endif
     112  
     113  // The vnsprintf function returns -1 when the buffer is too small.
     114  // See PR libstdc++/68737.
     115  #define _GLIBCXX_HAVE_BROKEN_VSNPRINTF 1
     116  
     117  #endif