This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: PowerPC: sotruss-lib implementation
- From: Will Schmidt <will_schmidt at vnet dot ibm dot com>
- To: Adhemerval Zanella <azanella at linux dot vnet dot ibm dot com>
- Cc: "GNU C. Library" <libc-alpha at sourceware dot org>
- Date: Tue, 14 Jan 2014 16:51:27 -0600
- Subject: Re: PowerPC: sotruss-lib implementation
- Authentication-results: sourceware.org; auth=none
- References: <52A751B1 dot 2010804 at linux dot vnet dot ibm dot com> <52B050DC dot 1050905 at linux dot vnet dot ibm dot com>
- Reply-to: will_schmidt at vnet dot ibm dot com
On Tue, 2013-12-17 at 11:25 -0200, Adhemerval Zanella wrote:
> Ping.
>
> On 10-12-2013 15:38, Adhemerval Zanella wrote:
> > Hi all,
> >
> > This patch add the missing sotruss-lib interfaces for PowerPC. Tested on
> > PPC32, PPC64, PPC64LE. OK to apply?
> >
> > ---
> >
> > 2013-12-10 Adhemerval Zanella <azanella@linux.vnet.ibm.com>
> >
> > * sysdeps/powerpc/sotruss-lib.c: New file: sotruss-lib.so
> > implementation for powerpc.
> >
> > --
> >
> > diff --git a/sysdeps/powerpc/sotruss-lib.c b/sysdeps/powerpc/sotruss-lib.c
> > new file mode 100644
> > index 0000000..67779c4
> > --- /dev/null
> > +++ b/sysdeps/powerpc/sotruss-lib.c
> > @@ -0,0 +1,69 @@
> > +/* PowerPC specific sotruss-lib functions.
> > + Copyright (C) 2013 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, see
> > + <http://www.gnu.org/licenses/>. */
> > +
> > +#define HAVE_ARCH_PLTENTER
> > +#define HAVE_ARCH_PLTEXIT
> > +
> > +#include <elf/sotruss-lib.c>
> > +
> > +#if defined(__PPC64__) || defined(__powerpc64__)
> > +# if _CALL_ELF != 2
Any chance there is a #define that would work in place of '2' there?
> > +# define LA_PPC_REGS La_ppc64_regs
> > +# define LA_PPC_RETVAL La_ppc64_retval
> > +# define LA_PPC_GNU_PLTENTER la_ppc64_gnu_pltenter
> > +# define LA_PPC_GNU_PLTEXIT la_ppc64_gnu_pltexit
> > +# else
> > +# define LA_PPC_REGS La_ppc64v2_regs
> > +# define LA_PPC_RETVAL La_ppc64v2_retval
> > +# define LA_PPC_GNU_PLTENTER la_ppc64v2_gnu_pltenter
> > +# define LA_PPC_GNU_PLTEXIT la_ppc64v2_gnu_pltexit
> > +# endif
> > +# else
> > +# define LA_PPC_REGS La_ppc32_regs
> > +# define LA_PPC_RETVAL La_ppc32_retval
> > +# define LA_PPC_GNU_PLTENTER la_ppc32_gnu_pltenter
> > +# define LA_PPC_GNU_PLTEXITA la_ppc32_gnu_pltexit
^ extra 'A' on PLTEXIT.
>From the context, I'll infer that big-L "La_..." gets the structures,
and little-L "la_..." gets the functions as defined below. The order
of the defines is backwards wrt the s390 sotruss-lib changes, which had
me initially thinking this was just random. May be worth comparing to
the others and switch lines around so they can be diff'ed, but thats
really just a cosmetic nit.
Fix the 'A' on PLTEXIT, and otherwise LGTM.
Thanks,
-Will
> > +#endif
> > +
> > +ElfW(Addr)
> > +LA_PPC_GNU_PLTENTER (ElfW(Sym) *sym __attribute__ ((unused)),
> > + unsigned int ndx __attribute__ ((unused)),
> > + uintptr_t *refcook, uintptr_t *defcook,
> > + LA_PPC_REGS *regs, unsigned int *flags,
> > + const char *symname, long int *framesizep)
> > +{
> > + print_enter (refcook, defcook, symname,
> > + regs->lr_reg[0], regs->lr_reg[1], regs->lr_reg[2], *flags);
> > +
> > + /* No need to copy anything, we will not need the parameters in any case. */
> > + *framesizep = 0;
> > +
> > + return sym->st_value;
> > +}
> > +
> > +unsigned int
> > +LA_PPC_GNU_PLTEXIT (ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook,
> > + uintptr_t *defcook,
> > + const struct LA_PPC_REGS *inregs,
> > + struct LA_PPC_RETVAL *outregs, const char *symname)
> > +{
> > + print_exit (refcook, defcook, symname, outregs->lrv_r3);
> > +
> > + return 0;
> > +}
> >
>