[libcxx-commits] [PATCH] D66889: [libunwind] Fix unw_get_proc_info sometimes returning stale data

Amanieu d'Antras via Phabricator via libcxx-commits libcxx-commits at lists.llvm.org
Wed Sep 18 11:02:35 PDT 2019


Amanieu updated this revision to Diff 220707.
Amanieu added a comment.

Added a test.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D66889/new/

https://reviews.llvm.org/D66889

Files:
  libunwind/src/UnwindCursor.hpp
  libunwind/test/libunwind_01.pass.cpp


Index: libunwind/test/libunwind_01.pass.cpp
===================================================================
--- libunwind/test/libunwind_01.pass.cpp
+++ libunwind/test/libunwind_01.pass.cpp
@@ -35,8 +35,29 @@
   test2(j, k);
 }
 
+void test_no_info() {
+  unw_context_t context;
+  unw_getcontext(&context);
+
+  unw_cursor_t cursor;
+  unw_init_local(&cursor, &context);
+
+  unw_proc_info_t info;
+  int ret = unw_get_proc_info(&cursor, &info);
+  if (ret != UNW_ESUCCESS)
+    abort();
+
+  // Set the IP to an address clearly outside any function.
+  unw_set_reg(&cursor, UNW_REG_IP, (unw_word_t)&context);
+
+  ret = unw_get_proc_info(&cursor, &info);
+  if (ret != UNW_ENOINFO)
+    abort();
+}
+
 int main() {
   test1(1);
   test2(1, 2);
   test3(1, 2, 3);
+  test_no_info();
 }
Index: libunwind/src/UnwindCursor.hpp
===================================================================
--- libunwind/src/UnwindCursor.hpp
+++ libunwind/src/UnwindCursor.hpp
@@ -1991,7 +1991,10 @@
 
 template <typename A, typename R>
 void UnwindCursor<A, R>::getInfo(unw_proc_info_t *info) {
-  *info = _info;
+  if (_unwindInfoMissing)
+    memset(info, 0, sizeof(*info));
+  else
+    *info = _info;
 }
 
 template <typename A, typename R>


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D66889.220707.patch
Type: text/x-patch
Size: 1236 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/libcxx-commits/attachments/20190918/29288bb5/attachment-0001.bin>


More information about the libcxx-commits mailing list