2001-09-24 John David Anglin <dave@hiauly1.hia.nrc.ca>
+ * som.h (ASM_OUTPUT_EXTERNAL): Improve formatting.
+ (ASM_OUTPUT_EXTERNAL_LIBCALL): Only generate a .IMPORT statement for
+ the libcall if there isn't a referenced identifier for the symbol.
+
+2001-09-24 John David Anglin <dave@hiauly1.hia.nrc.ca>
+
* pa.h (TRAMPOLINE_TEMPLATE): Add two words to the template for
non 64-bit machines. Use these as a plabel for the trampoline.
(TRAMPOLINE_SIZE): Adjust size for new words.
#define ASM_OUTPUT_EXTERNAL(FILE, DECL, NAME) \
do { int save_referenced; \
save_referenced = TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (DECL)); \
- fputs ("\t.IMPORT ", FILE); \
- assemble_name (FILE, NAME); \
+ fputs ("\t.IMPORT ", FILE); \
+ assemble_name (FILE, NAME); \
if (FUNCTION_NAME_P (NAME)) \
fputs (",CODE\n", FILE); \
else \
Also note not all libcall names are passed to ENCODE_SECTION_INFO
(__main for example). To make sure all libcall names have section
- info recorded in them, we do it here. */
+ info recorded in them, we do it here. We must also ensure that
+ we don't import a libcall that has been previously exported since
+ the HP assembler may change an ENTRY symbol to a CODE symbol. */
#define ASM_OUTPUT_EXTERNAL_LIBCALL(FILE, RTL) \
- do { fputs ("\t.IMPORT ", FILE); \
+ do { const char *name; \
+ tree id; \
+ \
if (!function_label_operand (RTL, VOIDmode)) \
hppa_encode_label (RTL); \
- assemble_name (FILE, XSTR ((RTL), 0)); \
- fputs (",CODE\n", FILE); \
+ \
+ STRIP_NAME_ENCODING (name, XSTR ((RTL), 0)); \
+ id = maybe_get_identifier (name); \
+ if (! id || ! TREE_SYMBOL_REFERENCED (id)) \
+ { \
+ fputs ("\t.IMPORT ", FILE); \
+ assemble_name (FILE, XSTR ((RTL), 0)); \
+ fputs (",CODE\n", FILE); \
+ } \
} while (0)
#define ASM_FILE_END(FILE) output_deferred_plabels (FILE)