+Sat Oct 29 14:29:55 2005 Søren Sandmann <sandmann@redhat.com>
+
+ * README, TODO: updates
+
Fri Oct 14 11:44:43 2005 Søren Sandmann <sandmann@redhat.com>
* configure.ac: Add a warning about known bugs in the kernel
-
Requirements:
- A Linux kernel version 2.6.11 or newer is required.
- GTK+ 2.6.0 or newer is required
-- libglade 2.5.1 is required
+- libglade 2.5.1 or newer is required
Compiling:
system compiler, but if you have upgraded your kernel it is
possible that the new kernel was compiled with a different compiler
- In that case, "modprobe sysprof-module" will produce this
+ If the module is compiled with a different compiler than the one
+ compiling the kernel, "modprobe sysprof-module" will produce this
error message:
insmod: error inserting './sysprof-module.o': -1 Invalid module format
-
Debugging symbols
-- The programs you want to profile should have debugging symbols, or
- you won't get much usable information. On a Fedora Core system,
- installing the relevant -debuginfo package should be sufficient.
-
+- The programs and libraries you want to profile should have debugging
+ symbols, or you won't get much usable information. On a Fedora Core system,
+ installing the relevant <package>-debuginfo package should be sufficient.
+ On Ubuntu and Debian, the debug packages are called <package>-dbg.
-- X server.
+- X server
The X server as shipped by most distributions uses its own home-rolled
module loading system and Sysprof has no way to deal with that, so if you
- run sysprof with your normal X serverr you won't get any information about
+ run sysprof with your normal X server you won't get any information about
how time is spent inside the X server.
- To fix this you have to compile your own X server:
+ On Ubuntu and Debian there is a package, xserver-xorg-dbg, containing a
+ binary called Xorg-debug that is built in such a way that sysprof can use
+ it. On other systems, to get an X server with usable symbols you
+ have to compile your own:
(1) Compile the X server to use ".so" modules:
xc/config/cf/xorgsite.def.
If you are compiling the CVS version of the X server
- (the one that will eventually become 7.0), then this is
+ (the one that will eventually become 6.9), then this is
already the default.
- "make World"
+
+ - Don't run "make install" yet. (See below).
- (2) Install the X server making sure it can't see any ".a" files. If
- you install on top of an existing installation, just do
+ (2) Make sure the new X server can't see any old ".a" files lying
+ around. If you install on top of an existing installation, just do
find /usr/X11R6/lib/"*.a" | sudo xargs rm
- and install the newly compiled X server.
+ then run "make install" as root to install the newly compiled
+ X server.
If a ".so" X server finds .a files in its module path it will
try to load those in preference to .so files and this causes
This is just the (deleted) problem.
* Build system
- - Find out what distributions it actually works on
- (ask for sucess/failure-stories in 1.0 releases)
-
- Create RPM package? See fedora-packaging-list for information
about how to package kernel modules. Lots of threads in
June 2005 and forward.
Before 1.2:
+* Crash reported by Rudi Chiarito with n_addrs == 0.
+
+* Find out why we get hangs with rawhide kernels. This only happens with the
+ 'trace "current"' code. See this mail:
+
+ http://mail.nl.linux.org/kernelnewbies/2005-08/msg00157.html
+
+ esp0 points to top of kernel stack
+ esp points to top of user stack
+
+ (Reported by Kjartan Marass).
+
* Figure out how to make sfile.[ch] use less memory.
- In general clean sfile.[ch] up a little:
- split out dfa in its own generic class
DONE:
-Before 1.0:
+* Find out what distributions it actually works on
+ (ask for sucess/failure-stories in 1.0 releases)
+
+* Add note in README about Ubuntu and Debian -dbg packages and how to get
+ debug symbols for X there.
+
+* Before 1.0:
- Update version numbers in source
--- /dev/null
+typedef struct ParsedItem ParsedItem;
+
+typedef enum
+{
+ BEGIN,
+ TEXT,
+ END
+} XmlItemType;
+
+struct XmlItem
+{
+ XmlItemType type;
+ char [1] data;
+};
+
+struct XmlStore
+{
+ XmlItem * items;
+
+ GHashTable *user_data_map;
+};
+
+struct ParsedItem
+{
+ XmlItemType type;
+
+ union
+ {
+ struct
+ {
+ char * element;
+ int n_attrs;
+ char **attr;
+ } begin_item;
+
+ struct
+ {
+ char *text;
+ } text_item;
+
+ struct
+ {
+ char *element;
+ } end_item;
+ } u;
+};
+
+static void
+parse_begin_item (XmlItem *item,
+ ParsedItem *parsed_item)
+{
+
+}
+
+static void
+parse_end_item (XmlItem *item,
+ ParsedItem *parsed_item)
+{
+
+}
+
+static void
+parse_text_item (XmlItem *item,
+ ParsedItem *parsed_item)
+{
+
+}
+
+static ParsedItem *
+parsed_item_new (XmlItem *item)
+{
+ ParsedItem *parsed_item = g_new0 (ParsedItem, 0);
+
+ switch (item->type)
+ {
+ case BEGIN:
+ parsed_item->type = BEGIN;
+ parse_begin_item (item, parsed_item);
+ break;
+
+ case END:
+ parsed_item->type = END;
+ parse_end_item (item, parsed_item);
+ break;
+
+ case TEXT:
+ parsed_item->type = TEXT;
+ parse_text_item (item, parsed_item);
+ break;
+ }
+
+ return parsed_item;
+}
+
+static void
+parsed_item_free (ParsedItem *item)
+{
+
+}
--- /dev/null
+typedef struct XmlIter XmlIter;
+typedef struct XmlStore XmlStore;
+
+XmlStore *xml_store_new (void);
+void xml_store_free (XmlStore *store);
+void xml_store_append_begin (XmlStore *store,
+ const char *element);
+void xml_store_append_end (XmlStore *store,
+ const char *element);
+void xml_store_append_text (XmlStore *store,
+ const char *text);
+void xml_store_write (XmlStore *store,
+ const char *file,
+ GError *file);
+void xml_store_set_data (XmlIter *iter,
+ gpointer data);
+gpointer xml_store_get_data (XmlIter *iter,
+ gpointer data);
+void xml_store_has_data (XmlIter *iter);
+
+/* An iter stays valid as long as the XmlStore is valid */
+XmlIter * xml_store_get_iter (XmlStore *store);
+XmlIter * xml_iter_get_sibling (XmlIter *iter);
+XmlIter * xml_iter_get_child (XmlIter *iter);
+int xml_iter_get_n_children (XmlIter *iter);
+gboolean xml_iter_valid (XmlIter *iter);
+
+
+void
+process_tree (XmlIter *iter)
+{
+ XmlIter *i;
+
+ if (!xml_iter_valid (iter))
+ return;
+
+ /* siblings */
+ i = xml_iter_sibling (iter);
+ while (xml_iter_valid (i))
+ {
+ process_tree (i);
+
+ i = xml_iter_sibling (i);
+ }
+
+ /* children */
+ process_tree (xml_iter_child (iter));
+
+
+ process_tree (xml_iter_sibling (iter));
+ process_tree (xml_iter_child (iter));
+}
+
+void
+process_store (XmlStore *store)
+{
+ process_tree (xml_store_get_iter (store));
+}