Don't know if anyone is still working on this problem (i.e. corrupt stack on arm in gdb), but I've found a solution. Any code that is compiled with -g seems to work fine with gdb, as far as generating a backtrace. The problem is that most system library code is built without -g, so gdb doesn't have whatever information is necessary to unwind the stack properly.
It seems that gcc, with the -g option, adds .cfi directives into the assembler code, and gdb needs that info. Remove the .cfi directives and you get the "Backtrace stopped: previous frame identical to this frame (corrupt stack?)" error. Even a very simple program with subroutine calls (similar to below) will exhibit this problem: void foo(int i) { if (i < 100) foo(i+1); printf("i=%d\n", i); } main() { foo(0); } When compiled without -g each time the program calls foo the stack looks to gdb like it's corrupted, and only the topmost level is shown, along with the error. Compile with -g and everything works, at least until you step into printf, which wasn't compiled with -g. Once you step out of printf you'll get your stack back. This feels like a compiler bug to me, i.e. gcc __SHOULD__ generate at least the minimal set of .cfi directives that are needed for gdb to generate a backtrace, regardless of whether -g is specified or not. -- You received this bug notification because you are a member of Ubuntu Touch seeded packages, which is subscribed to gdb in Ubuntu. https://bugs.launchpad.net/bugs/1325503 Title: gdb reports 'corrupt stack' on armhf without symbols Status in Linaro GDB: New Status in gdb package in Ubuntu: Triaged Bug description: [Test Case] sleep 120 & kill -SEGV %1 Observe a corrupt stack in the generated crash file. Original Report --------------- On armhf crash files fail to retrace and gdb reports 'corrupt stack' errors For example bug 1323241 Thread 1 (Thread 0xb0b3b450 (LWP 2243)): #0 0x00000030 in ?? () No symbol table info available. #1 0xa9990cbe in ?? () from /usr/lib/arm-linux-gnueabihf/unity8/qml/Unity/Launcher/libUnityLauncher-qml.so No symbol table info available. Backtrace stopped: previous frame identical to this frame (corrupt stack?) I also tried directly on the device to run an unstripped and stripped build of cat and gdb fails to unwind the stack when the binary is stripped. The result of this test is: == unstripped == Reading symbols from ./cat...done. (gdb) run Starting program: /home/phablet/tmp/coreutils-8.21/src/cat ^C Program received signal SIGINT, Interrupt. 0xb6f6e914 in read () from /lib/arm-linux-gnueabihf/libc.so.6 (gdb) bt #0 0xb6f6e914 in read () from /lib/arm-linux-gnueabihf/libc.so.6 #1 0x0000b648 in read (__nbytes=65536, __buf=0x19000, __fd=0) at /usr/include/arm-linux-gnueabihf/bits/unistd.h:44 #2 safe_read (fd=0, buf=buf@entry=0x19000, count=count@entry=65536) at lib/safe-read.c:66 #3 0x00009ace in simple_cat (bufsize=65536, buf=0x19000 "") at src/cat.c:168 #4 main (argc=1, argv=<optimized out>) at src/cat.c:730 (gdb) quit == stripped == Reading symbols from ./cat...(no debugging symbols found)...done. (gdb) run Starting program: /home/phablet/tmp/coreutils-8.21/src/cat ^C Program received signal SIGINT, Interrupt. 0xb6f6e914 in read () from /lib/arm-linux-gnueabihf/libc.so.6 (gdb) bt #0 0xb6f6e914 in read () from /lib/arm-linux-gnueabihf/libc.so.6 #1 0x0000b648 in ?? () Backtrace stopped: previous frame identical to this frame (corrupt stack?) I'd expect the same number of frames and addresses when the binary is stripped or not with '??' instead of names when it is stripped. ProblemType: BugDistroRelease: Ubuntu 14.10 Package: gdb (not installed) Uname: Linux 3.4.0-5-mako armv7l ApportVersion: 2.14.3-0ubuntu1 Architecture: armhf Date: Mon Jun 2 11:07:07 2014 InstallationDate: Installed on 2014-06-02 (0 days ago) InstallationMedia: Ubuntu Utopic Unicorn (development branch) - armhf (20140602)SourcePackage: gdb UpgradeStatus: No upgrade log present (probably fresh install) To manage notifications about this bug go to: https://bugs.launchpad.net/gdb-linaro/+bug/1325503/+subscriptions -- Mailing list: https://launchpad.net/~touch-packages Post to : touch-packages@lists.launchpad.net Unsubscribe : https://launchpad.net/~touch-packages More help : https://help.launchpad.net/ListHelp