OpenCores
URL https://opencores.org/ocsvn/or1k_soc_on_altera_embedded_dev_kit/or1k_soc_on_altera_embedded_dev_kit/trunk

Subversion Repositories or1k_soc_on_altera_embedded_dev_kit

[/] [or1k_soc_on_altera_embedded_dev_kit/] [trunk/] [linux-2.6/] [linux-2.6.24/] [arch/] [or32/] [kernel/] [module.c] - Blame information for rev 7

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 7 xianfeng
/*  Kernel module help for i386.
2
    Copyright (C) 2001 Rusty Russell.
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 <linux/moduleloader.h>
19
#include <linux/elf.h>
20
#include <linux/vmalloc.h>
21
#include <linux/fs.h>
22
#include <linux/string.h>
23
#include <linux/kernel.h>
24
 
25
#if 0
26
#define DEBUGP printk
27
#else
28
#define DEBUGP(fmt , ...)
29
#endif
30
 
31
void *module_alloc(unsigned long size)
32
{
33
        if (size == 0)
34
                return NULL;
35
        return vmalloc(size);
36
}
37
 
38
 
39
/* Free memory returned from module_alloc */
40
void module_free(struct module *mod, void *module_region)
41
{
42
        vfree(module_region);
43
        /* FIXME: If module_region == mod->init_region, trim exception
44
           table entries. */
45
}
46
 
47
/* We don't need anything special. */
48
int module_frob_arch_sections(Elf_Ehdr *hdr,
49
                              Elf_Shdr *sechdrs,
50
                              char *secstrings,
51
                              struct module *mod)
52
{
53
        return 0;
54
}
55
 
56
int apply_relocate(Elf32_Shdr *sechdrs,
57
                   const char *strtab,
58
                   unsigned int symindex,
59
                   unsigned int relsec,
60
                   struct module *me)
61
{
62
        unsigned int i;
63
        Elf32_Rel *rel = (void *)sechdrs[relsec].sh_addr;
64
        Elf32_Sym *sym;
65
        uint32_t *location;
66
 
67
        DEBUGP("Applying relocate section %u to %u\n", relsec,
68
               sechdrs[relsec].sh_info);
69
        for (i = 0; i < sechdrs[relsec].sh_size / sizeof(*rel); i++) {
70
                /* This is where to make the change */
71
                location = (void *)sechdrs[sechdrs[relsec].sh_info].sh_offset
72
                        + rel[i].r_offset;
73
                /* This is the symbol it is referring to.  Note that all
74
                   undefined symbols have been resolved.  */
75
                sym = (Elf32_Sym *)sechdrs[symindex].sh_addr
76
                        + ELF32_R_SYM(rel[i].r_info);
77
 
78
                /* TODO: This is probably not correct */
79
                printk("Beware: untested code in module.c!\n");
80
                /* We add the value into the location given */
81
                *location += sym->st_value;
82
        }
83
        return 0;
84
}
85
 
86
int apply_relocate_add(Elf32_Shdr *sechdrs,
87
                       const char *strtab,
88
                       unsigned int symindex,
89
                       unsigned int relsec,
90
                       struct module *me)
91
{
92
        printk(KERN_ERR "module %s: ADD RELOCATION unsupported\n",
93
               me->name);
94
        return -ENOEXEC;
95
}
96
 
97
int module_finalize(const Elf_Ehdr *hdr,
98
                    const Elf_Shdr *sechdrs,
99
                    struct module *me)
100
{
101
        return 0;
102
}
103
 
104
void module_arch_cleanup(struct module *mod)
105
{
106
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.