This is the mail archive of the gdb-prs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug symtab/13277] New: gdb does not resolve opaque structures inbinaries compiled with ICC.


http://sourceware.org/bugzilla/show_bug.cgi?id=13277

             Bug #: 13277
           Summary: gdb does not resolve opaque structures in binaries
                    compiled with ICC.
           Product: gdb
           Version: 7.3
            Status: NEW
          Severity: normal
          Priority: P2
         Component: symtab
        AssignedTo: unassigned@sourceware.org
        ReportedBy: toojays@toojays.net
    Classification: Unclassified


gdb does not resolve opaque structures in binaries compiled with ICC.

An example program using a pointer to an opaque structure looks like:

$ cat opaque.c
#include <stdio.h>
#include <stdlib.h>

struct opaque_t
  {
   int wrapped_value;
  };

struct opaque_t *opaque_create (int initializer)
{
 struct opaque_t *opaque = malloc(sizeof(struct opaque_t));

 if (opaque != NULL)
    opaque->wrapped_value = initializer;

 return opaque;
}

void opaque_print (struct opaque_t *p_opaque)
{
 printf("value is %d.\n", p_opaque->wrapped_value);
}

void opaque_destroy (struct opaque_t *p_opaque)
{
 free(p_opaque);
}

$ cat main.c 
#include <stdlib.h>

#include "opaque.h"

int main ()
{
 struct opaque_t *p_opaque = opaque_create(1234);

 if (p_opaque == NULL)
    return 1;

 opaque_print(p_opaque);
 opaque_destroy(p_opaque);

 return 0;
}

If I break this program at line 12 of main.c, and try to print p_opaque, gdb
complains "no data fields":

Breakpoint 1, main () at main.c:12
12     opaque_print(p_opaque);
(gdb) print *p_opaque
$1 = {<No data fields>}

But if I step into a function in opaque.c, gdb *can* see into the structure:

(gdb) step
opaque_print (p_opaque=0xc51e010) at opaque.c:21
21     printf("value is %d.\n", p_opaque->wrapped_value);
(gdb) print *p_opaque
$2 = {wrapped_value = 1234}

This case works fine when the program is compiled with GCC. Does not work with
ICC, even when compiled with "-debug extended".

The problem seems to be that ICC does not set the DW_AT_declaration attribute
on the opaque pointer in main.c.

dwarfdumps of binaries produced with GCC and ICC follow.

This binary was produced with 'CC="gcc -g" make':
jscott@saaz:~/src/random/gdb-icc-opaque$ dwarfdump -S match=opaque_t
opaque-demo

COMPILE_UNIT<header overall offset = 0>:
<0><   11>    DW_TAG_compile_unit
        DW_AT_producer              GNU C 4.4.5
        DW_AT_language              DW_LANG_C89
        DW_AT_name                  main.c
        DW_AT_comp_dir              /home/jscott/src/random/gdb-icc-opaque
        DW_AT_low_pc                0x400584
        DW_AT_high_pc               0x4005c7
        DW_AT_stmt_list             0

LOCAL_SYMBOLS:
<1><  125>    DW_TAG_subprogram
        DW_AT_external              yes(1)
        DW_AT_name                  main
        DW_AT_decl_file             1
/home/jscott/src/random/gdb-icc-opaque/main.c
        DW_AT_decl_line             5
        DW_AT_type                  <52>
        DW_AT_low_pc                0x400584
        DW_AT_high_pc               0x4005c7
        DW_AT_frame_base            <loclist with 3 entries follows>
            [ 0]<lowpc=0x0><highpc=0x1>DW_OP_breg7+8
            [ 1]<lowpc=0x1><highpc=0x4>DW_OP_breg7+16
            [ 2]<lowpc=0x4><highpc=0x43>DW_OP_breg6+16
        DW_AT_sibling               <182>
<2><  161>    DW_TAG_structure_type
        DW_AT_name                  opaque_t
        DW_AT_declaration           yes(1)

COMPILE_UNIT<header overall offset = 189>:
<0><   11>    DW_TAG_compile_unit
        DW_AT_producer              GNU C 4.4.5
        DW_AT_language              DW_LANG_C89
        DW_AT_name                  opaque.c
        DW_AT_comp_dir              /home/jscott/src/random/gdb-icc-opaque
        DW_AT_low_pc                0x4005c8
        DW_AT_high_pc               0x400639
        DW_AT_stmt_list             63

LOCAL_SYMBOLS:
<1><  125>    DW_TAG_structure_type
        DW_AT_name                  opaque_t
        DW_AT_byte_size             4
        DW_AT_decl_file             1
/home/jscott/src/random/gdb-icc-opaque/opaque.c
        DW_AT_decl_line             5
        DW_AT_sibling               <152>



This binary was produced with 'CC="icc -debug extended" make':

jscott@saaz:~/src/random/gdb-icc-opaque$ dwarfdump -S match=opaque_t
opaque-demo-icc-12.0.4 

COMPILE_UNIT<header overall offset = 0>:
<0><   11>    DW_TAG_compile_unit
        DW_AT_comp_dir              /root/gdb-icc-opaque
        DW_AT_low_pc                0x40059c
        DW_AT_language              DW_LANG_C89
        DW_AT_name                  main.c
        DW_AT_producer              Intel(R) C Intel(R) 64 Compiler XE for
applications running on Intel(R) 64, Version 12.0.4.191 Build 20110427
 Fixes SameLinkageName MemberPointers

        DW_AT_stmt_list             0

LOCAL_SYMBOLS:
<1><  275>    DW_TAG_structure_type
        DW_AT_decl_line             1
        DW_AT_decl_column           8
        DW_AT_decl_file             2 /root/gdb-icc-opaque/opaque.h
        DW_AT_accessibility         DW_ACCESS_public
        DW_AT_byte_size             0
        DW_AT_name                  opaque_t

COMPILE_UNIT<header overall offset = 294>:
<0><   11>    DW_TAG_compile_unit
        DW_AT_comp_dir              /root/gdb-icc-opaque
        DW_AT_low_pc                0x4005ec
        DW_AT_language              DW_LANG_C89
        DW_AT_name                  opaque.c
        DW_AT_producer              Intel(R) C Intel(R) 64 Compiler XE for
applications running on Intel(R) 64, Version 12.0.4.191 Build 20110427
 Fixes SameLinkageName MemberPointers

        DW_AT_stmt_list             121

LOCAL_SYMBOLS:
<1><  209>    DW_TAG_structure_type
        DW_AT_decl_line             4
        DW_AT_decl_column           8
        DW_AT_decl_file             1 /root/gdb-icc-opaque/opaque.c
        DW_AT_accessibility         DW_ACCESS_public
        DW_AT_byte_size             4
        DW_AT_name                  opaque_t

-- 
Configure bugmail: http://sourceware.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]