public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Paulo Marques <pmarques@grupopie.com>
To: Dominik Brodowski <linux@dominikbrodowski.net>
Cc: Andrew Morton <akpm@osdl.org>, linux-kernel@vger.kernel.org
Subject: Re: inconsistent kallsyms data [2.6.11-mm2]
Date: Thu, 10 Mar 2005 12:12:22 +0000	[thread overview]
Message-ID: <423039A6.5010301@grupopie.com> (raw)
In-Reply-To: <422F59A3.9010209@grupopie.com>

[-- Attachment #1: Type: text/plain, Size: 1543 bytes --]

Paulo Marques wrote:
> [...]
> A simple and robust way is to do the sampling on a list of symbols 
> sorted by symbol name. This way, even if the symbol positions that are 
> given to scripts/kallsyms change, the symbols sampled will be the same.
> 
> I'll do the patch to do this and send it ASAP.

Ok, here it is.

Dominik can you try the attached patch and see if it solves the problem?

It it does, I'll do a correct [PATCH] post later with all the 
signed-off-by and subject and stuff.

Please make sure you test with the same configuration that produces the 
error, because this is a pretty hard to hit bug. The needed conditions are:

  - 'nm' changes the order of 2 aliased symbols from the 1st to the 2nd pass
  - one of those symbols get sampled for token optimization. With your 
configuration the sampling was about 1 out of 12.
  - the difference in the name of those symbols makes the algorithm 
select different tokens. As 1024 symbols are used to produce the tokens, 
changing just one of these symbols can easily go unnoticed.
  - the difference in the tokens selected makes the size of the 
compressed data change, so that it goes above (or below) an alignment 
boundary. In your case it only changed 2 bytes in size, but it crossed a 
4 byte alignment boundary.

With your .config file but a different set of tools (gcc, binutils 
versions) I couldn't trigger the bug in my machine.

-- 
Paulo Marques - www.grupopie.com

All that is necessary for the triumph of evil is that good men do nothing.
Edmund Burke (1729 - 1797)

[-- Attachment #2: kallpatch --]
[-- Type: text/plain, Size: 954 bytes --]

--- ./scripts/kallsyms.c.orig	2005-03-10 11:00:26.000000000 +0000
+++ ./scripts/kallsyms.c	2005-03-10 11:11:50.000000000 +0000
@@ -499,11 +499,30 @@ static void forget_symbol(unsigned char 
 		forget_token(symbol + i, len - i);
 }
 
+/* sort the symbols by address->name so that even if aliased symbols 
+ * change position, or the symbols are not supplied in address order
+ * the algorithm will work nevertheless */
+
+static int sort_by_address_name(const void *a, const void *b)
+{
+	struct sym_entry *sa, *sb;
+
+	sa = (struct sym_entry *) a;
+	sb = (struct sym_entry *) b;
+
+	if (sa->addr != sb->addr)
+		return sa->addr - sb->addr;
+
+	return strcmp(sa->sym + 1, sb->sym + 1);
+}
+
 /* set all the symbol flags and do the initial token count */
 static void build_initial_tok_table(void)
 {
 	int i, use_it, valid;
 
+	qsort(table, cnt, sizeof(table[0]), sort_by_address_name);
+
 	valid = 0;
 	for (i = 0; i < cnt; i++) {
 		table[i].flags = 0;

  reply	other threads:[~2005-03-10 12:15 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-03-08 11:38 2.6.11-mm2 Andrew Morton
2005-03-08 13:58 ` 2.6.11-mm2 Paul Mundt
2005-03-08 19:40   ` 2.6.11-mm2 Andrew Morton
2005-03-08 16:00 ` 2.6.11-mm2 (compile stats) John Cherry
2005-03-08 18:54 ` 2.6.11-mm2 fremap.c compile error Jurriaan
2005-03-11 22:50   ` Adrian Bunk
2005-03-08 19:29 ` inconsistent kallsyms data [2.6.11-mm2] Dominik Brodowski
2005-03-08 20:35   ` Andrew Morton
2005-03-08 20:45     ` Dominik Brodowski
2005-03-09 12:57       ` Paulo Marques
2005-03-09 20:16         ` Paulo Marques
2005-03-10 12:12           ` Paulo Marques [this message]
2005-03-13  8:54             ` Sam Ravnborg
2005-03-14 13:33               ` Paulo Marques
2005-03-14 22:17               ` Dominik Brodowski
2005-03-14 22:14             ` Dominik Brodowski
2005-03-08 23:20 ` 2.6.11-mm2 Christoph Hellwig
2005-03-08 23:29   ` 2.6.11-mm2 Andrew Morton
2005-03-08 23:36 ` 2.6.11-mm2 J.A. Magallon
2005-03-08 23:44   ` 2.6.11-mm2 Robert Love
2005-03-08 23:51     ` 2.6.11-mm2 J.A. Magallon
2005-03-09  0:02       ` 2.6.11-mm2 Robert Love
2005-03-09  0:16 ` 2.6.11-mm2 Adrian Bunk
2005-03-09  0:53   ` 2.6.11-mm2 Andrew Morton
2005-03-09  1:39     ` 2.6.11-mm2 Jeff Garzik
2005-03-09  0:20 ` 2.6.11-mm2 Adrian Bunk
2005-03-09  1:50   ` 2.6.11-mm2 Karsten Keil
2005-03-10  7:57 ` 2.6.11-mm2 Stefano Rivoir
2005-03-10  8:09   ` 2.6.11-mm2 Andrew Morton
2005-03-21 23:45   ` 2.6.11-mm2 Andrew Morton

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=423039A6.5010301@grupopie.com \
    --to=pmarques@grupopie.com \
    --cc=akpm@osdl.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@dominikbrodowski.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox