Skip to content

Commit

Permalink
Merge pull request #35173 from am11/feature/solaris/coreclr-port-with…
Browse files Browse the repository at this point in the history
…out-libunwind-changes

Port CoreCLR to SunOS
  • Loading branch information
janvorli authored Apr 22, 2020
2 parents cf1668d + c4bc754 commit 84ec25f
Show file tree
Hide file tree
Showing 42 changed files with 290 additions and 75 deletions.
16 changes: 6 additions & 10 deletions eng/native/configurecompiler.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -183,10 +183,10 @@ elseif(CLR_CMAKE_HOST_FREEBSD)
add_compile_options($<$<COMPILE_LANGUAGE:ASM>:-Wa,--noexecstack>)
add_link_options(LINKER:--build-id=sha1)
elseif(CLR_CMAKE_HOST_SUNOS)
set(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} /opt/local/include)
set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} /opt/local/lib)
add_compile_options($<$<COMPILE_LANGUAGE:ASM>:-Wa,--noexecstack>)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstack-protector")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector")
add_definitions(-D__EXTENSIONS__)
endif()

#------------------------------------
Expand Down Expand Up @@ -367,17 +367,13 @@ if(CLR_CMAKE_TARGET_UNIX)
add_definitions(-DDISABLE_CONTRACTS)
if(CLR_CMAKE_TARGET_OSX)
add_definitions(-DTARGET_OSX)
endif(CLR_CMAKE_TARGET_OSX)
if(CLR_CMAKE_TARGET_FREEBSD)
elseif(CLR_CMAKE_TARGET_FREEBSD)
add_definitions(-DTARGET_FREEBSD)
endif(CLR_CMAKE_TARGET_FREEBSD)
if(CLR_CMAKE_TARGET_LINUX)
elseif(CLR_CMAKE_TARGET_LINUX)
add_definitions(-DTARGET_LINUX)
endif(CLR_CMAKE_TARGET_LINUX)
if(CLR_CMAKE_TARGET_NETBSD)
elseif(CLR_CMAKE_TARGET_NETBSD)
add_definitions(-DTARGET_NETBSD)
endif(CLR_CMAKE_TARGET_NETBSD)
if(CLR_CMAKE_TARGET_ANDROID)
elseif(CLR_CMAKE_TARGET_ANDROID)
add_definitions(-DTARGET_ANDROID)
endif()
else(CLR_CMAKE_TARGET_UNIX)
Expand Down
4 changes: 2 additions & 2 deletions src/coreclr/src/debug/daccess/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ target_precompile_header(TARGET daccess HEADER stdafx.h)

add_dependencies(daccess eventing_headers)

if(CLR_CMAKE_HOST_OSX OR CLR_CMAKE_HOST_FREEBSD OR CLR_CMAKE_HOST_NETBSD)
if(CLR_CMAKE_HOST_OSX OR CLR_CMAKE_HOST_FREEBSD OR CLR_CMAKE_HOST_NETBSD OR CLR_CMAKE_HOST_SUNOS)
add_definitions(-DUSE_DAC_TABLE_RVA)

add_custom_command(
Expand All @@ -63,4 +63,4 @@ if(CLR_CMAKE_HOST_OSX OR CLR_CMAKE_HOST_FREEBSD OR CLR_CMAKE_HOST_NETBSD)
)

add_dependencies(daccess dactablerva_header)
endif(CLR_CMAKE_HOST_OSX OR CLR_CMAKE_HOST_FREEBSD OR CLR_CMAKE_HOST_NETBSD)
endif(CLR_CMAKE_HOST_OSX OR CLR_CMAKE_HOST_FREEBSD OR CLR_CMAKE_HOST_NETBSD OR CLR_CMAKE_HOST_SUNOS)
5 changes: 5 additions & 0 deletions src/coreclr/src/dlls/dbgshim/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,11 @@ if(CLR_CMAKE_HOST_OSX)
set(EXPORTS_LINKER_OPTION -Wl,-exported_symbols_list,${EXPORTS_FILE})
endif(CLR_CMAKE_HOST_OSX)

