Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
blackfin
kernel
kgdb_test.c
Go to the documentation of this file.
1
/*
2
* arch/blackfin/kernel/kgdb_test.c - Blackfin kgdb tests
3
*
4
* Copyright 2005-2008 Analog Devices Inc.
5
*
6
* Licensed under the GPL-2 or later.
7
*/
8
9
#include <linux/module.h>
10
#include <linux/kernel.h>
11
#include <
linux/init.h
>
12
#include <
linux/proc_fs.h
>
13
14
#include <asm/current.h>
15
#include <asm/uaccess.h>
16
17
#include <
asm/blackfin.h
>
18
19
/* Symbols are here for kgdb test to poke directly */
20
static
char
cmdline
[256];
21
static
size_t
len;
22
23
#ifndef CONFIG_SMP
24
static
int
num1
__attribute__
((l1_data));
25
26
void
kgdb_l1_test
(
void
)
__attribute__
((l1_text));
27
28
void
kgdb_l1_test
(
void
)
29
{
30
pr_alert
(
"L1(before change) : data variable addr = 0x%p, data value is %d\n"
, &
num1
,
num1
);
31
pr_alert
(
"L1 : code function addr = 0x%p\n"
,
kgdb_l1_test
);
32
num1
=
num1
+ 10;
33
pr_alert
(
"L1(after change) : data variable addr = 0x%p, data value is %d\n"
, &
num1
,
num1
);
34
}
35
#endif
36
37
#if L2_LENGTH
38
39
static
int
num2
__attribute__
((
l2
));
40
void
kgdb_l2_test(
void
)
__attribute__
((
l2
));
41
42
void
kgdb_l2_test(
void
)
43
{
44
pr_alert
(
"L2(before change) : data variable addr = 0x%p, data value is %d\n"
, &
num2
,
num2
);
45
pr_alert
(
"L2 : code function addr = 0x%p\n"
, kgdb_l2_test);
46
num2
=
num2
+ 20;
47
pr_alert
(
"L2(after change) : data variable addr = 0x%p, data value is %d\n"
, &
num2
,
num2
);
48
}
49
50
#endif
51
52
noinline
int
kgdb_test
(
char
*
name
,
int
len,
int
count
,
int
z)
53
{
54
pr_alert
(
"kgdb name(%d): %s, %d, %d\n"
, len, name, count, z);
55
count = z;
56
return
count
;
57
}
58
59
static
ssize_t
60
kgdb_test_proc_read(
struct
file
*
file
,
char
__user *
buf
,
61
size_t
count
, loff_t *ppos)
62
{
63
kgdb_test
(
"hello world!"
, 12, 0x55, 0x10);
64
#ifndef CONFIG_SMP
65
kgdb_l1_test
();
66
#endif
67
#if L2_LENGTH
68
kgdb_l2_test();
69
#endif
70
71
return
0;
72
}
73
74
static
ssize_t
75
kgdb_test_proc_write(
struct
file
*
file
,
const
char
__user *
buffer
,
76
size_t
count
, loff_t *
pos
)
77
{
78
len =
min_t
(
size_t
, 255, count);
79
memcpy
(
cmdline
, buffer, count);
80
cmdline
[len] = 0;
81
82
return
len;
83
}
84
85
static
const
struct
file_operations
kgdb_test_proc_fops = {
86
.owner =
THIS_MODULE
,
87
.read = kgdb_test_proc_read,
88
.write = kgdb_test_proc_write,
89
.llseek =
noop_llseek
,
90
};
91
92
static
int
__init
kgdbtest_init(
void
)
93
{
94
struct
proc_dir_entry
*
entry
;
95
96
#if L2_LENGTH
97
num2
= 0;
98
#endif
99
100
entry = proc_create(
"kgdbtest"
, 0,
NULL
, &kgdb_test_proc_fops);
101
if
(entry ==
NULL
)
102
return
-
ENOMEM
;
103
104
return
0;
105
}
106
107
static
void
__exit
kgdbtest_exit(
void
)
108
{
109
remove_proc_entry
(
"kgdbtest"
,
NULL
);
110
}
111
112
module_init
(kgdbtest_init);
113
module_exit
(kgdbtest_exit);
114
MODULE_LICENSE
(
"GPL"
);
Generated on Thu Jan 10 2013 13:04:23 for Linux Kernel by
1.8.2