linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] use-generic-bug-for-ppc
@ 2006-10-04 18:49 Judith Lebzelter
  2006-10-04 20:15 ` Jeremy Fitzhardinge
  0 siblings, 1 reply; 3+ messages in thread
From: Judith Lebzelter @ 2006-10-04 18:49 UTC (permalink / raw)
  To: paulus; +Cc: linuxppc-dev, jeremy, linux-kernel

For 2.6.18-mm3, the 32-bit 'ppc' architectures won't compile due to errors:

arch/ppc/kernel/built-in.o: In function `find_bug':
arch/ppc/kernel/traps.c:582: undefined reference to `module_find_bug'
arch/powerpc/kernel/built-in.o: In function `module_arch_cleanup':
arch/powerpc/kernel/module_32.c:282: undefined reference to `module_bug_cleanup'
arch/powerpc/kernel/built-in.o: In function `module_finalize':
arch/powerpc/kernel/module_32.c:277: undefined reference to `module_bug_finalize'
make: [.tmp_vmlinux3] Error 1 (ignored)
  KSYM    .tmp_kallsyms3.S
powerpc-750-linux-gnu-nm: '.tmp_vmlinux3': No such file
No valid symbol.
make: [.tmp_kallsyms3.S] Error 1 (ignored)
  AS      .tmp_kallsyms3.o
  LD      vmlinux
arch/ppc/kernel/built-in.o: In function `find_bug':
arch/ppc/kernel/traps.c:582: undefined reference to `module_find_bug'
arch/powerpc/kernel/built-in.o: In function `module_arch_cleanup':
arch/powerpc/kernel/module_32.c:282: undefined reference to `module_bug_cleanup'
arch/powerpc/kernel/built-in.o: In function `module_finalize':
arch/powerpc/kernel/module_32.c:277: undefined reference to `module_bug_finalize'
make: [vmlinux] Error 1 (ignored)

These changes match changes for using the generic bug libraries as in 
'use-generic-bug-for-powerpc.patch' and gets rid of the compile errors.

Signed-off-by: Judith Lebzelter <judith@osdl.org>

---

Files Edited:
arch/ppc/kernel/traps.c
arch/ppc/Kconfig


Index: linux/arch/ppc/Kconfig
===================================================================
--- linux.orig/arch/ppc/Kconfig	2006-10-03 16:11:26.456655259 -0700
+++ linux/arch/ppc/Kconfig	2006-10-03 17:10:09.398320057 -0700
@@ -52,6 +52,11 @@
 	bool
 	default y
 
+config GENERIC_BUG
+	bool
+	default y
+	depends on BUG
+
 source "init/Kconfig"
 
 menu "Processor"
Index: linux/arch/ppc/kernel/traps.c
===================================================================
--- linux.orig/arch/ppc/kernel/traps.c	2006-10-03 16:11:26.461653713 -0700
+++ linux/arch/ppc/kernel/traps.c	2006-10-04 10:00:21.198907987 -0700
@@ -28,6 +28,7 @@
 #include <linux/init.h>
 #include <linux/module.h>
 #include <linux/prctl.h>
+#include <linux/bug.h>
 
 #include <asm/pgtable.h>
 #include <asm/uaccess.h>
@@ -568,55 +569,9 @@
  */
 extern struct bug_entry __start___bug_table[], __stop___bug_table[];
 
-#ifndef CONFIG_MODULES
-#define module_find_bug(x)	NULL
-#endif
-
-struct bug_entry *find_bug(unsigned long bugaddr)
+int is_valid_bugaddr(unsigned long addr)
 {
-	struct bug_entry *bug;
-
-	for (bug = __start___bug_table; bug < __stop___bug_table; ++bug)
-		if (bugaddr == bug->bug_addr)
-			return bug;
-	return module_find_bug(bugaddr);
-}
-
-int check_bug_trap(struct pt_regs *regs)
-{
-	struct bug_entry *bug;
-	unsigned long addr;
-
-	if (regs->msr & MSR_PR)
-		return 0;	/* not in kernel */
-	addr = regs->nip;	/* address of trap instruction */
-	if (addr < PAGE_OFFSET)
-		return 0;
-	bug = find_bug(regs->nip);
-	if (bug == NULL)
-		return 0;
-	if (bug->line & BUG_WARNING_TRAP) {
-		/* this is a WARN_ON rather than BUG/BUG_ON */
-#ifdef CONFIG_XMON
-		xmon_printf(KERN_ERR "Badness in %s at %s:%ld\n",
-		       bug->function, bug->file,
-		       bug->line & ~BUG_WARNING_TRAP);
-#endif /* CONFIG_XMON */		
-		printk(KERN_ERR "Badness in %s at %s:%ld\n",
-		       bug->function, bug->file,
-		       bug->line & ~BUG_WARNING_TRAP);
-		dump_stack();
-		return 1;
-	}
-#ifdef CONFIG_XMON
-	xmon_printf(KERN_CRIT "kernel BUG in %s at %s:%ld!\n",
-	       bug->function, bug->file, bug->line);
-	xmon(regs);
-#endif /* CONFIG_XMON */
-	printk(KERN_CRIT "kernel BUG in %s at %s:%ld!\n",
-	       bug->function, bug->file, bug->line);
-
-	return 0;
+	return addr >= PAGE_OFFSET;
 }
 
 void program_check_exception(struct pt_regs *regs)
@@ -671,7 +626,9 @@
 		/* trap exception */
 		if (debugger_bpt(regs))
 			return;
-		if (check_bug_trap(regs)) {
+
+		if (!(regs->msr & MSR_PR) &&  /* not user-mode */
+		    report_bug(regs->nip) == BUG_TRAP_TYPE_WARN) {
 			regs->nip += 4;
 			return;
 		}

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] use-generic-bug-for-ppc
  2006-10-04 18:49 [PATCH] use-generic-bug-for-ppc Judith Lebzelter
@ 2006-10-04 20:15 ` Jeremy Fitzhardinge
  2006-10-04 23:29   ` [PATCH] use-generic-bug-for-ppc resubmitted Judith Lebzelter
  0 siblings, 1 reply; 3+ messages in thread
From: Jeremy Fitzhardinge @ 2006-10-04 20:15 UTC (permalink / raw)
  To: Judith Lebzelter; +Cc: Andrew Morton, linuxppc-dev, paulus, linux-kernel

Judith Lebzelter wrote:
> Index: linux/arch/ppc/kernel/traps.c
> ===================================================================
> --- linux.orig/arch/ppc/kernel/traps.c	2006-10-03 16:11:26.461653713 -0700
> +++ linux/arch/ppc/kernel/traps.c	2006-10-04 10:00:21.198907987 -0700
> @@ -28,6 +28,7 @@
>  #include <linux/init.h>
>  #include <linux/module.h>
>  #include <linux/prctl.h>
> +#include <linux/bug.h>
>  
>  #include <asm/pgtable.h>
>  #include <asm/uaccess.h>
> @@ -568,55 +569,9 @@
>   */
>  extern struct bug_entry __start___bug_table[], __stop___bug_table[];
>  
> -#ifndef CONFIG_MODULES
> -#define module_find_bug(x)	NULL
> -#endif
>   
Looks like you need to delete a bit more here - the extern struct 
bug_entry, and the comment above.
    J

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] use-generic-bug-for-ppc resubmitted
  2006-10-04 20:15 ` Jeremy Fitzhardinge