if(CLR_CMAKE_HOST_SUNOS)
# Add linker exports file option
set(EXPORTS_LINKER_OPTION -Wl,-M,${EXPORTS_FILE})
endif(CLR_CMAKE_HOST_SUNOS)

add_library_clr(dbgshim SHARED ${DBGSHIM_SOURCES})

if(CLR_CMAKE_HOST_UNIX)
Expand Down
9 changes: 7 additions & 2 deletions src/coreclr/src/dlls/mscordac/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,9 @@ else(CLR_CMAKE_HOST_WIN32)
# Add dependency on export file
add_custom_target(mscordaccore_exports DEPENDS ${EXPORTS_FILE})

if(CLR_CMAKE_HOST_OSX OR CLR_CMAKE_HOST_FREEBSD OR CLR_CMAKE_HOST_NETBSD)
if(CLR_CMAKE_HOST_OSX OR CLR_CMAKE_HOST_FREEBSD OR CLR_CMAKE_HOST_NETBSD OR CLR_CMAKE_HOST_SUNOS)
generate_exports_file(${DEF_SOURCES} ${EXPORTS_FILE})
endif(CLR_CMAKE_HOST_OSX OR CLR_CMAKE_HOST_FREEBSD OR CLR_CMAKE_HOST_NETBSD)
endif(CLR_CMAKE_HOST_OSX OR CLR_CMAKE_HOST_FREEBSD OR CLR_CMAKE_HOST_NETBSD OR CLR_CMAKE_HOST_SUNOS)

if(CLR_CMAKE_HOST_LINUX)

Expand Down Expand Up @@ -96,6 +96,11 @@ if(CLR_CMAKE_HOST_OSX)
set(EXPORTS_LINKER_OPTION -Wl,-exported_symbols_list,${EXPORTS_FILE})
endif(CLR_CMAKE_HOST_OSX)

if(CLR_CMAKE_HOST_SUNOS)
# Add linker exports file option
set(EXPORTS_LINKER_OPTION -Wl,-M,${EXPORTS_FILE})
endif(CLR_CMAKE_HOST_SUNOS)

# Create object library to enable creation of proper dependency of mscordaccore.exp on mscordac.obj and
# mscordaccore on both the mscordaccore.exp and mscordac.obj.
_add_library(mscordacobj OBJECT mscordac.cpp)
Expand Down
5 changes: 5 additions & 0 deletions src/coreclr/src/dlls/mscordbi/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,11 @@ if(CLR_CMAKE_HOST_OSX)
set(EXPORTS_LINKER_OPTION -Wl,-exported_symbols_list,${EXPORTS_FILE})
endif(CLR_CMAKE_HOST_OSX)

if(CLR_CMAKE_HOST_SUNOS)
# Add linker exports file option
set(EXPORTS_LINKER_OPTION -Wl,-M,${EXPORTS_FILE})
endif(CLR_CMAKE_HOST_SUNOS)

add_library_clr(mscordbi SHARED ${MSCORDBI_SOURCES})
target_precompile_header(TARGET mscordbi HEADER stdafx.h)

Expand Down
7 changes: 6 additions & 1 deletion src/coreclr/src/dlls/mscoree/coreclr/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,12 @@ else(CLR_CMAKE_HOST_WIN32)

if(CLR_CMAKE_TARGET_ANDROID AND CLR_CMAKE_HOST_ARCH_ARM)
set(EXPORTS_LINKER_OPTION "${EXPORTS_LINKER_OPTION} -Wl,--no-warn-shared-textrel")
endif()
endif(CLR_CMAKE_TARGET_ANDROID AND CLR_CMAKE_HOST_ARCH_ARM)

if(CLR_CMAKE_HOST_SUNOS)
# Add linker exports file option
set(EXPORTS_LINKER_OPTION -Wl,-M,${EXPORTS_FILE})
endif(CLR_CMAKE_HOST_SUNOS)

endif (CLR_CMAKE_HOST_WIN32)

