Print out TLB handler assembly
PATCH 1/1 Print out TLB handler assembly
Hello All,
this changes tlbex to print out the (.word) assembler code of the synthesized handlers.
Thiemo
Signed-off-by Thiemo Seufer <[email protected]>
arch/mips/mm/tlbex.c +70 -79
@@ -5,7 +5,7 @@* * Synthesize TLB refill handlers at runtime. * -* Copyright (C) 2004,2005 by Thiemo Seufer +* Copyright (C) 2004,2005,2006 by Thiemo Seufer * Copyright (C) 2005 Maciej W. Rozycki * Copyright (C) 2006 Ralf Baechle ([email protected]) *
@@ -35,8 +35,6 @@ #include <asm/elf.h>#include <asm/smp.h> #include <asm/war.h> -/* #define DEBUG_TLB */ -static __init int __attribute__((unused))r45k_bvahwbug (void ) {/* XXX: We should probe for the presence of this bug, but we don't. */
@@ -728,6 +726,7 @@ static void __init build_r3000_tlb_refil {long pgdc = (long )pgd_current;u32 *p; +int i;memset (tlb_handler,0 ,sizeof (tlb_handler)); p = tlb_handler;
@@ -753,16 +752,15 @@ static void __init build_r3000_tlb_refilif (p > tlb_handler +32 )panic ("TLB refill handler space exceeded" ); -printk ("Synthesized TLB refill handler (%u instructions).\n" , +printk (KERN_INFO +"Synthesized TLB refill handler (%u instructions).\n" , (unsigned int )(p - tlb_handler)); -#ifdef DEBUG_TLB - { -int i; -for (i =0 ; i < (p - tlb_handler); i++) -printk ("%08x\n" , tlb_handler[i]); - } -#endif +printk (KERN_DEBUG "\t.set push\n" ); +printk (KERN_DEBUG "\t.set noreorder\n" ); +for (i =0 ; i < (p - tlb_handler); i++) +printk (KERN_DEBUG "\t.word 0x%08x\n" , tlb_handler[i]); +printk (KERN_DEBUG "\t.set pop\n" );memcpy ((void *)ebase, tlb_handler,0x80 ); }
@@ -1175,6 +1173,7 @@ static void __init build_r4000_tlb_refilstruct reloc *r = relocs;u32 *f;unsigned int final_len; +int i;memset (tlb_handler,0 ,sizeof (tlb_handler));memset (labels,0 ,sizeof (labels));
@@ -1272,24 +1271,22 @@ #else /* CONFIG_64BIT */#endif /* CONFIG_64BIT */ resolve_relocs (relocs, labels); -printk ("Synthesized TLB refill handler (%u instructions).\n" , +printk (KERN_INFO +"Synthesized TLB refill handler (%u instructions).\n" , final_len); -#ifdef DEBUG_TLB - { -int i; - - f = final_handler; + f = final_handler;#ifdef CONFIG_64BIT -if (final_len >32 ) - final_len =64 ; -else - f = final_handler +32 ; +if (final_len >32 ) + final_len =64 ; +else + f = final_handler +32 ;#endif /* CONFIG_64BIT */ -for (i =0 ; i < final_len; i++) -printk ("%08x\n" , f[i]); - } -#endif +printk (KERN_DEBUG "\t.set push\n" ); +printk (KERN_DEBUG "\t.set noreorder\n" ); +for (i =0 ; i < final_len; i++) +printk (KERN_DEBUG "\t.word 0x%08x\n" , f[i]); +printk (KERN_DEBUG "\t.set pop\n" );memcpy ((void *)ebase, final_handler,0x100 ); }
@@ -1522,6 +1519,7 @@ static void __init build_r3000_tlb_load_u32 *p = handle_tlbl;struct label *l = labels;struct reloc *r = relocs; +int i;memset (handle_tlbl,0 ,sizeof (handle_tlbl));memset (labels,0 ,sizeof (labels));
@@ -1541,17 +1539,15 @@ static void __init build_r3000_tlb_load_panic ("TLB load handler fastpath space exceeded" );resolve_relocs (relocs, labels); -printk ("Synthesized TLB load handler fastpath (%u instructions).\n" , +printk (KERN_INFO +"Synthesized TLB load handler fastpath (%u instructions).\n" , (unsigned int )(p - handle_tlbl)); -#ifdef DEBUG_TLB - { -int i; - -for (i =0 ; i < (p - handle_tlbl); i++) -printk ("%08x\n" , handle_tlbl[i]); - } -#endif +printk (KERN_DEBUG "\t.set push\n" ); +printk (KERN_DEBUG "\t.set noreorder\n" ); +for (i =0 ; i < (p - handle_tlbl); i++) +printk (KERN_DEBUG "\t.word 0x%08x\n" , handle_tlbl[i]); +printk (KERN_DEBUG "\t.set pop\n" ); }static void __init build_r3000_tlb_store_handler (void )
@@ -1559,6 +1555,7 @@ static void __init build_r3000_tlb_storeu32 *p = handle_tlbs;struct label *l = labels;struct reloc *r = relocs; +int i;memset (handle_tlbs,0 ,sizeof (handle_tlbs));memset (labels,0 ,sizeof (labels));
@@ -1578,17 +1575,15 @@ static void __init build_r3000_tlb_storepanic ("TLB store handler fastpath space exceeded" );resolve_relocs (relocs, labels); -printk ("Synthesized TLB store handler fastpath (%u instructions).\n" , +printk (KERN_INFO +"Synthesized TLB store handler fastpath (%u instructions).\n" , (unsigned int )(p - handle_tlbs)); -#ifdef DEBUG_TLB - { -int i; - -for (i =0 ; i < (p - handle_tlbs); i++) -printk ("%08x\n" , handle_tlbs[i]); - } -#endif +printk (KERN_DEBUG "\t.set push\n" ); +printk (KERN_DEBUG "\t.set noreorder\n" ); +for (i =0 ; i < (p - handle_tlbs); i++) +printk (KERN_DEBUG "\t.word 0x%08x\n" , handle_tlbs[i]); +printk (KERN_DEBUG "\t.set pop\n" ); }static void __init build_r3000_tlb_modify_handler (void )
@@ -1596,6 +1591,7 @@ static void __init build_r3000_tlb_modifu32 *p = handle_tlbm;struct label *l = labels;struct reloc *r = relocs; +int i;memset (handle_tlbm,0 ,sizeof (handle_tlbm));memset (labels,0 ,sizeof (labels));
@@ -1615,17 +1611,15 @@ static void __init build_r3000_tlb_modifpanic ("TLB modify handler fastpath space exceeded" );resolve_relocs (relocs, labels); -printk ("Synthesized TLB modify handler fastpath (%u instructions).\n" , +printk (KERN_INFO +"Synthesized TLB modify handler fastpath (%u instructions).\n" , (unsigned int )(p - handle_tlbm)); -#ifdef DEBUG_TLB - { -int i; - -for (i =0 ; i < (p - handle_tlbm); i++) -printk ("%08x\n" , handle_tlbm[i]); - } -#endif +printk (KERN_DEBUG "\t.set push\n" ); +printk (KERN_DEBUG "\t.set noreorder\n" ); +for (i =0 ; i < (p - handle_tlbm); i++) +printk (KERN_DEBUG "\t.word 0x%08x\n" , handle_tlbm[i]); +printk (KERN_DEBUG "\t.set pop\n" ); }/*
@@ -1677,6 +1671,7 @@ static void __init build_r4000_tlb_load_u32 *p = handle_tlbl;struct label *l = labels;struct reloc *r = relocs; +int i;memset (handle_tlbl,0 ,sizeof (handle_tlbl));memset (labels,0 ,sizeof (labels));
@@ -1704,17 +1699,15 @@ static void __init build_r4000_tlb_load_panic ("TLB load handler fastpath space exceeded" );resolve_relocs (relocs, labels); -printk ("Synthesized TLB load handler fastpath (%u instructions).\n" , +printk (KERN_INFO +"Synthesized TLB load handler fastpath (%u instructions).\n" , (unsigned int )(p - handle_tlbl)); -#ifdef DEBUG_TLB - { -int i; - -for (i =0 ; i < (p - handle_tlbl); i++) -printk ("%08x\n" , handle_tlbl[i]); - } -#endif +printk (KERN_DEBUG "\t.set push\n" ); +printk (KERN_DEBUG "\t.set noreorder\n" ); +for (i =0 ; i < (p - handle_tlbl); i++) +printk (KERN_DEBUG "\t.word 0x%08x\n" , handle_tlbl[i]); +printk (KERN_DEBUG "\t.set pop\n" ); }static void __init build_r4000_tlb_store_handler (void )
@@ -1722,6 +1715,7 @@ static void __init build_r4000_tlb_storeu32 *p = handle_tlbs;struct label *l = labels;struct reloc *r = relocs; +int i;memset (handle_tlbs,0 ,sizeof (handle_tlbs));memset (labels,0 ,sizeof (labels));
@@ -1740,17 +1734,15 @@ static void __init build_r4000_tlb_storepanic ("TLB store handler fastpath space exceeded" );resolve_relocs (relocs, labels); -printk ("Synthesized TLB store handler fastpath (%u instructions).\n" , +printk (KERN_INFO +"Synthesized TLB store handler fastpath (%u instructions).\n" , (unsigned int )(p - handle_tlbs)); -#ifdef DEBUG_TLB - { -int i; - -for (i =0 ; i < (p - handle_tlbs); i++) -printk ("%08x\n" , handle_tlbs[i]); - } -#endif +printk (KERN_DEBUG "\t.set push\n" ); +printk (KERN_DEBUG "\t.set noreorder\n" ); +for (i =0 ; i < (p - handle_tlbs); i++) +printk (KERN_DEBUG "\t.word 0x%08x\n" , handle_tlbs[i]); +printk (KERN_DEBUG "\t.set pop\n" ); }static void __init build_r4000_tlb_modify_handler (void )
@@ -1758,6 +1750,7 @@ static void __init build_r4000_tlb_modifu32 *p = handle_tlbm;struct label *l = labels;struct reloc *r = relocs; +int i;memset (handle_tlbm,0 ,sizeof (handle_tlbm));memset (labels,0 ,sizeof (labels));
@@ -1777,17 +1770,15 @@ static void __init build_r4000_tlb_modifpanic ("TLB modify handler fastpath space exceeded" );resolve_relocs (relocs, labels); -printk ("Synthesized TLB modify handler fastpath (%u instructions).\n" , +printk (KERN_INFO +"Synthesized TLB modify handler fastpath (%u instructions).\n" , (unsigned int )(p - handle_tlbm)); -#ifdef DEBUG_TLB - { -int i; - -for (i =0 ; i < (p - handle_tlbm); i++) -printk ("%08x\n" , handle_tlbm[i]); - } -#endif +printk (KERN_DEBUG "\t.set push\n" ); +printk (KERN_DEBUG "\t.set noreorder\n" ); +for (i =0 ; i < (p - handle_tlbm); i++) +printk (KERN_DEBUG "\t.word 0x%08x\n" , handle_tlbm[i]); +printk (KERN_DEBUG "\t.set pop\n" ); }void __init build_tlb_refill_handler (void )
Quoted 4 lines · Thiemo Seufer
Hello All,
this changes tlbex to print out the (.word) assembler code of the synthesized handlers.
Small update, using pr_debug and pr_info.
Thiemo
Signed-off-by Thiemo Seufer <[email protected]>
arch/mips/mm/tlbex.c +71 -88
@@ -5,7 +5,7 @@* * Synthesize TLB refill handlers at runtime. * -* Copyright (C) 2004,2005 by Thiemo Seufer +* Copyright (C) 2004,2005,2006 by Thiemo Seufer * Copyright (C) 2005 Maciej W. Rozycki * Copyright (C) 2006 Ralf Baechle ([email protected]) *
@@ -35,8 +35,6 @@ #include <asm/elf.h>#include <asm/smp.h> #include <asm/war.h> -/* #define DEBUG_TLB */ -static __init int __attribute__((unused))r45k_bvahwbug (void ) {/* XXX: We should probe for the presence of this bug, but we don't. */
@@ -728,6 +726,7 @@ static void __init build_r3000_tlb_refil {long pgdc = (long )pgd_current;u32 *p; +int i;memset (tlb_handler,0 ,sizeof (tlb_handler)); p = tlb_handler;
@@ -753,16 +752,14 @@ static void __init build_r3000_tlb_refilif (p > tlb_handler +32 )panic ("TLB refill handler space exceeded" ); -printk ("Synthesized TLB refill handler (%u instructions).\n" , - (unsigned int )(p - tlb_handler)); -#ifdef DEBUG_TLB - { -int i; +pr_info ("Synthesized TLB refill handler (%u instructions).\n" , + (unsigned int )(p - tlb_handler)); -for (i =0 ; i < (p - tlb_handler); i++) -printk ("%08x\n" , tlb_handler[i]); - } -#endif +pr_debug ("\t.set push\n" ); +pr_debug ("\t.set noreorder\n" ); +for (i =0 ; i < (p - tlb_handler); i++) +pr_debug ("\t.word 0x%08x\n" , tlb_handler[i]); +pr_debug ("\t.set pop\n" );memcpy ((void *)ebase, tlb_handler,0x80 ); }
@@ -1175,6 +1172,7 @@ static void __init build_r4000_tlb_refilstruct reloc *r = relocs;u32 *f;unsigned int final_len; +int i;memset (tlb_handler,0 ,sizeof (tlb_handler));memset (labels,0 ,sizeof (labels));
@@ -1272,24 +1270,21 @@ #else /* CONFIG_64BIT */#endif /* CONFIG_64BIT */ resolve_relocs (relocs, labels); -printk ("Synthesized TLB refill handler (%u instructions).\n" , - final_len); - -#ifdef DEBUG_TLB - { -int i; +pr_info ("Synthesized TLB refill handler (%u instructions).\n" , + final_len); - f = final_handler; + f = final_handler;#ifdef CONFIG_64BIT -if (final_len >32 ) - final_len =64 ; -else - f = final_handler +32 ; +if (final_len >32 ) + final_len =64 ; +else + f = final_handler +32 ;#endif /* CONFIG_64BIT */ -for (i =0 ; i < final_len; i++) -printk ("%08x\n" , f[i]); - } -#endif +pr_debug ("\t.set push\n" ); +pr_debug ("\t.set noreorder\n" ); +for (i =0 ; i < final_len; i++) +pr_debug ("\t.word 0x%08x\n" , f[i]); +pr_debug ("\t.set pop\n" );memcpy ((void *)ebase, final_handler,0x100 ); }
@@ -1522,6 +1517,7 @@ static void __init build_r3000_tlb_load_u32 *p = handle_tlbl;struct label *l = labels;struct reloc *r = relocs; +int i;memset (handle_tlbl,0 ,sizeof (handle_tlbl));memset (labels,0 ,sizeof (labels));
@@ -1541,17 +1537,14 @@ static void __init build_r3000_tlb_load_panic ("TLB load handler fastpath space exceeded" );resolve_relocs (relocs, labels); -printk ("Synthesized TLB load handler fastpath (%u instructions).\n" , - (unsigned int )(p - handle_tlbl)); - -#ifdef DEBUG_TLB - { -int i; +pr_info ("Synthesized TLB load handler fastpath (%u instructions).\n" , + (unsigned int )(p - handle_tlbl)); -for (i =0 ; i < (p - handle_tlbl); i++) -printk ("%08x\n" , handle_tlbl[i]); - } -#endif +pr_debug ("\t.set push\n" ); +pr_debug ("\t.set noreorder\n" ); +for (i =0 ; i < (p - handle_tlbl); i++) +pr_debug ("\t.word 0x%08x\n" , handle_tlbl[i]); +pr_debug ("\t.set pop\n" ); }static void __init build_r3000_tlb_store_handler (void )
@@ -1559,6 +1552,7 @@ static void __init build_r3000_tlb_storeu32 *p = handle_tlbs;struct label *l = labels;struct reloc *r = relocs; +int i;memset (handle_tlbs,0 ,sizeof (handle_tlbs));memset (labels,0 ,sizeof (labels));
@@ -1578,17 +1572,14 @@ static void __init build_r3000_tlb_storepanic ("TLB store handler fastpath space exceeded" );resolve_relocs (relocs, labels); -printk ("Synthesized TLB store handler fastpath (%u instructions).\n" , - (unsigned int )(p - handle_tlbs)); +pr_info ("Synthesized TLB store handler fastpath (%u instructions).\n" , + (unsigned int )(p - handle_tlbs)); -#ifdef DEBUG_TLB - { -int i; - -for (i =0 ; i < (p - handle_tlbs); i++) -printk ("%08x\n" , handle_tlbs[i]); - } -#endif +pr_debug ("\t.set push\n" ); +pr_debug ("\t.set noreorder\n" ); +for (i =0 ; i < (p - handle_tlbs); i++) +pr_debug ("\t.word 0x%08x\n" , handle_tlbs[i]); +pr_debug ("\t.set pop\n" ); }static void __init build_r3000_tlb_modify_handler (void )
@@ -1596,6 +1587,7 @@ static void __init build_r3000_tlb_modifu32 *p = handle_tlbm;struct label *l = labels;struct reloc *r = relocs; +int i;memset (handle_tlbm,0 ,sizeof (handle_tlbm));memset (labels,0 ,sizeof (labels));
@@ -1615,17 +1607,14 @@ static void __init build_r3000_tlb_modifpanic ("TLB modify handler fastpath space exceeded" );resolve_relocs (relocs, labels); -printk ("Synthesized TLB modify handler fastpath (%u instructions).\n" , - (unsigned int )(p - handle_tlbm)); +pr_info ("Synthesized TLB modify handler fastpath (%u instructions).\n" , + (unsigned int )(p - handle_tlbm)); -#ifdef DEBUG_TLB - { -int i; - -for (i =0 ; i < (p - handle_tlbm); i++) -printk ("%08x\n" , handle_tlbm[i]); - } -#endif +pr_debug ("\t.set push\n" ); +pr_debug ("\t.set noreorder\n" ); +for (i =0 ; i < (p - handle_tlbm); i++) +pr_debug ("\t.word 0x%08x\n" , handle_tlbm[i]); +pr_debug ("\t.set pop\n" ); }/*
@@ -1677,6 +1666,7 @@ static void __init build_r4000_tlb_load_u32 *p = handle_tlbl;struct label *l = labels;struct reloc *r = relocs; +int i;memset (handle_tlbl,0 ,sizeof (handle_tlbl));memset (labels,0 ,sizeof (labels));
@@ -1704,17 +1694,14 @@ static void __init build_r4000_tlb_load_panic ("TLB load handler fastpath space exceeded" );resolve_relocs (relocs, labels); -printk ("Synthesized TLB load handler fastpath (%u instructions).\n" , - (unsigned int )(p - handle_tlbl)); - -#ifdef DEBUG_TLB - { -int i; +pr_info ("Synthesized TLB load handler fastpath (%u instructions).\n" , + (unsigned int )(p - handle_tlbl)); -for (i =0 ; i < (p - handle_tlbl); i++) -printk ("%08x\n" , handle_tlbl[i]); - } -#endif +pr_debug ("\t.set push\n" ); +pr_debug ("\t.set noreorder\n" ); +for (i =0 ; i < (p - handle_tlbl); i++) +pr_debug ("\t.word 0x%08x\n" , handle_tlbl[i]); +pr_debug ("\t.set pop\n" ); }static void __init build_r4000_tlb_store_handler (void )
@@ -1722,6 +1709,7 @@ static void __init build_r4000_tlb_storeu32 *p = handle_tlbs;struct label *l = labels;struct reloc *r = relocs; +int i;memset (handle_tlbs,0 ,sizeof (handle_tlbs));memset (labels,0 ,sizeof (labels));
@@ -1740,17 +1728,14 @@ static void __init build_r4000_tlb_storepanic ("TLB store handler fastpath space exceeded" );resolve_relocs (relocs, labels); -printk ("Synthesized TLB store handler fastpath (%u instructions).\n" , - (unsigned int )(p - handle_tlbs)); - -#ifdef DEBUG_TLB - { -int i; +pr_info ("Synthesized TLB store handler fastpath (%u instructions).\n" , + (unsigned int )(p - handle_tlbs)); -for (i =0 ; i < (p - handle_tlbs); i++) -printk ("%08x\n" , handle_tlbs[i]); - } -#endif +pr_debug ("\t.set push\n" ); +pr_debug ("\t.set noreorder\n" ); +for (i =0 ; i < (p - handle_tlbs); i++) +pr_debug ("\t.word 0x%08x\n" , handle_tlbs[i]); +pr_debug ("\t.set pop\n" ); }static void __init build_r4000_tlb_modify_handler (void )
@@ -1758,6 +1743,7 @@ static void __init build_r4000_tlb_modifu32 *p = handle_tlbm;struct label *l = labels;struct reloc *r = relocs; +int i;memset (handle_tlbm,0 ,sizeof (handle_tlbm));memset (labels,0 ,sizeof (labels));
@@ -1777,17 +1763,14 @@ static void __init build_r4000_tlb_modifpanic ("TLB modify handler fastpath space exceeded" );resolve_relocs (relocs, labels); -printk ("Synthesized TLB modify handler fastpath (%u instructions).\n" , - (unsigned int )(p - handle_tlbm)); - -#ifdef DEBUG_TLB - { -int i; - -for (i =0 ; i < (p - handle_tlbm); i++) -printk ("%08x\n" , handle_tlbm[i]); - } -#endif +pr_info ("Synthesized TLB modify handler fastpath (%u instructions).\n" , + (unsigned int )(p - handle_tlbm)); + +pr_debug ("\t.set push\n" ); +pr_debug ("\t.set noreorder\n" ); +for (i =0 ; i < (p - handle_tlbm); i++) +pr_debug ("\t.word 0x%08x\n" , handle_tlbm[i]); +pr_debug ("\t.set pop\n" ); }void __init build_tlb_refill_handler (void )