OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [libjava/] [gnu/] [gcj/] [tools/] [gc_analyze/] [ObjectMap.java] - Blame information for rev 756

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 756 jeremybenn
/* ObjectMap.java -- Contains a map of all objects keyed by their addresses.
2
   Copyright (C) 2007  Free Software Foundation
3
 
4
   This file is part of libgcj.
5
 
6
   This software is copyrighted work licensed under the terms of the
7
   Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
8
   details.  */
9
 
10
package gnu.gcj.tools.gc_analyze;
11
 
12
import java.io.BufferedReader;
13
import java.io.IOException;
14
import java.util.Iterator;
15
import java.util.Map;
16
import java.util.TreeMap;
17
 
18
class ObjectMap implements Iterable<Map.Entry<Long, ObjectMap.ObjectItem>>
19
{
20
 
21
  class ObjectItem
22
  {
23
    int used;
24
    int size;
25
    int kind;
26
    long klass;
27
    long data;
28
    long ptr;
29
    String typeName;
30
    String string; // only for string objects
31
    boolean stringData; // character array pointed to by a string
32
    ObjectItem reference; // object at reference points to this
33
 
34
    ItemList points_to = new ItemList();
35
    ItemList pointed_by = new ItemList();
36
  }
37
 
38
  private TreeMap<Long, ObjectItem> map = new TreeMap<Long, ObjectItem>();
39
 
40
  public Iterator<Map.Entry<Long, ObjectItem>> iterator()
41
  {
42
    return map.entrySet().iterator();
43
  }
44
 
45
  public ObjectItem get(long ptr)
46
  {
47
    ObjectItem item = map.get(ptr);
48
    return item;
49
  }
50
 
51
  public ObjectMap(BufferedReader reader) throws IOException
52
  {
53
    outer_loop:
54
    for (;;)
55
      {
56
        String s = reader.readLine();
57
        if (s == null)
58
          break;
59
        if (s.indexOf("Begin object map") >= 0)
60
          {
61
            for (;;)
62
              {
63
                s = reader.readLine();
64
                if (s.indexOf("End object map") >= 0)
65
                  break outer_loop;
66
                String[] items = s.split(",");
67
                ObjectItem item = new ObjectItem();
68
                long ptr = 0;
69
                for (int i=0; i<items.length; i++)
70
                  {
71
                    String[] x = items[i].split(" ");
72
                    String last = x[x.length-1];
73
                    switch (i)
74
                      {
75
                      case 0:
76
                        item.used = Integer.parseInt(last);
77
                        break;
78
                      case 1:
79
                        ptr = MemoryMap.parseHexLong(last.substring(2));
80
                        break;
81
                      case 2:
82
                        item.size = Integer.parseInt(last);
83
                        break;
84
                      case 3:
85
                        item.kind = Integer.parseInt(last);
86
                        break;
87
                      case 4:
88
                        if (last.length() > 1)
89
                          item.klass =
90
                            MemoryMap.parseHexLong(last.substring(2));
91
                        else
92
                          item.klass  = Integer.parseInt(last,16);
93
                        break;
94
                      case 5:
95
                        try
96
                          {
97
                            item.data =
98
                              Integer.parseInt(last.substring(2), 16);
99
                          }
100
                        catch (Exception e)
101
                          {
102
                            item.data = 0;
103
                          }
104
                        break;
105
                      }
106
                  }
107
                item.ptr = ptr;
108
                map.put(ptr, item);
109
              } // inner loop
110
          } // started inner loop
111
      } // outer loop - finding begin
112
    for (Map.Entry<Long, ObjectItem> me : this)
113
      {
114
        ObjectItem item = me.getValue();
115
        if (item.data != 0)
116
          {
117
            // see if data is a pointer to a block
118
            ObjectItem referenced = map.get(item.data);
119
            if (referenced != null)
120
              {
121
                referenced.reference = item;
122
              }
123
          }
124
      }
125
  } // memoryMap
126
 
127
  public void dump()
128
  {
129
    for (Map.Entry<Long, ObjectItem> me : this)
130
      {
131
        long ptr = me.getKey();
132
        ObjectItem item = me.getValue();
133
        System.out.println("ptr = " + Long.toHexString(ptr)
134
                           + ", size = " + item.size
135
                           + ", klass = " + Long.toHexString(item.klass)
136
                           + ", kind = " + item.kind
137
                           + ", data = " + item.data);
138
      }
139
  }
140
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.