PERFORCE change 165872 for review

Attilio Rao attilio at FreeBSD.org
Thu Jul 9 17:10:32 UTC 2009


http://perforce.freebsd.org/chv.cgi?CH=165872

Change 165872 by attilio at 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 */


More information about the p4-projects mailing list