diff options
author | Mark Mitchell <mark@markmitchell.com> | 1998-07-30 12:30:30 +0000 |
---|---|---|
committer | Mark Mitchell <mmitchel@gcc.gnu.org> | 1998-07-30 12:30:30 +0000 |
commit | b170964afd32aec3de313c4f1e4c64c3f14dbeb2 (patch) | |
tree | 304a4a5b0923ec3d13e6852847a161df2f910e2e /gcc/dwarf2out.c | |
parent | 07417085a14349cde788c5cc10663815da40c26f (diff) | |
download | gcc-b170964afd32aec3de313c4f1e4c64c3f14dbeb2.zip gcc-b170964afd32aec3de313c4f1e4c64c3f14dbeb2.tar.gz gcc-b170964afd32aec3de313c4f1e4c64c3f14dbeb2.tar.bz2 |
dyn-string.h: New file.
* dyn-string.h: New file.
* dyn-string.c: Likewise.
* Makefile.in (OBJS): Add dyn-string.o.
(dwarf2out.o): Add dyn-string.h dependency.
(dyn-string.o): List dependencies.
* dwarf2out.c: Include dyn-string.h.
(ASM_NAME_TO_STRING): Use dyn_string_append, rather than strcpy.
(addr_const_to_string): Take a dyn_string_t, not a char* as a
prototype. Use dyn_string_append rather than strcat, throughout.
(addr_to_string): Use dyn_string_t.
From-SVN: r21496
Diffstat (limited to 'gcc/dwarf2out.c')
-rw-r--r-- | gcc/dwarf2out.c | 78 |
1 files changed, 35 insertions, 43 deletions
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 51d69a8..26283cb 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -42,6 +42,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "dwarf2.h" #include "dwarf2out.h" #include "toplev.h" +#include "dyn-string.h" /* We cannot use <assert.h> in GCC source, since that would include GCC's assert.h, which may not be compatible with the host compiler. */ @@ -2374,7 +2375,7 @@ static tree dwarf_last_decl; /* Forward declarations for functions defined in this file. */ -static void addr_const_to_string PROTO((char *, rtx)); +static void addr_const_to_string PROTO((dyn_string_t, rtx)); static char *addr_to_string PROTO((rtx)); static int is_pseudo_reg PROTO((rtx)); static tree type_main_variant PROTO((tree)); @@ -2639,9 +2640,9 @@ static char text_end_label[MAX_ARTIFICIAL_LABEL_BYTES]; #define ASM_NAME_TO_STRING(STR, NAME) \ do { \ if ((NAME)[0] == '*') \ - strcpy (STR, NAME+1); \ + dyn_string_append (STR, NAME + 1); \ else \ - strcpy (STR, NAME); \ + dyn_string_append (STR, NAME); \ } \ while (0) #endif @@ -2654,50 +2655,44 @@ static char text_end_label[MAX_ARTIFICIAL_LABEL_BYTES]; static void addr_const_to_string (str, x) - char *str; + dyn_string_t str; rtx x; { char buf1[256]; - char buf2[256]; restart: - str[0] = '\0'; switch (GET_CODE (x)) { case PC: if (flag_pic) - strcat (str, ","); + dyn_string_append (str, ","); else abort (); break; case SYMBOL_REF: - ASM_NAME_TO_STRING (buf1, XSTR (x, 0)); - strcat (str, buf1); + ASM_NAME_TO_STRING (str, XSTR (x, 0)); break; case LABEL_REF: ASM_GENERATE_INTERNAL_LABEL (buf1, "L", CODE_LABEL_NUMBER (XEXP (x, 0))); - ASM_NAME_TO_STRING (buf2, buf1); - strcat (str, buf2); + ASM_NAME_TO_STRING (str, buf1); break; case CODE_LABEL: ASM_GENERATE_INTERNAL_LABEL (buf1, "L", CODE_LABEL_NUMBER (x)); - ASM_NAME_TO_STRING (buf2, buf1); - strcat (str, buf2); + ASM_NAME_TO_STRING (str, buf1); break; case CONST_INT: sprintf (buf1, HOST_WIDE_INT_PRINT_DEC, INTVAL (x)); - strcat (str, buf1); + dyn_string_append (str, buf1); break; case CONST: /* This used to output parentheses around the expression, but that does not work on the 386 (either ATT or BSD assembler). */ - addr_const_to_string (buf1, XEXP (x, 0)); - strcat (str, buf1); + addr_const_to_string (str, XEXP (x, 0)); break; case CONST_DOUBLE: @@ -2712,7 +2707,7 @@ restart: else sprintf (buf1, HOST_WIDE_INT_PRINT_DEC, CONST_DOUBLE_LOW (x)); - strcat (str, buf1); + dyn_string_append (str, buf1); } else /* We can't handle floating point constants; PRINT_OPERAND must @@ -2724,23 +2719,19 @@ restart: /* Some assemblers need integer constants to appear last (eg masm). */ if (GET_CODE (XEXP (x, 0)) == CONST_INT) { - addr_const_to_string (buf1, XEXP (x, 1)); - strcat (str, buf1); + addr_const_to_string (str, XEXP (x, 1)); if (INTVAL (XEXP (x, 0)) >= 0) - strcat (str, "+"); + dyn_string_append (str, "+"); - addr_const_to_string (buf1, XEXP (x, 0)); - strcat (str, buf1); + addr_const_to_string (str, XEXP (x, 0)); } else { - addr_const_to_string (buf1, XEXP (x, 0)); - strcat (str, buf1); + addr_const_to_string (str, XEXP (x, 0)); if (INTVAL (XEXP (x, 1)) >= 0) - strcat (str, "+"); + dyn_string_append (str, "+"); - addr_const_to_string (buf1, XEXP (x, 1)); - strcat (str, buf1); + addr_const_to_string (str, XEXP (x, 1)); } break; @@ -2751,28 +2742,22 @@ restart: if (GET_CODE (x) != MINUS) goto restart; - addr_const_to_string (buf1, XEXP (x, 0)); - strcat (str, buf1); - strcat (str, "-"); + addr_const_to_string (str, XEXP (x, 0)); + dyn_string_append (str, "-"); if (GET_CODE (XEXP (x, 1)) == CONST_INT && INTVAL (XEXP (x, 1)) < 0) { - strcat (str, ASM_OPEN_PAREN); - addr_const_to_string (buf1, XEXP (x, 1)); - strcat (str, buf1); - strcat (str, ASM_CLOSE_PAREN); + dyn_string_append (str, ASM_OPEN_PAREN); + addr_const_to_string (str, XEXP (x, 1)); + dyn_string_append (str, ASM_CLOSE_PAREN); } else - { - addr_const_to_string (buf1, XEXP (x, 1)); - strcat (str, buf1); - } + addr_const_to_string (str, XEXP (x, 1)); break; case ZERO_EXTEND: case SIGN_EXTEND: - addr_const_to_string (buf1, XEXP (x, 0)); - strcat (str, buf1); + addr_const_to_string (str, XEXP (x, 0)); break; default: @@ -2787,9 +2772,16 @@ static char * addr_to_string (x) rtx x; { - char buf[1024]; - addr_const_to_string (buf, x); - return xstrdup (buf); + dyn_string_t ds = dyn_string_new (256); + char *s; + + addr_const_to_string (ds, x); + + /* Return the dynamically allocated string, but free the + dyn_string_t itself. */ + s = ds->s; + free (ds); + return s; } /* Test if rtl node points to a pseudo register. */ |