Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linux-davinci
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
linux
linux-davinci
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
Show 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