module.c (1da177e4c3f41524e886b7f1b8a0c1fc7321cac2) module.c (347a8dc3b815f0c0fa62a1df075184ffe4cbdcf1)
1/*
2 * arch/s390/kernel/module.c - Kernel module help for s390.
3 *
4 * S390 version
5 * Copyright (C) 2002, 2003 IBM Deutschland Entwicklung GmbH,
6 * IBM Corporation
7 * Author(s): Arnd Bergmann (arndb@de.ibm.com)
8 * Martin Schwidefsky (schwidefsky@de.ibm.com)

--- 23 unchanged lines hidden (view full) ---

32#include <linux/kernel.h>
33
34#if 0
35#define DEBUGP printk
36#else
37#define DEBUGP(fmt , ...)
38#endif
39
1/*
2 * arch/s390/kernel/module.c - Kernel module help for s390.
3 *
4 * S390 version
5 * Copyright (C) 2002, 2003 IBM Deutschland Entwicklung GmbH,
6 * IBM Corporation
7 * Author(s): Arnd Bergmann (arndb@de.ibm.com)
8 * Martin Schwidefsky (schwidefsky@de.ibm.com)

--- 23 unchanged lines hidden (view full) ---

32#include <linux/kernel.h>
33
34#if 0
35#define DEBUGP printk
36#else
37#define DEBUGP(fmt , ...)
38#endif
39
40#ifndef CONFIG_ARCH_S390X
40#ifndef CONFIG_64BIT
41#define PLT_ENTRY_SIZE 12
41#define PLT_ENTRY_SIZE 12
42#else /* CONFIG_ARCH_S390X */
42#else /* CONFIG_64BIT */
43#define PLT_ENTRY_SIZE 20
43#define PLT_ENTRY_SIZE 20
44#endif /* CONFIG_ARCH_S390X */
44#endif /* CONFIG_64BIT */
45
46void *module_alloc(unsigned long size)
47{
48 if (size == 0)
49 return NULL;
50 return vmalloc(size);
51}
52

--- 236 unchanged lines hidden (view full) ---

289 case R_390_PLT64: /* 64 bit PC relative PLT address. */
290 case R_390_PLTOFF16: /* 16 bit offset from GOT to PLT. */
291 case R_390_PLTOFF32: /* 32 bit offset from GOT to PLT. */
292 case R_390_PLTOFF64: /* 16 bit offset from GOT to PLT. */
293 if (info->plt_initialized == 0) {
294 unsigned int *ip;
295 ip = me->module_core + me->arch.plt_offset +
296 info->plt_offset;
45
46void *module_alloc(unsigned long size)
47{
48 if (size == 0)
49 return NULL;
50 return vmalloc(size);
51}
52

--- 236 unchanged lines hidden (view full) ---

289 case R_390_PLT64: /* 64 bit PC relative PLT address. */
290 case R_390_PLTOFF16: /* 16 bit offset from GOT to PLT. */
291 case R_390_PLTOFF32: /* 32 bit offset from GOT to PLT. */
292 case R_390_PLTOFF64: /* 16 bit offset from GOT to PLT. */
293 if (info->plt_initialized == 0) {
294 unsigned int *ip;
295 ip = me->module_core + me->arch.plt_offset +
296 info->plt_offset;
297#ifndef CONFIG_ARCH_S390X
297#ifndef CONFIG_64BIT
298 ip[0] = 0x0d105810; /* basr 1,0; l 1,6(1); br 1 */
299 ip[1] = 0x100607f1;
300 ip[2] = val;
298 ip[0] = 0x0d105810; /* basr 1,0; l 1,6(1); br 1 */
299 ip[1] = 0x100607f1;
300 ip[2] = val;
301#else /* CONFIG_ARCH_S390X */
301#else /* CONFIG_64BIT */
302 ip[0] = 0x0d10e310; /* basr 1,0; lg 1,10(1); br 1 */
303 ip[1] = 0x100a0004;
304 ip[2] = 0x07f10000;
305 ip[3] = (unsigned int) (val >> 32);
306 ip[4] = (unsigned int) val;
302 ip[0] = 0x0d10e310; /* basr 1,0; lg 1,10(1); br 1 */
303 ip[1] = 0x100a0004;
304 ip[2] = 0x07f10000;
305 ip[3] = (unsigned int) (val >> 32);
306 ip[4] = (unsigned int) val;
307#endif /* CONFIG_ARCH_S390X */
307#endif /* CONFIG_64BIT */
308 info->plt_initialized = 1;
309 }
310 if (r_type == R_390_PLTOFF16 ||
311 r_type == R_390_PLTOFF32
312 || r_type == R_390_PLTOFF64
313 )
314 val = me->arch.plt_offset - me->arch.got_offset +
315 info->plt_offset + rela->r_addend;

--- 90 unchanged lines hidden ---
308 info->plt_initialized = 1;
309 }
310 if (r_type == R_390_PLTOFF16 ||
311 r_type == R_390_PLTOFF32
312 || r_type == R_390_PLTOFF64
313 )
314 val = me->arch.plt_offset - me->arch.got_offset +
315 info->plt_offset + rela->r_addend;

--- 90 unchanged lines hidden ---