pa.c (hppa_encode_label): Correct size of alloca buffer so we don't overrun it.
authorAlan Modra <alan@linuxcare.com.au>
Thu, 1 Feb 2001 01:11:28 +0000 (01:11 +0000)
committerJeff Law <law@gcc.gnu.org>
Thu, 1 Feb 2001 01:11:28 +0000 (18:11 -0700)
        * pa.c (hppa_encode_label): Correct size of alloca buffer
        so we don't overrun it.  Correct leading `*' case.
        * pa.h (STRIP_NAME_ENCODING): Simplify now that we don't
        need to handle `*@'.
        (FUNCTION_NAME_P): Likewise.

From-SVN: r39385

gcc/ChangeLog
gcc/config/pa/pa.c
gcc/config/pa/pa.h

index d8c0c5afe4c7c904ba7e5ced0f62530245fddfe4..f9c693afdc75aeceafda6274a63db2d6af93a9d9 100644 (file)
@@ -1,3 +1,11 @@
+2001-01-31  Alan Modra <alan@linuxcare.com.au>
+
+       * pa.c (hppa_encode_label): Correct size of alloca buffer
+       so we don't overrun it.  Correct leading `*' case.
+       * pa.h (STRIP_NAME_ENCODING): Simplify now that we don't
+       need to handle `*@'.
+       (FUNCTION_NAME_P): Likewise.
+
 2001-01-31  Richard Henderson  <rth@redhat.com>
 
        * config.gcc (alpha-osf5): Use float-i128.h.
index aad9345ed3591335f17f49f7b7ab82f30387f53a..738afbeb34445bb3d81c0389e42a81141d225765 100644 (file)
@@ -5965,18 +5965,17 @@ hppa_encode_label (sym)
      rtx sym;
 {
   const char *str = XSTR (sym, 0);
-  int len = strlen (str);
-  char *newstr = alloca (len + 1);
+  int len = strlen (str) + 1;
+  char *newstr, *p;
 
+  p = newstr = alloca (len + 1);
   if (str[0] == '*')
-    *newstr++ = *str++;
-  strcpy (newstr + 1, str);
-  *newstr = '@';
-
-  /* Prepending '@' increases the length of the string.  That's important
-     to note since we're going to allocate persistent storage for the
-     new string.  */
-  len++;
+    {
+      str++;
+      len--;
+    }
+  *p++ = '@';
+  strcpy (p, str);
 
   XSTR (sym,0) = ggc_alloc_string (newstr, len);
 }
index 898008e7305c87c5621df2d102dd1554dcc8932c..a5c7a32d955ae93bb889e595cda409b5efc8bcb6 100644 (file)
@@ -1488,8 +1488,7 @@ do {                                                                      \
    || (TREE_CODE_CLASS (TREE_CODE (DECL)) == 'c'                       \
        && !(TREE_CODE (DECL) == STRING_CST && flag_writable_strings)))
 
-#define FUNCTION_NAME_P(NAME) \
-(*(NAME) == '@' || (*(NAME) == '*' && *((NAME) + 1) == '@'))
+#define FUNCTION_NAME_P(NAME)  (*(NAME) == '@')
 
 #define ENCODE_SECTION_INFO(DECL)\
 do                                                     \
@@ -1511,9 +1510,8 @@ while (0)
    This is sort of inverse to ENCODE_SECTION_INFO.  */
 
 #define STRIP_NAME_ENCODING(VAR,SYMBOL_NAME)   \
-  (VAR) = ((SYMBOL_NAME)  + ((SYMBOL_NAME)[0] == '*' ? \
-                            1 + (SYMBOL_NAME)[1] == '@'\
-                            : (SYMBOL_NAME)[0] == '@'))
+  (VAR) = ((SYMBOL_NAME)                       \
+          + (*(SYMBOL_NAME) == '*' || *(SYMBOL_NAME) == '@'))
 
 /* Specify the machine mode that this machine uses
    for the index in the tablejump instruction.  */