This is the mail archive of the gdb-patches@sources.redhat.com 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]

Re: [PATCH/RFA] PR gdb/648 (eval.c approval reqd)


In your original post, you said, "G77 puts things in row-major order".
It looks to me as if G77 puts the *types* in row-major order (contrary
to the Dwarf spec, which wants them in the order they appear in source
code), but it locates the actual arrays in memory in column-major
order:

    (gdb) b arrays.f:45
    Breakpoint 1 at 0x8048769: file arrays.f, line 45.
    (gdb) r
    Starting program: /rigel/jimb/gdb/bugs/648/arrays

    Breakpoint 1, MAIN__ () at arrays.f:46
    46            call oneif(onedi)
    Current language:  auto; currently fortran
    (gdb) x/40wd &twodi
    0xbfffe600:     1       2       3       4
    0xbfffe610:     5       6       7       8
    0xbfffe620:     9       10      11      12
    0xbfffe630:     13      14      15      16
    0xbfffe640:     17      18      19      20
    0xbfffe650:     2       4       6       8
    0xbfffe660:     10      12      14      16
    0xbfffe670:     18      20      22      24
    0xbfffe680:     26      28      30      32
    0xbfffe690:     34      36      38      40
    (gdb) ptype twodi
    type = integer (20,10)
    (gdb)

This shows that varying the leftmost index yields the smallest change
in element address, which is column-major.  So the arrays are actually
laid out correctly; it's just the types in the Dwarf 2 info that are
wrong.

If that's all correct, then this patch is approved.

It seems to me that there's a separate bug in f-valprint.c.  The
output below is incorrect, right?  It's printed as a series of
columns, not a series of rows.  Or is that what users of a Fortran
debugger would expect?

    (gdb) p twodi
    $1 = (( 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
    19, 20) ( 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32,
    34, 36, 38, 40) ( 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42,
    45, 48, 51, 54, 57, 60) ( 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44,
    48, 52, 56, 60, 64, 68, 72, 76, 80) ( 5, 10, 15, 20, 25, 30, 35, 40,
    45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100) ( 6, 12, 18, 24, 30,
    36, 42, 48, 54, 60, 66, 72, 78, 84, 90, 96, 102, 108, 114, 120) ( 7,
    14, 21, 28, 35, 42, 49, 56, 63, 70, 77, 84, 91, 98, 105, 112, 119,
    126, 133, 140) ( 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104,
    112, 120, 128, 136, 144, 152, 160) ( 9, 18, 27, 36, 45, 54, 63, 72,
    81, 90, 99, 108, 117, 126, 135, 144, 153, 162, 171, 180) ( 10, 20, 30,
    40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180,
    190, 200) )
    (gdb)


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