diff options
author | Ulrich Weigand <uweigand@de.ibm.com> | 2008-08-07 21:25:28 +0000 |
---|---|---|
committer | Ulrich Weigand <uweigand@de.ibm.com> | 2008-08-07 21:25:28 +0000 |
commit | 12ab8a602f4ebb83654346ccbcf63df58a7497f8 (patch) | |
tree | 765ac789ebfb59b24844c866599bfa49d018d51b /gdb | |
parent | d35fd65983caac22b1204d4c0d79f5b9eabb1286 (diff) | |
download | gdb-12ab8a602f4ebb83654346ccbcf63df58a7497f8.zip gdb-12ab8a602f4ebb83654346ccbcf63df58a7497f8.tar.gz gdb-12ab8a602f4ebb83654346ccbcf63df58a7497f8.tar.bz2 |
ChangeLog:
* spu-tdep.c (info_spu_dma_cmdlist): Only show entries with
the valid bit set. Ensure display order respects partial
order defined by dependency bits.
testsuite/ChangeLog:
* gdb.arch/spu-info.exp: Updated for "info spu dma" changes.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/spu-tdep.c | 46 | ||||
-rw-r--r-- | gdb/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gdb/testsuite/gdb.arch/spu-info.exp | 8 |
4 files changed, 54 insertions, 10 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 5e4b8cf..2be158e 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2008-08-07 Ulrich Weigand <uweigand@de.ibm.com> + + * spu-tdep.c (info_spu_dma_cmdlist): Only show entries with + the valid bit set. Ensure display order respects partial + order defined by dependency bits. + 2008-08-06 John David Anglin <dave.anglin@nrc-cnrc.gc.ca> * solib-pa64.c (read_dld_descriptor): Return zero if load map is not diff --git a/gdb/spu-tdep.c b/gdb/spu-tdep.c index 8198835..64c7051 100644 --- a/gdb/spu-tdep.c +++ b/gdb/spu-tdep.c @@ -1742,8 +1742,44 @@ info_spu_dma_cmdlist (gdb_byte *buf, int nr) NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, }; + int *seq = alloca (nr * sizeof (int)); + int done = 0; struct cleanup *chain; - int i; + int i, j; + + + /* Determine sequence in which to display (valid) entries. */ + for (i = 0; i < nr; i++) + { + /* Search for the first valid entry all of whose + dependencies are met. */ + for (j = 0; j < nr; j++) + { + ULONGEST mfc_cq_dw3; + ULONGEST dependencies; + + if (done & (1 << (nr - 1 - j))) + continue; + + mfc_cq_dw3 = extract_unsigned_integer (buf + 32*j + 24, 8); + if (!spu_mfc_get_bitfield (mfc_cq_dw3, 16, 16)) + continue; + + dependencies = spu_mfc_get_bitfield (mfc_cq_dw3, 0, nr - 1); + if ((dependencies & done) != dependencies) + continue; + + seq[i] = j; + done |= 1 << (nr - 1 - j); + break; + } + + if (j == nr) + break; + } + + nr = i; + chain = make_cleanup_ui_out_table_begin_end (uiout, 10, nr, "dma_cmd"); @@ -1766,7 +1802,6 @@ info_spu_dma_cmdlist (gdb_byte *buf, int nr) ULONGEST mfc_cq_dw0; ULONGEST mfc_cq_dw1; ULONGEST mfc_cq_dw2; - ULONGEST mfc_cq_dw3; int mfc_cmd_opcode, mfc_cmd_tag, rclass_id, tclass_id; int lsa, size, list_lsa, list_size, mfc_lsa, mfc_size; ULONGEST mfc_ea; @@ -1775,10 +1810,9 @@ info_spu_dma_cmdlist (gdb_byte *buf, int nr) /* Decode contents of MFC Command Queue Context Save/Restore Registers. See "Cell Broadband Engine Registers V1.3", section 3.3.2.1. */ - mfc_cq_dw0 = extract_unsigned_integer (buf + 32*i, 8); - mfc_cq_dw1 = extract_unsigned_integer (buf + 32*i + 8, 8); - mfc_cq_dw2 = extract_unsigned_integer (buf + 32*i + 16, 8); - mfc_cq_dw3 = extract_unsigned_integer (buf + 32*i + 24, 8); + mfc_cq_dw0 = extract_unsigned_integer (buf + 32*seq[i], 8); + mfc_cq_dw1 = extract_unsigned_integer (buf + 32*seq[i] + 8, 8); + mfc_cq_dw2 = extract_unsigned_integer (buf + 32*seq[i] + 16, 8); list_lsa = spu_mfc_get_bitfield (mfc_cq_dw0, 0, 14); list_size = spu_mfc_get_bitfield (mfc_cq_dw0, 15, 26); diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 204eb8a..28046a9 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2008-08-07 Ulrich Weigand <Ulrich.Weigand@de.ibm.com> + + * gdb.arch/spu-info.exp: Updated for "info spu dma" changes. + 2008-08-06 Tom Tromey <tromey@redhat.com> * gdb.python/python.exp: New file. diff --git a/gdb/testsuite/gdb.arch/spu-info.exp b/gdb/testsuite/gdb.arch/spu-info.exp index e59b071..265b21d 100644 --- a/gdb/testsuite/gdb.arch/spu-info.exp +++ b/gdb/testsuite/gdb.arch/spu-info.exp @@ -106,12 +106,12 @@ gdb_test "info spu mailbox" \ # 'info spu dma'. gdb_test "info spu dma" \ - "Tag-Group Status.*Tag-Group Mask.*Stall-and-Notify .*Atomic Cmd Status.*Opcode.*Tag.*TId.*RId.*EA.*LSA.*Size.*LstAddr.*LstSize.*E.*" \ + "Tag-Group Status.*Tag-Group Mask.*Stall-and-Notify .*Atomic Cmd Status.*" \ "info spu dma" # 'info spu proxydma'. gdb_test "info spu proxydma" \ - "Tag-Group Status.*Tag-Group Mask.*Opcode.*Tag.*TId.*RId.*EA.*LSA.*Size.*LstAddr.*LstSize.*E.*" \ + "Tag-Group Status.*Tag-Group Mask.*" \ "info spu proxydma" # Event tests. @@ -186,14 +186,14 @@ gdb_test "info spu event" \ # 'info spu dma' should be empty. c_to "Marker DMA" gdb_test "info spu dma" \ - "Tag-Group Status.*0x00000000.*Tag-Group Mask.*0x00000000.*Stall-and-Notify.*0x00000000.*Atomic Cmd Status.*0x00000000.*Opcode.*Tag.*TId.*RId.*EA.*LSA.*Size.*LstAddr.*LstSize.*E.*0.*0.*0.*0.*0x00000 0x00000.*" \ + "Tag-Group Status.*0x00000000.*Tag-Group Mask.*0x00000000.*Stall-and-Notify.*0x00000000.*Atomic Cmd Status.*0x00000000\[\r\n\]+" \ "info spu dma (empty)" # 'info spu dma' should be filled with some data. c_to "Marker DMAWait" gdb_test "next" "" "next" gdb_test "info spu dma" \ - "Tag-Group Status.*0x00000000.*Tag-Group Mask.*0x00000020.*Stall-and-Notify.*0x00000000.*Atomic Cmd Status.*0x00000000.*Opcode.*Tag.*TId.*RId.*EA.*LSA.*Size.*LstAddr.*LstSize.*E.*getl.*putllc.*get.*mfcsync.*get.*0.*0.*0.*0.*0x00000 0x00000.*" \ + "Tag-Group Status.*0x00000000.*Tag-Group Mask.*0x00000020.*Stall-and-Notify.*0x00000000.*Atomic Cmd Status.*0x00000000.*Opcode.*Tag.*TId.*RId.*EA.*LSA.*Size.*LstAddr.*LstSize.*E.*get.*5.*0.*0.*0x00080\[ \r\n\]+" \ "info spu dma (non-empty)" gdb_test "finish" "" "finish" |