diff options
| author | Steven J. Magnani <steve@digidescorp.com> | 2010-11-10 19:37:26 +0100 | 
|---|---|---|
| committer | Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> | 2010-11-10 19:44:37 +0100 | 
| commit | 87fd5816c9a14c4457cb69afaece1d28e66256fa (patch) | |
| tree | c0aff8e416d4016312d3f54a1282c2466654f43b | |
| parent | 1a93a9e7559da068bf177aa5c0addf7c2214e314 (diff) | |
microblaze: thread support
Header files needed to build linuxthreads.old for microblaze.
Signed-off-by: Steven J. Magnani <steve@digidescorp.com>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
3 files changed, 268 insertions, 0 deletions
diff --git a/libc/sysdeps/linux/microblaze/sys/procfs.h b/libc/sysdeps/linux/microblaze/sys/procfs.h new file mode 100644 index 000000000..8fb87ef1e --- /dev/null +++ b/libc/sysdeps/linux/microblaze/sys/procfs.h @@ -0,0 +1,145 @@ +/* Copyright (C) 1996, 1997, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. +   This file is part of the GNU C Library. + +   The GNU C Library is free software; you can redistribute it and/or +   modify it under the terms of the GNU Lesser General Public +   License as published by the Free Software Foundation; either +   version 2.1 of the License, or (at your option) any later version. + +   The GNU C Library is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU +   Lesser General Public License for more details. + +   You should have received a copy of the GNU Lesser General Public +   License along with the GNU C Library; if not, write to the Free +   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +   02111-1307 USA.  */ + +#ifndef _SYS_PROCFS_H +#define _SYS_PROCFS_H	1 + +/* This is somewhat modelled after the file of the same name on SVR4 +   systems.  It provides a definition of the core file format for ELF +   used on Linux.  It doesn't have anything to do with the /proc file +   system, even though Linux has one. + +   Anyway, the whole purpose of this file is for GDB and GDB only. +   Don't read too much into it.  Don't use it for anything other than +   GDB unless you know what you are doing.  */ + +#include <features.h> +#include <sys/time.h> +#include <sys/types.h> + + +/* Type for a general-purpose register.  */ +#ifndef ELF_GREG_T +#define ELF_GREG_T +typedef unsigned long elf_greg_t; +#endif + +/* This is exactly the same as `struct pt_regs' in the kernel.  */ +struct elf_gregset +{ +	elf_greg_t gpr[32];	/* General purpose registers.  */ + +	elf_greg_t pc;		/* program counter */ +	elf_greg_t psw;		/* program status word */ +	elf_greg_t ear;		/* Exception address register */ +	elf_greg_t esr;		/* Excep[tion Status Register */ +	elf_greg_t fsr;		/* FPU Status register */ + +	elf_greg_t kernel_mode;	/* 1 if in `kernel mode', 0 if user mode */ +	elf_greg_t single_step;	/* 1 if in single step mode */ +}; + +#ifndef ELF_NGREG +#define ELF_NGREG (sizeof (struct elf_gregset) / sizeof(elf_greg_t)) +#endif + +#ifndef ELF_GREGSET_T +#define ELF_GREGSET_T +typedef elf_greg_t elf_gregset_t[ELF_NGREG]; +#endif + +/* Register set for the floating-point registers.  */ +#ifndef ELF_FPREGSET_T +#define ELF_FPREGSET_T +typedef elf_greg_t elf_fpregset_t; +#endif + +struct elf_siginfo +{ +	int	si_signo;			/* signal number */ +	int	si_code;			/* extra code */ +	int	si_errno;			/* errno */ +}; + + +/* + * Definitions to generate Intel SVR4-like core files. + * These mostly have the same names as the SVR4 types with "elf_" + * tacked on the front to prevent clashes with linux definitions, + * and the typedef forms have been avoided.  This is mostly like + * the SVR4 structure, but more Linuxy, with things that Linux does + * not support and which gdb doesn't really use excluded. + * Fields present but not used are marked with "XXX". + */ +struct elf_prstatus +{ +	struct elf_siginfo pr_info;	/* Info associated with signal */ +	short	pr_cursig;		/* Current signal */ +	unsigned long pr_sigpend;	/* Set of pending signals */ +	unsigned long pr_sighold;	/* Set of held signals */ +	__kernel_pid_t	pr_pid; +	__kernel_pid_t	pr_ppid; +	__kernel_pid_t	pr_pgrp; +	__kernel_pid_t	pr_sid; +	struct timeval pr_utime;	/* User time */ +	struct timeval pr_stime;	/* System time */ +	struct timeval pr_cutime;	/* Cumulative user time */ +	struct timeval pr_cstime;	/* Cumulative system time */ +	elf_gregset_t pr_reg;	/* GP registers */ +	int pr_fpvalid;		/* True if math co-processor being used.  */ +}; + +#define ELF_PRARGSZ	(80)	/* Number of chars for args */ + +struct elf_prpsinfo +{ +	char	pr_state;	/* numeric process state */ +	char	pr_sname;	/* char for pr_state */ +	char	pr_zomb;	/* zombie */ +	char	pr_nice;	/* nice val */ +	unsigned long pr_flag;	/* flags */ +	__kernel_uid_t	pr_uid; +	__kernel_gid_t	pr_gid; +	__kernel_pid_t	pr_pid, pr_ppid, pr_pgrp, pr_sid; +	/* Lots missing */ +	char	pr_fname[16];	/* filename of executable */ +	char	pr_psargs[ELF_PRARGSZ];	/* initial part of arg list */ +}; + + +/* The rest of this file provides the types for emulation of the +   Solaris <proc_service.h> interfaces that should be implemented by +   users of libthread_db.  */ + +/* Addresses.  */ +typedef void *psaddr_t; + +/* Register sets.  Linux has different names.  */ +typedef elf_gregset_t prgregset_t; +typedef elf_fpregset_t prfpregset_t; + +/* We don't have any differences between processes and threads, +   therefore have only one PID type.  */ +typedef __kernel_pid_t lwpid_t; + +/* Process status and info.  In the end we do provide typedefs for them.  */ +typedef struct elf_prstatus prstatus_t; +typedef struct elf_prpsinfo prpsinfo_t; + + +#endif	/* sys/procfs.h */ diff --git a/libpthread/linuxthreads.old/sysdeps/microblaze/pt-machine.h b/libpthread/linuxthreads.old/sysdeps/microblaze/pt-machine.h new file mode 100644 index 000000000..e8c03f9e5 --- /dev/null +++ b/libpthread/linuxthreads.old/sysdeps/microblaze/pt-machine.h @@ -0,0 +1,106 @@ +/* + * sysdeps/microblaze/pt-machine.h -- microblaze-specific pthread definitions + * + *  Copyright (C) 2003 John Williams <jwilliams@itee.uq.edu.au> + *  Copyright (C) 2002  NEC Electronics Corporation + *  Copyright (C) 2002  Miles Bader <miles@gnu.org> + * + * This file is subject to the terms and conditions of the GNU Lesser + * General Public License.  See the file COPYING.LIB in the main + * directory of this archive for more details. + * + * Written by Miles Bader <miles@gnu.org> + */ + +#ifndef _PT_MACHINE_H +#define _PT_MACHINE_H   1 + +#include <features.h> + +#ifndef PT_EI +# define PT_EI extern inline +#endif + +extern long int testandset (int *spinlock); +extern int __compare_and_swap (long *ptr, long old, long new); + +/* Get some notion of the current stack.  Need not be exactly the top +   of the stack, just something somewhere in the current frame.  */ +#define CURRENT_STACK_FRAME  __stack_pointer +register char *__stack_pointer __asm__ ("r1"); + +#define HAS_COMPARE_AND_SWAP +#define HAS_COMPARE_AND_SWAP_WITH_RELEASE_SEMANTICS +#define IMPLEMENT_TAS_WITH_CAS + +/* Atomically:  If *PTR == OLD, set *PTR to NEW and return true, +   otherwise do nothing and return false.  */ +PT_EI int __compare_and_swap (long *ptr, long old, long new) +{ +  unsigned long psw; + +  /* disable interrupts  */ +  /* This is ugly ugly ugly! */ +  __asm__ __volatile__ ("mfs	%0, rmsr;" +			"andi	r3, %0, ~2;" +			"mts	rmsr, r3;" +			: "=&r" (psw) +			: +			: "r3"); + +  if (likely (*ptr == old)) +    { +      *ptr = new; +      __asm__ __volatile__ ("mts rmsr, %0;" :: "r" (psw)); /* re-enable */ +      return 1; +    } +  else +    { +      __asm__ __volatile__ ("mts rmsr, %0;" :: "r" (psw)); /* re-enable */ +      return 0; +    } +} + +/* like above's __compare_and_swap() but it first syncs the memory +   (This is also the difference between both functions in e.g. +    ../powerpc/pt-machine.h) +   Doing this additional sync fixes a hang of __pthread_alt_unlock() +   (Falk Brettschneider <fbrettschneider@baumeroptronic.de>) */ +PT_EI int +__compare_and_swap_with_release_semantics (long *p, +					   long oldval, long newval) +{ +  __asm__ __volatile__ ("" : : : "memory"); /*MEMORY_BARRIER ();*/ +  return __compare_and_swap (p, oldval, newval); +} + + +#ifndef IMPLEMENT_TAS_WITH_CAS +/* Spinlock implementation; required.  */ +PT_EI long int testandset (int *spinlock) +{ +	unsigned psw; + +	/* disable interrupts */ +	__asm__ __volatile__ ("mfs	%0, rmsr;" +			      "andi	r3, %0, ~2;" +			       "mts	rmsr, r3;" +			: "=&r" (psw) +			: +			: "r3"); + +	if (*spinlock) +	{ +		/* Enable ints */ +		__asm__ __volatile__ ("mts	rmsr, %0;" :: "r" (psw)); +		return 1; +	} else { +		*spinlock=1; +		/* Enable ints */ +		__asm__ __volatile__ ("mts	rmsr, %0;" :: "r" (psw)); +		return 0; +	} +} + +#endif +#endif /* pt-machine.h */ diff --git a/libpthread/linuxthreads.old/sysdeps/microblaze/sigcontextinfo.h b/libpthread/linuxthreads.old/sysdeps/microblaze/sigcontextinfo.h new file mode 100644 index 000000000..de450ff8a --- /dev/null +++ b/libpthread/linuxthreads.old/sysdeps/microblaze/sigcontextinfo.h @@ -0,0 +1,17 @@ +/* + * sysdeps/v850/sigcontextinfo.h -- v850-specific pthread signal definitions + * + *  Copyright (C) 2002  NEC Electronics Corporation + *  Copyright (C) 2002  Miles Bader <miles@gnu.org> + * + * This file is subject to the terms and conditions of the GNU Lesser + * General Public License.  See the file COPYING.LIB in the main + * directory of this archive for more details. + * + * Written by Miles Bader <miles@gnu.org> + */ + +#include <signal.h> + +#define SIGCONTEXT struct sigcontext * +#define SIGCONTEXT_EXTRA_ARGS  | 
