From owner-p4-projects@FreeBSD.ORG Thu Jul 9 17:10:31 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 2F3AA10656D4; Thu, 9 Jul 2009 17:10:31 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D3049106568E for ; Thu, 9 Jul 2009 17:10:30 +0000 (UTC) (envelope-from attilio@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id C0ABE8FC19 for ; Thu, 9 Jul 2009 17:10:30 +0000 (UTC) (envelope-from attilio@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n69HAUFW067851 for ; Thu, 9 Jul 2009 17:10:30 GMT (envelope-from attilio@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n69HAU0B067849 for perforce@freebsd.org; Thu, 9 Jul 2009 17:10:30 GMT (envelope-from attilio@FreeBSD.org) Date: Thu, 9 Jul 2009 17:10:30 GMT Message-Id: <200907091710.n69HAU0B067849@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to attilio@FreeBSD.org using -f From: Attilio Rao To: Perforce Change Reviews Cc: Subject: PERFORCE change 165872 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Jul 2009 17:10:32 -0000 http://perforce.freebsd.org/chv.cgi?CH=165872 Change 165872 by attilio@attilio_valgrind on 2009/07/09 17:10:09 - Link the new introduced coredump-amd64-freebsd.c to the build - Fix coredump creation on amd64. Currently structures used for .note feeding are not correct and lead to inconsistent .note state (they work on Linux, probabilly). Fix that by including a correct version of such structures. Note that the header structure need some more work (some things can be brought, for example, in the MI part and the signals part needs still to be reviewed). Affected files ... .. //depot/projects/valgrind/coregrind/Makefile.am#8 edit .. //depot/projects/valgrind/include/vki/vki-amd64-freebsd.h#7 edit Differences ... ==== //depot/projects/valgrind/coregrind/Makefile.am#8 (text+ko) ==== @@ -268,7 +268,7 @@ libcoregrind_amd64_freebsd_a_SOURCES = \ $(COREGRIND_SOURCES_COMMON) \ $(COREGRIND_FREEBSD_SOURCE) \ - m_coredump/coredump-amd64-linux.c \ + m_coredump/coredump-amd64-freebsd.c \ m_dispatch/dispatch-amd64-linux.S \ m_sigframe/sigframe-amd64-freebsd.c \ m_syswrap/syscall-amd64-freebsd.S \ ==== //depot/projects/valgrind/include/vki/vki-amd64-freebsd.h#7 (text+ko) ==== @@ -1,8 +1,3 @@ - -/*--------------------------------------------------------------------*/ -/*--- x86/Linux-specific kernel interface. vki-x86-linux.h ---*/ -/*--------------------------------------------------------------------*/ - /* This file is part of Valgrind, a dynamic binary instrumentation framework. @@ -28,27 +23,17 @@ The GNU General Public License is contained in the file COPYING. */ -#ifndef __VKI_AMD64_LINUX_H -#define __VKI_AMD64_LINUX_H +#ifndef __VKI_AMD64_FREEBSD_H +#define __VKI_AMD64_FREEBSD_H -// amd64 is little-endian. #define VKI_LITTLE_ENDIAN 1 - -//---------------------------------------------------------------------- -// From somewhere -//---------------------------------------------------------------------- - -/* PAGE_SHIFT determines the page size */ +/* PAGE_SHIFT determines the page size. */ #define VKI_PAGE_SHIFT 12 #define VKI_PAGE_SIZE (1UL << VKI_PAGE_SHIFT) #define VKI_MAX_PAGE_SHIFT VKI_PAGE_SHIFT #define VKI_MAX_PAGE_SIZE VKI_PAGE_SIZE -//---------------------------------------------------------------------- -// From sys/signal.h -//---------------------------------------------------------------------- - #define VKI_MINSIGSTKSZ 2048 #define VKI_SIG_BLOCK 1 /* for blocking signals */ @@ -134,10 +119,6 @@ int ss_flags; } vki_stack_t; -//---------------------------------------------------------------------- -// From linux-2.6.8.1/include/asm-i386/sigcontext.h -//---------------------------------------------------------------------- - struct _vki_fpstate { unsigned short cwd; unsigned short swd; @@ -186,86 +167,79 @@ long spare2[8]; }; -//---------------------------------------------------------------------- -// From linux-2.6.8.1/include/asm-i386/user.h -//---------------------------------------------------------------------- - -struct vki_user_i387_struct { - unsigned short cwd; - unsigned short swd; - unsigned short twd; - unsigned short fop; - unsigned long fip; - unsigned long fdp; - unsigned int mxcsr; - unsigned int mxcsr_mask; - unsigned int st_space[32]; /* 8*16 bytes for each FP-reg = 128 bytes */ - unsigned int xmm_space[64]; /* 16*16 bytes for each XMM-reg = 128 bytes */ - unsigned int padding[24]; -}; - - -/* AAA check that this linux layout is appropriate */ +/* + * Retrieved from src/sys/amd64/include/reg.h + * Note that on 8.x trapno and err are no-more meaningful, but we + * don't set them anyway. + */ struct vki_user_regs_struct { - unsigned long r15,r14,r13,r12,rbp,rbx,r11,r10; - unsigned long r9,r8,rax,rcx,rdx,rsi,rdi,orig_rax; - unsigned long rip,cs,eflags; - unsigned long rsp,ss; - unsigned long fs_base, gs_base; - unsigned long ds,es,fs,gs; + vki_register_t r15; + vki_register_t r14; + vki_register_t r13; + vki_register_t r12; + vki_register_t r11; + vki_register_t r10; + vki_register_t r9; + vki_register_t r8; + vki_register_t rdi; + vki_register_t rsi; + vki_register_t rbp; + vki_register_t rbx; + vki_register_t rdx; + vki_register_t rcx; + vki_register_t rax; + vki_register_t trapno; + vki_register_t err; + vki_register_t rip; + vki_register_t cs; + vki_register_t rflags; + vki_register_t rsp; + vki_register_t ss; }; -//---------------------------------------------------------------------- -// From linux-2.6.8.1/include/asm-i386/elf.h -//---------------------------------------------------------------------- +typedef vki_register_t vki_elf_greg_t; +typedef struct _vki_fpstate vki_elf_fpregset_t; -typedef unsigned long vki_elf_greg_t; +#define VKI_AT_SYSINFO 32 +#define VKI_ELF_NGREG \ + (sizeof (struct vki_user_regs_struct) / sizeof(vki_elf_greg_t)) -#define VKI_ELF_NGREG (sizeof (struct vki_user_regs_struct) / sizeof(vki_elf_greg_t)) typedef vki_elf_greg_t vki_elf_gregset_t[VKI_ELF_NGREG]; -typedef struct vki_user_i387_struct vki_elf_fpregset_t; - -#define VKI_AT_SYSINFO 32 - -//---------------------------------------------------------------------- -// From linux-2.6.8.1/include/asm-i386/ucontext.h -//---------------------------------------------------------------------- - -/* AAA fix for 64 bit */ struct vki_mcontext { - long onstack; /* XXX - sigcontext compat. */ - long rdi; /* machine state (struct trapframe) */ - long rsi; - long rdx; - long rcx; - long r8; - long r9; - long rax; - long rbx; - long rbp; - long r10; - long r11; - long r12; - long r13; - long r14; - long r15; - long trapno; - long addr; - long flags; - long err; - long rip; - long cs; - long rflags; - long rsp; - long ss; + vki_register_t onstack; /* XXX - sigcontext compat. */ + vki_register_t rdi; /* machine state (struct trapframe) */ + vki_register_t rsi; + vki_register_t rdx; + vki_register_t rcx; + vki_register_t r8; + vki_register_t r9; + vki_register_t rax; + vki_register_t rbx; + vki_register_t rbp; + vki_register_t r10; + vki_register_t r11; + vki_register_t r12; + vki_register_t r13; + vki_register_t r14; + vki_register_t r15; + vki_register_t trapno; + vki_register_t addr; + vki_register_t flags; + vki_register_t err; + vki_register_t rip; + vki_register_t cs; + vki_register_t rflags; + vki_register_t rsp; + vki_register_t ss; - long len; - long fpformat; - long ownedfp; - struct _vki_fpstate fpstate; - long spare2[8]; + long len; + long fpformat; + long ownedfp; + struct _vki_fpstate fpstate; + long spare2[8]; }; + #define VKI_FPFMT_NODEV 0x10000 #define VKI_FPFMT_XMM 0x10002 @@ -283,12 +257,4 @@ unsigned int __spare__[4]; }; -//---------------------------------------------------------------------- -// And that's it! -//---------------------------------------------------------------------- - -#endif // __VKI_AMD64_LINUX_H - -/*--------------------------------------------------------------------*/ -/*--- end ---*/ -/*--------------------------------------------------------------------*/ +#endif /* __VKI_AMD64_FREEBSD_H */