From d598799b239a0af3043357f628da10a2d9f718ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Sandmann?= Date: Sat, 29 Oct 2005 18:30:25 +0000 Subject: [PATCH] updates MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sat Oct 29 14:29:55 2005 Søren Sandmann * README, TODO: updates --- ChangeLog | 4 +++ README | 35 ++++++++++--------- TODO | 23 ++++++++++--- xmlstore.c | 99 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ xmlstore.h | 58 ++++++++++++++++++++++++++++++++ 5 files changed, 200 insertions(+), 19 deletions(-) create mode 100644 xmlstore.c create mode 100644 xmlstore.h diff --git a/ChangeLog b/ChangeLog index 163fbf0d..8a10ccd0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +Sat Oct 29 14:29:55 2005 Søren Sandmann + + * README, TODO: updates + Fri Oct 14 11:44:43 2005 Søren Sandmann * configure.ac: Add a warning about known bugs in the kernel diff --git a/README b/README index ae69baca..9ac77fbc 100644 --- a/README +++ b/README @@ -17,7 +17,6 @@ would be appreciated. - Requirements: - A Linux kernel version 2.6.11 or newer is required. @@ -25,7 +24,7 @@ Requirements: - GTK+ 2.6.0 or newer is required -- libglade 2.5.1 is required +- libglade 2.5.1 or newer is required Compiling: @@ -35,28 +34,31 @@ 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 -debuginfo package should be sufficient. + On Ubuntu and Debian, the debug packages are called -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: @@ -64,17 +66,20 @@ Debugging symbols 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 diff --git a/TODO b/TODO index c5bcac6e..4ac8763e 100644 --- a/TODO +++ b/TODO @@ -5,9 +5,6 @@ Before 1.0.1: 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. @@ -16,6 +13,18 @@ Before 1.0.1: 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 @@ -443,7 +452,13 @@ Later: 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 diff --git a/xmlstore.c b/xmlstore.c new file mode 100644 index 00000000..202b6dc1 --- /dev/null +++ b/xmlstore.c @@ -0,0 +1,99 @@ +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) +{ + +} diff --git a/xmlstore.h b/xmlstore.h new file mode 100644 index 00000000..dd167d03 --- /dev/null +++ b/xmlstore.h @@ -0,0 +1,58 @@ +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)); +}