public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug debug/66446] New: Incorrect symbol output with -fno-omit-frame-pointer
@ 2015-06-06 23:55 smokeyjoe4u at hotmail dot com
  2015-06-08 22:59 ` [Bug debug/66446] " smokeyjoe4u at hotmail dot com
  2015-06-08 23:01 ` smokeyjoe4u at hotmail dot com
  0 siblings, 2 replies; 3+ messages in thread
From: smokeyjoe4u at hotmail dot com @ 2015-06-06 23:55 UTC (permalink / raw)
  To: gcc-bugs

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)


^ permalink raw reply	[flat|nested] 3+ messages in thread

* [Bug debug/66446] Incorrect symbol output with -fno-omit-frame-pointer
  2015-06-06 23:55 [Bug debug/66446] New: Incorrect symbol output with -fno-omit-frame-pointer smokeyjoe4u at hotmail dot com
@ 2015-06-08 22:59 ` smokeyjoe4u at hotmail dot com
  2015-06-08 23:01 ` smokeyjoe4u at hotmail dot com
  1 sibling, 0 replies; 3+ messages in thread
From: smokeyjoe4u at hotmail dot com @ 2015-06-08 22:59 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66446

--- Comment #1 from Evan G <smokeyjoe4u at hotmail dot com> ---
Created attachment 35719
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=35719&action=edit
Patch to use LRA eliminations in dbxout


^ permalink raw reply	[flat|nested] 3+ messages in thread

* [Bug debug/66446] Incorrect symbol output with -fno-omit-frame-pointer
  2015-06-06 23:55 [Bug debug/66446] New: Incorrect symbol output with -fno-omit-frame-pointer smokeyjoe4u at hotmail dot com
  2015-06-08 22:59 ` [Bug debug/66446] " smokeyjoe4u at hotmail dot com
@ 2015-06-08 23:01 ` smokeyjoe4u at hotmail dot com
  1 sibling, 0 replies; 3+ messages in thread
From: smokeyjoe4u at hotmail dot com @ 2015-06-08 23:01 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66446

--- Comment #2 from Evan G <smokeyjoe4u at hotmail dot com> ---
Oh wait, I got it. The LRA stuff wasn't added to dbxout.c, so stabs were being
generated based on the old reload1 eliminations. The attached patch takes the
same approach as dwarf2out.c, and uses register eliminations from the
appropriate module.


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2015-06-08 23:01 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-06-06 23:55 [Bug debug/66446] New: Incorrect symbol output with -fno-omit-frame-pointer smokeyjoe4u at hotmail dot com
2015-06-08 22:59 ` [Bug debug/66446] " smokeyjoe4u at hotmail dot com
2015-06-08 23:01 ` smokeyjoe4u at hotmail dot com

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).