[PATCH] D13160: unwind: Allow the building of libunwind for MIPS.

Vasileios Kalintiris via llvm-commits llvm-commits at lists.llvm.org
Fri Sep 25 02:46:54 PDT 2015


vkalintiris created this revision.
vkalintiris added reviewers: compnerd, logan.
vkalintiris added subscribers: llvm-commits, dsanders.

Currently, libunwind doesn't support MIPS. However, with this patch
we do allow the library to build, and we warn the user about the lack of
support for MIPS. Also, the dummy unw_getcontext() implementation for MIPS just
traps on function entry in order to avoid any confusion with silent/weird
failures at runtime.

This allows us to test an LLVM-based toolchain without the dependency on a
GCC toolchain. Of course, C++ exception handling and other things that depend
on stack unwinding will not work until we add a proper implementation of the
stub functions.

http://reviews.llvm.org/D13160

Files:
  src/UnwindRegistersSave.S
  src/config.h
  src/libunwind.cpp

Index: src/libunwind.cpp
===================================================================
--- src/libunwind.cpp
+++ src/libunwind.cpp
@@ -64,6 +64,8 @@
 #elif defined(__or1k__)
   new ((void *)cursor) UnwindCursor<LocalAddressSpace, Registers_or1k>(
                                  context, LocalAddressSpace::sThisAddressSpace);
+#elif defined(__mips__)
+#warning The MIPS architecture is not supported.
 #else
 #error Architecture not supported
 #endif
Index: src/config.h
===================================================================
--- src/config.h
+++ src/config.h
@@ -41,7 +41,8 @@
 
   #define _LIBUNWIND_BUILD_ZERO_COST_APIS (defined(__i386__) || \
                                            defined(__x86_64__) || \
-                                           defined(__arm64__))
+                                           defined(__arm64__) || \
+                                           defined(__mips__))
   #define _LIBUNWIND_BUILD_SJLJ_APIS      defined(__arm__)
   #define _LIBUNWIND_SUPPORT_FRAME_APIS   (defined(__i386__) || \
                                            defined(__x86_64__))
Index: src/UnwindRegistersSave.S
===================================================================
--- src/UnwindRegistersSave.S
+++ src/UnwindRegistersSave.S
@@ -87,6 +87,15 @@
   xorl  %eax, %eax    # return UNW_ESUCCESS
   ret
 
+# elif defined(__mips__)
+
+#
+# extern int unw_getcontext(unw_context_t* thread_state)
+#
+# Just trap for the time being.
+DEFINE_LIBUNWIND_FUNCTION(unw_getcontext)
+  teq $0, $0
+
 #elif defined(__ppc__)
 
 ;


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D13160.35711.patch
Type: text/x-patch
Size: 1572 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150925/da9b1eeb/attachment.bin>


More information about the llvm-commits mailing list