Expand Down
3 changes: 3 additions & 0 deletions src/coreclr/src/gc/env/gcenv.base.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@
#endif // _MSC_VER

#if !defined(_MSC_VER)
#ifdef __sun
#include <alloca.h>
#endif
#define _alloca alloca
#endif //_MSC_VER

Expand Down
5 changes: 5 additions & 0 deletions src/coreclr/src/gc/unix/cgroup.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,10 @@ class CGroup
// modes because both of those involve cgroup v1 controllers managing
// resources.

#if !HAVE_NON_LEGACY_STATFS
return 0;
#else

struct statfs stats;
int result = statfs("/sys/fs/cgroup", &stats);
if (result != 0)
Expand All @@ -145,6 +149,7 @@ class CGroup
assert(!"Unexpected file system type for /sys/fs/cgroup");
return 0;
}
#endif
}

static bool IsCGroup1MemorySubsystem(const char *strTok){
Expand Down
1 change: 1 addition & 0 deletions src/coreclr/src/gc/unix/config.gc.h.in
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
#cmakedefine01 HAVE_SCHED_GETCPU
#cmakedefine01 HAVE_NUMA_H
#cmakedefine01 HAVE_VM_ALLOCATE
#cmakedefine01 HAVE_SWAPCTL
#cmakedefine01 HAVE_SYSCTLBYNAME
#cmakedefine01 HAVE_PTHREAD_CONDATTR_SETCLOCK
#cmakedefine01 HAVE_MACH_ABSOLUTE_TIME
Expand Down
1 change: 1 addition & 0 deletions src/coreclr/src/gc/unix/configure.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@ check_library_exists(${PTHREAD_LIBRARY} pthread_getaffinity_np "" HAVE_PTHREAD_G

check_cxx_symbol_exists(_SC_PHYS_PAGES unistd.h HAVE__SC_PHYS_PAGES)
check_cxx_symbol_exists(_SC_AVPHYS_PAGES unistd.h HAVE__SC_AVPHYS_PAGES)
check_cxx_symbol_exists(swapctl sys/swap.h HAVE_SWAPCTL)
check_function_exists(sysctl HAVE_SYSCTL)
check_function_exists(sysinfo HAVE_SYSINFO)
check_function_exists(sysconf HAVE_SYSCONF)
Expand Down
13 changes: 12 additions & 1 deletion src/coreclr/src/gc/unix/gcenv.unix.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@
#include "gcenv.unix.inl"
#include "volatile.h"

#if HAVE_SWAPCTL
#include <sys/swap.h>
#endif

#undef min
#undef max

Expand Down Expand Up @@ -731,7 +735,7 @@ bool GCToOSInterface::VirtualReset(void * address, size_t size, bool unlock)
#endif
{
// In case the MADV_FREE is not supported, use MADV_DONTNEED
st = madvise(address, size, MADV_DONTNEED);
st = posix_madvise(address, size, MADV_DONTNEED);
}

return (st == 0);
Expand Down Expand Up @@ -1112,6 +1116,13 @@ uint64_t GetAvailablePageFile()
available += avail * pagesize;
}
}
#elif HAVE_SWAPCTL
struct anoninfo ai;
if (swapctl(SC_AINFO, &ai) != -1)
{
int pagesize = getpagesize();
available = ai.ani_free * pagesize;
}
#elif HAVE_SYSINFO
// Linux
struct sysinfo info;
Expand Down
1 change: 1 addition & 0 deletions src/coreclr/src/hosts/unixcoreruncommon/config.h.in
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,6 @@
#define __CONFIG_H__

#cmakedefine01 HAVE_GETAUXVAL
#cmakedefine01 HAVE_DIRENT_D_TYPE

#endif // __CONFIG_H__
1 change: 1 addition & 0 deletions src/coreclr/src/hosts/unixcoreruncommon/configure.cmake
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
check_symbol_exists(getauxval sys/auxv.h HAVE_GETAUXVAL)
check_struct_has_member ("struct dirent" d_type dirent.h HAVE_DIRENT_D_TYPE)

configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/config.h.in
Expand Down
15 changes: 14 additions & 1 deletion src/coreclr/src/hosts/unixcoreruncommon/coreruncommon.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,13 @@
#define SUCCEEDED(Status) ((Status) >= 0)
#endif // !SUCCEEDED

#if !HAVE_DIRENT_D_TYPE
#define DT_UNKNOWN 0
#define DT_DIR 4
#define DT_REG 8
#define DT_LNK 10
#endif

// Name of the environment variable controlling server GC.
// If set to 1, server GC is enabled on startup. If 0, server GC is
// disabled. Server GC is off by default.
Expand Down Expand Up @@ -216,8 +223,14 @@ void AddFilesFromDirectoryToTpaList(const char* directory, std::string& tpaList)
// For all entries in the directory
while ((entry = readdir(dir)) != nullptr)
{
#if HAVE_DIRENT_D_TYPE
int dirEntryType = entry->d_type;
#else
int dirEntryType = DT_UNKNOWN;
#endif

// We are interested in files only
switch (entry->d_type)
switch (dirEntryType)
{
case DT_REG:
break;
Expand Down
5 changes: 2 additions & 3 deletions src/coreclr/src/ilasm/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ if(CLR_CMAKE_HOST_UNIX)
set_source_files_properties( prebuilt/asmparse.cpp PROPERTIES COMPILE_FLAGS "-O0" )
endif(CLR_CMAKE_HOST_UNIX)

if(CLR_CMAKE_HOST_LINUX OR CLR_CMAKE_HOST_FREEBSD OR CLR_CMAKE_HOST_NETBSD)
if(CLR_CMAKE_HOST_LINUX OR CLR_CMAKE_HOST_FREEBSD OR CLR_CMAKE_HOST_NETBSD OR CLR_CMAKE_HOST_SUNOS)
# This option is necessary to ensure that the overloaded delete operator defined inside
# of the utilcode will be used instead of the standard library delete operator.
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Xlinker -Bsymbolic")
Expand All @@ -61,8 +61,7 @@ if(CLR_CMAKE_HOST_LINUX OR CLR_CMAKE_HOST_FREEBSD OR CLR_CMAKE_HOST_NETBSD)
# ensure proper resolving of circular references between a subset of the libraries.
set(START_LIBRARY_GROUP -Wl,--start-group)
set(END_LIBRARY_GROUP -Wl,--end-group)
endif(CLR_CMAKE_HOST_LINUX OR CLR_CMAKE_HOST_FREEBSD OR CLR_CMAKE_HOST_NETBSD)

endif(CLR_CMAKE_HOST_LINUX OR CLR_CMAKE_HOST_FREEBSD OR CLR_CMAKE_HOST_NETBSD OR CLR_CMAKE_HOST_SUNOS)

_add_executable(ilasm
${ILASM_SOURCES}
Expand Down
4 changes: 2 additions & 2 deletions src/coreclr/src/ildasm/exe/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ if (CLR_CMAKE_TARGET_WIN32)
list(APPEND ILDASM_SOURCES ${ILDASM_HEADERS})
endif(CLR_CMAKE_TARGET_WIN32)

if(CLR_CMAKE_HOST_LINUX OR CLR_CMAKE_HOST_FREEBSD OR CLR_CMAKE_HOST_NETBSD)
if(CLR_CMAKE_HOST_LINUX OR CLR_CMAKE_HOST_FREEBSD OR CLR_CMAKE_HOST_NETBSD OR CLR_CMAKE_HOST_SUNOS)
# This option is necessary to ensure that the overloaded delete operator defined inside
# of the utilcode will be used instead of the standard library delete operator.
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Xlinker -Bsymbolic")
Expand All @@ -56,7 +56,7 @@ if(CLR_CMAKE_HOST_LINUX OR CLR_CMAKE_HOST_FREEBSD OR CLR_CMAKE_HOST_NETBSD)
# ensure proper resolving of circular references between a subset of the libraries.
set(START_LIBRARY_GROUP -Wl,--start-group)
set(END_LIBRARY_GROUP -Wl,--end-group)
endif(CLR_CMAKE_HOST_LINUX OR CLR_CMAKE_HOST_FREEBSD OR CLR_CMAKE_HOST_NETBSD)
endif(CLR_CMAKE_HOST_LINUX OR CLR_CMAKE_HOST_FREEBSD OR CLR_CMAKE_HOST_NETBSD OR CLR_CMAKE_HOST_SUNOS)

_add_executable(ildasm
${ILDASM_SOURCES}
Expand Down
4 changes: 3 additions & 1 deletion src/coreclr/src/inc/crosscomp.h
Original file line number Diff line number Diff line change
Expand Up @@ -392,9 +392,11 @@ typedef struct _T_KNONVOLATILE_CONTEXT_POINTERS {
#define DAC_CS_NATIVE_DATA_SIZE 56
#elif defined(TARGET_NETBSD) && defined(TARGET_X86)
#define DAC_CS_NATIVE_DATA_SIZE 56
#elif defined(__sun) && defined(TARGET_AMD64)
#define DAC_CS_NATIVE_DATA_SIZE 48
#else
#warning
#error DAC_CS_NATIVE_DATA_SIZE is not defined for this architecture
#error DAC_CS_NATIVE_DATA_SIZE is not defined for this architecture. This should be same value as PAL_CS_NATIVE_DATA_SIZE (aka sizeof(PAL_CS_NATIVE_DATA)).
#endif

struct T_CRITICAL_SECTION {
Expand Down
5 changes: 4 additions & 1 deletion src/coreclr/src/jit/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -319,7 +319,10 @@ else()
set(JIT_EXPORTS_LINKER_OPTION -Wl,--version-script=${JIT_EXPORTS_FILE})
elseif(CLR_CMAKE_TARGET_OSX)
set(JIT_EXPORTS_LINKER_OPTION -Wl,-exported_symbols_list,${JIT_EXPORTS_FILE})
endif()
elseif(CLR_CMAKE_HOST_SUNOS)
# Add linker exports file option
set(JIT_EXPORTS_LINKER_OPTION -Wl,-M,${JIT_EXPORTS_FILE})
endif(CLR_CMAKE_HOST_SUNOS)

set(SHARED_LIB_SOURCES ${SOURCES})
endif()
Expand Down
2 changes: 1 addition & 1 deletion src/coreclr/src/jit/emit.h
Original file line number Diff line number Diff line change
Expand Up @@ -1336,7 +1336,7 @@ class emitter

insExecutionCharacteristics getInsExecutionCharacteristics(instrDesc* id);

void emitter::perfScoreUnhandledInstruction(instrDesc* id, insExecutionCharacteristics* result);
void perfScoreUnhandledInstruction(instrDesc* id, insExecutionCharacteristics* result);

#endif // defined(DEBUG) || defined(LATE_DISASM)

Expand Down
54 changes: 40 additions & 14 deletions src/coreclr/src/pal/inc/pal.h
Original file line number Diff line number Diff line change
Expand Up @@ -2365,6 +2365,8 @@ PALIMPORT BOOL PALAPI PAL_VirtualUnwindOutOfProc(CONTEXT *context, KNONVOLATILE_
#define PAL_CS_NATIVE_DATA_SIZE 56
#elif defined(__NetBSD__) && defined(__i386__)
#define PAL_CS_NATIVE_DATA_SIZE 56
#elif defined(__sun) && defined(__x86_64__)
#define PAL_CS_NATIVE_DATA_SIZE 48
#else
#warning
#error PAL_CS_NATIVE_DATA_SIZE is not defined for this architecture
Expand Down Expand Up @@ -3935,7 +3937,11 @@ PALIMPORT int __cdecl memcmp(const void *, const void *, size_t);
PALIMPORT void * __cdecl memset(void *, int, size_t);
PALIMPORT void * __cdecl memmove(void *, const void *, size_t);
PALIMPORT void * __cdecl memchr(const void *, int, size_t);
PALIMPORT long long int __cdecl atoll(const char *) THROW_DECL;
PALIMPORT long long int __cdecl atoll(const char *)
#ifndef __sun
THROW_DECL
#endif
;
PALIMPORT size_t __cdecl strlen(const char *);
PALIMPORT int __cdecl strcmp(const char*, const char *);
PALIMPORT int __cdecl strncmp(const char*, const char *, size_t);
Expand Down Expand Up @@ -4028,14 +4034,14 @@ PALIMPORT int __cdecl _wtoi(const WCHAR *);

#ifdef __cplusplus
extern "C++" {
inline WCHAR *PAL_wcschr(WCHAR *_S, WCHAR _C)
{return ((WCHAR *)PAL_wcschr((const WCHAR *)_S, _C)); }
inline WCHAR *PAL_wcsrchr(WCHAR *_S, WCHAR _C)
{return ((WCHAR *)PAL_wcsrchr((const WCHAR *)_S, _C)); }
inline WCHAR *PAL_wcspbrk(WCHAR *_S, const WCHAR *_P)
{return ((WCHAR *)PAL_wcspbrk((const WCHAR *)_S, _P)); }
inline WCHAR *PAL_wcsstr(WCHAR *_S, const WCHAR *_P)
{return ((WCHAR *)PAL_wcsstr((const WCHAR *)_S, _P)); }
inline WCHAR *PAL_wcschr(WCHAR* S, WCHAR C)
{return ((WCHAR *)PAL_wcschr((const WCHAR *)S, C)); }
inline WCHAR *PAL_wcsrchr(WCHAR* S, WCHAR C)
{return ((WCHAR *)PAL_wcsrchr((const WCHAR *)S, C)); }
inline WCHAR *PAL_wcspbrk(WCHAR* S, const WCHAR* P)
{return ((WCHAR *)PAL_wcspbrk((const WCHAR *)S, P)); }
inline WCHAR *PAL_wcsstr(WCHAR* S, const WCHAR* P)
{return ((WCHAR *)PAL_wcsstr((const WCHAR *)S, P)); }
}
#endif

Expand Down Expand Up @@ -4107,9 +4113,17 @@ PALIMPORT double __cdecl acosh(double);
PALIMPORT double __cdecl asin(double);
PALIMPORT double __cdecl asinh(double);
PALIMPORT double __cdecl atan(double) THROW_DECL;
PALIMPORT double __cdecl atanh(double) THROW_DECL;
PALIMPORT double __cdecl atanh(double)
#ifndef __sun
THROW_DECL
#endif
;
PALIMPORT double __cdecl atan2(double, double);
PALIMPORT double __cdecl cbrt(double) THROW_DECL;
PALIMPORT double __cdecl cbrt(double)
#ifndef __sun
THROW_DECL
#endif
;
PALIMPORT double __cdecl ceil(double);
PALIMPORT double __cdecl cos(double);
PALIMPORT double __cdecl cosh(double);
Expand Down Expand Up @@ -4138,10 +4152,22 @@ PALIMPORT float __cdecl acosf(float);
PALIMPORT float __cdecl acoshf(float);
PALIMPORT float __cdecl asinf(float);
PALIMPORT float __cdecl asinhf(float);
PALIMPORT float __cdecl atanf(float) THROW_DECL;
PALIMPORT float __cdecl atanhf(float) THROW_DECL;
PALIMPORT float __cdecl atanf(float)
#ifndef __sun
THROW_DECL
#endif
;
PALIMPORT float __cdecl atanhf(float)
#ifndef __sun
THROW_DECL
#endif
;
PALIMPORT float __cdecl atan2f(float, float);
PALIMPORT float __cdecl cbrtf(float) THROW_DECL;
PALIMPORT float __cdecl cbrtf(float)
#ifndef __sun
THROW_DECL
#endif
;
PALIMPORT float __cdecl ceilf(float);
PALIMPORT float __cdecl cosf(float);
PALIMPORT float __cdecl coshf(float);
Expand Down
Loading

0 comments on commit 84ec25f

Please sign in to comment.