Commit 3d119f8f by Kaveh R. Ghazi Committed by Kaveh Ghazi

c-cppbuiltin.c (c_cpp_builtins): Define __pic__ and __PIC__ when flag_pic is set.

	* c-cppbuiltin.c (c_cpp_builtins): Define __pic__ and __PIC__ when
	flag_pic is set.
	
	* config/alpha/freebsd.h, config/alpha/linux.h,
	config/arm/linux-elf.h, config/bfin/bfin.h,
	config/cris/linux.h, config/darwin.h, config/freebsd-spec.h,
	config/i386/beos-elf.h, config/i386/gnu.h,
	config/i386/linux.h, config/i386/linux64.h, config/i386/nto.h,
	config/i386/sco5.h, config/m32r/m32r.h, config/m68k/linux.h,
	config/m68k/m68k.h, config/mips/linux.h, config/pa/pa-linux.h,
	config/rs6000/linux64.h, config/rs6000/sysv4.h,
	config/rs6000/vxworks.h, config/s390/linux.h, config/s390/tpf.h,
	config/sh/linux.h, config/sh/sh.h, config/sol2.h,
	config/sparc/linux.h, config/sparc/linux64.h,
	config/xtensa/xtensa.h: Don't define __pic__ or __PIC__.

	* doc/invoke.texi: Document that the macros __pic__ and __PIC__
	are both defined when either flag -fpic or -fPIC are used.

