]> git.ipfire.org Git - thirdparty/open-vm-tools.git/commitdiff
Make peeking back into the stack work for back traces
authorOliver Kurth <okurth@vmware.com>
Wed, 10 Jun 2020 19:05:46 +0000 (12:05 -0700)
committerOliver Kurth <okurth@vmware.com>
Wed, 10 Jun 2020 19:05:46 +0000 (12:05 -0700)
GCC 10 doesn't like peeking back before the end of an arrary (which
is used to peek into the stack).  Fix this.

https://github.com/vmware/open-vm-tools/issues/429

open-vm-tools/lib/user/utilBacktrace.c

index 99871365647512953e9ab9ae8de1d3f41e356cfa..d26d21e7dc8116bbd262ae9a7cfb572ad94094f4 100644 (file)
@@ -343,7 +343,8 @@ UtilBacktraceFromPointerWithFunc(uintptr_t *basePtr,       // IN:
                                i, x[0], x[1], dli.dli_sname, dli.dli_fname,
                                 dli.dli_fbase);
       } else {
-         outFunc(outFuncData, "SymBacktrace[%d] %#08x eip %#08x \n", i, x[0], x[1]);
+         outFunc(outFuncData, "SymBacktrace[%d] %#08x eip %#08x \n", i, x[0],
+                 x[1]);
       }
       x = (uintptr_t *) x[0];
    }
@@ -394,6 +395,7 @@ Util_Backtrace(int bugNr) // IN
  *-----------------------------------------------------------------------------
  */
 
+
 void
 Util_BacktraceWithFunc(int bugNr,                // IN:
                        Util_OutputFunc outFunc,  // IN:
@@ -413,7 +415,7 @@ Util_BacktraceWithFunc(int bugNr,                // IN:
    if (bugNr == 0) {
       outFunc(outFuncData, "Backtrace:\n");
    } else {
-      outFunc(outFuncData, "Backtrace for bugNr=%d\n",bugNr);
+      outFunc(outFuncData, "Backtrace for bugNr=%d\n", bugNr);
    }
    frames = backtrace(callstack, ARRAYSIZE(callstack));
    for (i = 0; i < frames; i++) {
@@ -431,14 +433,14 @@ Util_BacktraceWithFunc(int bugNr,                // IN:
       }
    }
 #else
-   uintptr_t *x = (uintptr_t *) &bugNr;
-
    if (bugNr == 0) {
       outFunc(outFuncData, "Backtrace:\n");
    } else {
-      outFunc(outFuncData, "Backtrace for bugNr=%d\n",bugNr);
+      outFunc(outFuncData, "Backtrace for bugNr=%d\n", bugNr);
    }
-   /* coverity[ptr_arith] */
-   UtilBacktraceFromPointerWithFunc(&x[-2], outFunc, outFuncData);
+
+   UtilBacktraceFromPointerWithFunc(__builtin_frame_address(0), outFunc,
+                                    outFuncData);
 #endif
 }
+