]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
Merge branch 'quilt/rr'
authorStephen Rothwell <sfr@canb.auug.org.au>
Wed, 22 Aug 2012 03:11:22 +0000 (13:11 +1000)
committerStephen Rothwell <sfr@canb.auug.org.au>
Wed, 22 Aug 2012 03:11:22 +0000 (13:11 +1000)
Conflicts:
arch/alpha/Kconfig
arch/mips/kernel/module.c
arch/s390/Kconfig
arch/xtensa/Kconfig

13 files changed:
1  2 
arch/alpha/Kconfig
arch/arm/Kconfig
arch/c6x/Kconfig
arch/cris/Kconfig
arch/m68k/Kconfig
arch/mips/Kconfig
arch/mips/include/asm/module.h
arch/mips/kernel/Makefile
arch/mips/kernel/module.c
arch/powerpc/Kconfig
arch/s390/Kconfig
arch/unicore32/Kconfig
arch/xtensa/Kconfig

index 9944dedee5b1b1b31abf08599a44421333bd9290,e73a1a7d58969db46ae0b5b52c5420d8a201a4f2..7e3710c0cce5a4c2ef51b8a889a061979a0b9b24
@@@ -18,8 -18,8 +18,10 @@@ config ALPH
        select ARCH_HAVE_NMI_SAFE_CMPXCHG
        select GENERIC_SMP_IDLE_THREAD
        select GENERIC_CMOS_UPDATE
 +      select GENERIC_STRNCPY_FROM_USER
 +      select GENERIC_STRNLEN_USER
+       select HAVE_MOD_ARCH_SPECIFIC
+       select MODULES_USE_ELF_RELA
        help
          The Alpha is a 64-bit general-purpose processor designed and
          marketed by the Digital Equipment Corporation of blessed memory,
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
index 2dbecf843d74648888dfb4395ad9a66f485dd03d,cd1e6c2421b2378a2863489cb4db26f5977ba1d5..a61deb354a2b8b425cb7d6533b316c00f3561497
@@@ -31,15 -31,32 +31,16 @@@ obj-$(CONFIG_SYNC_R4K)             += sync-r4k.
  
  obj-$(CONFIG_STACKTRACE)      += stacktrace.o
  obj-$(CONFIG_MODULES)         += mips_ksyms.o module.o
+ obj-$(CONFIG_MODULES_USE_ELF_RELA) += module-rela.o
  
 +obj-$(CONFIG_FTRACE_SYSCALLS) += ftrace.o
  obj-$(CONFIG_FUNCTION_TRACER) += mcount.o ftrace.o
  
 -obj-$(CONFIG_CPU_LOONGSON2)   += r4k_fpu.o r4k_switch.o
 -obj-$(CONFIG_CPU_MIPS32)      += r4k_fpu.o r4k_switch.o
 -obj-$(CONFIG_CPU_MIPS64)      += r4k_fpu.o r4k_switch.o
 +obj-$(CONFIG_CPU_R4K_FPU)     += r4k_fpu.o r4k_switch.o
  obj-$(CONFIG_CPU_R3000)               += r2300_fpu.o r2300_switch.o
 -obj-$(CONFIG_CPU_R4300)               += r4k_fpu.o r4k_switch.o
 -obj-$(CONFIG_CPU_R4X00)               += r4k_fpu.o r4k_switch.o
 -obj-$(CONFIG_CPU_R5000)               += r4k_fpu.o r4k_switch.o
  obj-$(CONFIG_CPU_R6000)               += r6000_fpu.o r4k_switch.o
 -obj-$(CONFIG_CPU_R5432)               += r4k_fpu.o r4k_switch.o
 -obj-$(CONFIG_CPU_R5500)               += r4k_fpu.o r4k_switch.o
 -obj-$(CONFIG_CPU_R8000)               += r4k_fpu.o r4k_switch.o
 -obj-$(CONFIG_CPU_RM7000)      += r4k_fpu.o r4k_switch.o
 -obj-$(CONFIG_CPU_RM9000)      += r4k_fpu.o r4k_switch.o
 -obj-$(CONFIG_CPU_NEVADA)      += r4k_fpu.o r4k_switch.o
 -obj-$(CONFIG_CPU_R10000)      += r4k_fpu.o r4k_switch.o
 -obj-$(CONFIG_CPU_SB1)         += r4k_fpu.o r4k_switch.o
  obj-$(CONFIG_CPU_TX39XX)      += r2300_fpu.o r2300_switch.o
 -obj-$(CONFIG_CPU_TX49XX)      += r4k_fpu.o r4k_switch.o
 -obj-$(CONFIG_CPU_VR41XX)      += r4k_fpu.o r4k_switch.o
  obj-$(CONFIG_CPU_CAVIUM_OCTEON)       += octeon_switch.o
 -obj-$(CONFIG_CPU_XLR)         += r4k_fpu.o r4k_switch.o
 -obj-$(CONFIG_CPU_XLP)         += r4k_fpu.o r4k_switch.o
  
  obj-$(CONFIG_SMP)             += smp.o
  obj-$(CONFIG_SMP_UP)          += smp-up.o