From-SVN: r107347
parent d7735880
2005-11-21 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* c-cppbuiltin.c (c_cpp_builtins): Define __pic__ and __PIC__ when
flag_pic is set.
* config/alpha/freebsd.h, config/alpha/linux.h,
config/arm/linux-elf.h, config/bfin/bfin.h,
config/cris/linux.h, config/darwin.h, config/freebsd-spec.h,
config/i386/beos-elf.h, config/i386/gnu.h,
config/i386/linux.h, config/i386/linux64.h, config/i386/nto.h,
config/i386/sco5.h, config/m32r/m32r.h, config/m68k/linux.h,
config/m68k/m68k.h, config/mips/linux.h, config/pa/pa-linux.h,
config/rs6000/linux64.h, config/rs6000/sysv4.h,
config/rs6000/vxworks.h, config/s390/linux.h, config/s390/tpf.h,
config/sh/linux.h, config/sh/sh.h, config/sol2.h,
config/sparc/linux.h, config/sparc/linux64.h,
config/xtensa/xtensa.h: Don't define __pic__ or __PIC__.
* doc/invoke.texi: Document that the macros __pic__ and __PIC__
are both defined when either flag -fpic or -fPIC are used.
2005-11-22 Joseph S. Myers <joseph@codesourcery.com> 2005-11-22 Joseph S. Myers <joseph@codesourcery.com>
* config/fp-bit.c (clzusi): New function. * config/fp-bit.c (clzusi): New function.
......
...@@ -419,6 +419,11 @@ c_cpp_builtins (cpp_reader *pfile) ...@@ -419,6 +419,11 @@ c_cpp_builtins (cpp_reader *pfile)
cpp_define (pfile, "__FINITE_MATH_ONLY__=1"); cpp_define (pfile, "__FINITE_MATH_ONLY__=1");
else else
cpp_define (pfile, "__FINITE_MATH_ONLY__=0"); cpp_define (pfile, "__FINITE_MATH_ONLY__=0");
if (flag_pic)
{
builtin_define_with_int_value ("__pic__", flag_pic);
builtin_define_with_int_value ("__PIC__", flag_pic);
}
if (flag_iso) if (flag_iso)
cpp_define (pfile, "__STRICT_ANSI__"); cpp_define (pfile, "__STRICT_ANSI__");
......
...@@ -24,22 +24,9 @@ Boston, MA 02110-1301, USA. */ ...@@ -24,22 +24,9 @@ Boston, MA 02110-1301, USA. */
#define SUBTARGET_EXTRA_SPECS \ #define SUBTARGET_EXTRA_SPECS \
{ "fbsd_dynamic_linker", FBSD_DYNAMIC_LINKER } { "fbsd_dynamic_linker", FBSD_DYNAMIC_LINKER }
/* Provide a FBSD_TARGET_CPU_CPP_BUILTINS and CPP_SPEC appropriate for /* Provide a CPP_SPEC appropriate for FreeBSD/alpha. Besides the
FreeBSD/alpha. Besides the dealing with dealing with the GCC option `-posix', we must deal with the Alpha's
the GCC option `-posix', and PIC issues as on all FreeBSD platforms, we must FP issues. */
deal with the Alpha's FP issues. */
#undef FBSD_TARGET_CPU_CPP_BUILTINS
#define FBSD_TARGET_CPU_CPP_BUILTINS() \
do \
{ \
if (flag_pic) \
{ \
builtin_define ("__PIC__"); \
builtin_define ("__pic__"); \
} \
} \
while (0)
#undef CPP_SPEC #undef CPP_SPEC
#define CPP_SPEC "%(cpp_subtarget) %{posix:-D_POSIX_SOURCE}" #define CPP_SPEC "%(cpp_subtarget) %{posix:-D_POSIX_SOURCE}"
......
...@@ -36,11 +36,6 @@ Boston, MA 02110-1301, USA. */ ...@@ -36,11 +36,6 @@ Boston, MA 02110-1301, USA. */
/* The GNU C++ standard library requires this. */ \ /* The GNU C++ standard library requires this. */ \
if (c_dialect_cxx ()) \ if (c_dialect_cxx ()) \
builtin_define ("_GNU_SOURCE"); \ builtin_define ("_GNU_SOURCE"); \
if (flag_pic) \
{ \
builtin_define ("__PIC__"); \
builtin_define ("__pic__"); \
} \
} while (0) } while (0)
#undef LIB_SPEC #undef LIB_SPEC
......
...@@ -71,11 +71,6 @@ ...@@ -71,11 +71,6 @@
do \ do \
{ \ { \
LINUX_TARGET_OS_CPP_BUILTINS(); \ LINUX_TARGET_OS_CPP_BUILTINS(); \
if (flag_pic) \
{ \
builtin_define ("__PIC__"); \
builtin_define ("__pic__"); \
} \
} \ } \
while (0) while (0)
......
...@@ -41,11 +41,6 @@ extern int target_flags; ...@@ -41,11 +41,6 @@ extern int target_flags;
{ \ { \
builtin_define ("bfin"); \ builtin_define ("bfin"); \
builtin_define ("BFIN"); \ builtin_define ("BFIN"); \
if (flag_pic) \
{ \
builtin_define ("__PIC__"); \
builtin_define ("__pic__"); \
} \
} \ } \
while (0) while (0)
#endif #endif
......
...@@ -96,11 +96,6 @@ Boston, MA 02110-1301, USA. */ ...@@ -96,11 +96,6 @@ Boston, MA 02110-1301, USA. */
do \ do \
{ \ { \
LINUX_TARGET_OS_CPP_BUILTINS(); \ LINUX_TARGET_OS_CPP_BUILTINS(); \
if (flag_pic) \
{ \
builtin_define ("__PIC__"); \
builtin_define ("__pic__"); \
} \
if (flag_leading_underscore <= 0) \ if (flag_leading_underscore <= 0) \
builtin_define ("__NO_UNDERSCORES__"); \ builtin_define ("__NO_UNDERSCORES__"); \
} \ } \
......
...@@ -140,14 +140,6 @@ Boston, MA 02110-1301, USA. */ ...@@ -140,14 +140,6 @@ Boston, MA 02110-1301, USA. */
{ "-unexported_symbols_list", "-Zunexported_symbols_list" }, \ { "-unexported_symbols_list", "-Zunexported_symbols_list" }, \
SUBTARGET_OPTION_TRANSLATE_TABLE SUBTARGET_OPTION_TRANSLATE_TABLE
#define SUBTARGET_OS_CPP_BUILTINS() \
do \
{ \
if (flag_pic) \
builtin_define ("__PIC__"); \
} \
while (0)
/* These compiler options take n arguments. */ /* These compiler options take n arguments. */
#undef WORD_SWITCH_TAKES_ARG #undef WORD_SWITCH_TAKES_ARG
......
...@@ -85,7 +85,6 @@ Boston, MA 02110-1301, USA. */ ...@@ -85,7 +85,6 @@ Boston, MA 02110-1301, USA. */
#define FBSD_CPP_SPEC " \ #define FBSD_CPP_SPEC " \
%(cpp_cpu) \ %(cpp_cpu) \
%(cpp_arch) \ %(cpp_arch) \
%{fPIC|fpic|fPIE|fpie:-D__PIC__ -D__pic__} \
%{posix:-D_POSIX_SOURCE}" %{posix:-D_POSIX_SOURCE}"
/* Provide a STARTFILE_SPEC appropriate for FreeBSD. Here we add /* Provide a STARTFILE_SPEC appropriate for FreeBSD. Here we add
......
...@@ -67,11 +67,6 @@ Boston, MA 02110-1301, USA. */ ...@@ -67,11 +67,6 @@ Boston, MA 02110-1301, USA. */
builtin_define ("__stdcall=__attribute__((__stdcall__))"); \ builtin_define ("__stdcall=__attribute__((__stdcall__))"); \
builtin_define ("__cdecl=__attribute__((__cdecl__))"); \ builtin_define ("__cdecl=__attribute__((__cdecl__))"); \
builtin_assert ("system=beos"); \ builtin_assert ("system=beos"); \
if (flag_pic) \
{ \
builtin_define ("__PIC__"); \
builtin_define ("__pic__"); \
} \
} \ } \
while (0) while (0)
......
...@@ -8,11 +8,6 @@ ...@@ -8,11 +8,6 @@
do \ do \
{ \ { \
HURD_TARGET_OS_CPP_BUILTINS(); \ HURD_TARGET_OS_CPP_BUILTINS(); \
if (flag_pic) \
{ \
builtin_define ("__PIC__"); \
builtin_define ("__pic__"); \
} \
} \ } \
while (0) while (0)
......
...@@ -74,11 +74,6 @@ Boston, MA 02110-1301, USA. */ ...@@ -74,11 +74,6 @@ Boston, MA 02110-1301, USA. */
do \ do \
{ \ { \
LINUX_TARGET_OS_CPP_BUILTINS(); \ LINUX_TARGET_OS_CPP_BUILTINS(); \
if (flag_pic) \
{ \
builtin_define ("__PIC__"); \
builtin_define ("__pic__"); \
} \
} \ } \
while (0) while (0)
......
...@@ -25,11 +25,6 @@ Boston, MA 02110-1301, USA. */ ...@@ -25,11 +25,6 @@ Boston, MA 02110-1301, USA. */
do \ do \
{ \ { \
LINUX_TARGET_OS_CPP_BUILTINS(); \ LINUX_TARGET_OS_CPP_BUILTINS(); \
if (flag_pic) \
{ \
builtin_define ("__PIC__"); \
builtin_define ("__pic__"); \
} \
} \ } \
while (0) while (0)
......
...@@ -37,11 +37,6 @@ Boston, MA 02110-1301, USA. */ ...@@ -37,11 +37,6 @@ Boston, MA 02110-1301, USA. */
builtin_assert ("system=qnxnto"); \ builtin_assert ("system=qnxnto"); \
builtin_assert ("system=nto"); \ builtin_assert ("system=nto"); \
builtin_assert ("system=unix"); \ builtin_assert ("system=unix"); \
if (flag_pic) \
{ \
builtin_define ("__PIC__"); \
builtin_define ("__pic__"); \
} \
} \ } \
while (0) while (0)
......
...@@ -221,11 +221,6 @@ Boston, MA 02110-1301, USA. */ ...@@ -221,11 +221,6 @@ Boston, MA 02110-1301, USA. */
builtin_assert ("system=svr3"); \ builtin_assert ("system=svr3"); \
if (flag_iso) \ if (flag_iso) \
cpp_define (pfile, "_STRICT_ANSI"); \ cpp_define (pfile, "_STRICT_ANSI"); \
if (flag_pic) \
{ \
builtin_define ("__PIC__"); \
builtin_define ("__pic__"); \
} \
} \ } \
while (0) while (0)
......
...@@ -112,11 +112,6 @@ ...@@ -112,11 +112,6 @@
builtin_assert ("machine=m32r"); \ builtin_assert ("machine=m32r"); \
builtin_define (TARGET_BIG_ENDIAN \ builtin_define (TARGET_BIG_ENDIAN \
? "__BIG_ENDIAN__" : "__LITTLE_ENDIAN__"); \ ? "__BIG_ENDIAN__" : "__LITTLE_ENDIAN__"); \
if (flag_pic) \
{ \
builtin_define ("__pic__"); \
builtin_define ("__PIC__"); \
} \
} \ } \
while (0) while (0)
......
...@@ -94,10 +94,10 @@ Boston, MA 02110-1301, USA. */ ...@@ -94,10 +94,10 @@ Boston, MA 02110-1301, USA. */
#undef CPP_SPEC #undef CPP_SPEC
#if TARGET_DEFAULT & MASK_68881 #if TARGET_DEFAULT & MASK_68881
#define CPP_SPEC \ #define CPP_SPEC \
"%{fPIC|fpic|fPIE|fpie:-D__PIC__ -D__pic__} %{!msoft-float:-D__HAVE_68881__} %{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}" "%{!msoft-float:-D__HAVE_68881__} %{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}"
#else #else
#define CPP_SPEC \ #define CPP_SPEC \
"%{fPIC|fpic|fPIE|fpie:-D__PIC__ -D__pic__} %{m68881:-D__HAVE_68881__} %{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}" "%{m68881:-D__HAVE_68881__} %{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}"
#endif #endif
/* We override the ASM_SPEC from svr4.h because we must pass -m68040 down /* We override the ASM_SPEC from svr4.h because we must pass -m68040 down
......
...@@ -92,12 +92,6 @@ Boston, MA 02110-1301, USA. */ ...@@ -92,12 +92,6 @@ Boston, MA 02110-1301, USA. */
} \ } \
if (TARGET_CF_HWDIV) \ if (TARGET_CF_HWDIV) \
builtin_define ("__mcfhwdiv__"); \ builtin_define ("__mcfhwdiv__"); \
if (flag_pic) \
{ \
builtin_define ("__pic__"); \
if (flag_pic > 1) \
builtin_define ("__PIC__"); \
} \
builtin_assert ("cpu=m68k"); \ builtin_assert ("cpu=m68k"); \
builtin_assert ("machine=m68k"); \ builtin_assert ("machine=m68k"); \
} \ } \
......
...@@ -56,11 +56,6 @@ Boston, MA 02110-1301, USA. */ ...@@ -56,11 +56,6 @@ Boston, MA 02110-1301, USA. */
#define TARGET_OS_CPP_BUILTINS() \ #define TARGET_OS_CPP_BUILTINS() \
do { \ do { \
LINUX_TARGET_OS_CPP_BUILTINS(); \ LINUX_TARGET_OS_CPP_BUILTINS(); \
if (TARGET_ABICALLS) \
{ \
builtin_define ("__PIC__"); \
builtin_define ("__pic__"); \
} \
/* The GNU C++ standard library requires this. */ \ /* The GNU C++ standard library requires this. */ \
if (c_dialect_cxx ()) \ if (c_dialect_cxx ()) \
builtin_define ("_GNU_SOURCE"); \ builtin_define ("_GNU_SOURCE"); \
......
...@@ -25,11 +25,6 @@ Boston, MA 02110-1301, USA. */ ...@@ -25,11 +25,6 @@ Boston, MA 02110-1301, USA. */
{ \ { \
LINUX_TARGET_OS_CPP_BUILTINS(); \ LINUX_TARGET_OS_CPP_BUILTINS(); \
builtin_assert ("machine=bigendian"); \ builtin_assert ("machine=bigendian"); \
if (flag_pic) \
{ \
builtin_define ("__PIC__"); \
builtin_define ("__pic__"); \
} \
} \ } \
while (0) while (0)
......
...@@ -289,7 +289,6 @@ extern int dot_symbols; ...@@ -289,7 +289,6 @@ extern int dot_symbols;
builtin_define ("__PPC64__"); \ builtin_define ("__PPC64__"); \
builtin_define ("__powerpc__"); \ builtin_define ("__powerpc__"); \
builtin_define ("__powerpc64__"); \ builtin_define ("__powerpc64__"); \
builtin_define ("__PIC__"); \
builtin_assert ("cpu=powerpc64"); \ builtin_assert ("cpu=powerpc64"); \
builtin_assert ("machine=powerpc64"); \ builtin_assert ("machine=powerpc64"); \
} \ } \
......
...@@ -685,16 +685,6 @@ extern int fixuplabelno; ...@@ -685,16 +685,6 @@ extern int fixuplabelno;
#define TARGET_OS_SYSV_CPP_BUILTINS() \ #define TARGET_OS_SYSV_CPP_BUILTINS() \
do \ do \
{ \ { \
if (flag_pic == 1) \
{ \
builtin_define ("__pic__=1"); \
builtin_define ("__PIC__=1"); \
} \
else if (flag_pic == 2) \
{ \
builtin_define ("__pic__=2"); \
builtin_define ("__PIC__=2"); \
} \
if (target_flags_explicit \ if (target_flags_explicit \
& MASK_RELOCATABLE) \ & MASK_RELOCATABLE) \
builtin_define ("_RELOCATABLE"); \ builtin_define ("_RELOCATABLE"); \
......
...@@ -41,16 +41,6 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA ...@@ -41,16 +41,6 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
builtin_define ("__VXWORKS__"); \ builtin_define ("__VXWORKS__"); \
if (!TARGET_SOFT_FLOAT) \ if (!TARGET_SOFT_FLOAT) \
builtin_define ("__hardfp"); \ builtin_define ("__hardfp"); \
if (flag_pic == 2) \
{ \
builtin_define ("__PIC__=2"); \
builtin_define ("__pic__=2"); \
} \
else if (flag_pic == 1) \
{ \
builtin_define ("__PIC__=1"); \
builtin_define ("__pic__=1"); \
} \
\ \
/* C89 namespace violation! */ \ /* C89 namespace violation! */ \
builtin_define ("CPU_FAMILY=PPC"); \ builtin_define ("CPU_FAMILY=PPC"); \
......
...@@ -54,11 +54,6 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA ...@@ -54,11 +54,6 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
do \ do \
{ \ { \
LINUX_TARGET_OS_CPP_BUILTINS(); \ LINUX_TARGET_OS_CPP_BUILTINS(); \
if (flag_pic) \
{ \
builtin_define ("__PIC__"); \
builtin_define ("__pic__"); \
} \
} \ } \
while (0) while (0)
......
...@@ -72,11 +72,6 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA ...@@ -72,11 +72,6 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
builtin_define_std ("tpf"); \ builtin_define_std ("tpf"); \
builtin_assert ("system=tpf"); \ builtin_assert ("system=tpf"); \
builtin_define ("__ELF__"); \ builtin_define ("__ELF__"); \
if (flag_pic) \
{ \
builtin_define ("__PIC__"); \
builtin_define ("__pic__"); \
} \
} \ } \
while (0) while (0)
......
...@@ -38,11 +38,6 @@ Boston, MA 02110-1301, USA. */ ...@@ -38,11 +38,6 @@ Boston, MA 02110-1301, USA. */
do \ do \
{ \ { \
LINUX_TARGET_OS_CPP_BUILTINS(); \ LINUX_TARGET_OS_CPP_BUILTINS(); \
if (flag_pic) \
{ \
builtin_define ("__PIC__"); \
builtin_define ("__pic__"); \
} \
} \ } \
while (0) while (0)
......
...@@ -92,11 +92,6 @@ do { \ ...@@ -92,11 +92,6 @@ do { \
builtin_define ("__HITACHI__"); \ builtin_define ("__HITACHI__"); \
builtin_define (TARGET_LITTLE_ENDIAN \ builtin_define (TARGET_LITTLE_ENDIAN \
? "__LITTLE_ENDIAN__" : "__BIG_ENDIAN__"); \ ? "__LITTLE_ENDIAN__" : "__BIG_ENDIAN__"); \
if (flag_pic) \
{ \
builtin_define ("__pic__"); \
builtin_define ("__PIC__"); \
} \
} while (0) } while (0)
/* We can not debug without a frame pointer. */ /* We can not debug without a frame pointer. */
......
...@@ -72,11 +72,6 @@ Boston, MA 02110-1301, USA. */ ...@@ -72,11 +72,6 @@ Boston, MA 02110-1301, USA. */
builtin_define ("_LARGEFILE64_SOURCE=1"); \ builtin_define ("_LARGEFILE64_SOURCE=1"); \
builtin_define ("__EXTENSIONS__"); \ builtin_define ("__EXTENSIONS__"); \
} \ } \
if (flag_pic) \
{ \
builtin_define ("__PIC__"); \
builtin_define ("__pic__"); \
} \
TARGET_SUB_OS_CPP_BUILTINS(); \ TARGET_SUB_OS_CPP_BUILTINS(); \
} while (0) } while (0)
......
...@@ -29,11 +29,6 @@ Boston, MA 02110-1301, USA. */ ...@@ -29,11 +29,6 @@ Boston, MA 02110-1301, USA. */
builtin_assert ("system=linux"); \ builtin_assert ("system=linux"); \
builtin_assert ("system=unix"); \ builtin_assert ("system=unix"); \
builtin_assert ("system=posix"); \ builtin_assert ("system=posix"); \
if (flag_pic) \
{ \
builtin_define ("__PIC__"); \
builtin_define ("__pic__"); \
} \
} \ } \
while (0) while (0)
......
...@@ -30,11 +30,6 @@ Boston, MA 02110-1301, USA. */ ...@@ -30,11 +30,6 @@ Boston, MA 02110-1301, USA. */
builtin_assert ("system=linux"); \ builtin_assert ("system=linux"); \
builtin_assert ("system=unix"); \ builtin_assert ("system=unix"); \
builtin_assert ("system=posix"); \ builtin_assert ("system=posix"); \
if (flag_pic) \
{ \
builtin_define ("__PIC__"); \
builtin_define ("__pic__"); \
} \
} \ } \
while (0) while (0)
......
...@@ -90,11 +90,6 @@ extern unsigned xtensa_current_frame_size; ...@@ -90,11 +90,6 @@ extern unsigned xtensa_current_frame_size;
builtin_define (TARGET_BIG_ENDIAN ? "__XTENSA_EB__" : "__XTENSA_EL__"); \ builtin_define (TARGET_BIG_ENDIAN ? "__XTENSA_EB__" : "__XTENSA_EL__"); \
if (!TARGET_HARD_FLOAT) \ if (!TARGET_HARD_FLOAT) \
builtin_define ("__XTENSA_SOFT_FLOAT__"); \ builtin_define ("__XTENSA_SOFT_FLOAT__"); \
if (flag_pic) \
{ \
builtin_define ("__PIC__"); \
builtin_define ("__pic__"); \
} \
} while (0) } while (0)
#define CPP_SPEC " %(subtarget_cpp_spec) " #define CPP_SPEC " %(subtarget_cpp_spec) "
......
...@@ -12882,6 +12882,9 @@ only on certain machines. For the 386, GCC supports PIC for System V ...@@ -12882,6 +12882,9 @@ only on certain machines. For the 386, GCC supports PIC for System V
but not for the Sun 386i. Code generated for the IBM RS/6000 is always but not for the Sun 386i. Code generated for the IBM RS/6000 is always
position-independent. position-independent.
When this flag is set, the macros @code{__pic__} and @code{__PIC__}
are defined to 1.
@item -fPIC @item -fPIC
@opindex fPIC @opindex fPIC
If supported for the target machine, emit position-independent code, If supported for the target machine, emit position-independent code,
...@@ -12892,6 +12895,9 @@ PowerPC and SPARC@. ...@@ -12892,6 +12895,9 @@ PowerPC and SPARC@.
Position-independent code requires special support, and therefore works Position-independent code requires special support, and therefore works
only on certain machines. only on certain machines.
When this flag is set, the macros @code{__pic__} and @code{__PIC__}
are defined to 2.
@item -fpie @item -fpie
@itemx -fPIE @itemx -fPIE
@opindex fpie @opindex fpie
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment