Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
70f12567
Commit
70f12567
authored
Jun 07, 2009
by
Mike Frysinger
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Blackfin: add support for GENERIC_BUG
Signed-off-by:
Mike Frysinger
<
vapier@gentoo.org
>
parent
67834fa9
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
99 additions
and
8 deletions
+99
-8
arch/blackfin/Kconfig
arch/blackfin/Kconfig
+4
-0
arch/blackfin/include/asm/bug.h
arch/blackfin/include/asm/bug.h
+51
-6
arch/blackfin/kernel/traps.c
arch/blackfin/kernel/traps.c
+30
-0
arch/blackfin/kernel/vmlinux.lds.S
arch/blackfin/kernel/vmlinux.lds.S
+14
-2
No files found.
arch/blackfin/Kconfig
View file @
70f12567
...
@@ -28,6 +28,10 @@ config BLACKFIN
...
@@ -28,6 +28,10 @@ config BLACKFIN
select HAVE_OPROFILE
select HAVE_OPROFILE
select ARCH_WANT_OPTIONAL_GPIOLIB
select ARCH_WANT_OPTIONAL_GPIOLIB
config GENERIC_BUG
def_bool y
depends on BUG
config ZONE_DMA
config ZONE_DMA
bool
bool
default y
default y
...
...
arch/blackfin/include/asm/bug.h
View file @
70f12567
...
@@ -2,13 +2,58 @@
...
@@ -2,13 +2,58 @@
#define _BLACKFIN_BUG_H
#define _BLACKFIN_BUG_H
#ifdef CONFIG_BUG
#ifdef CONFIG_BUG
#define HAVE_ARCH_BUG
#define BUG() do { \
#define BFIN_BUG_OPCODE 0xefcd
dump_bfin_trace_buffer(); \
printk(KERN_EMERG "BUG: failure at %s:%d/%s()!\n", __FILE__, __LINE__, __func__); \
#ifdef CONFIG_DEBUG_BUGVERBOSE
panic("BUG!"); \
} while (0)
#define _BUG_OR_WARN(flags) \
asm volatile( \
"1: .hword %0\n" \
" .section __bug_table,\"a\",@progbits\n" \
"2: .long 1b\n" \
" .long %1\n" \
" .short %2\n" \
" .short %3\n" \
" .org 2b + %4\n" \
" .previous" \
: \
: "i"(BFIN_BUG_OPCODE), "i"(__FILE__), \
"i"(__LINE__), "i"(flags), \
"i"(sizeof(struct bug_entry)))
#else
#define _BUG_OR_WARN(flags) \
asm volatile( \
"1: .hword %0\n" \
" .section __bug_table,\"a\",@progbits\n" \
"2: .long 1b\n" \
" .short %1\n" \
" .org 2b + %2\n" \
" .previous" \
: \
: "i"(BFIN_BUG_OPCODE), "i"(flags), \
"i"(sizeof(struct bug_entry)))
#endif
/* CONFIG_DEBUG_BUGVERBOSE */
#define BUG() \
do { \
_BUG_OR_WARN(0); \
for (;;); \
} while (0)
#define WARN_ON(condition) \
({ \
int __ret_warn_on = !!(condition); \
if (unlikely(__ret_warn_on)) \
_BUG_OR_WARN(BUGFLAG_WARNING); \
unlikely(__ret_warn_on); \
})
#define HAVE_ARCH_BUG
#define HAVE_ARCH_WARN_ON
#endif
#endif
...
...
arch/blackfin/kernel/traps.c
View file @
70f12567
...
@@ -27,6 +27,7 @@
...
@@ -27,6 +27,7 @@
* 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
* 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
*/
#include <linux/bug.h>
#include <linux/uaccess.h>
#include <linux/uaccess.h>
#include <linux/interrupt.h>
#include <linux/interrupt.h>
#include <linux/module.h>
#include <linux/module.h>
...
@@ -381,6 +382,23 @@ asmlinkage void trap_c(struct pt_regs *fp)
...
@@ -381,6 +382,23 @@ asmlinkage void trap_c(struct pt_regs *fp)
/* 0x20 - Reserved, Caught by default */
/* 0x20 - Reserved, Caught by default */
/* 0x21 - Undefined Instruction, handled here */
/* 0x21 - Undefined Instruction, handled here */
case
VEC_UNDEF_I
:
case
VEC_UNDEF_I
:
#ifdef CONFIG_BUG
if
(
kernel_mode_regs
(
fp
))
{
switch
(
report_bug
(
fp
->
pc
,
fp
))
{
case
BUG_TRAP_TYPE_NONE
:
break
;
case
BUG_TRAP_TYPE_WARN
:
dump_bfin_trace_buffer
();
fp
->
pc
+=
2
;
goto
traps_done
;
case
BUG_TRAP_TYPE_BUG
:
/* call to panic() will dump trace, and it is
* off at this point, so it won't be clobbered
*/
panic
(
"BUG()"
);
}
}
#endif
info
.
si_code
=
ILL_ILLOPC
;
info
.
si_code
=
ILL_ILLOPC
;
sig
=
SIGILL
;
sig
=
SIGILL
;
verbose_printk
(
KERN_NOTICE
EXC_0x21
(
KERN_NOTICE
));
verbose_printk
(
KERN_NOTICE
EXC_0x21
(
KERN_NOTICE
));
...
@@ -792,6 +810,18 @@ void dump_bfin_trace_buffer(void)
...
@@ -792,6 +810,18 @@ void dump_bfin_trace_buffer(void)
}
}
EXPORT_SYMBOL
(
dump_bfin_trace_buffer
);
EXPORT_SYMBOL
(
dump_bfin_trace_buffer
);
#ifdef CONFIG_BUG
int
is_valid_bugaddr
(
unsigned
long
addr
)
{
unsigned
short
opcode
;
if
(
!
get_instruction
(
&
opcode
,
(
unsigned
short
*
)
addr
))
return
0
;
return
opcode
==
BFIN_BUG_OPCODE
;
}
#endif
/*
/*
* Checks to see if the address pointed to is either a
* Checks to see if the address pointed to is either a
* 16-bit CALL instruction, or a 32-bit CALL instruction
* 16-bit CALL instruction, or a 32-bit CALL instruction
...
...
arch/blackfin/kernel/vmlinux.lds.S
View file @
70f12567
...
@@ -166,6 +166,20 @@ SECTIONS
...
@@ -166,6 +166,20 @@ SECTIONS
}
}
PERCPU
(4)
PERCPU
(4)
SECURITY_INIT
SECURITY_INIT
/
*
we
have
to
discard
exit
text
and
such
at
runtime
,
not
link
time
,
to
*
handle
embedded
cross
-
section
references
(
alt
instructions
,
bug
*
table
,
eh_frame
,
etc
...
)
*/
.
exit.text
:
{
EXIT_TEXT
}
.
exit.data
:
{
EXIT_DATA
}
.
init.ramfs
:
.
init.ramfs
:
{
{
.
=
ALIGN
(
4
)
;
.
=
ALIGN
(
4
)
;
...
@@ -264,8 +278,6 @@ SECTIONS
...
@@ -264,8 +278,6 @@ SECTIONS
/
DISCARD
/
:
/
DISCARD
/
:
{
{
EXIT_TEXT
EXIT_DATA
*(.
exitcall.exit
)
*(.
exitcall.exit
)
}
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment