analysemap: don't list _DISCARD functions in hogs.txt
authorAlan Cox <alan@linux.intel.com>
Tue, 6 Jan 2015 12:30:10 +0000 (12:30 +0000)
committerAlan Cox <alan@linux.intel.com>
Tue, 6 Jan 2015 12:30:10 +0000 (12:30 +0000)
We don't actually want to keep seeing discardable boot code all over the
hog listing, we want to see the real offenders who stay resident.

Kernel/tools/analysemap.c

index 56ee419..d299a2c 100644 (file)
@@ -4,7 +4,14 @@
 #include <unistd.h>
 
 unsigned int code_len, code2_len, data_len, bss_len, init_len, gsfinal, common_addr,
-  initial;
+  initial, discard_base, discard_len;
+
+static int is_discard(int addr)
+{
+  if (addr < discard_base || addr >= discard_base + discard_len)
+    return 0;
+  return 1;
+}
 
 int main(int argc, char *argv[])
 {
@@ -41,18 +48,22 @@ int main(int argc, char *argv[])
       sscanf(p1, "%x", &bss_len);
     if (strcmp(p2, "l__INITIALIZED") == 0)
       sscanf(p1, "%x", &init_len);
+    if (strcmp(p2, "l__DISCARD") == 0)
+      sscanf(p1, "%x", &discard_len);
     if (strcmp(p2, "s__GSFINAL") == 0)
       sscanf(p1, "%x", &gsfinal);
     if (strcmp(p2, "s__INITIALIZER") == 0)
       sscanf(p1, "%x", &initial);
     if (strcmp(p2, "s__COMMONMEM") == 0)
       sscanf(p1, "%x", &common_addr);
+    if (strcmp(p2, "s__DISCARD") == 0)
+      sscanf(p1, "%x", &discard_base);
       
     if (hogs && match == 0) {
       if (strstr(p2, "_start")) {
         sscanf(p1, "%x", &naddr);
         strcpy(nname, p2);
-        if (addr) {
+        if (addr && !is_discard(addr)) {
           name[strlen(name)-6]=0;
           printf("%d: %s\n", naddr-addr, name);
         }