linux-mips
[Top] [All Lists]

[PATCH] mm/pg-r4k.c: Dump the generated code

To: Ralf Baechle <ralf@linux-mips.org>, Thiemo Seufer <ths@networkno.de>
Subject: [PATCH] mm/pg-r4k.c: Dump the generated code
From: "Maciej W. Rozycki" <macro@linux-mips.org>
Date: Tue, 2 Oct 2007 14:54:15 +0100 (BST)
Cc: linux-mips@linux-mips.org
Original-recipient: rfc822;linux-mips@linux-mips.org
Sender: linux-mips-bounce@linux-mips.org
 Dump the generated code for clear/copy page calls like it is done for TLB 
fault handlers.  Useful for debugging.

Signed-off-by: Maciej W. Rozycki <macro@linux-mips.org>
---
Thiemo,

 It was your change to add ".set noreorder", etc. to the TLB fault 
handlers -- what is it needed for?  I have thought gas does not try to 
outsmart the user at the moment and does not reorder ".word" directives.

 Ralf, please apply.

  Maciej

patch-mips-2.6.23-rc5-20070904-pg-r4k-dump-0
diff -up --recursive --new-file 
linux-mips-2.6.23-rc5-20070904.macro/arch/mips/mm/pg-r4k.c 
linux-mips-2.6.23-rc5-20070904/arch/mips/mm/pg-r4k.c
--- linux-mips-2.6.23-rc5-20070904.macro/arch/mips/mm/pg-r4k.c  2007-02-05 
16:38:47.000000000 +0000
+++ linux-mips-2.6.23-rc5-20070904/arch/mips/mm/pg-r4k.c        2007-10-01 
22:50:13.000000000 +0000
@@ -347,6 +347,7 @@ void __init build_clear_page(void)
 {
        unsigned int loop_start;
        unsigned long off;
+       int i;
 
        epc = (unsigned int *) &clear_page_array;
        instruction_pending = 0;
@@ -434,12 +435,22 @@ dest = label();
        build_jr_ra();
 
        BUG_ON(epc > clear_page_array + ARRAY_SIZE(clear_page_array));
+
+       pr_info("Synthesized clear page handler (%u instructions).\n",
+               (unsigned int)(epc - clear_page_array));
+
+       pr_debug("\t.set push\n");
+       pr_debug("\t.set noreorder\n");
+       for (i = 0; i < (epc - clear_page_array); i++)
+               pr_debug("\t.word 0x%08x\n", clear_page_array[i]);
+       pr_debug("\t.set pop\n");
 }
 
 void __init build_copy_page(void)
 {
        unsigned int loop_start;
        unsigned long off;
+       int i;
 
        epc = (unsigned int *) &copy_page_array;
        store_offset = load_offset = 0;
@@ -515,4 +526,13 @@ dest = label();
        build_jr_ra();
 
        BUG_ON(epc > copy_page_array + ARRAY_SIZE(copy_page_array));
+
+       pr_info("Synthesized copy page handler (%u instructions).\n",
+               (unsigned int)(epc - copy_page_array));
+
+       pr_debug("\t.set push\n");
+       pr_debug("\t.set noreorder\n");
+       for (i = 0; i < (epc - copy_page_array); i++)
+               pr_debug("\t.word 0x%08x\n", copy_page_array[i]);
+       pr_debug("\t.set pop\n");
 }

<Prev in Thread] Current Thread [Next in Thread>