diff options
author | Nick Clifton <nickc@cygnus.com> | 1999-05-05 07:46:43 +0000 |
---|---|---|
committer | Nick Clifton <nickc@gcc.gnu.org> | 1999-05-05 07:46:43 +0000 |
commit | afef3d7a1b7262215ba575f8825ac2477c05a692 (patch) | |
tree | a0740688654c5451e4dc20aa0786526d142b9dc8 | |
parent | 9ba051d33eda5c331f6189ed57f814d46666c064 (diff) | |
download | gcc-afef3d7a1b7262215ba575f8825ac2477c05a692.zip gcc-afef3d7a1b7262215ba575f8825ac2477c05a692.tar.gz gcc-afef3d7a1b7262215ba575f8825ac2477c05a692.tar.bz2 |
Remove assembler dialect dependencies.
From-SVN: r26776
-rw-r--r-- | gcc/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/config/arm/aof.h | 3 | ||||
-rw-r--r-- | gcc/config/arm/arm.h | 55 |
3 files changed, 55 insertions, 13 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c343a1b..fb98a33 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +Wed May 5 07:40:02 1999 Nick Clifton <nickc@cygnus.com> + + Patch from: Nick Burrett <nick.burrett@btinternet.com> + * config/arm/arm.h (ARM_MCOUNT_NAME): Define. + (FUNCTION_PROFILER): Remove assembler dialect dependency and use + ARM_MCOUNT_NAME. + (TRAMPOLINE_TEMPLATE): Remove assembler dialect dependency. + + * config/arm/aof.h (ARM_MCOUNT_NAME): Define. + 1999-05-05 09:58 -0400 Zack Weinberg <zack@rabi.columbia.edu> * gcc.c (default_compilers): Fix brace nesting bug. diff --git a/gcc/config/arm/aof.h b/gcc/config/arm/aof.h index 6c21850..ce41a70 100644 --- a/gcc/config/arm/aof.h +++ b/gcc/config/arm/aof.h @@ -420,6 +420,9 @@ do { \ #define USER_LABEL_PREFIX "" #define LOCAL_LABEL_PREFIX "" +/* AOF does not prefix user function names with an underscore. */ +#define ARM_MCOUNT_NAME "_mcount" + /* Output of Dispatch Tables */ #define ASM_OUTPUT_ADDR_DIFF_ELT(STREAM,BODY,VALUE,REL) \ diff --git a/gcc/config/arm/arm.h b/gcc/config/arm/arm.h index ef18f49..52b4332 100644 --- a/gcc/config/arm/arm.h +++ b/gcc/config/arm/arm.h @@ -1133,15 +1133,42 @@ do { \ #define FUNCTION_PROLOGUE(STREAM, SIZE) \ output_func_prologue ((STREAM), (SIZE)) -/* Call the function profiler with a given profile label. The Acorn compiler - puts this BEFORE the prolog but gcc puts it afterwards. The ``mov ip,lr'' - seems like a good idea to stick with cc convention. ``prof'' doesn't seem - to mind about this! */ +/* If your target environment doesn't prefix user functions with an + underscore, you may wish to re-define this to prevent any conflicts. + e.g. AOF may prefix mcount with an underscore. */ +#ifndef ARM_MCOUNT_NAME +#define ARM_MCOUNT_NAME "*mcount" +#endif + +/* Call the function profiler with a given profile label. The Acorn + compiler puts this BEFORE the prolog but gcc puts it afterwards. + On the ARM the full profile code will look like: + .data + LP1 + .word 0 + .text + mov ip, lr + bl mcount + .word LP1 + + profile_function() in final.c outputs the .data section, FUNCTION_PROFILER + will output the .text section. + + The ``mov ip,lr'' seems like a good idea to stick with cc convention. + ``prof'' doesn't seem to mind about this! */ #define FUNCTION_PROFILER(STREAM,LABELNO) \ { \ - fprintf(STREAM, "\tmov\t%sip, %slr\n", REGISTER_PREFIX, REGISTER_PREFIX); \ - fprintf(STREAM, "\tbl\tmcount\n"); \ - fprintf(STREAM, "\t.word\tLP%d\n", (LABELNO)); \ + char temp[20]; \ + rtx sym; \ + \ + fprintf ((STREAM), "\tmov\t%s%s, %s%s\n\tbl\t", \ + REGISTER_PREFIX, reg_names[12] /* ip */, \ + REGISTER_PREFIX, reg_names[14] /* lr */); \ + assemble_name ((STREAM), ARM_MCOUNT_NAME); \ + fputc ('\n', (STREAM)); \ + ASM_GENERATE_INTERNAL_LABEL (temp, "LP", (LABELNO)); \ + sym = gen_rtx (SYMBOL_REF, Pmode, temp); \ + ASM_OUTPUT_INT ((STREAM), sym); \ } /* EXIT_IGNORE_STACK should be nonzero if, when returning from a function, @@ -1243,12 +1270,14 @@ do { \ ??? FIXME: When the trampoline returns, r8 will be clobbered. */ #define TRAMPOLINE_TEMPLATE(FILE) \ { \ - fprintf ((FILE), "\tldr\t%sr8, [%spc, #0]\n", \ - REGISTER_PREFIX, REGISTER_PREFIX); \ - fprintf ((FILE), "\tldr\t%spc, [%spc, #0]\n", \ - REGISTER_PREFIX, REGISTER_PREFIX); \ - fprintf ((FILE), "\t.word\t0\n"); \ - fprintf ((FILE), "\t.word\t0\n"); \ + fprintf ((FILE), "\tldr\t%s%s, [%s%s, #0]\n", \ + REGISTER_PREFIX, reg_names[STATIC_CHAIN_REGNUM], \ + REGISTER_PREFIX, reg_names[PC_REGNUM]); \ + fprintf ((FILE), "\tldr\t%s%s, [%s%s, #0]\n", \ + REGISTER_PREFIX, reg_names[PC_REGNUM], \ + REGISTER_PREFIX, reg_names[PC_REGNUM]); \ + ASM_OUTPUT_INT ((FILE), const0_rtx); \ + ASM_OUTPUT_INT ((FILE), const0_rtx); \ } /* Length in units of the trampoline for entering a nested function. */ |