Deleted Added
full compact
elf32_machdep.c (50477) elf32_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}