From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 45444 invoked by alias); 6 Jun 2015 23:55:51 -0000 Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org Received: (qmail 45428 invoked by uid 48); 6 Jun 2015 23:55:47 -0000 From: "smokeyjoe4u at hotmail dot com" To: gcc-bugs@gcc.gnu.org Subject: [Bug debug/66446] New: Incorrect symbol output with -fno-omit-frame-pointer Date: Sat, 06 Jun 2015 23:55:00 -0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: new X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: debug X-Bugzilla-Version: 4.9.2 X-Bugzilla-Keywords: X-Bugzilla-Severity: normal X-Bugzilla-Who: smokeyjoe4u at hotmail dot com X-Bugzilla-Status: UNCONFIRMED X-Bugzilla-Resolution: X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: bug_id short_desc product version bug_status bug_severity priority component assigned_to reporter target_milestone attachments.created Message-ID: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 X-SW-Source: 2015-06/txt/msg00599.txt.bz2 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66446 Bug ID: 66446 Summary: Incorrect symbol output with -fno-omit-frame-pointer Product: gcc Version: 4.9.2 Status: UNCONFIRMED Severity: normal Priority: P3 Component: debug Assignee: unassigned at gcc dot gnu.org Reporter: smokeyjoe4u at hotmail dot com Target Milestone: --- Created attachment 35709 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=35709&action=edit Test case in C. I realize I must be the only person on the planet still using STABs. When the following test case is compiled, GCC emits the wrong location for stack-based variables. In this case, the variable LocalList is at ebp-0x20, but GCC emits a symbol indicating it is at ebp-0x10. If I reduce the code further, then the stack offsets all change and become consistent with the reported STABs. From my limited sample size, it appears that when the symbols are wrong, they're always off by 16. The bug exhibits itself on -O1 through -O3, but not -O0. I'm using GCC 4.8.2 on Ubuntu, but have also verified the issue on 4.9.2. The last build not to exhibit the issue was GCC 4.7.4. I tried debugging this myself but got lost in all the RTL and optimizations. It appears the RTL hanging off the current_function_decl indicates LocalList at argp-8, which is then eliminated to hardfp-16. But the RTL used to actually emit assembly seems to be somewhere entirely different (and is always ebp-32), and I can't figure out how the two are (or should be) connected. gcc -O1 -fno-omit-frame-pointer -gstabs+ -m32 -S ./t.c t.c: ============================ typedef struct _LIST_ENTRY LIST_ENTRY, *PLIST_ENTRY; struct _LIST_ENTRY { PLIST_ENTRY Next; PLIST_ENTRY Previous; }; typedef struct _MYSTRUCT MYSTRUCT, *PMYSTRUCT; struct _MYSTRUCT { unsigned int Member; }; LIST_ENTRY MyGlobalList; void Nonsense ( ) { PLIST_ENTRY CurrentEntry; PMYSTRUCT MyStruct; LIST_ENTRY LocalList; LocalList.Next = MyGlobalList.Next; CurrentEntry = LocalList.Next; while (CurrentEntry != &LocalList) { MyStruct = (PMYSTRUCT)CurrentEntry; CurrentEntry = CurrentEntry->Next; Nonsense(MyStruct->Member); Nonsense(MyStruct); } return; } =============================== Output: ... (snip) ... Nonsense: ... leal -32(%ebp), %eax <<< The variable LocalList is at -32(%ebp) ... .size Nonsense, .-Nonsense .stabs "LocalList:(0,19)",128,0,23,-16 <<< The stabs being generated are telling me it's at -16(%ebp). ... .Letext0: .ident "GCC: (Ubuntu 4.8.2-19ubuntu1) 4.8.2" =============================== specifics (this is just the stock Ubuntu compiler): gcc -v Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.8/lto-wrapper Target: x86_64-linux-gnu Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.8.2-19ubuntu1' --with-bugurl=file:///usr/share/doc/gcc-4.8/README.Bugs --enable-languages=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.8 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.8 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --disable-libmudflap --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.8-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu Thread model: posix gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1)