]> sourceware.org Git - valgrind.git/commitdiff
README / comments: update debugging advice
authorPaul Floyd <pjfloyd@wanadoo.fr>
Fri, 29 Sep 2023 06:57:42 +0000 (08:57 +0200)
committerPaul Floyd <pjfloyd@wanadoo.fr>
Fri, 29 Sep 2023 06:57:42 +0000 (08:57 +0200)
And add an explanation for the odd FreeBSD amd64 startup stack alignment.

README_DEVELOPERS
coregrind/m_main.c
coregrind/m_syswrap/syswrap-freebsd.c

index 5b93b1c87084a710a3bb7cff21feb11cc92a281e..6cefd0faa96652215bb3ff33b9e212280b1f73f3 100644 (file)
@@ -172,6 +172,13 @@ A different and possibly easier way is as follows:
     will continue as normal.  Note that comment (3) above re passing
     signals applies here too.
 
+The default build of Valgrind uses "-g -O2". This is OK most of the
+time, but with sophisticated optimization it can be difficult to
+see the contents of variables. A quick way to get to see function
+variables is to temporarily add "__attribute__((optnone))" before
+the function definition and rebuild. Alternatively modify
+Makefile.all.am and remove -O2 from AM_CFLAGS_BASE. That will
+require you to reconfigure and rebuild Valgrind.
 
 Self-hosting
 ~~~~~~~~~~~~
index b8751341a0ff6586ccf8ce4122ca9151a9328764..9087aafb0291e46ee57b14854d89a64f2b4508ba 100644 (file)
@@ -3419,6 +3419,11 @@ asm("\n"
 //
 // Maybe on FreeBSD the pointer to argc is 16byte aligned and can be 8 bytes above the
 // start of the stack?
+//
+// Some answers to this mystery here
+// https://forums.freebsd.org/threads/stack-alignment-argc-location-in-assembled-binaries.89302/#post-613119
+// and here
+// https://github.com/freebsd/freebsd-src/blob/releng/5.1/sys/amd64/amd64/machdep.c#LL487C1-L488C42
 
 asm("\n"
     ".text\n"
index 3efb64a43f9a65c0ef318571a80dadb154cf024a..ce50566698cbe6f33c58d1427f2d9939ae197f2f 100644 (file)
@@ -130,7 +130,21 @@ static VgSchedReturnCode thread_wrapper(Word /*ThreadId*/ tidW)
    ------------------------------------------------------------------ */
 
 /* Run a thread all the way to the end, then do appropriate exit actions
-   (this is the last-one-out-turn-off-the-lights bit).  */
+ *   (this is the last-one-out-turn-off-the-lights bit).
+ *
+ * This is marked as __attribute__((noreturn)). That has the effect of
+ * making clang++ no longer emit the function prologue and epilogue
+ * to save the base pointer.
+ *
+ * As far as I can tell clang -O2 does not include -fomit-frame-pointer
+ * However, since from here on the saved base pointer values are
+ * junk tools like FreeBSD pstack that only rely on base pointer
+ * walking will not work. FreeBSD bstack does work, based on GDB and
+ * reading debuginfo.
+ *
+ * If you really need a working base pointer modify Makefile.all.am
+ * and add -fno-omit-frame-pointer to AM_CFLAGS_BASE.
+ */
 __attribute__((noreturn))
 static void run_a_thread_NORETURN ( Word tidW )
 {
This page took 0.096639 seconds and 5 git commands to generate.