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

           Summary: MMIX: Wrong debugging information generated (UNKNOWN:
                    length 2)
           Product: gcc
           Version: 4.6.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
        AssignedTo: unassig...@gcc.gnu.org
        ReportedBy: n...@script-solution.de
              Host: Ubuntu on x86_64
            Target: MMIX
             Build: gcc-4.6.0 with binutils-2.21


Created attachment 24381
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=24381
Generated object file

Some C constructs seem to cause wrong debugging information. That is especially
a problem, because gdb ignores all the following information, so that debugging
is impossible (line by line in C source).

For example, the following C source causes the problem:
----
static int strncmpx(const char *str1,const char *str2,int count) {
    int rem = count;
    while(*str1 && *str2 && rem-- > 0) {
        if(*str1++ != *str2++)
            return str1[-1] < str2[-1] ? -1 : 1;
    }
    if(rem <= 0)
        return 0;
    if(*str1 && !*str2)
        return 1;
    return -1;
}

int main(void) {
    strncmpx("foo","bar",3);
    return 0;
}
----

Compiling this file and reading the line number information results in:
$ mmix-elf-escape-gcc -o t.o -c t.c -g
$ mmix-elf-escape-readelf --debug-dump=decodedline t.o
readelf: Warning: unable to apply unsupported reloc type 5 to section
debug_line
Decoded dump of debug contents of section .debug_line:

CU: t.c:
File name                            Line number    Starting address
t.c                                            1                   0

t.c                                            2                0x28
t.c                                            3                0x38
t.c                                            4                0x3c
t.c                                            5                0xa8
UNKNOWN: length 2
t.c                                            5                0xe0
UNKNOWN: length 2
t.c                                            5                0xe8
UNKNOWN: length 2
t.c                                            5                0xec
UNKNOWN: length 2
t.c                                            3                0xf0
UNKNOWN: length 2
t.c                                            3               0x10c
UNKNOWN: length 2
t.c                                            3               0x128
t.c                                            7               0x16c
t.c                                            8               0x184
t.c                                            9               0x18c
UNKNOWN: length 2
t.c                                            9               0x1a8
t.c                                           10               0x1c4
t.c                                           11               0x1cc
t.c                                           12               0x1d0
t.c                                           14               0x1dc
t.c                                           15               0x1ec
t.c                                           16               0x218
t.c                                           17               0x21c


I've attached the object file t.o.

Reply via email to