$ uname -a
Linux localhost.localdomain 2.6.15-1.2054_FC5smp #1 SMP Tue Mar 14 16:05:46 EST
2006 i686 i686 i386 GNU/Linux

$ gcc -v
Using built-in specs.
Target: i386-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man
--infodir=/usr/share/info --enable-shared --enable-threads=posix
--enable-checking=release --with-system-zlib --enable-__cxa_atexit
--disable-libunwind-exceptions --enable-libgcj-multifile
--enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk
--disable-dssi --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre
--with-cpu=generic --host=i386-redhat-linux
Thread model: posix
gcc version 4.1.1 20060525 (Red Hat 4.1.1-1)

It appears that -g is broken for use when trying to generate objects for shared
libraries. The following should demonstrate.

file XYZ.C

-------
#include <iostream>
class XYZ
{
public:
  XYZ(void);
  ~XYZ(void);
};
XYZ::XYZ(void)
{ std::cout << "XYZ" << std::endl; }
XYZ::~XYZ(void)
{ std::cout << "~XYZ" << std::endl; }
-----------

build,create and check:

$ gcc -g -fPIC -o XYZ.o -c XYZ.C
$ gcc -shared -g -fPIC -o libXYZ.so.1 XYZ.o
$ /usr/bin/readelf -l ./libXYZ.so.1

Elf file type is DYN (Shared object file)
Entry point 0x730
There are 5 program headers, starting at offset 52

Program Headers:
  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg
Align
  NULL           0x000000 0x00000000 0x00000000 0x00000 0x00000     0
  NULL           0x000000 0x00000000 0x00000000 0x00000 0x00000     0
  NULL           0x000000 0x00000000 0x00000000 0x00000 0x00000     0
  NULL           0x000000 0x00000000 0x00000000 0x00000 0x00000     0
  NULL           0x000000 0x00000000 0x00000000 0x00000 0x00000     0

 Section to Segment mapping:
  Segment Sections...
   00
   01
   02
   03
   04

If you remove -g from the compile of XYZ.C then you get the right thing.
$ gcc -fPIC -o XYZ.o -c XYZ.C
$ gcc -shared -g -fPIC -o libXYZ.so.1 XYZ.o
$ /usr/bin/readelf -l ./libXYZ.so.1
Program Headers:
  Type           Offset   VirtAddr   PhysAddr   FileSiz  MemSiz   Flg Align
  LOAD           0x000000 0x00000000 0x00000000 0x000750 0x000750 R E 0x1000
  LOAD           0x000750 0x00001750 0x00001750 0x0000cc 0x0000d0 RW  0x1000
  DYNAMIC        0x000754 0x00001754 0x00001754 0x000098 0x000098 RW  0x4
  GNU_STACK      0x000000 0x00000000 0x00000000 0x000000 0x000000 RW  0x4

 Section to Segment mapping:
  Segment Sections...
   00      [RO: .hash .dynsym .dynstr .rel.dyn .rel.plt .plt .text .rodata
.eh_frame]
   01      .ctors .dynamic .got .got.plt .data .bss
   02      .dynamic
   03


-- 
           Summary: gcc -g and shared objects
           Product: gcc
           Version: 4.1.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: jmbnyc at gmail dot com


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28746

Reply via email to