/* PowerPC32 default implementation of strchr.
   Copyright (C) 2013-2014 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/>.  */

#include <sysdep.h>

#ifdef SHARED
# undef ENTRY
# define ENTRY(name)						\
    .globl C_SYMBOL_NAME(__strchr_ppc);			\
    .type C_SYMBOL_NAME(__strchr_ppc),@function;		\
    .align ALIGNARG(2);						\
    C_LABEL(__strchr_ppc)					\
    cfi_startproc;						\
    CALL_MCOUNT

# undef END
# define END(name)						\
    cfi_endproc;						\
    ASM_SIZE_DIRECTIVE(__strchr_ppc)				\

# undef libc_hidden_builtin_def
# define libc_hidden_builtin_def(name)				\
    .globl __GI_strchr; __GI_strchr = __strchr_ppc
#endif

#include <sysdeps/powerpc/powerpc32/strchr.S>
