From owner-svn-src-projects@FreeBSD.ORG Mon Jan 25 02:13:01 2010 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 544DC106566C; Mon, 25 Jan 2010 02:13:01 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 43B728FC0C; Mon, 25 Jan 2010 02:13:01 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o0P2D1TX011576; Mon, 25 Jan 2010 02:13:01 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o0P2D1gU011574; Mon, 25 Jan 2010 02:13:01 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <201001250213.o0P2D1gU011574@svn.freebsd.org> From: Nathan Whitehorn Date: Mon, 25 Jan 2010 02:13:01 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r202956 - projects/ppc64/lib/libkvm X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 25 Jan 2010 02:13:01 -0000 Author: nwhitehorn Date: Mon Jan 25 02:13:00 2010 New Revision: 202956 URL: http://svn.freebsd.org/changeset/base/202956 Log: First hash at ppc64 KVM implementation. Added: projects/ppc64/lib/libkvm/kvm_powerpc64.c - copied, changed from r202947, projects/ppc64/lib/libkvm/kvm_powerpc.c Copied and modified: projects/ppc64/lib/libkvm/kvm_powerpc64.c (from r202947, projects/ppc64/lib/libkvm/kvm_powerpc.c) ============================================================================== --- projects/ppc64/lib/libkvm/kvm_powerpc.c Sun Jan 24 20:15:59 2010 (r202947, copy source) +++ projects/ppc64/lib/libkvm/kvm_powerpc64.c Mon Jan 25 02:13:00 2010 (r202956) @@ -48,17 +48,17 @@ struct vmstate { void *map; size_t mapsz; size_t dmphdrsz; - Elf32_Ehdr *eh; - Elf32_Phdr *ph; + Elf64_Ehdr *eh; + Elf64_Phdr *ph; }; static int -valid_elf_header(Elf32_Ehdr *eh) +valid_elf_header(Elf64_Ehdr *eh) { if (!IS_ELF(*eh)) return (0); - if (eh->e_ident[EI_CLASS] != ELFCLASS32) + if (eh->e_ident[EI_CLASS] != ELFCLASS64) return (0); if (eh->e_ident[EI_DATA] != ELFDATA2MSB) return (0); @@ -68,7 +68,7 @@ valid_elf_header(Elf32_Ehdr *eh) return (0); if (be16toh(eh->e_type) != ET_CORE) return (0); - if (be16toh(eh->e_machine) != EM_PPC) + if (be16toh(eh->e_machine) != EM_PPC64) return (0); /* Can't think of anything else to check... */ return (1); @@ -80,7 +80,7 @@ dump_header_size(struct kerneldumpheader if (strcmp(dh->magic, KERNELDUMPMAGIC) != 0) return (0); - if (strcmp(dh->architecture, "powerpc") != 0) + if (strcmp(dh->architecture, "powerpc64") != 0) return (0); /* That should do it... */ return (sizeof(*dh)); @@ -122,7 +122,7 @@ powerpc_maphdrs(kvm_t *kd) goto inval; } mapsz = be16toh(vm->eh->e_phentsize) * be16toh(vm->eh->e_phnum) + - be32toh(vm->eh->e_phoff); + be64toh(vm->eh->e_phoff); munmap(vm->map, vm->mapsz); /* Map all headers. */ @@ -133,7 +133,7 @@ powerpc_maphdrs(kvm_t *kd) return (-1); } vm->eh = (void *)((uintptr_t)vm->map + vm->dmphdrsz); - vm->ph = (void *)((uintptr_t)vm->eh + be32toh(vm->eh->e_phoff)); + vm->ph = (void *)((uintptr_t)vm->eh + be64toh(vm->eh->e_phoff)); return (0); inval: @@ -149,16 +149,16 @@ powerpc_maphdrs(kvm_t *kd) * 0 when the virtual address is invalid. */ static size_t -powerpc_va2off(kvm_t *kd, u_long va, off_t *ofs) +powerpc64_va2off(kvm_t *kd, u_long va, off_t *ofs) { struct vmstate *vm = kd->vmst; - Elf32_Phdr *ph; + Elf64_Phdr *ph; int nph; ph = vm->ph; nph = be16toh(vm->eh->e_phnum); - while (nph && (va < be32toh(ph->p_vaddr) || - va >= be32toh(ph->p_vaddr) + be32toh(ph->p_memsz))) { + while (nph && (va < be64toh(ph->p_vaddr) || + va >= be64toh(ph->p_vaddr) + be64toh(ph->p_memsz))) { nph--; ph = (void *)((uintptr_t)ph + be16toh(vm->eh->e_phentsize)); } @@ -166,9 +166,9 @@ powerpc_va2off(kvm_t *kd, u_long va, off return (0); /* Segment found. Return file offset and range. */ - *ofs = vm->dmphdrsz + be32toh(ph->p_offset) + - (va - be32toh(ph->p_vaddr)); - return (be32toh(ph->p_memsz) - (va - be32toh(ph->p_vaddr))); + *ofs = vm->dmphdrsz + be64toh(ph->p_offset) + + (va - be64toh(ph->p_vaddr)); + return (be64toh(ph->p_memsz) - (va - be64toh(ph->p_vaddr))); } void @@ -210,8 +210,8 @@ _kvm_kvatop(kvm_t *kd, u_long va, off_t struct vmstate *vm; vm = kd->vmst; - if (vm->ph->p_paddr == ~0U) - return ((int)powerpc_va2off(kd, va, ofs)); + if (vm->ph->p_paddr == ~0UL) + return ((int)powerpc64_va2off(kd, va, ofs)); _kvm_err(kd, kd->program, "Raw corefile not supported"); return (0);