Palacios Public Git Repository

To checkout Palacios execute

  git clone http://v3vee.org/palacios/palacios.web/palacios.git
This will give you the master branch. You probably want the devel branch or one of the release branches. To switch to the devel branch, simply execute
  cd palacios
  git checkout --track -b devel origin/devel
The other branches are similar.


Merge branch 'devel'
[palacios.git] / kitten / kernel / extable.c
1 /* Rewritten by Rusty Russell, on the backs of many others...
2    Copyright (C) 2001 Rusty Russell, 2002 Rusty Russell IBM.
3
4     This program is free software; you can redistribute it and/or modify
5     it under the terms of the GNU General Public License as published by
6     the Free Software Foundation; either version 2 of the License, or
7     (at your option) any later version.
8
9     This program is distributed in the hope that it will be useful,
10     but WITHOUT ANY WARRANTY; without even the implied warranty of
11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12     GNU General Public License for more details.
13
14     You should have received a copy of the GNU General Public License
15     along with this program; if not, write to the Free Software
16     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17 */
18 #include <lwk/init.h>
19 #include <lwk/extable.h>
20 #include <arch/uaccess.h>
21 #include <arch/sections.h>
22
23 extern struct exception_table_entry __start___ex_table[];
24 extern struct exception_table_entry __stop___ex_table[];
25
26 /* Sort the kernel's built-in exception table */
27 void __init sort_exception_table(void)
28 {
29         sort_extable(__start___ex_table, __stop___ex_table);
30 }
31
32 /* Given an address, look for it in the exception table. */
33 const struct exception_table_entry *search_exception_table(unsigned long addr)
34 {
35         const struct exception_table_entry *e;
36
37         e = search_extable(__start___ex_table, __stop___ex_table-1, addr);
38         return e;
39 }
40
41 int core_kernel_text(unsigned long addr)
42 {
43         if (addr >= (unsigned long)_stext &&
44             addr <= (unsigned long)_etext)
45                 return 1;
46
47         if (addr >= (unsigned long)_sinittext &&
48             addr <= (unsigned long)_einittext)
49                 return 1;
50         return 0;
51 }
52
53 int __kernel_text_address(unsigned long addr)
54 {
55         if (core_kernel_text(addr))
56                 return 1;
57         return 0;
58 }
59
60 int kernel_text_address(unsigned long addr)
61 {
62         if (core_kernel_text(addr))
63                 return 1;
64         return 0;
65 }