WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] [PATCH] xenctx: misc adjustments

To: "xen-devel@xxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxx>
Subject: [Xen-devel] [PATCH] xenctx: misc adjustments
From: "Jan Beulich" <JBeulich@xxxxxxxxxx>
Date: Tue, 11 Jan 2011 10:29:53 +0000
Delivery-date: Tue, 11 Jan 2011 03:36:59 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
- fix off-by-one errors during symbol insertion and lookup
- don't store the symbol type, as it wasn't needed at all so far and
  is only needed now at parsing time
- don't insert certain kinds of symbols

Signed-off-by: Jan Beulich <jbeulich@xxxxxxxxxx>

--- a/tools/xentrace/xenctx.c
+++ b/tools/xentrace/xenctx.c
@@ -19,6 +19,7 @@
 #include <unistd.h>
 #include <errno.h>
 #include <signal.h>
+#include <ctype.h>
 #include <string.h>
 #include <inttypes.h>
 #include <getopt.h>
@@ -58,7 +59,6 @@ int disp_tlb;
 
 struct symbol {
     guest_word_t address;
-    char type;
     char *name;
     struct symbol *next;
 } *symbol_table = NULL;
@@ -112,12 +112,12 @@ static void insert_symbol(struct symbol 
 
     /* The System.map is usually already sorted... */
     if (prev
-        && prev->address < symbol->address
+        && prev->address <= symbol->address
         && (!prev->next || prev->next->address > symbol->address)) {
         s = prev;
     } else {
         /* ... otherwise do crappy/slow search for the correct place */
-        while(s && s->next && s->next->address < symbol->address)
+        while (s->next && s->next->address <= symbol->address)
             s = s->next;
     }
 
@@ -130,13 +130,13 @@ static struct symbol *lookup_symbol(gues
 {
     struct symbol *s = symbol_table;
 
-    while(s && s->next && s->next->address < address)
-        s = s->next;
+    if (!s)
+        return NULL;
 
-    if (s && s->address < address)
-        return s;
+    while (s->next && s->next->address < address)
+        s = s->next;
 
-    return NULL;
+    return s->next && s->next->address <= address ? s->next : s;
 }
 
 static void print_symbol(guest_word_t addr)
@@ -159,7 +159,7 @@ static void print_symbol(guest_word_t ad
 
 static void read_symbol_table(const char *symtab)
 {
-    char line[256];
+    char type, line[256];
     char *p;
     struct symbol *symbol;
     FILE *f;
@@ -178,9 +178,13 @@ static void read_symbol_table(const char
 
         /* need more checks for syntax here... */
         symbol->address = strtoull(line, &p, 16);
-        p++;
-        symbol->type = *p++;
-        p++;
+        if (!isspace(*p++))
+            continue;
+        type = *p++;
+        if (!isalpha(type) && type != '?')
+            continue;
+        if (!isspace(*p++))
+            continue;
 
         /* in the future we should handle the module name
          * being appended here, this would allow us to use
@@ -190,7 +194,18 @@ static void read_symbol_table(const char
             p[strlen(p)-1] = '\0';
         symbol->name = strdup(p);
 
-        insert_symbol(symbol);
+        switch (type) {
+        case 'A': /* global absolute */
+        case 'a': /* local absolute */
+            break;
+        case 'U': /* undefined */
+        case 'v': /* undefined weak object */
+        case 'w': /* undefined weak function */
+            continue;
+        default:
+            insert_symbol(symbol);
+            break;
+        }
 
         if (strcmp(symbol->name, "_stext") == 0)
             kernel_stext = symbol->address;



Attachment: xenctx-misc.patch
Description: Text document

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
<Prev in Thread] Current Thread [Next in Thread>