aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/include/asm/elf.h1
-rw-r--r--arch/arm/kernel/module.c9
-rw-r--r--arch/arm/mach-iop13xx/pci.c5
-rw-r--r--arch/arm/mm/mmu.c2
4 files changed, 15 insertions, 2 deletions
diff --git a/arch/arm/include/asm/elf.h b/arch/arm/include/asm/elf.h
index def8eac6e89d..d7da19bcf928 100644
--- a/arch/arm/include/asm/elf.h
+++ b/arch/arm/include/asm/elf.h
@@ -50,6 +50,7 @@ typedef struct user_fp elf_fpregset_t;
50#define R_ARM_ABS32 2 50#define R_ARM_ABS32 2
51#define R_ARM_CALL 28 51#define R_ARM_CALL 28
52#define R_ARM_JUMP24 29 52#define R_ARM_JUMP24 29
53#define R_ARM_V4BX 40
53#define R_ARM_PREL31 42 54#define R_ARM_PREL31 42
54 55
55/* 56/*
diff --git a/arch/arm/kernel/module.c b/arch/arm/kernel/module.c
index 13dbd5bf5cc2..d1731e39b496 100644
--- a/arch/arm/kernel/module.c
+++ b/arch/arm/kernel/module.c
@@ -155,6 +155,15 @@ apply_relocate(Elf32_Shdr *sechdrs, const char *strtab, unsigned int symindex,
155 *(u32 *)loc |= offset & 0x00ffffff; 155 *(u32 *)loc |= offset & 0x00ffffff;
156 break; 156 break;
157 157
158 case R_ARM_V4BX:
159 /* Preserve Rm and the condition code. Alter
160 * other bits to re-code instruction as
161 * MOV PC,Rm.
162 */
163 *(u32 *)loc &= 0xf000000f;
164 *(u32 *)loc |= 0x01a0f000;
165 break;
166
158 case R_ARM_PREL31: 167 case R_ARM_PREL31:
159 offset = *(u32 *)loc + sym->st_value - loc; 168 offset = *(u32 *)loc + sym->st_value - loc;
160 *(u32 *)loc = offset & 0x7fffffff; 169 *(u32 *)loc = offset & 0x7fffffff;
diff --git a/arch/arm/mach-iop13xx/pci.c b/arch/arm/mach-iop13xx/pci.c
index 673b0db22034..4873f26a42e1 100644
--- a/arch/arm/mach-iop13xx/pci.c
+++ b/arch/arm/mach-iop13xx/pci.c
@@ -1026,8 +1026,10 @@ int iop13xx_pci_setup(int nr, struct pci_sys_data *sys)
1026 which_atu = 0; 1026 which_atu = 0;
1027 } 1027 }
1028 1028
1029 if (!which_atu) 1029 if (!which_atu) {
1030 kfree(res);
1030 return 0; 1031 return 0;
1032 }
1031 1033
1032 switch(which_atu) { 1034 switch(which_atu) {
1033 case IOP13XX_INIT_ATU_ATUX: 1035 case IOP13XX_INIT_ATU_ATUX:
@@ -1074,6 +1076,7 @@ int iop13xx_pci_setup(int nr, struct pci_sys_data *sys)
1074 sys->map_irq = iop13xx_pcie_map_irq; 1076 sys->map_irq = iop13xx_pcie_map_irq;
1075 break; 1077 break;
1076 default: 1078 default:
1079 kfree(res);
1077 return 0; 1080 return 0;
1078 } 1081 }
1079 1082
diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c
index 1585814f8414..b438fc4fb77b 100644
--- a/arch/arm/mm/mmu.c
+++ b/arch/arm/mm/mmu.c
@@ -723,7 +723,7 @@ static void __init sanity_check_meminfo(void)
723 * the vmalloc area. 723 * the vmalloc area.
724 */ 724 */
725 if (__va(bank->start) >= VMALLOC_MIN || 725 if (__va(bank->start) >= VMALLOC_MIN ||
726 __va(bank->start) < PAGE_OFFSET) { 726 __va(bank->start) < (void *)PAGE_OFFSET) {
727 printk(KERN_NOTICE "Ignoring RAM at %.8lx-%.8lx " 727 printk(KERN_NOTICE "Ignoring RAM at %.8lx-%.8lx "
728 "(vmalloc region overlap).\n", 728 "(vmalloc region overlap).\n",
729 bank->start, bank->start + bank->size - 1); 729 bank->start, bank->start + bank->size - 1);