add_subdirectory(pal)
add_subdirectory(hosts)
-else(CLR_CMAKE_HOST_UNIX)
+else()
if(CLR_CMAKE_TARGET_UNIX)
- add_subdirectory(pal/src/libunwind)
- endif(CLR_CMAKE_TARGET_UNIX)
-endif(CLR_CMAKE_HOST_UNIX)
+ add_subdirectory(${CLR_SRC_NATIVE_DIR}/external/libunwind_extras ${CLR_ARTIFACTS_OBJ_DIR}/external/libunwind)
+ endif()
+endif()
# Add this subdir. We install the headers for the jit.
add_subdirectory(pal/prebuilt/inc)
endif()
if(NOT CLR_CMAKE_USE_SYSTEM_LIBUNWIND)
- include_directories(libunwind/include)
- include_directories(libunwind/include/tdep)
- include_directories(${CMAKE_CURRENT_BINARY_DIR}/libunwind/include)
- include_directories(${CMAKE_CURRENT_BINARY_DIR}/libunwind/include/tdep)
+ include_directories(${CLR_SRC_NATIVE_DIR}/external/libunwind/include)
+ include_directories(${CLR_SRC_NATIVE_DIR}/external/libunwind/include/tdep)
+ include_directories(${CLR_ARTIFACTS_OBJ_DIR}/external/libunwind/include)
+ include_directories(${CLR_ARTIFACTS_OBJ_DIR}/external/libunwind/include/tdep)
- add_subdirectory(libunwind)
+ add_subdirectory(${CLR_SRC_NATIVE_DIR}/external/libunwind_extras ${CLR_ARTIFACTS_OBJ_DIR}/external/libunwind)
elseif(NOT CLR_CMAKE_TARGET_OSX)
find_unwind_libs(UNWIND_LIBS)
else()
- add_subdirectory(libunwind)
+ add_subdirectory(${CLR_SRC_NATIVE_DIR}/external/libunwind_extras ${CLR_ARTIFACTS_OBJ_DIR}/external/libunwind)
endif(NOT CLR_CMAKE_USE_SYSTEM_LIBUNWIND)
include(configure.cmake)
if(NOT FEATURE_CROSSBITNESS)
target_include_directories(coreclrpal_dac PUBLIC
- ${CMAKE_CURRENT_SOURCE_DIR}/libunwind/include
- ${CMAKE_CURRENT_SOURCE_DIR}/libunwind/include/tdep
- ${CMAKE_CURRENT_BINARY_DIR}
- ${CMAKE_CURRENT_BINARY_DIR}/libunwind/include
- ${CMAKE_CURRENT_BINARY_DIR}/libunwind/include/tdep
+ ${CLR_SRC_NATIVE_DIR}/external/libunwind/include
+ ${CLR_SRC_NATIVE_DIR}/external/libunwind/include/tdep
+ ${CLR_ARTIFACTS_OBJ_DIR}/external/libunwind/include
+ ${CLR_ARTIFACTS_OBJ_DIR}/external/libunwind/include/tdep
)
endif(NOT FEATURE_CROSSBITNESS)
set(ERROR_FUNC_FOR_GLOB_HAS_FIXED_PARAMS 1)
if(NOT CLR_CMAKE_USE_SYSTEM_LIBUNWIND)
- list(INSERT CMAKE_REQUIRED_INCLUDES 0 ${CMAKE_CURRENT_SOURCE_DIR}/libunwind/include ${CMAKE_CURRENT_BINARY_DIR}/libunwind/include)
+ list(INSERT CMAKE_REQUIRED_INCLUDES 0 ${CLR_SRC_NATIVE_DIR}/external/libunwind/include ${CLR_ARTIFACTS_OBJ_DIR}/external/libunwind/include)
endif()
check_c_source_compiles("
v1.6.2
https://github.com/libunwind/libunwind/commit/b3ca1b59a795a617877c01fe5d299ab7a07ff29d
-Replace CMakeLists.txt, src/CMakeLists.txt, configure.cmake with .NET custom version
-Keep .NET oop directory
Reapply changes from https://github.com/dotnet/runtime/commit/1b5719c2e3dde393531eaeb5b5cde05dabeef5b8
Apply https://github.com/libunwind/libunwind/pull/317
Apply https://github.com/libunwind/libunwind/pull/333
-# This is a custom file written for .NET Core's build system
-# It overwrites the one found in upstream
+include_directories(${CMAKE_CURRENT_LIST_DIR}/libunwind/include/tdep)
+include_directories(${CMAKE_CURRENT_LIST_DIR}/libunwind/include)
+include_directories(${CMAKE_CURRENT_LIST_DIR}/libunwind/src)
+include_directories(${CMAKE_CURRENT_BINARY_DIR}/include/tdep)
+include_directories(${CMAKE_CURRENT_BINARY_DIR}/include)
-SET(libunwind_ptrace_la_SOURCES
+set(libunwind_ptrace_la_SOURCES
ptrace/_UPT_elf.c
ptrace/_UPT_accessors.c ptrace/_UPT_access_fpreg.c
ptrace/_UPT_access_mem.c ptrace/_UPT_access_reg.c
ptrace/_UPT_reg_offset.c ptrace/_UPT_resume.c
)
-SET(libunwind_coredump_la_SOURCES
+set(libunwind_coredump_la_SOURCES
coredump/_UCD_accessors.c
coredump/_UCD_create.c
coredump/_UCD_destroy.c
)
# List of arch-independent files needed by generic library (libunwind-$ARCH):
-SET(libunwind_la_SOURCES_generic
+set(libunwind_la_SOURCES_generic
mi/Gdyn-extract.c mi/Gdyn-remote.c mi/Gfind_dynamic_proc_info.c
# The Gget_accessors.c implements the same function as Lget_accessors.c, so
# the source is excluded here to prevent name clash
mi/Gget_fpreg.c mi/Gset_fpreg.c
mi/Gset_caching_policy.c
mi/Gset_cache_size.c
- oop/_OOP_find_proc_info.c
)
-SET(libunwind_la_SOURCES_os_linux
+set(libunwind_la_SOURCES_os_linux
os-linux.c
)
-SET(libunwind_la_SOURCES_os_linux_local
+set(libunwind_la_SOURCES_os_linux_local
# Nothing when we don't want to support CXX exceptions
)
-SET(libunwind_la_SOURCES_os_freebsd
+set(libunwind_la_SOURCES_os_freebsd
os-freebsd.c
)
-SET(libunwind_la_SOURCES_os_freebsd_local
+set(libunwind_la_SOURCES_os_freebsd_local
# Nothing
)
-SET(libunwind_la_SOURCES_os_solaris
+set(libunwind_la_SOURCES_os_solaris
os-solaris.c
)
-SET(libunwind_la_SOURCES_os_solaris_local
+set(libunwind_la_SOURCES_os_solaris_local
# Nothing
)
if(CLR_CMAKE_TARGET_LINUX)
- SET(libunwind_la_SOURCES_os ${libunwind_la_SOURCES_os_linux})
- SET(libunwind_la_SOURCES_os_local ${libunwind_la_SOURCES_os_linux_local})
- SET(libunwind_la_SOURCES_x86_os x86/Gos-linux.c)
- SET(libunwind_x86_la_SOURCES_os x86/getcontext-linux.S)
- SET(libunwind_la_SOURCES_x86_os_local x86/Los-linux.c)
- SET(libunwind_la_SOURCES_x86_64_os x86_64/Gos-linux.c)
- SET(libunwind_la_SOURCES_x86_64_os_local x86_64/Los-linux.c)
- SET(libunwind_la_SOURCES_arm_os arm/Gos-linux.c)
- SET(libunwind_la_SOURCES_arm_os_local arm/Los-linux.c)
+ set(libunwind_la_SOURCES_os ${libunwind_la_SOURCES_os_linux})
+ set(libunwind_la_SOURCES_os_local ${libunwind_la_SOURCES_os_linux_local})
+ set(libunwind_la_SOURCES_x86_os x86/Gos-linux.c)
+ set(libunwind_x86_la_SOURCES_os x86/getcontext-linux.S)
+ set(libunwind_la_SOURCES_x86_os_local x86/Los-linux.c)
+ set(libunwind_la_SOURCES_x86_64_os x86_64/Gos-linux.c)
+ set(libunwind_la_SOURCES_x86_64_os_local x86_64/Los-linux.c)
+ set(libunwind_la_SOURCES_arm_os arm/Gos-linux.c)
+ set(libunwind_la_SOURCES_arm_os_local arm/Los-linux.c)
list(APPEND libunwind_coredump_la_SOURCES coredump/_UCD_access_reg_linux.c)
elseif(CLR_CMAKE_TARGET_FREEBSD)
- SET(libunwind_la_SOURCES_os ${libunwind_la_SOURCES_os_freebsd})
- SET(libunwind_la_SOURCES_os_local ${libunwind_la_SOURCES_os_freebsd_local})
- SET(libunwind_la_SOURCES_x86_os x86/Gos-freebsd.c)
- SET(libunwind_x86_la_SOURCES_os x86/getcontext-freebsd.S)
- SET(libunwind_la_SOURCES_x86_os_local x86/Los-freebsd.c)
- SET(libunwind_la_SOURCES_x86_64_os x86_64/Gos-freebsd.c)
- SET(libunwind_la_SOURCES_x86_64_os_local x86_64/Los-freebsd.c)
- SET(libunwind_la_SOURCES_arm_os arm/Gos-freebsd.c)
- SET(libunwind_la_SOURCES_arm_os_local arm/Los-freebsd.c)
+ set(libunwind_la_SOURCES_os ${libunwind_la_SOURCES_os_freebsd})
+ set(libunwind_la_SOURCES_os_local ${libunwind_la_SOURCES_os_freebsd_local})
+ set(libunwind_la_SOURCES_x86_os x86/Gos-freebsd.c)
+ set(libunwind_x86_la_SOURCES_os x86/getcontext-freebsd.S)
+ set(libunwind_la_SOURCES_x86_os_local x86/Los-freebsd.c)
+ set(libunwind_la_SOURCES_x86_64_os x86_64/Gos-freebsd.c)
+ set(libunwind_la_SOURCES_x86_64_os_local x86_64/Los-freebsd.c)
+ set(libunwind_la_SOURCES_arm_os arm/Gos-freebsd.c)
+ set(libunwind_la_SOURCES_arm_os_local arm/Los-freebsd.c)
list(APPEND libunwind_coredump_la_SOURCES coredump/_UCD_access_reg_freebsd.c)
elseif(CLR_CMAKE_HOST_SUNOS)
- SET(libunwind_la_SOURCES_os ${libunwind_la_SOURCES_os_solaris})
- SET(libunwind_la_SOURCES_os_local ${libunwind_la_SOURCES_os_solaris_local})
- SET(libunwind_la_SOURCES_x86_64_os x86_64/Gos-solaris.c)
- SET(libunwind_la_SOURCES_x86_64_os_local x86_64/Los-solaris.c)
+ set(libunwind_la_SOURCES_os ${libunwind_la_SOURCES_os_solaris})
+ set(libunwind_la_SOURCES_os_local ${libunwind_la_SOURCES_os_solaris_local})
+ set(libunwind_la_SOURCES_x86_64_os x86_64/Gos-solaris.c)
+ set(libunwind_la_SOURCES_x86_64_os_local x86_64/Los-solaris.c)
endif()
# List of arch-independent files needed by both local-only and generic
# libraries:
-SET(libunwind_la_SOURCES_common
+set(libunwind_la_SOURCES_common
${libunwind_la_SOURCES_os}
mi/init.c mi/flush_cache.c mi/mempool.c mi/strerror.c
)
-SET(libunwind_la_SOURCES_local_unwind
+set(libunwind_la_SOURCES_local_unwind
# Nothing when we don't want to support CXX exceptions
)
# List of arch-independent files needed by local-only library (libunwind):
-SET(libunwind_la_SOURCES_local_nounwind
+set(libunwind_la_SOURCES_local_nounwind
${libunwind_la_SOURCES_os_local}
mi/backtrace.c
mi/dyn-cancel.c mi/dyn-info-list.c mi/dyn-register.c
mi/Lset_cache_size.c
)
-SET(libunwind_la_SOURCES_local
+set(libunwind_la_SOURCES_local
${libunwind_la_SOURCES_local_nounwind}
${libunwind_la_SOURCES_local_unwind}
)
-SET(libunwind_dwarf_common_la_SOURCES
+set(libunwind_dwarf_common_la_SOURCES
dwarf/global.c
)
-SET(libunwind_dwarf_local_la_SOURCES
+set(libunwind_dwarf_local_la_SOURCES
dwarf/Lexpr.c dwarf/Lfde.c dwarf/Lparser.c dwarf/Lpe.c
dwarf/Lfind_proc_info-lsb.c
dwarf/Lfind_unwind_table.c
)
-SET(libunwind_dwarf_generic_la_SOURCES
+set(libunwind_dwarf_generic_la_SOURCES
dwarf/Gexpr.c dwarf/Gfde.c dwarf/Gparser.c dwarf/Gpe.c
dwarf/Gfind_proc_info-lsb.c
dwarf/Gfind_unwind_table.c
)
-SET(libunwind_elf32_la_SOURCES
+set(libunwind_elf32_la_SOURCES
elf32.c
)
-SET(libunwind_elf64_la_SOURCES
+set(libunwind_elf64_la_SOURCES
elf64.c
)
-SET(libunwind_elfxx_la_SOURCES
+set(libunwind_elfxx_la_SOURCES
elfxx.c
)
# The list of files that go into libunwind and libunwind-loongarch64:
-SET(libunwind_la_SOURCES_loongarch_common
+set(libunwind_la_SOURCES_loongarch_common
${libunwind_la_SOURCES_common}
loongarch64/is_fpreg.c
loongarch64/regname.c
)
# The list of files that go into libunwind:
-SET(libunwind_la_SOURCES_loongarch
+set(libunwind_la_SOURCES_loongarch
${libunwind_la_SOURCES_loongarch_common}
${libunwind_la_SOURCES_local}
loongarch64/Lget_proc_info.c loongarch64/Linit.c loongarch64/Lis_signal_frame.c
loongarch64/Lcreate_addr_space.c loongarch64/Lglobal.c loongarch64/Linit_remote.c loongarch64/Lresume.c
)
-SET(libunwind_loongarch_la_SOURCES_loongarch
+set(libunwind_loongarch_la_SOURCES_loongarch
${libunwind_la_SOURCES_loongarch_common}
${libunwind_la_SOURCES_generic}
loongarch64/Gcreate_addr_space.c loongarch64/Gget_proc_info.c loongarch64/Gget_save_loc.c
)
# The list of files that go into libunwind and libunwind-aarch64:
-SET(libunwind_la_SOURCES_aarch64_common
+set(libunwind_la_SOURCES_aarch64_common
${libunwind_la_SOURCES_common}
aarch64/is_fpreg.c
aarch64/regname.c
)
# The list of files that go into libunwind:
-SET(libunwind_la_SOURCES_aarch64
+set(libunwind_la_SOURCES_aarch64
${libunwind_la_SOURCES_aarch64_common}
${libunwind_la_SOURCES_local}
aarch64/Lapply_reg_state.c aarch64/Lreg_states_iterate.c
aarch64/getcontext.S
)
-SET(libunwind_aarch64_la_SOURCES_aarch64
+set(libunwind_aarch64_la_SOURCES_aarch64
${libunwind_la_SOURCES_aarch64_common}
${libunwind_la_SOURCES_generic}
aarch64/Gapply_reg_state.c aarch64/Greg_states_iterate.c
)
# The list of files that go into libunwind and libunwind-arm:
-SET(libunwind_la_SOURCES_arm_common
+set(libunwind_la_SOURCES_arm_common
${libunwind_la_SOURCES_common}
arm/is_fpreg.c arm/regname.c
)
# The list of files that go into libunwind:
-SET(libunwind_la_SOURCES_arm
+set(libunwind_la_SOURCES_arm
${libunwind_la_SOURCES_arm_common}
${libunwind_la_SOURCES_arm_os_local}
${libunwind_la_SOURCES_local}
)
# The list of files that go into libunwind-arm:
-SET(libunwind_arm_la_SOURCES_arm
+set(libunwind_arm_la_SOURCES_arm
${libunwind_la_SOURCES_arm_common}
${libunwind_la_SOURCES_arm_os}
${libunwind_la_SOURCES_generic}
)
# The list of files that go both into libunwind and libunwind-x86:
-SET(libunwind_la_SOURCES_x86_common
+set(libunwind_la_SOURCES_x86_common
${libunwind_la_SOURCES_common}
x86/is_fpreg.c x86/regname.c
)
# The list of files that go into libunwind:
-SET(libunwind_la_SOURCES_x86
+set(libunwind_la_SOURCES_x86
${libunwind_la_SOURCES_x86_common}
${libunwind_la_SOURCES_x86_os_local}
${libunwind_la_SOURCES_local}
)
# The list of files that go into libunwind-x86:
-SET(libunwind_x86_la_SOURCES_x86
+set(libunwind_x86_la_SOURCES_x86
${libunwind_la_SOURCES_x86_common}
${libunwind_la_SOURCES_x86_os}
${libunwind_la_SOURCES_generic}
)
# The list of files that go both into libunwind and libunwind-x86_64:
-SET(libunwind_la_SOURCES_x86_64_common
+set(libunwind_la_SOURCES_x86_64_common
${libunwind_la_SOURCES_common}
x86_64/is_fpreg.c x86_64/regname.c
)
# The list of files that go into libunwind:
-SET(libunwind_la_SOURCES_x86_64
+set(libunwind_la_SOURCES_x86_64
${libunwind_la_SOURCES_x86_64_common}
${libunwind_la_SOURCES_x86_64_os_local}
${libunwind_la_SOURCES_local}
)
# The list of files that go into libunwind-x86_64:
-SET(libunwind_x86_64_la_SOURCES_x86_64
+set(libunwind_x86_64_la_SOURCES_x86_64
${libunwind_la_SOURCES_x86_64_common}
${libunwind_la_SOURCES_x86_64_os}
${libunwind_la_SOURCES_generic}
)
# The list of files that go both into libunwind and libunwind-s390x:
-SET(libunwind_la_SOURCES_s390x_common
+set(libunwind_la_SOURCES_s390x_common
${libunwind_la_SOURCES_common}
s390x/is_fpreg.c s390x/regname.c
)
# The list of files that go into libunwind:
-SET(libunwind_la_SOURCES_s390x
+set(libunwind_la_SOURCES_s390x
${libunwind_la_SOURCES_s390x_common}
${libunwind_la_SOURCES_local}
s390x/setcontext.S s390x/getcontext.S
)
# The list of files that go into libunwind-s390x:
-SET(libunwind_s390x_la_SOURCES_s390x
+set(libunwind_s390x_la_SOURCES_s390x
${libunwind_la_SOURCES_s390x_common}
${libunwind_la_SOURCES_generic}
s390x/Gapply_reg_state.c s390x/Greg_states_iterate.c
if(CLR_CMAKE_HOST_UNIX)
if(CLR_CMAKE_HOST_ARCH_ARM64)
- SET(libunwind_la_SOURCES ${libunwind_la_SOURCES_aarch64})
- SET(libunwind_remote_la_SOURCES ${libunwind_aarch64_la_SOURCES_aarch64})
- SET(libunwind_elf_la_SOURCES ${libunwind_elf64_la_SOURCES})
+ set(libunwind_la_SOURCES ${libunwind_la_SOURCES_aarch64})
+ set(libunwind_remote_la_SOURCES ${libunwind_aarch64_la_SOURCES_aarch64})
+ set(libunwind_elf_la_SOURCES ${libunwind_elf64_la_SOURCES})
list(APPEND libunwind_setjmp_la_SOURCES aarch64/siglongjmp.S)
elseif(CLR_CMAKE_HOST_ARCH_ARM)
- SET(libunwind_la_SOURCES ${libunwind_la_SOURCES_arm})
- SET(libunwind_remote_la_SOURCES ${libunwind_arm_la_SOURCES_arm})
- SET(libunwind_elf_la_SOURCES ${libunwind_elf32_la_SOURCES})
+ set(libunwind_la_SOURCES ${libunwind_la_SOURCES_arm})
+ set(libunwind_remote_la_SOURCES ${libunwind_arm_la_SOURCES_arm})
+ set(libunwind_elf_la_SOURCES ${libunwind_elf32_la_SOURCES})
list(APPEND libunwind_setjmp_la_SOURCES arm/siglongjmp.S)
elseif(CLR_CMAKE_HOST_ARCH_ARMV6)
- SET(libunwind_la_SOURCES ${libunwind_la_SOURCES_arm})
- SET(libunwind_remote_la_SOURCES ${libunwind_arm_la_SOURCES_arm})
- SET(libunwind_elf_la_SOURCES ${libunwind_elf32_la_SOURCES})
+ set(libunwind_la_SOURCES ${libunwind_la_SOURCES_arm})
+ set(libunwind_remote_la_SOURCES ${libunwind_arm_la_SOURCES_arm})
+ set(libunwind_elf_la_SOURCES ${libunwind_elf32_la_SOURCES})
list(APPEND libunwind_setjmp_la_SOURCES arm/siglongjmp.S)
elseif(CLR_CMAKE_HOST_ARCH_I386)
- SET(libunwind_la_SOURCES ${libunwind_la_SOURCES_x86} ${libunwind_x86_la_SOURCES_os})
- SET(libunwind_remote_la_SOURCES ${libunwind_x86_la_SOURCES_x86})
- SET(libunwind_elf_la_SOURCES ${libunwind_elf32_la_SOURCES})
+ set(libunwind_la_SOURCES ${libunwind_la_SOURCES_x86} ${libunwind_x86_la_SOURCES_os})
+ set(libunwind_remote_la_SOURCES ${libunwind_x86_la_SOURCES_x86})
+ set(libunwind_elf_la_SOURCES ${libunwind_elf32_la_SOURCES})
list(APPEND libunwind_setjmp_la_SOURCES x86/longjmp.S x86/siglongjmp.S)
elseif(CLR_CMAKE_HOST_ARCH_AMD64)
- SET(libunwind_la_SOURCES ${libunwind_la_SOURCES_x86_64})
- SET(libunwind_remote_la_SOURCES ${libunwind_x86_64_la_SOURCES_x86_64})
- SET(libunwind_elf_la_SOURCES ${libunwind_elf64_la_SOURCES})
+ set(libunwind_la_SOURCES ${libunwind_la_SOURCES_x86_64})
+ set(libunwind_remote_la_SOURCES ${libunwind_x86_64_la_SOURCES_x86_64})
+ set(libunwind_elf_la_SOURCES ${libunwind_elf64_la_SOURCES})
list(APPEND libunwind_setjmp_la_SOURCES x86_64/longjmp.S x86_64/siglongjmp.SA)
elseif(CLR_CMAKE_HOST_ARCH_S390X)
- SET(libunwind_la_SOURCES ${libunwind_la_SOURCES_s390x})
- SET(libunwind_remote_la_SOURCES ${libunwind_s390x_la_SOURCES_s390x})
- SET(libunwind_elf_la_SOURCES ${libunwind_elf64_la_SOURCES})
+ set(libunwind_la_SOURCES ${libunwind_la_SOURCES_s390x})
+ set(libunwind_remote_la_SOURCES ${libunwind_s390x_la_SOURCES_s390x})
+ set(libunwind_elf_la_SOURCES ${libunwind_elf64_la_SOURCES})
elseif(CLR_CMAKE_HOST_ARCH_LOONGARCH64)
- SET(libunwind_la_SOURCES ${libunwind_la_SOURCES_loongarch})
- SET(libunwind_remote_la_SOURCES ${libunwind_loongarch_la_SOURCES_loongarch})
- SET(libunwind_elf_la_SOURCES ${libunwind_elf64_la_SOURCES})
+ set(libunwind_la_SOURCES ${libunwind_la_SOURCES_loongarch})
+ set(libunwind_remote_la_SOURCES ${libunwind_loongarch_la_SOURCES_loongarch})
+ set(libunwind_elf_la_SOURCES ${libunwind_elf64_la_SOURCES})
list(APPEND libunwind_setjmp_la_SOURCES loongarch64/siglongjmp.S)
endif()
if(CLR_CMAKE_HOST_OSX)
- add_library(libunwind_dac
- OBJECT
- ../../libunwind_mac/src/missing-functions.c
+ set(LIBUNWIND_SOURCES_BASE
${libunwind_remote_la_SOURCES}
${libunwind_dwarf_common_la_SOURCES}
${libunwind_dwarf_generic_la_SOURCES}
)
else()
- add_library(libunwind
- OBJECT
+ set(LIBUNWIND_SOURCES_BASE
${libunwind_la_SOURCES}
${libunwind_remote_la_SOURCES}
${libunwind_dwarf_local_la_SOURCES}
else(CLR_CMAKE_HOST_UNIX)
if(CLR_CMAKE_TARGET_ARCH_ARM64)
- SET(libunwind_la_SOURCES ${libunwind_la_SOURCES_aarch64})
- SET(libunwind_remote_la_SOURCES ${libunwind_aarch64_la_SOURCES_aarch64})
- SET(libunwind_elf_la_SOURCES ${libunwind_elf64_la_SOURCES})
+ set(libunwind_la_SOURCES ${libunwind_la_SOURCES_aarch64})
+ set(libunwind_remote_la_SOURCES ${libunwind_aarch64_la_SOURCES_aarch64})
+ set(libunwind_elf_la_SOURCES ${libunwind_elf64_la_SOURCES})
list(APPEND libunwind_setjmp_la_SOURCES aarch64/siglongjmp.S)
elseif(CLR_CMAKE_TARGET_ARCH_ARM)
- SET(libunwind_la_SOURCES ${libunwind_la_SOURCES_arm})
- SET(libunwind_remote_la_SOURCES ${libunwind_arm_la_SOURCES_arm})
- SET(libunwind_elf_la_SOURCES ${libunwind_elf32_la_SOURCES})
+ set(libunwind_la_SOURCES ${libunwind_la_SOURCES_arm})
+ set(libunwind_remote_la_SOURCES ${libunwind_arm_la_SOURCES_arm})
+ set(libunwind_elf_la_SOURCES ${libunwind_elf32_la_SOURCES})
list(APPEND libunwind_setjmp_la_SOURCES arm/siglongjmp.S)
elseif(CLR_CMAKE_TARGET_ARCH_ARMV6)
- SET(libunwind_la_SOURCES ${libunwind_la_SOURCES_arm})
- SET(libunwind_remote_la_SOURCES ${libunwind_arm_la_SOURCES_arm})
- SET(libunwind_elf_la_SOURCES ${libunwind_elf32_la_SOURCES})
+ set(libunwind_la_SOURCES ${libunwind_la_SOURCES_arm})
+ set(libunwind_remote_la_SOURCES ${libunwind_arm_la_SOURCES_arm})
+ set(libunwind_elf_la_SOURCES ${libunwind_elf32_la_SOURCES})
list(APPEND libunwind_setjmp_la_SOURCES arm/siglongjmp.S)
elseif(CLR_CMAKE_TARGET_ARCH_I386)
- SET(libunwind_la_SOURCES ${libunwind_la_SOURCES_x86} ${libunwind_x86_la_SOURCES_os})
- SET(libunwind_remote_la_SOURCES ${libunwind_x86_la_SOURCES_x86})
- SET(libunwind_elf_la_SOURCES ${libunwind_elf32_la_SOURCES})
+ set(libunwind_la_SOURCES ${libunwind_la_SOURCES_x86} ${libunwind_x86_la_SOURCES_os})
+ set(libunwind_remote_la_SOURCES ${libunwind_x86_la_SOURCES_x86})
+ set(libunwind_elf_la_SOURCES ${libunwind_elf32_la_SOURCES})
list(APPEND libunwind_setjmp_la_SOURCES x86/longjmp.S x86/siglongjmp.S)
elseif(CLR_CMAKE_TARGET_ARCH_AMD64)
- SET(libunwind_la_SOURCES ${libunwind_la_SOURCES_x86_64})
- SET(libunwind_remote_la_SOURCES ${libunwind_x86_64_la_SOURCES_x86_64})
- SET(libunwind_elf_la_SOURCES ${libunwind_elf64_la_SOURCES})
+ set(libunwind_la_SOURCES ${libunwind_la_SOURCES_x86_64})
+ set(libunwind_remote_la_SOURCES ${libunwind_x86_64_la_SOURCES_x86_64})
+ set(libunwind_elf_la_SOURCES ${libunwind_elf64_la_SOURCES})
list(APPEND libunwind_setjmp_la_SOURCES x86_64/longjmp.S x86_64/siglongjmp.SA)
elseif(CLR_CMAKE_TARGET_ARCH_S390X)
- SET(libunwind_la_SOURCES ${libunwind_la_SOURCES_s390x})
- SET(libunwind_remote_la_SOURCES ${libunwind_s390x_la_SOURCES_s390x})
- SET(libunwind_elf_la_SOURCES ${libunwind_elf64_la_SOURCES})
+ set(libunwind_la_SOURCES ${libunwind_la_SOURCES_s390x})
+ set(libunwind_remote_la_SOURCES ${libunwind_s390x_la_SOURCES_s390x})
+ set(libunwind_elf_la_SOURCES ${libunwind_elf64_la_SOURCES})
endif()
set_source_files_properties(${CLR_DIR}/pal/src/exception/remote-unwind.cpp PROPERTIES COMPILE_FLAGS /TP INCLUDE_DIRECTORIES ${CLR_DIR}/inc)
- add_library(libunwind_xdac
- OBJECT
- ../../exception/remote-unwind.cpp
+ set(LIBUNWIND_SOURCES_BASE
win/pal-single-threaded.c
# ${libunwind_la_SOURCES} Local...
${libunwind_remote_la_SOURCES}
${libunwind_elf_la_SOURCES}
)
endif(CLR_CMAKE_HOST_UNIX)
+
+addprefix(LIBUNWIND_SOURCES "${CMAKE_CURRENT_LIST_DIR}/libunwind/src" "${LIBUNWIND_SOURCES_BASE}")
--- /dev/null
+project(libunwind)
+
+cmake_minimum_required(VERSION 3.16.1)
+
+set(PKG_MAJOR "1")
+set(PKG_MINOR "6")
+set(PKG_EXTRA "-rc1")
+set(PACKAGE_STRING "libunwind")
+set(PACKAGE_BUGREPORT "")
+
+
+if ('$ENV{TARGET}' STREQUAL 'x86_64-linux-gnu')
+ set(TARGET_AMD64 1)
+ set(arch x86_64)
+ add_definitions(-D__x86_64__)
+ add_definitions(-D__amd64__)
+ add_definitions(-D__linux__)
+elseif ('$ENV{TARGET}' STREQUAL 'aarch64-linux-gnu')
+ set(TARGET_AARCH64 1)
+ set(arch aarch64)
+ add_definitions(-D__aarch64__)
+ add_definitions(-D__linux__)
+elseif ('$ENV{TARGET}' STREQUAL 'arm-linux-gnueabihf')
+ set(TARGET_ARM 1)
+ set(arch arm)
+ add_definitions(-D__arm__)
+ add_definitions(-D__linux__)
+elseif ('$ENV{TARGET}' STREQUAL 's390x-linux-gnu')
+ set(TARGET_S390X 1)
+ set(arch s390x)
+ add_definitions(-D__s390x__)
+ add_definitions(-D__linux__)
+elseif ('$ENV{TARGET}' STREQUAL 'loongarch64-linux-gnu')
+ set(TARGET_LOONGARCH64 1)
+ set(arch loongarch64)
+ add_definitions(-D__loongarch64)
+ add_definitions(-D__linux__)
+else ()
+ message(FATAL_ERROR "Unrecognize value in environment variable TARGET")
+endif ()
+
+include(CheckCSourceCompiles)
+include(CheckIncludeFiles)
+
+if ("${CMAKE_GENERATOR}" MATCHES "^Visual Studio.*$")
+ message(VERBOSE "Using generator ${CMAKE_GENERATOR}")
+ # Assume we are using default MSVC compiler
+ add_compile_options(/std:c++latest)
+ add_compile_options(/TC) # compile all files as C
+ add_compile_options(/permissive-)
+
+ # files for cross os compilation
+ include_directories(include/win)
+
+ # Warnings in release builds
+ add_compile_options(-wd4068) # ignore unknown pragma warnings (gcc pragmas)
+ add_compile_options(-wd4146) # minus operator applied to unsigned
+ add_compile_options(-wd4244) # possible loss of data
+ add_compile_options(-wd4267) # possible loss of data
+ add_compile_options(-wd4334) # 32-bit shift implicitly converted to 64 bits
+
+ # Disable warning due to incorrect format specifier in debugging printf via the Debug macro
+ add_compile_options(-wd4311) # pointer truncation from 'unw_word_t *' to 'long'
+ add_compile_options(-wd4475) # 'fprintf' : length modifier 'L' cannot be used
+ add_compile_options(-wd4477) # fprintf argument type
+
+ # Windows builds will only support remote unwind
+ add_definitions(-DUNW_REMOTE_ONLY)
+
+ # Disable security warnings
+ add_definitions(-D_CRT_SECURE_NO_WARNINGS)
+
+ # Our posix abstraction layer will provide these headers
+ set(HAVE_ELF_H 1)
+ set(HAVE_ENDIAN_H 1)
+
+ # MSVC compiler is currently missing C11 stdalign.h header
+ # Fake it until support is added
+ check_include_files(stdalign.h HAVE_STDALIGN_H)
+ if (NOT HAVE_STDALIGN_H)
+ configure_file(include/win/fakestdalign.h.in ${CMAKE_CURRENT_BINARY_DIR}/include/stdalign.h)
+ endif (NOT HAVE_STDALIGN_H)
+
+ # MSVC compiler is currently missing C11 stdatomic.h header
+ # Fake it until support is added
+ check_include_files(stdatomic.h HAVE_STDATOMIC_H)
+ if (NOT HAVE_STDATOMIC_H)
+ configure_file(include/win/fakestdatomic.h.in ${CMAKE_CURRENT_BINARY_DIR}/include/stdatomic.h)
+ endif (NOT HAVE_STDATOMIC_H)
+
+ # MSVC compiler is currently missing C11 _Thread_local
+ check_c_source_compiles("void main() { _Thread_local int a; }" HAVE_THREAD_LOCAL)
+ if (NOT HAVE_THREAD_LOCAL)
+ add_definitions(-D_Thread_local=)
+ endif (NOT HAVE_THREAD_LOCAL)
+else ()
+ message(FATAL_ERROR "This CMake file is currently only designed for building on Visual Studio")
+endif ()
+
+add_definitions(-DHAVE_CONFIG_H)
+
+configure_file(include/config.h.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/include/config.h)
+configure_file(include/libunwind-common.h.in ${CMAKE_CURRENT_BINARY_DIR}/include/libunwind-common.h)
+configure_file(include/libunwind.h.in ${CMAKE_CURRENT_BINARY_DIR}/include/libunwind.h)
+configure_file(include/tdep/libunwind_i.h.in ${CMAKE_CURRENT_BINARY_DIR}/include/tdep/libunwind_i.h)
+
+add_subdirectory(src)
+
--- /dev/null
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+
+# other source files
+include_directories(../include/tdep)
+include_directories(../include)
+include_directories(${CMAKE_CURRENT_BINARY_DIR}/../include/tdep)
+include_directories(${CMAKE_CURRENT_BINARY_DIR}/../include)
+
+if(TARGET_ARM)
+ # Ensure that the remote and local unwind code can reside in the same binary without name clashing
+ add_definitions("-Darm_search_unwind_table=UNW_OBJ(arm_search_unwind_table)")
+ # We compile code with -std=c99 and the asm keyword is not recognized as it is a gnu extension
+ add_definitions(-Dasm=__asm__)
+ # The arm sources include ex_tables.h from include/tdep-arm without going through a redirection
+ # in include/tdep like it works for similar files on other architectures. So we need to add
+ # the include/tdep-arm to include directories
+ include_directories(../include/tdep-arm)
+elseif(TARGET_AARCH64)
+ # We compile code with -std=c99 and the asm keyword is not recognized as it is a gnu extension
+ add_definitions(-Dasm=__asm__)
+endif()
+
+SET(libunwind_ptrace_la_SOURCES
+ ptrace/_UPT_elf.c
+ ptrace/_UPT_accessors.c ptrace/_UPT_access_fpreg.c
+ ptrace/_UPT_access_mem.c ptrace/_UPT_access_reg.c
+ ptrace/_UPT_create.c ptrace/_UPT_destroy.c
+ ptrace/_UPT_find_proc_info.c ptrace/_UPT_get_dyn_info_list_addr.c
+ ptrace/_UPT_put_unwind_info.c ptrace/_UPT_get_proc_name.c
+ ptrace/_UPT_reg_offset.c ptrace/_UPT_resume.c
+)
+
+SET(libunwind_coredump_la_SOURCES
+ coredump/_UCD_accessors.c
+ coredump/_UCD_create.c
+ coredump/_UCD_destroy.c
+ coredump/_UCD_access_mem.c
+ coredump/_UCD_elf_map_image.c
+ coredump/_UCD_find_proc_info.c
+ coredump/_UCD_get_proc_name.c
+
+ coredump/_UPT_elf.c
+ coredump/_UPT_access_fpreg.c
+ coredump/_UPT_get_dyn_info_list_addr.c
+ coredump/_UPT_put_unwind_info.c
+ coredump/_UPT_resume.c
+)
+
+# List of arch-independent files needed by generic library (libunwind-$ARCH):
+SET(libunwind_la_SOURCES_generic
+ mi/Gdyn-extract.c mi/Gdyn-remote.c mi/Gfind_dynamic_proc_info.c
+ # The Gget_accessors.c implements the same function as Lget_accessors.c, so
+ # the source is excluded here to prevent name clash
+ #mi/Gget_accessors.c
+ mi/Gget_proc_info_by_ip.c mi/Gget_proc_name.c
+ mi/Gput_dynamic_unwind_info.c mi/Gdestroy_addr_space.c
+ mi/Gget_reg.c mi/Gset_reg.c
+ mi/Gget_fpreg.c mi/Gset_fpreg.c
+ mi/Gset_caching_policy.c
+ mi/Gset_cache_size.c
+)
+
+SET(libunwind_la_SOURCES_os_linux
+ os-linux.c
+)
+
+SET(libunwind_la_SOURCES_os_linux_local
+# Nothing when we don't want to support CXX exceptions
+)
+
+SET(libunwind_la_SOURCES_os_freebsd
+ os-freebsd.c
+)
+
+SET(libunwind_la_SOURCES_os_freebsd_local
+# Nothing
+)
+
+SET(libunwind_la_SOURCES_os_solaris
+ os-solaris.c
+)
+
+SET(libunwind_la_SOURCES_os_solaris_local
+# Nothing
+)
+
+if(UNW_CMAKE_TARGET_LINUX)
+ SET(libunwind_la_SOURCES_os ${libunwind_la_SOURCES_os_linux})
+ SET(libunwind_la_SOURCES_os_local ${libunwind_la_SOURCES_os_linux_local})
+ SET(libunwind_la_SOURCES_x86_os x86/Gos-linux.c)
+ SET(libunwind_x86_la_SOURCES_os x86/getcontext-linux.S)
+ SET(libunwind_la_SOURCES_x86_os_local x86/Los-linux.c)
+ SET(libunwind_la_SOURCES_x86_64_os x86_64/Gos-linux.c)
+ SET(libunwind_la_SOURCES_x86_64_os_local x86_64/Los-linux.c)
+ SET(libunwind_la_SOURCES_arm_os arm/Gos-linux.c)
+ SET(libunwind_la_SOURCES_arm_os_local arm/Los-linux.c)
+ list(APPEND libunwind_coredump_la_SOURCES coredump/_UCD_access_reg_linux.c
+ coredump/_UCD_get_threadinfo_prstatus.c
+ coredump/_UCD_get_mapinfo_linux.c)
+elseif(UNW_CMAKE_TARGET_FREEBSD)
+ SET(libunwind_la_SOURCES_os ${libunwind_la_SOURCES_os_freebsd})
+ SET(libunwind_la_SOURCES_os_local ${libunwind_la_SOURCES_os_freebsd_local})
+ SET(libunwind_la_SOURCES_x86_os x86/Gos-freebsd.c)
+ SET(libunwind_x86_la_SOURCES_os x86/getcontext-freebsd.S)
+ SET(libunwind_la_SOURCES_x86_os_local x86/Los-freebsd.c)
+ SET(libunwind_la_SOURCES_x86_64_os x86_64/Gos-freebsd.c)
+ SET(libunwind_la_SOURCES_x86_64_os_local x86_64/Los-freebsd.c)
+ SET(libunwind_la_SOURCES_arm_os arm/Gos-freebsd.c)
+ SET(libunwind_la_SOURCES_arm_os_local arm/Los-freebsd.c)
+ list(APPEND libunwind_coredump_la_SOURCES coredump/_UCD_access_reg_freebsd.c
+ coredump/_UCD_get_threadinfo_prstatus.c
+ coredump/_UCD_get_mapinfo_generic.c)
+elseif(UNW_CMAKE_HOST_SUNOS)
+ SET(libunwind_la_SOURCES_os ${libunwind_la_SOURCES_os_solaris})
+ SET(libunwind_la_SOURCES_os_local ${libunwind_la_SOURCES_os_solaris_local})
+ SET(libunwind_la_SOURCES_x86_64_os x86_64/Gos-solaris.c)
+ SET(libunwind_la_SOURCES_x86_64_os_local x86_64/Los-solaris.c)
+endif()
+
+# List of arch-independent files needed by both local-only and generic
+# libraries:
+SET(libunwind_la_SOURCES_common
+ ${libunwind_la_SOURCES_os}
+ mi/init.c mi/flush_cache.c mi/mempool.c mi/strerror.c
+)
+
+SET(libunwind_la_SOURCES_local_unwind
+# Nothing when we don't want to support CXX exceptions
+)
+
+# List of arch-independent files needed by local-only library (libunwind):
+SET(libunwind_la_SOURCES_local_nounwind
+ ${libunwind_la_SOURCES_os_local}
+ mi/backtrace.c
+ mi/dyn-cancel.c mi/dyn-info-list.c mi/dyn-register.c
+ mi/Ldyn-extract.c mi/Lfind_dynamic_proc_info.c
+ mi/Lget_accessors.c
+ mi/Lget_proc_info_by_ip.c mi/Lget_proc_name.c
+ mi/Lput_dynamic_unwind_info.c mi/Ldestroy_addr_space.c
+ mi/Lget_reg.c mi/Lset_reg.c
+ mi/Lget_fpreg.c mi/Lset_fpreg.c
+ mi/Lset_caching_policy.c
+ mi/Lset_cache_size.c
+)
+
+SET(libunwind_la_SOURCES_local
+ ${libunwind_la_SOURCES_local_nounwind}
+ ${libunwind_la_SOURCES_local_unwind}
+)
+
+SET(libunwind_dwarf_common_la_SOURCES
+ dwarf/global.c
+)
+
+SET(libunwind_dwarf_local_la_SOURCES
+ dwarf/Lexpr.c dwarf/Lfde.c dwarf/Lparser.c dwarf/Lpe.c
+ dwarf/Lfind_proc_info-lsb.c
+ dwarf/Lfind_unwind_table.c
+)
+
+SET(libunwind_dwarf_generic_la_SOURCES
+ dwarf/Gexpr.c dwarf/Gfde.c dwarf/Gparser.c dwarf/Gpe.c
+ dwarf/Gfind_proc_info-lsb.c
+ dwarf/Gfind_unwind_table.c
+)
+
+SET(libunwind_elf32_la_SOURCES
+ elf32.c
+)
+
+SET(libunwind_elf64_la_SOURCES
+ elf64.c
+)
+SET(libunwind_elfxx_la_SOURCES
+ elfxx.c
+)
+
+# The list of files that go into libunwind and libunwind-aarch64:
+SET(libunwind_la_SOURCES_aarch64_common
+ ${libunwind_la_SOURCES_common}
+ aarch64/is_fpreg.c
+ aarch64/regname.c
+)
+
+# The list of files that go into libunwind:
+SET(libunwind_la_SOURCES_aarch64
+ ${libunwind_la_SOURCES_aarch64_common}
+ ${libunwind_la_SOURCES_local}
+ aarch64/Lapply_reg_state.c aarch64/Lreg_states_iterate.c
+ aarch64/Lcreate_addr_space.c aarch64/Lget_proc_info.c
+ aarch64/Lget_save_loc.c aarch64/Lglobal.c aarch64/Linit.c
+ aarch64/Linit_local.c aarch64/Linit_remote.c
+ aarch64/Lis_signal_frame.c aarch64/Lregs.c aarch64/Lresume.c
+ aarch64/Lstash_frame.c aarch64/Lstep.c aarch64/Ltrace.c
+ aarch64/getcontext.S
+)
+
+SET(libunwind_aarch64_la_SOURCES_aarch64
+ ${libunwind_la_SOURCES_aarch64_common}
+ ${libunwind_la_SOURCES_generic}
+ aarch64/Gapply_reg_state.c aarch64/Greg_states_iterate.c
+ aarch64/Gcreate_addr_space.c aarch64/Gget_proc_info.c
+ aarch64/Gget_save_loc.c aarch64/Gglobal.c aarch64/Ginit.c
+ aarch64/Ginit_local.c aarch64/Ginit_remote.c
+ aarch64/Gis_signal_frame.c aarch64/Gregs.c aarch64/Gresume.c
+ aarch64/Gstash_frame.c aarch64/Gstep.c aarch64/Gtrace.c
+)
+
+# The list of files that go into libunwind and libunwind-arm:
+SET(libunwind_la_SOURCES_arm_common
+ ${libunwind_la_SOURCES_common}
+ arm/is_fpreg.c arm/regname.c
+)
+
+# The list of files that go into libunwind:
+SET(libunwind_la_SOURCES_arm
+ ${libunwind_la_SOURCES_arm_common}
+ ${libunwind_la_SOURCES_arm_os_local}
+ ${libunwind_la_SOURCES_local}
+ arm/getcontext.S
+ arm/Lapply_reg_state.c arm/Lreg_states_iterate.c
+ arm/Lcreate_addr_space.c arm/Lget_proc_info.c arm/Lget_save_loc.c
+ arm/Lglobal.c arm/Linit.c arm/Linit_local.c arm/Linit_remote.c
+ arm/Lregs.c arm/Lresume.c arm/Lstep.c
+ arm/Lex_tables.c arm/Lstash_frame.c arm/Ltrace.c
+)
+
+# The list of files that go into libunwind-arm:
+SET(libunwind_arm_la_SOURCES_arm
+ ${libunwind_la_SOURCES_arm_common}
+ ${libunwind_la_SOURCES_arm_os}
+ ${libunwind_la_SOURCES_generic}
+ arm/Gapply_reg_state.c arm/Greg_states_iterate.c
+ arm/Gcreate_addr_space.c arm/Gget_proc_info.c arm/Gget_save_loc.c
+ arm/Gglobal.c arm/Ginit.c arm/Ginit_local.c arm/Ginit_remote.c
+ arm/Gregs.c arm/Gresume.c arm/Gstep.c
+ arm/Gex_tables.c arm/Gstash_frame.c arm/Gtrace.c
+)
+
+# The list of files that go both into libunwind and libunwind-x86_64:
+SET(libunwind_la_SOURCES_x86_64_common
+ ${libunwind_la_SOURCES_common}
+ x86_64/is_fpreg.c x86_64/regname.c
+)
+
+# The list of files that go into libunwind:
+SET(libunwind_la_SOURCES_x86_64
+ ${libunwind_la_SOURCES_x86_64_common}
+ ${libunwind_la_SOURCES_x86_64_os_local}
+ ${libunwind_la_SOURCES_local}
+ x86_64/setcontext.S
+ x86_64/Lapply_reg_state.c x86_64/Lreg_states_iterate.c
+ x86_64/Lcreate_addr_space.c x86_64/Lget_save_loc.c x86_64/Lglobal.c
+ x86_64/Linit.c x86_64/Linit_local.c x86_64/Linit_remote.c
+ x86_64/Lget_proc_info.c x86_64/Lregs.c x86_64/Lresume.c
+ x86_64/Lstash_frame.c x86_64/Lstep.c x86_64/Ltrace.c x86_64/getcontext.S
+)
+
+# The list of files that go into libunwind-x86_64:
+SET(libunwind_x86_64_la_SOURCES_x86_64
+ ${libunwind_la_SOURCES_x86_64_common}
+ ${libunwind_la_SOURCES_x86_64_os}
+ ${libunwind_la_SOURCES_generic}
+ x86_64/Gapply_reg_state.c x86_64/Greg_states_iterate.c
+ x86_64/Gcreate_addr_space.c x86_64/Gget_save_loc.c x86_64/Gglobal.c
+ x86_64/Ginit.c x86_64/Ginit_local.c x86_64/Ginit_remote.c
+ x86_64/Gget_proc_info.c x86_64/Gregs.c x86_64/Gresume.c
+ x86_64/Gstash_frame.c x86_64/Gstep.c x86_64/Gtrace.c
+)
+
+# The list of files that go both into libunwind and libunwind-s390x:
+SET(libunwind_la_SOURCES_s390x_common
+ ${libunwind_la_SOURCES_common}
+ s390x/is_fpreg.c s390x/regname.c
+)
+
+# The list of files that go into libunwind:
+SET(libunwind_la_SOURCES_s390x
+ ${libunwind_la_SOURCES_s390x_common}
+ ${libunwind_la_SOURCES_local}
+ s390x/setcontext.S s390x/getcontext.S
+ s390x/Lapply_reg_state.c s390x/Lreg_states_iterate.c
+ s390x/Lcreate_addr_space.c s390x/Lget_save_loc.c s390x/Lglobal.c
+ s390x/Linit.c s390x/Linit_local.c s390x/Linit_remote.c
+ s390x/Lget_proc_info.c s390x/Lregs.c s390x/Lresume.c
+ s390x/Lis_signal_frame.c s390x/Lstep.c
+)
+
+# The list of files that go into libunwind-s390x:
+SET(libunwind_s390x_la_SOURCES_s390x
+ ${libunwind_la_SOURCES_s390x_common}
+ ${libunwind_la_SOURCES_generic}
+ s390x/Gapply_reg_state.c s390x/Greg_states_iterate.c
+ s390x/Gcreate_addr_space.c s390x/Gget_save_loc.c s390x/Gglobal.c
+ s390x/Ginit.c s390x/Ginit_local.c s390x/Ginit_remote.c
+ s390x/Gget_proc_info.c s390x/Gregs.c s390x/Gresume.c
+ s390x/Gis_signal_frame.c s390x/Gstep.c
+)
+
+# The list of files that go into libunwind and libunwind-loongarch64:
+SET(libunwind_la_SOURCES_loongarch_common
+ ${libunwind_la_SOURCES_common}
+ loongarch64/is_fpreg.c
+ loongarch64/regname.c
+)
+
+# The list of files that go into libunwind:
+SET(libunwind_la_SOURCES_loongarch64
+ ${libunwind_la_SOURCES_loongarch_common}
+ ${libunwind_la_SOURCES_local}
+ loongarch64/Lget_proc_info.c loongarch64/Linit.c loongarch64/Lis_signal_frame.c
+ loongarch64/Lstep.c
+ loongarch64/getcontext.S
+ loongarch64/Lget_save_loc.c
+ loongarch64/Linit_local.c loongarch64/Lregs.c
+ loongarch64/Lcreate_addr_space.c loongarch64/Lglobal.c loongarch64/Linit_remote.c loongarch64/Lresume.c
+)
+
+SET(libunwind_loongarch64_la_SOURCES_loongarch
+ ${libunwind_la_SOURCES_loongarch_common}
+ ${libunwind_la_SOURCES_generic}
+ loongarch64/Gcreate_addr_space.c loongarch64/Gget_proc_info.c loongarch64/Gget_save_loc.c
+ loongarch64/Gglobal.c loongarch64/Ginit.c loongarch64/Ginit_local.c loongarch64/Ginit_remote.c
+ loongarch64/Gis_signal_frame.c loongarch64/Gregs.c loongarch64/Gresume.c loongarch64/Gstep.c
+)
+
+if(TARGET_AARCH64)
+ SET(libunwind_la_SOURCES ${libunwind_la_SOURCES_aarch64})
+ SET(libunwind_remote_la_SOURCES ${libunwind_aarch64_la_SOURCES_aarch64})
+ SET(libunwind_elf_la_SOURCES ${libunwind_elf64_la_SOURCES})
+ list(APPEND libunwind_setjmp_la_SOURCES aarch64/siglongjmp.S)
+elseif(TARGET_ARM)
+ SET(libunwind_la_SOURCES ${libunwind_la_SOURCES_arm})
+ SET(libunwind_remote_la_SOURCES ${libunwind_arm_la_SOURCES_arm})
+ SET(libunwind_elf_la_SOURCES ${libunwind_elf32_la_SOURCES})
+ list(APPEND libunwind_setjmp_la_SOURCES arm/siglongjmp.S)
+elseif(TARGET_AMD64)
+ SET(libunwind_la_SOURCES ${libunwind_la_SOURCES_x86_64})
+ SET(libunwind_remote_la_SOURCES ${libunwind_x86_64_la_SOURCES_x86_64})
+ SET(libunwind_elf_la_SOURCES ${libunwind_elf64_la_SOURCES})
+ list(APPEND libunwind_setjmp_la_SOURCES x86_64/longjmp.S x86_64/siglongjmp.SA)
+elseif(TARGET_S390X)
+ SET(libunwind_la_SOURCES ${libunwind_la_SOURCES_s390x})
+ SET(libunwind_remote_la_SOURCES ${libunwind_s390x_la_SOURCES_s390x})
+ SET(libunwind_elf_la_SOURCES ${libunwind_elf64_la_SOURCES})
+elseif(TARGET_LOONGARCH64)
+ SET(libunwind_la_SOURCES ${libunwind_la_SOURCES_loongarch64})
+ SET(libunwind_remote_la_SOURCES ${libunwind_loongarch64_la_SOURCES_loongarch})
+ SET(libunwind_elf_la_SOURCES ${libunwind_elf64_la_SOURCES})
+endif()
+
+add_library(libunwind
+ OBJECT
+ win/pal-single-threaded.c
+ # ${libunwind_la_SOURCES} Local...
+ ${libunwind_remote_la_SOURCES}
+ # Commented out above for LOCAL + REMOTE runtime build
+ mi/Gget_accessors.c
+ # ${libunwind_dwarf_local_la_SOURCES}
+ ${libunwind_dwarf_common_la_SOURCES}
+ ${libunwind_dwarf_generic_la_SOURCES}
+ ${libunwind_elf_la_SOURCES}
+)
dwarf_init ();
+#ifndef UNW_REMOTE_ONLY
tdep_init_mem_validate ();
-#ifndef UNW_REMOTE_ONLY
loongarch64_local_addr_space_init ();
#endif
tdep_init_done = 1; /* signal that we're initialized... */
set(CMAKE_INCLUDE_CURRENT_DIR ON)
-# define variables for the configure_file below
-
-set(PKG_MAJOR "1")
-set(PKG_MINOR "5")
-set(PKG_EXTRA "-rc2")
-
# The HAVE___THREAD set to 1 causes creation of thread local variable with tls_model("initial-exec")
# which is incompatible with usage of the unwind code in a shared library.
add_definitions(-DHAVE___THREAD=0)
# Our posix abstraction layer will provide these headers
set(HAVE_ELF_H 1)
set(HAVE_ENDIAN_H 1)
-
- # include paths
- include_directories(include/tdep)
- include_directories(include)
- include_directories(${CMAKE_CURRENT_BINARY_DIR}/include/tdep)
- include_directories(${CMAKE_CURRENT_BINARY_DIR}/include)
-
- # files for macos compilation
- include_directories(../libunwind_mac/include)
endif(CLR_CMAKE_HOST_OSX)
endif(CLR_CMAKE_HOST_UNIX)
add_compile_options(/permissive-)
# include paths
- include_directories(include/tdep)
- include_directories(include)
- include_directories(${CMAKE_CURRENT_BINARY_DIR}/include/tdep)
- include_directories(${CMAKE_CURRENT_BINARY_DIR}/include)
+ include_directories(${CLR_SRC_NATIVE_DIR}/external/libunwind/include/tdep)
+ include_directories(${CLR_SRC_NATIVE_DIR}/external/libunwind/include)
+ include_directories(${CLR_ARTIFACTS_OBJ_DIR}/external/libunwind/include/tdep)
+ include_directories(${CLR_ARTIFACTS_OBJ_DIR}/external/libunwind/include)
# files for cross os compilation
- include_directories(include/win)
+ include_directories(${CLR_SRC_NATIVE_DIR}/external/libunwind/include/win)
add_definitions(-D_CRT_DECLARE_NONSTDC_NAMES)
# The arm sources include ex_tables.h from include/tdep-arm without going through a redirection
# in include/tdep like it works for similar files on other architectures. So we need to add
# the include/tdep-arm to include directories
- include_directories(include/tdep-arm)
+ include_directories(${CLR_SRC_NATIVE_DIR}/external/libunwind/include/tdep-arm)
endif()
include(configure.cmake)
-add_subdirectory(src)
+include(${CLR_SRC_NATIVE_DIR}/external/libunwind.cmake)
+
+set(LIBUNWIND_SOURCES
+ ${LIBUNWIND_SOURCES}
+ ${CMAKE_CURRENT_LIST_DIR}/oop/_OOP_find_proc_info.c)
+
+if(CLR_CMAKE_HOST_UNIX)
+ if(CLR_CMAKE_HOST_OSX)
+ include_directories(${CMAKE_CURRENT_LIST_DIR}/mac)
+ add_library(libunwind_dac OBJECT
+ ${CMAKE_CURRENT_LIST_DIR}/mac/missing-functions.c
+ ${LIBUNWIND_SOURCES})
+ else()
+ add_library(libunwind OBJECT ${LIBUNWIND_SOURCES})
+ endif(CLR_CMAKE_HOST_OSX)
+else(CLR_CMAKE_HOST_UNIX)
+ add_library(libunwind_xdac OBJECT
+ ${CLR_DIR}/pal/src/exception/remote-unwind.cpp
+ ${LIBUNWIND_SOURCES})
+endif(CLR_CMAKE_HOST_UNIX)
-# This is a custom file written for .NET Core's build system
-
-
include(CheckCSourceCompiles)
include(CheckIncludeFiles)
# Fake it until support is added
check_include_files(stdalign.h HAVE_STDALIGN_H)
if (NOT HAVE_STDALIGN_H)
- configure_file(include/win/fakestdalign.h.in ${CMAKE_CURRENT_BINARY_DIR}/include/stdalign.h COPYONLY)
+ configure_file(${CLR_SRC_NATIVE_DIR}/external/libunwind/include/win/fakestdalign.h.in ${CMAKE_CURRENT_BINARY_DIR}/include/stdalign.h COPYONLY)
endif (NOT HAVE_STDALIGN_H)
# MSVC compiler is currently missing C11 stdatomic.h header
check_c_source_compiles("#include <stdatomic.h> void main() { _Atomic int a; }" HAVE_STDATOMIC_H)
if (NOT HAVE_STDATOMIC_H)
- configure_file(include/win/fakestdatomic.h.in ${CMAKE_CURRENT_BINARY_DIR}/include/stdatomic.h COPYONLY)
+ configure_file(${CLR_SRC_NATIVE_DIR}/external/libunwind/include/win/fakestdatomic.h.in ${CMAKE_CURRENT_BINARY_DIR}/include/stdatomic.h COPYONLY)
endif (NOT HAVE_STDATOMIC_H)
# MSVC compiler is currently missing C11 _Thread_local
configure_file(${CMAKE_CURRENT_LIST_DIR}/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/include/config.h)
add_definitions(-DHAVE_CONFIG_H=1)
-configure_file(include/libunwind-common.h.in ${CMAKE_CURRENT_BINARY_DIR}/include/libunwind-common.h)
-configure_file(include/libunwind.h.in ${CMAKE_CURRENT_BINARY_DIR}/include/libunwind.h)
-configure_file(include/tdep/libunwind_i.h.in ${CMAKE_CURRENT_BINARY_DIR}/include/tdep/libunwind_i.h)
+configure_file(${CLR_SRC_NATIVE_DIR}/external/libunwind/include/libunwind-common.h.in ${CMAKE_CURRENT_BINARY_DIR}/include/libunwind-common.h)
+configure_file(${CLR_SRC_NATIVE_DIR}/external/libunwind/include/libunwind.h.in ${CMAKE_CURRENT_BINARY_DIR}/include/libunwind.h)
+configure_file(${CLR_SRC_NATIVE_DIR}/external/libunwind/include/tdep/libunwind_i.h.in ${CMAKE_CURRENT_BINARY_DIR}/include/tdep/libunwind_i.h)