From 34fc0dd7c19cdf0bac107f92b6f2002b751e96bd Mon Sep 17 00:00:00 2001 From: law Date: Sun, 21 May 1995 05:05:25 +0000 Subject: [PATCH] * pa.c (hppa_encode_label): New variable "permanent" to where/how memory is allocated for the new label. All callers changed. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@9759 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/config/pa/pa.c | 17 ++++++++++++++--- gcc/config/pa/pa.h | 4 ++-- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c index be95729..b402396 100644 --- a/gcc/config/pa/pa.c +++ b/gcc/config/pa/pa.c @@ -4247,15 +4247,26 @@ extern struct obstack *saveable_obstack; /* In HPUX 8.0's shared library scheme, special relocations are needed for function labels if they might be passed to a function in a shared library (because shared libraries don't live in code - space), and special magic is needed to construct their address. */ + space), and special magic is needed to construct their address. + + For reasons too disgusting to describe storage for the new name + is allocated either on the saveable_obstack (released at function + exit) or via malloc for things that can never change (libcall names + for example). */ void -hppa_encode_label (sym) +hppa_encode_label (sym, permanent) rtx sym; + int permanent; { char *str = XSTR (sym, 0); int len = strlen (str); - char *newstr = obstack_alloc (saveable_obstack, len + 2) ; + char *newstr; + + if (permanent) + newstr = malloc (len + 2); + else + newstr = obstack_alloc (saveable_obstack, len + 2); if (str[0] == '*') *newstr++ = *str++; diff --git a/gcc/config/pa/pa.h b/gcc/config/pa/pa.h index 8ab2021..62a1ae8 100644 --- a/gcc/config/pa/pa.h +++ b/gcc/config/pa/pa.h @@ -1511,7 +1511,7 @@ do \ _rtl = TREE_CST_RTL (DECL); \ SYMBOL_REF_FLAG (XEXP (_rtl, 0)) = 1; \ if (TREE_CODE (DECL) == FUNCTION_DECL) \ - hppa_encode_label (XEXP (DECL_RTL (DECL), 0));\ + hppa_encode_label (XEXP (DECL_RTL (DECL), 0), 0);\ } \ } \ while (0) @@ -1897,7 +1897,7 @@ readonly_data () \ #define ASM_OUTPUT_EXTERNAL_LIBCALL(FILE, RTL) \ do { fputs ("\t.IMPORT ", FILE); \ if (!function_label_operand (RTL, VOIDmode)) \ - hppa_encode_label (RTL); \ + hppa_encode_label (RTL, 1); \ assemble_name (FILE, XSTR ((RTL), 0)); \ fputs (",CODE\n", FILE); \ } while (0) -- 2.7.4