Changeset 17147


Ignore:
Timestamp:
2009-08-06T16:06:26+02:00 (7 years ago)
Author:
florian
Message:

[kernel] make 64-bits MIPS kernel compile again on arch/mips/kernel/module.c

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/generic-2.6/patches-2.6.30/027-mips_module_reloc.patch

    r16904 r17147  
    1 --- a/arch/mips/Makefile 
    2 +++ b/arch/mips/Makefile 
    3 @@ -83,7 +83,7 @@ all-$(CONFIG_BOOT_ELF64)      := $(vmlinux-64 
     1Index: linux-2.6.30.4/arch/mips/Makefile 
     2=================================================================== 
     3--- linux-2.6.30.4.orig/arch/mips/Makefile      2009-08-06 16:02:25.000000000 +0200 
     4+++ linux-2.6.30.4/arch/mips/Makefile   2009-08-06 16:02:37.000000000 +0200 
     5@@ -83,7 +83,7 @@ 
    46 cflags-y                       += -G 0 -mno-abicalls -fno-pic -pipe 
    57 cflags-y                       += -msoft-float 
     
    1012 cflags-y += -ffreestanding 
    1113  
    12 --- a/arch/mips/include/asm/module.h 
    13 +++ b/arch/mips/include/asm/module.h 
    14 @@ -9,6 +9,11 @@ struct mod_arch_specific { 
     14Index: linux-2.6.30.4/arch/mips/include/asm/module.h 
     15=================================================================== 
     16--- linux-2.6.30.4.orig/arch/mips/include/asm/module.h  2009-08-06 16:02:25.000000000 +0200 
     17+++ linux-2.6.30.4/arch/mips/include/asm/module.h       2009-08-06 16:02:37.000000000 +0200 
     18@@ -9,6 +9,11 @@ 
    1519        struct list_head dbe_list; 
    1620        const struct exception_table_entry *dbe_start; 
     
    2428  
    2529 typedef uint8_t Elf64_Byte;            /* Type for a 8-bit quantity.  */ 
    26 --- a/arch/mips/kernel/module.c 
    27 +++ b/arch/mips/kernel/module.c 
    28 @@ -43,6 +43,114 @@ static struct mips_hi16 *mips_hi16_list; 
     30Index: linux-2.6.30.4/arch/mips/kernel/module.c 
     31=================================================================== 
     32--- linux-2.6.30.4.orig/arch/mips/kernel/module.c       2009-08-06 16:02:36.000000000 +0200 
     33+++ linux-2.6.30.4/arch/mips/kernel/module.c    2009-08-06 16:03:15.000000000 +0200 
     34@@ -43,6 +43,116 @@ 
    2935 static LIST_HEAD(dbe_list); 
    3036 static DEFINE_SPINLOCK(dbe_lock); 
     
    3642+ */ 
    3743+static unsigned int 
    38 +get_plt_size(const Elf32_Ehdr *hdr, const Elf32_Shdr *sechdrs, 
     44+get_plt_size(const Elf_Ehdr *hdr, const Elf_Shdr *sechdrs, 
    3945+             const char *secstrings, unsigned int symindex, bool is_init) 
    4046+{ 
     
    104110+} 
    105111+ 
     112+#ifndef MODULE_START 
    106113+static void *alloc_phys(unsigned long size) 
    107114+{ 
     
    125132+       return page_address(page); 
    126133+} 
     134+#endif 
    127135+ 
    128136+static void free_phys(void *ptr, unsigned long size) 
     
    141149 { 
    142150 #ifdef MODULE_START 
    143 @@ -58,16 +166,41 @@ void *module_alloc(unsigned long size) 
     151@@ -58,16 +168,45 @@ 
    144152  
    145153        return __vmalloc_area(area, GFP_KERNEL, PAGE_KERNEL); 
     
    160168+ 
    161169+       return ptr; 
     170+#endif 
     171+} 
     172+ 
     173+static inline bool is_phys_addr(void *ptr) 
     174+{ 
     175+#ifdef CONFIG_64BIT 
     176+       return (KSEGX((unsigned long)ptr) == CKSEG0); 
     177+#else 
     178+       return (KSEGX(ptr) == KSEG0); 
    162179 #endif 
    163180 } 
    164181  
    165 +static inline bool is_phys_addr(void *ptr) 
    166 +{ 
    167 +       return (KSEGX(ptr) == KSEG0); 
    168 +} 
    169 + 
    170182 /* Free memory returned from module_alloc */ 
    171183 void module_free(struct module *mod, void *module_region) 
     
    185197            table entries. */ 
    186198 } 
    187 @@ -75,6 +208,24 @@ void module_free(struct module *mod, voi 
     199@@ -75,6 +214,24 @@ 
    188200 int module_frob_arch_sections(Elf_Ehdr *hdr, Elf_Shdr *sechdrs, 
    189201                              char *secstrings, struct module *mod) 
     
    210222 } 
    211223  
    212 @@ -97,27 +248,41 @@ static int apply_r_mips_32_rela(struct m 
     224@@ -97,27 +254,41 @@ 
    213225        return 0; 
    214226 } 
     
    235247+       if (v & 0x00008000) 
    236248+               v += 0x10000; 
    237   
    238 -       *location = (*location & ~0x03ffffff) | 
    239 -                   ((*location + (v >> 2)) & 0x03ffffff); 
     249+ 
    240250+       tramp[0] = 0x3c190000 | (v >> 16);      /* lui t9, hi16 */ 
    241251+       tramp[1] = 0x27390000 | (v & 0xffff);   /* addiu t9, t9, lo16 */ 
    242252+       tramp[2] = 0x03200008;                  /* jr t9 */ 
    243253+       tramp[3] = 0x00000000;                  /* nop */ 
    244 + 
     254  
     255-       *location = (*location & ~0x03ffffff) | 
     256-                   ((*location + (v >> 2)) & 0x03ffffff); 
    245257+       return (Elf_Addr) tramp; 
    246258+} 
     
    266278        if (v % 4) { 
    267279                printk(KERN_ERR "module %s: dangerous relocation\n", me->name); 
    268 @@ -125,17 +290,31 @@ static int apply_r_mips_26_rela(struct m 
     280@@ -125,17 +296,31 @@ 
    269281        } 
    270282  
     
    301313 { 
    302314        struct mips_hi16 *n; 
    303 @@ -400,11 +579,23 @@ int module_finalize(const Elf_Ehdr *hdr, 
     315@@ -400,11 +585,23 @@ 
    304316                list_add(&me->arch.dbe_list, &dbe_list); 
    305317                spin_unlock_irq(&dbe_lock); 
Note: See TracChangeset for help on using the changeset viewer.