@ 2006-10-04 23:29   ` Judith Lebzelter
  0 siblings, 0 replies; 3+ messages in thread
From: Judith Lebzelter @ 2006-10-04 23:29 UTC (permalink / raw)
  To: Jeremy Fitzhardinge; +Cc: Andrew Morton, linuxppc-dev, paulus, linux-kernel

On Wed, Oct 04, 2006 at 01:15:21PM -0700, Jeremy Fitzhardinge wrote:
> Judith Lebzelter wrote:
> >Index: linux/arch/ppc/kernel/traps.c
> >===================================================================
> >--- linux.orig/arch/ppc/kernel/traps.c	2006-10-03 
> >16:11:26.461653713 -0700
> >+++ linux/arch/ppc/kernel/traps.c	2006-10-04 10:00:21.198907987 -0700
> >@@ -28,6 +28,7 @@
> > #include <linux/init.h>
> > #include <linux/module.h>
> > #include <linux/prctl.h>
> >+#include <linux/bug.h>
> > 
> > #include <asm/pgtable.h>
> > #include <asm/uaccess.h>
> >@@ -568,55 +569,9 @@
> >  */
> > extern struct bug_entry __start___bug_table[], __stop___bug_table[];
> > 
> >-#ifndef CONFIG_MODULES
> >-#define module_find_bug(x)	NULL
> >-#endif
> >  
> Looks like you need to delete a bit more here - the extern struct 
> bug_entry, and the comment above.
>    J

Here is the generic bug ppc patch with the suggested change.  It compiles 
without error.


Signed-off-by:  Judith Lebzelter <judith@osdl.org>

---

arch/ppc/kernel/traps.c
arch/ppc/Kconfig

Index: linux/arch/ppc/Kconfig
===================================================================
--- linux.orig/arch/ppc/Kconfig	2006-10-03 16:11:26.000000000 -0700
+++ linux/arch/ppc/Kconfig	2006-10-03 17:10:09.000000000 -0700
@@ -52,6 +52,11 @@
 	bool
 	default y
 
+config GENERIC_BUG
+	bool
+	default y
+	depends on BUG
+
 source "init/Kconfig"
 
 menu "Processor"
Index: linux/arch/ppc/kernel/traps.c
===================================================================
--- linux.orig/arch/ppc/kernel/traps.c	2006-10-03 16:11:26.000000000 -0700
+++ linux/arch/ppc/kernel/traps.c	2006-10-04 15:37:46.674644563 -0700
@@ -28,6 +28,7 @@
 #include <linux/init.h>
 #include <linux/module.h>
 #include <linux/prctl.h>
+#include <linux/bug.h>
 
 #include <asm/pgtable.h>
 #include <asm/uaccess.h>
@@ -559,64 +560,9 @@
 	}
 }
 
-/*
- * Look through the list of trap instructions that are used for BUG(),
- * BUG_ON() and WARN_ON() and see if we hit one.  At this point we know
- * that the exception was caused by a trap instruction of some kind.
- * Returns 1 if we should continue (i.e. it was a WARN_ON) or 0
- * otherwise.
- */
-extern struct bug_entry __start___bug_table[], __stop___bug_table[];
-
-#ifndef CONFIG_MODULES
-#define module_find_bug(x)	NULL
-#endif
-
-struct bug_entry *find_bug(unsigned long bugaddr)
-{
-	struct bug_entry *bug;
-
-	for (bug = __start___bug_table; bug < __stop___bug_table; ++bug)
-		if (bugaddr == bug->bug_addr)
-			return bug;
-	return module_find_bug(bugaddr);
-}
-
-int check_bug_trap(struct pt_regs *regs)
+int is_valid_bugaddr(unsigned long addr)
 {
-	struct bug_entry *bug;
-	unsigned long addr;
-
-	if (regs->msr & MSR_PR)
-		return 0;	/* not in kernel */
-	addr = regs->nip;	/* address of trap instruction */
-	if (addr < PAGE_OFFSET)
-		return 0;
-	bug = find_bug(regs->nip);
-	if (bug == NULL)
-		return 0;
-	if (bug->line & BUG_WARNING_TRAP) {
-		/* this is a WARN_ON rather than BUG/BUG_ON */
-#ifdef CONFIG_XMON
-		xmon_printf(KERN_ERR "Badness in %s at %s:%ld\n",
-		       bug->function, bug->file,
-		       bug->line & ~BUG_WARNING_TRAP);
-#endif /* CONFIG_XMON */		
-		printk(KERN_ERR "Badness in %s at %s:%ld\n",
-		       bug->function, bug->file,
-		       bug->line & ~BUG_WARNING_TRAP);
-		dump_stack();
-		return 1;
-	}
-#ifdef CONFIG_XMON
-	xmon_printf(KERN_CRIT "kernel BUG in %s at %s:%ld!\n",
-	       bug->function, bug->file, bug->line);
-	xmon(regs);
-#endif /* CONFIG_XMON */
-	printk(KERN_CRIT "kernel BUG in %s at %s:%ld!\n",
-	       bug->function, bug->file, bug->line);
-
-	return 0;
+	return addr >= PAGE_OFFSET;
 }
 
 void program_check_exception(struct pt_regs *regs)
@@ -671,7 +617,9 @@
 		/* trap exception */
 		if (debugger_bpt(regs))
 			return;
-		if (check_bug_trap(regs)) {
+
+		if (!(regs->msr & MSR_PR) &&  /* not user-mode */
+		    report_bug(regs->nip) == BUG_TRAP_TYPE_WARN) {
 			regs->nip += 4;
 			return;
 		}

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2006-10-04 23:29 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-10-04 18:49 [PATCH] use-generic-bug-for-ppc Judith Lebzelter
2006-10-04 20:15 ` Jeremy Fitzhardinge
2006-10-04 23:29   ` [PATCH] use-generic-bug-for-ppc resubmitted Judith Lebzelter

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).