[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#628063: g++-4.6: inline causes virtual methods not to be considered on armel



Package: g++-4.6
Version: 4.6.0-9
Severity: normal


Meanningless inline requests should be ignored by the compiler,
but this is not the case on armel (armv5tel), symbols disappear
instead.


class C {
  public:
      C();
  private:
      virtual void foo();
};
	    
inline C::C() {
}
	    
#ifdef inline_this_virtual
inline
#endif
void C::foo()  {
}

$ g++-4.6 -fPIC -shared  -Wl,-z,defs -o testinl.so testinl.cc
$ objdump -T testinl.so | c++filt 
	    
testinl.so:     file format elf32-littlearm
   
DYNAMIC SYMBOL TABLE:
00000524 l    d  .init  00000000              .init
00008678 l    d  .jcr   00000000              .jcr
00000000  w   D  *UND*  00000000              __gmon_start__
00000000  w   D  *UND*  00000000              _Jv_RegisterClasses
00000000      DO *UND*  00000000  CXXABI_1.3  vtable for __cxxabiv1::__class_type_info
00000000  w   DF *UND*  00000000  GLIBC_2.4   __cxa_finalize
00000660 g    DO .rodata        00000003  Base        typeinfo name for C
0000868c g    DO .data.rel.ro   00000008  Base        typeinfo for C
00008680 g    DO .data.rel.ro   0000000c  Base        vtable for C
000087c0 g    D  *ABS*  00000000  Base        _bss_end__
000087c0 g    D  *ABS*  00000000  Base        _end
000087bc g    D  *ABS*  00000000  Base        _edata
000087c0 g    D  *ABS*  00000000  Base        __bss_end__
000087bc g    D  *ABS*  00000000  Base        __bss_start
00000638 g    DF .text  0000001c  Base        C::foo()
00000524 g    DF .init  00000000  Base        _init
00000654 g    DF .fini  00000000  Base        _fini
000087bc g    D  *ABS*  00000000  Base        __bss_start__
000087c0 g    D  *ABS*  00000000  Base        __end__


$ g++-4.6 -fPIC -shared  -Wl,-z,defs -o testinl.so testinl.cc -Dinline_this_virtual
$ objdump -T testinl.so | c++filt 

testinl.so:     file format elf32-littlearm

DYNAMIC SYMBOL TABLE:
000003b4 l    d  .init  00000000              .init
000084e0 l    d  .jcr   00000000              .jcr
00000000  w   D  *UND*  00000000              __gmon_start__
00000000  w   D  *UND*  00000000              _Jv_RegisterClasses
00000000  w   DF *UND*  00000000  GLIBC_2.4   __cxa_finalize
0000860c g    D  *ABS*  00000000  Base        _bss_end__
0000860c g    D  *ABS*  00000000  Base        _end
00008608 g    D  *ABS*  00000000  Base        _edata
0000860c g    D  *ABS*  00000000  Base        __bss_end__
00008608 g    D  *ABS*  00000000  Base        __bss_start
000003b4 g    DF .init  00000000  Base        _init
000004c8 g    DF .fini  00000000  Base        _fini
00008608 g    D  *ABS*  00000000  Base        __bss_start__
0000860c g    D  *ABS*  00000000  Base        __end__


Now, C::foo() is gone.

Note, that this subtlety is specific to the armel architecture only,
anywhere else C::foo() is not silently dropped.

References:

http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=602817
http://gcc.gnu.org/ml/gcc-help/2011-05/msg00352.html


-- System Information:
Debian Release: wheezy/sid
  APT prefers unstable
  APT policy: (500, 'unstable'), (500, 'testing')
Architecture: amd64 (x86_64)

Kernel: Linux 2.6.37-2-amd64 (SMP w/2 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash

Versions of packages g++-4.6 depends on:
ii  gcc-4.6                 4.6.0-9          The GNU C compiler
ii  gcc-4.6-base            4.6.0-9          The GNU Compiler Collection (base 
ii  libc6                   2.13-4           Embedded GNU C Library: Shared lib
ii  libcloog-ppl0           0.15.9-3         the Chunky Loop Generator (runtime
ii  libgmp10                2:5.0.1+dfsg-7   Multiprecision arithmetic library
ii  libgmpxx4ldbl           2:5.0.1+dfsg-7   Multiprecision arithmetic library 
ii  libmpc2                 0.9-3            multiple precision complex floatin
ii  libmpfr4                3.0.1-3          multiple precision floating-point 
ii  libppl-c4               0.11.2-3         Parma Polyhedra Library (C interfa
ii  libppl9                 0.11.2-3         Parma Polyhedra Library (runtime l
ii  libstdc++6-4.6-dev      4.6.0-9          The GNU Standard C++ Library v3 (d
ii  zlib1g                  1:1.2.3.4.dfsg-3 compression library - runtime

g++-4.6 recommends no packages.

Versions of packages g++-4.6 suggests:
ii  g++-4.6-multilib              4.6.0-9    The GNU C++ compiler (multilib fil
pn  gcc-4.6-doc                   <none>     (no description available)
pn  libstdc++6-4.6-dbg            <none>     (no description available)

-- no debconf information



Reply to: