Deleted Added
full compact
kvm_arm.c (194186) kvm_arm.c (217744)
1/*-
2 * Copyright (c) 2005 Olivier Houchard
3 * Copyright (c) 1989, 1992, 1993
4 * The Regents of the University of California. All rights reserved.
5 *
6 * This code is derived from software developed by the Computer Systems
7 * Engineering group at Lawrence Berkeley Laboratory under DARPA contract
8 * BG 91-66 and contributed to Berkeley.

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

31 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 */
33
34/*
35 * ARM machine dependent routines for kvm.
36 */
37
38#include <sys/cdefs.h>
1/*-
2 * Copyright (c) 2005 Olivier Houchard
3 * Copyright (c) 1989, 1992, 1993
4 * The Regents of the University of California. All rights reserved.
5 *
6 * This code is derived from software developed by the Computer Systems
7 * Engineering group at Lawrence Berkeley Laboratory under DARPA contract
8 * BG 91-66 and contributed to Berkeley.

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

31 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 */
33
34/*
35 * ARM machine dependent routines for kvm.
36 */
37
38#include <sys/cdefs.h>
39__FBSDID("$FreeBSD: head/lib/libkvm/kvm_arm.c 194186 2009-06-14 12:42:06Z ed $");
39__FBSDID("$FreeBSD: head/lib/libkvm/kvm_arm.c 217744 2011-01-23 11:08:28Z uqs $");
40
41#include <sys/param.h>
42#include <sys/elf32.h>
43#include <sys/mman.h>
44
45#include <vm/vm.h>
46#include <vm/vm_param.h>
47#include <vm/pmap.h>

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

119 kd->vmst = NULL;
120 }
121}
122
123int
124_kvm_initvtop(kvm_t *kd)
125{
126 struct vmstate *vm;
40
41#include <sys/param.h>
42#include <sys/elf32.h>
43#include <sys/mman.h>
44
45#include <vm/vm.h>
46#include <vm/vm_param.h>
47#include <vm/pmap.h>

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

119 kd->vmst = NULL;
120 }
121}
122
123int
124_kvm_initvtop(kvm_t *kd)
125{
126 struct vmstate *vm;
127 struct nlist nlist[2];
127 struct nlist nl[2];
128 u_long kernbase, physaddr, pa;
129 pd_entry_t *l1pt;
130 Elf32_Ehdr *ehdr;
131 size_t hdrsz;
132 char minihdr[8];
133
134 if (!kd->rawdump) {
135 if (pread(kd->pmfd, &minihdr, 8, 0) == 8) {

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

149 kd->vmst = vm;
150 vm->l1pt = NULL;
151 if (_kvm_maphdrs(kd, sizeof(Elf32_Ehdr)) == -1)
152 return (-1);
153 ehdr = kd->vmst->mmapbase;
154 hdrsz = ehdr->e_phoff + ehdr->e_phentsize * ehdr->e_phnum;
155 if (_kvm_maphdrs(kd, hdrsz) == -1)
156 return (-1);
128 u_long kernbase, physaddr, pa;
129 pd_entry_t *l1pt;
130 Elf32_Ehdr *ehdr;
131 size_t hdrsz;
132 char minihdr[8];
133
134 if (!kd->rawdump) {
135 if (pread(kd->pmfd, &minihdr, 8, 0) == 8) {

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

149 kd->vmst = vm;
150 vm->l1pt = NULL;
151 if (_kvm_maphdrs(kd, sizeof(Elf32_Ehdr)) == -1)
152 return (-1);
153 ehdr = kd->vmst->mmapbase;
154 hdrsz = ehdr->e_phoff + ehdr->e_phentsize * ehdr->e_phnum;
155 if (_kvm_maphdrs(kd, hdrsz) == -1)
156 return (-1);
157 nlist[0].n_name = "kernbase";
158 nlist[1].n_name = NULL;
159 if (kvm_nlist(kd, nlist) != 0)
157 nl[0].n_name = "kernbase";
158 nl[1].n_name = NULL;
159 if (kvm_nlist(kd, nl) != 0)
160 kernbase = KERNBASE;
161 else
160 kernbase = KERNBASE;
161 else
162 kernbase = nlist[0].n_value;
162 kernbase = nl[0].n_value;
163
163
164 nlist[0].n_name = "physaddr";
165 if (kvm_nlist(kd, nlist) != 0) {
164 nl[0].n_name = "physaddr";
165 if (kvm_nlist(kd, nl) != 0) {
166 _kvm_err(kd, kd->program, "couldn't get phys addr");
167 return (-1);
168 }
166 _kvm_err(kd, kd->program, "couldn't get phys addr");
167 return (-1);
168 }
169 physaddr = nlist[0].n_value;
170 nlist[0].n_name = "kernel_l1pa";
171 if (kvm_nlist(kd, nlist) != 0) {
169 physaddr = nl[0].n_value;
170 nl[0].n_name = "kernel_l1pa";
171 if (kvm_nlist(kd, nl) != 0) {
172 _kvm_err(kd, kd->program, "bad namelist");
173 return (-1);
174 }
172 _kvm_err(kd, kd->program, "bad namelist");
173 return (-1);
174 }
175 if (kvm_read(kd, (nlist[0].n_value - kernbase + physaddr), &pa,
175 if (kvm_read(kd, (nl[0].n_value - kernbase + physaddr), &pa,
176 sizeof(pa)) != sizeof(pa)) {
177 _kvm_err(kd, kd->program, "cannot read kernel_l1pa");
178 return (-1);
179 }
180 l1pt = _kvm_malloc(kd, L1_TABLE_SIZE);
181 if (kvm_read(kd, pa, l1pt, L1_TABLE_SIZE) != L1_TABLE_SIZE) {
182 _kvm_err(kd, kd->program, "cannot read l1pt");
183 free(l1pt);

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

200#define l1pte_valid(pde) ((pde) != 0)
201#define l2pte_valid(pte) ((pte) != 0)
202#define l2pte_index(v) (((v) & L2_ADDR_BITS) >> L2_S_SHIFT)
203
204
205int
206_kvm_kvatop(kvm_t *kd, u_long va, off_t *pa)
207{
176 sizeof(pa)) != sizeof(pa)) {
177 _kvm_err(kd, kd->program, "cannot read kernel_l1pa");
178 return (-1);
179 }
180 l1pt = _kvm_malloc(kd, L1_TABLE_SIZE);
181 if (kvm_read(kd, pa, l1pt, L1_TABLE_SIZE) != L1_TABLE_SIZE) {
182 _kvm_err(kd, kd->program, "cannot read l1pt");
183 free(l1pt);

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

200#define l1pte_valid(pde) ((pde) != 0)
201#define l2pte_valid(pte) ((pte) != 0)
202#define l2pte_index(v) (((v) & L2_ADDR_BITS) >> L2_S_SHIFT)
203
204
205int
206_kvm_kvatop(kvm_t *kd, u_long va, off_t *pa)
207{
208 u_long offset = va & (PAGE_SIZE - 1);
209 struct vmstate *vm = kd->vmst;
210 pd_entry_t pd;
211 pt_entry_t pte;
212 u_long pte_pa;
213
214 if (kd->vmst->minidump)
215 return (_kvm_minidump_kvatop(kd, va, pa));
216

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

239 }
240 if ((pte & L2_TYPE_MASK) == L2_TYPE_L) {
241 *pa = (pte & L2_L_FRAME) | (va & L2_L_OFFSET);
242 return (_kvm_pa2off(kd, *pa, pa, L2_L_SIZE));
243 }
244 *pa = (pte & L2_S_FRAME) | (va & L2_S_OFFSET);
245 return (_kvm_pa2off(kd, *pa, pa, PAGE_SIZE));
246invalid:
208 struct vmstate *vm = kd->vmst;
209 pd_entry_t pd;
210 pt_entry_t pte;
211 u_long pte_pa;
212
213 if (kd->vmst->minidump)
214 return (_kvm_minidump_kvatop(kd, va, pa));
215

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

238 }
239 if ((pte & L2_TYPE_MASK) == L2_TYPE_L) {
240 *pa = (pte & L2_L_FRAME) | (va & L2_L_OFFSET);
241 return (_kvm_pa2off(kd, *pa, pa, L2_L_SIZE));
242 }
243 *pa = (pte & L2_S_FRAME) | (va & L2_S_OFFSET);
244 return (_kvm_pa2off(kd, *pa, pa, PAGE_SIZE));
245invalid:
247 _kvm_err(kd, 0, "Invalid address (%x)", va);
246 _kvm_err(kd, 0, "Invalid address (%lx)", va);
248 return 0;
249}
250
251/*
252 * Machine-dependent initialization for ALL open kvm descriptors,
253 * not just those for a kernel crash dump. Some architectures
254 * have to deal with these NOT being constants! (i.e. m68k)
255 */
247 return 0;
248}
249
250/*
251 * Machine-dependent initialization for ALL open kvm descriptors,
252 * not just those for a kernel crash dump. Some architectures
253 * have to deal with these NOT being constants! (i.e. m68k)
254 */
255#ifdef FBSD_NOT_YET
256int
256int
257_kvm_mdopen(kd)
258 kvm_t *kd;
257_kvm_mdopen(kvm_t *kd)
259{
260
258{
259
261#ifdef FBSD_NOT_YET
262 kd->usrstack = USRSTACK;
263 kd->min_uva = VM_MIN_ADDRESS;
264 kd->max_uva = VM_MAXUSER_ADDRESS;
260 kd->usrstack = USRSTACK;
261 kd->min_uva = VM_MIN_ADDRESS;
262 kd->max_uva = VM_MAXUSER_ADDRESS;
265#endif
266
267 return (0);
268}
263
264 return (0);
265}
266#endif