[uClibc-cvs] uClibc/libc/sysdeps/linux/powerpc/bits atomicity.h,NONE,1.1 machine-gmon.h,NONE,1.1 profil-counter.h,NONE,1.1 sigcontextinfo.h,NONE,1.1 stackinfo.h,NONE,1.1
Erik Andersen
andersen at codepoet.org
Mon Mar 3 20:58:36 UTC 2003
- Previous message: [uClibc-cvs] uClibc/libc/sysdeps/linux/mips/bits atomicity.h,NONE,1.1 machine-gmon.h,NONE,1.1 sigcontextinfo.h,NONE,1.1 stackinfo.h,NONE,1.1
- Next message: [uClibc-cvs] uClibc/libc/sysdeps/linux/sh/bits machine-gmon.h,NONE,1.1 profil-counter.h,NONE,1.1 sigcontextinfo.h,NONE,1.1 stackinfo.h,NONE,1.1
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /var/cvs/uClibc/libc/sysdeps/linux/powerpc/bits
In directory winder:/tmp/cvs-serv13798/libc/sysdeps/linux/powerpc/bits
Added Files:
atomicity.h machine-gmon.h profil-counter.h sigcontextinfo.h
stackinfo.h
Log Message:
Initial effort at adding profiling support.
--- NEW FILE: atomicity.h ---
/* Low-level functions for atomic operations. PowerPC version.
Copyright (C) 1997, 1998, 1999, 2000 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 _ATOMICITY_H
#define _ATOMICITY_H 1
#include <inttypes.h>
#if BROKEN_PPC_ASM_CR0
# define __ATOMICITY_INLINE /* nothing */
#else
# define __ATOMICITY_INLINE inline
#endif
static __ATOMICITY_INLINE int
__attribute__ ((unused))
exchange_and_add (volatile uint32_t *mem, int val)
{
int tmp, result;
__asm__ ("\n\
0: lwarx %0,0,%2 \n\
add%I3 %1,%0,%3 \n\
stwcx. %1,0,%2 \n\
bne- 0b \n\
" : "=&b"(result), "=&r"(tmp) : "r" (mem), "Ir"(val) : "cr0", "memory");
return result;
}
static __ATOMICITY_INLINE void
__attribute__ ((unused))
atomic_add (volatile uint32_t *mem, int val)
{
int tmp;
__asm__ ("\n\
0: lwarx %0,0,%1 \n\
add%I2 %0,%0,%2 \n\
stwcx. %0,0,%1 \n\
bne- 0b \n\
" : "=&b"(tmp) : "r" (mem), "Ir"(val) : "cr0", "memory");
}
static __ATOMICITY_INLINE int
__attribute__ ((unused))
compare_and_swap (volatile long int *p, long int oldval, long int newval)
{
int result;
__asm__ ("\n\
0: lwarx %0,0,%1 \n\
sub%I2c. %0,%0,%2 \n\
cntlzw %0,%0 \n\
bne- 1f \n\
stwcx. %3,0,%1 \n\
bne- 0b \n\
1: \n\
" : "=&b"(result) : "r"(p), "Ir"(oldval), "r"(newval) : "cr0", "memory");
return result >> 5;
}
static __ATOMICITY_INLINE long int
__attribute__ ((unused))
always_swap (volatile long int *p, long int newval)
{
long int result;
__asm__ ("\n\
0: lwarx %0,0,%1 \n\
stwcx. %2,0,%1 \n\
bne- 0b \n\
" : "=&r"(result) : "r"(p), "r"(newval) : "cr0", "memory");
return result;
}
static __ATOMICITY_INLINE int
__attribute__ ((unused))
test_and_set (volatile long int *p, long int newval)
{
int result;
__asm__ ("\n\
0: lwarx %0,0,%1 \n\
cmpwi %0,0 \n\
bne- 1f \n\
stwcx. %2,0,%1 \n\
bne- 0b \n\
1: \n\
" : "=&r"(result) : "r"(p), "r"(newval) : "cr0", "memory");
return result;
}
#endif /* atomicity.h */
--- NEW FILE: machine-gmon.h ---
/* PowerPC-specific implementation of profiling support.
Copyright (C) 1997 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. */
/* We need a special version of the `mcount' function because it has
to preserve more registers than your usual function. */
void __mcount_internal (unsigned long frompc, unsigned long selfpc);
#define _MCOUNT_DECL(frompc, selfpc) \
void __mcount_internal (unsigned long frompc, unsigned long selfpc)
/* Define MCOUNT as empty since we have the implementation in another
file. */
#define MCOUNT
--- NEW FILE: profil-counter.h ---
/* Low-level statistical profiling support function. Linux/ipowerpc version.
Copyright (C) 1996, 1997, 1998 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. */
#include <signal.h>
#include <bits/sigcontextinfo.h>
static void
profil_counter (int signo, SIGCONTEXT scp)
{
profil_count ((void *) GET_PC (scp));
}
--- NEW FILE: sigcontextinfo.h ---
/* Copyright (C) 1998, 1999, 2001 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. */
#include <signal.h>
#define SIGCONTEXT struct sigcontext *
#define SIGCONTEXT_EXTRA_ARGS
#define GET_PC(ctx) ((void *)((ctx)->regs->nip))
#define GET_FRAME(ctx) (*(void **)((ctx)->regs->gpr[1]))
#define GET_STACK(ctx) ((void *)((ctx)->regs->gpr[1]))
#define CALL_SIGHANDLER(handler, signo, ctx) \
(handler)((signo), SIGCONTEXT_EXTRA_ARGS (ctx))
--- NEW FILE: stackinfo.h ---
/* Copyright (C) 1999 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. */
/* This file contains a bit of information about the stack allocation
of the processor. */
#ifndef _STACKINFO_H
#define _STACKINFO_H 1
/* On PPC the stack grows down. */
#define _STACK_GROWS_DOWN 1
#endif /* stackinfo.h */
- Previous message: [uClibc-cvs] uClibc/libc/sysdeps/linux/mips/bits atomicity.h,NONE,1.1 machine-gmon.h,NONE,1.1 sigcontextinfo.h,NONE,1.1 stackinfo.h,NONE,1.1
- Next message: [uClibc-cvs] uClibc/libc/sysdeps/linux/sh/bits machine-gmon.h,NONE,1.1 profil-counter.h,NONE,1.1 sigcontextinfo.h,NONE,1.1 stackinfo.h,NONE,1.1
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the uClibc-cvs
mailing list