elf64_machdep.c (50477) | elf64_machdep.c (78342) |
---|---|
1/*- 2 * Copyright 1996-1998 John D. Polstra. 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 8 unchanged lines hidden (view full) --- 17 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 18 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 19 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 20 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 21 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 23 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 * | 1/*- 2 * Copyright 1996-1998 John D. Polstra. 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 8 unchanged lines hidden (view full) --- 17 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 18 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 19 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 20 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 21 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 23 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 * |
25 * $FreeBSD: head/sys/powerpc/powerpc/elf_machdep.c 50477 1999-08-28 01:08:13Z peter $ | 25 * $FreeBSD: head/sys/powerpc/powerpc/elf_machdep.c 78342 2001-06-16 07:14:07Z benno $ |
26 */ 27 28#include <sys/param.h> 29#include <sys/kernel.h> 30#include <sys/systm.h> 31#include <sys/malloc.h> 32#include <sys/proc.h> 33#include <sys/namei.h> --- 28 unchanged lines hidden (view full) --- 62 rtype = ELF_R_TYPE(rela->r_info); 63 break; 64 default: 65 panic("elf_reloc: unknown relocation mode %d\n", type); 66 } 67 68 switch (rtype) { 69 | 26 */ 27 28#include <sys/param.h> 29#include <sys/kernel.h> 30#include <sys/systm.h> 31#include <sys/malloc.h> 32#include <sys/proc.h> 33#include <sys/namei.h> --- 28 unchanged lines hidden (view full) --- 62 rtype = ELF_R_TYPE(rela->r_info); 63 break; 64 default: 65 panic("elf_reloc: unknown relocation mode %d\n", type); 66 } 67 68 switch (rtype) { 69 |
70 case R_ALPHA_NONE: | 70 case R_PPC_NONE: |
71 break; 72 | 71 break; 72 |
73 case R_ALPHA_REFQUAD: | 73 case R_PPC_GLOB_DAT: |
74 addr = (Elf_Addr) 75 linker_file_lookup_symbol(lf, sym, 1); 76 if (addr == NULL) 77 return -1; | 74 addr = (Elf_Addr) 75 linker_file_lookup_symbol(lf, sym, 1); 76 if (addr == NULL) 77 return -1; |
78 addr += addend; 79 if (*where != addr) 80 *where = addr; 81 break; 82 83 case R_ALPHA_GLOB_DAT: 84 addr = (Elf_Addr) 85 linker_file_lookup_symbol(lf, sym, 1); 86 if (addr == NULL) 87 return -1; | |
88 addr += addend; 89 if (*where != addr) 90 *where = addr; 91 break; 92 | 78 addr += addend; 79 if (*where != addr) 80 *where = addr; 81 break; 82 |
93 case R_ALPHA_JMP_SLOT: | 83 case R_PPC_JMP_SLOT: |
94 /* No point in lazy binding for kernel modules. */ 95 addr = (Elf_Addr) 96 linker_file_lookup_symbol(lf, sym, 1); 97 if (addr == NULL) 98 return -1; 99 if (*where != addr) 100 *where = addr; 101 break; 102 | 84 /* No point in lazy binding for kernel modules. */ 85 addr = (Elf_Addr) 86 linker_file_lookup_symbol(lf, sym, 1); 87 if (addr == NULL) 88 return -1; 89 if (*where != addr) 90 *where = addr; 91 break; 92 |
103 case R_ALPHA_RELATIVE: | 93 case R_PPC_RELATIVE: |
104 addr = relocbase + addend + *where; 105 if (*where != addr) 106 *where = addr; 107 break; 108 | 94 addr = relocbase + addend + *where; 95 if (*where != addr) 96 *where = addr; 97 break; 98 |
109 case R_ALPHA_COPY: | 99 case R_PPC_COPY: |
110 /* 111 * There shouldn't be copy relocations in kernel 112 * objects. 113 */ 114 printf("kldload: unexpected R_COPY relocation\n"); 115 return -1; 116 117 default: 118 printf("kldload: unexpected relocation type %d\n", 119 (int) rtype); 120 return -1; 121 } 122 return(0); 123} | 100 /* 101 * There shouldn't be copy relocations in kernel 102 * objects. 103 */ 104 printf("kldload: unexpected R_COPY relocation\n"); 105 return -1; 106 107 default: 108 printf("kldload: unexpected relocation type %d\n", 109 (int) rtype); 110 return -1; 111 } 112 return(0); 113} |