index 4f8c3cba8c0c45180cdabe08ac05aa43e652395f,8ffd089701fa9cff8523ac0f3075a7d0d6fbdc72..ea9af2b3b374f9dc2788c0088eef2a953678577c
@@@ -132,25 -107,6 +105,17 @@@ static int apply_r_mips_hi16_rel(struc
        return 0;
  }
  
- static int apply_r_mips_hi16_rela(struct module *me, u32 *location, Elf_Addr v)
- {
-       *location = (*location & 0xffff0000) |
-                   ((((long long) v + 0x8000LL) >> 16) & 0xffff);
-       return 0;
- }
 +static void free_relocation_chain(struct mips_hi16 *l)
 +{
 +      struct mips_hi16 *next;
 +
 +      while (l) {
 +              next = l->next;
 +              kfree(l);
 +              l = next;
 +      }
 +}
 +
  static int apply_r_mips_lo16_rel(struct module *me, u32 *location, Elf_Addr v)
  {
        unsigned long insnlo = *location;
@@@ -308,61 -217,9 +229,22 @@@ int apply_relocate(Elf_Shdr *sechdrs, c
                        return res;
        }
  
 +      /*
 +       * Normally the hi16 list should be deallocated at this point.  A
 +       * malformed binary however could contain a series of R_MIPS_HI16
 +       * relocations not followed by a R_MIPS_LO16 relocation.  In that
 +       * case, free up the list and return an error.
 +       */
 +      if (me->arch.r_mips_hi16_list) {
 +              free_relocation_chain(me->arch.r_mips_hi16_list);
 +              me->arch.r_mips_hi16_list = NULL;
 +
 +              return -ENOEXEC;
 +      }
 +
        return 0;
  }
- int apply_relocate_add(Elf_Shdr *sechdrs, const char *strtab,
-                      unsigned int symindex, unsigned int relsec,
-                      struct module *me)
- {
-       Elf_Mips_Rela *rel = (void *) sechdrs[relsec].sh_addr;
-       Elf_Sym *sym;
-       u32 *location;
-       unsigned int i;
-       Elf_Addr v;
-       int res;
-       pr_debug("Applying relocate section %u to %u\n", relsec,
-              sechdrs[relsec].sh_info);
-       for (i = 0; i < sechdrs[relsec].sh_size / sizeof(*rel); i++) {
-               /* This is where to make the change */
-               location = (void *)sechdrs[sechdrs[relsec].sh_info].sh_addr
-                       + rel[i].r_offset;
-               /* This is the symbol it is referring to */
-               sym = (Elf_Sym *)sechdrs[symindex].sh_addr
-                       + ELF_MIPS_R_SYM(rel[i]);
-               if (IS_ERR_VALUE(sym->st_value)) {
-                       /* Ignore unresolved weak symbol */
-                       if (ELF_ST_BIND(sym->st_info) == STB_WEAK)
-                               continue;
-                       printk(KERN_WARNING "%s: Unknown symbol %s\n",
-                              me->name, strtab + sym->st_name);
-                       return -ENOENT;
-               }
-               v = sym->st_value + rel[i].r_addend;
-               res = reloc_handlers_rela[ELF_MIPS_R_TYPE(rel[i])](me, location, v);
-               if (res)
-                       return res;
-       }
-       return 0;
- }
+ #endif
  
  /* Given an address, look for it in the module exception tables. */
  const struct exception_table_entry *search_module_dbetables(unsigned long addr)
Simple merge
index a7088dc06d2cd313d3bbf1a70a2310a171d5eaad,53a8e01e7debf15184a47789571fcb2057daec6a..e9886e2677186614ff1f1000f4d6cd5aebda6b97
@@@ -125,7 -124,8 +125,9 @@@ config S39
        select GENERIC_TIME_VSYSCALL
        select GENERIC_CLOCKEVENTS
        select KTIME_SCALAR if 32BIT
 +      select HAVE_ARCH_SECCOMP_FILTER
+       select HAVE_MOD_ARCH_SPECIFIC
+       select MODULES_USE_ELF_RELA
  
  config SCHED_OMIT_FRAME_POINTER
        def_bool y
Simple merge
index c161367386e467d48605069552fad89097859595,4816e44001f1ed8943c7fa70c6af199ba674c4df..8c82cd87082e43bf757e94c413419a7291feb2a1
@@@ -11,7 -11,7 +11,8 @@@ config XTENS
        select HAVE_GENERIC_HARDIRQS
        select GENERIC_IRQ_SHOW
        select GENERIC_CPU_DEVICES
 +      select GENERIC_PCI_IOMAP
+       select MODULES_USE_ELF_RELA
        help
          Xtensa processors are 32-bit RISC machines designed by Tensilica
          primarily for embedded systems.  These processors are both