diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8385c344316..ac920ddcc88 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,14 @@ +2009-12-03 Ken Werner + + * config/spu/spu-elf.h (STARTFILE_SPEC): Add support for gprof + startup files. + * config/spu/spu-protos.h (spu_function_profiler): Add prototype. + * config/spu/spu.c (spu_function_profiler): New function. + * config/spu/spu.h (FUNCTION_PROFILER): Invoke + spu_function_profiler. + (NO_PROFILE_COUNTERS): Define. + (PROFILE_BEFORE_PROLOGUE): Likewise. + 2009-12-03 Dave Korn * ggc-page.c (struct free_object): Pull definition out ... diff --git a/gcc/config/spu/spu-elf.h b/gcc/config/spu/spu-elf.h index 68982002103..967c8abc617 100644 --- a/gcc/config/spu/spu-elf.h +++ b/gcc/config/spu/spu-elf.h @@ -48,8 +48,9 @@ object constructed before entering `main'. */ #undef STARTFILE_SPEC -#define STARTFILE_SPEC "%{mstdmain: crt2.o%s} %{!mstdmain: crt1.o%s} \ - crti.o%s crtbegin.o%s" +#define STARTFILE_SPEC "%{mstdmain: %{pg|p:gcrt2.o%s;:crt2.o%s}}\ + %{!mstdmain: %{pg|p:gcrt1.o%s;:crt1.o%s}}\ + crti.o%s crtbegin.o%s" #undef ENDFILE_SPEC #define ENDFILE_SPEC "crtend.o%s crtn.o%s" diff --git a/gcc/config/spu/spu-protos.h b/gcc/config/spu/spu-protos.h index a1f5d13f17c..32bd25c30c9 100644 --- a/gcc/config/spu/spu-protos.h +++ b/gcc/config/spu/spu-protos.h @@ -85,6 +85,7 @@ extern void spu_expand_sign_extend (rtx ops[]); extern void spu_expand_vector_init (rtx target, rtx vals); extern void spu_init_expanders (void); extern void spu_split_convert (rtx *); +extern void spu_function_profiler (FILE *, int); /* spu-c.c */ extern tree spu_resolve_overloaded_builtin (location_t, tree fndecl, diff --git a/gcc/config/spu/spu.c b/gcc/config/spu/spu.c index a75f04a61ab..3e04c17d790 100644 --- a/gcc/config/spu/spu.c +++ b/gcc/config/spu/spu.c @@ -7074,4 +7074,11 @@ spu_split_convert (rtx ops[]) } } +void +spu_function_profiler (FILE * file, int labelno) +{ + fprintf (file, "# profile\n"); + fprintf (file, "brsl $75, _mcount\n"); +} + #include "gt-spu.h" diff --git a/gcc/config/spu/spu.h b/gcc/config/spu/spu.h index 369e6d76e9d..6d471cea333 100644 --- a/gcc/config/spu/spu.h +++ b/gcc/config/spu/spu.h @@ -393,9 +393,12 @@ targetm.resolve_overloaded_builtin = spu_resolve_overloaded_builtin; \ /* Profiling */ -/* Nothing, for now. */ #define FUNCTION_PROFILER(FILE, LABELNO) \ - fprintf (FILE, "\t\n") + spu_function_profiler ((FILE), (LABELNO)); + +#define NO_PROFILE_COUNTERS 1 + +#define PROFILE_BEFORE_PROLOGUE 1 /* Trampolines */