defaults.h revision 51885
118334Speter/* Definitions of various defaults for how to do assembler output 218334Speter (most of which are designed to be appropriate for GAS or for 318334Speter some BSD assembler). 451885Sobrien Copyright (C) 1992, 1996 Free Software Foundation, Inc. 551885Sobrien Contributed by Ron Guilmette (rfg@monkeys.com) 618334Speter 718334SpeterThis file is part of GNU CC. 818334Speter 918334SpeterGNU CC is free software; you can redistribute it and/or modify 1018334Speterit under the terms of the GNU General Public License as published by 1118334Speterthe Free Software Foundation; either version 2, or (at your option) 1218334Speterany later version. 1318334Speter 1418334SpeterGNU CC is distributed in the hope that it will be useful, 1518334Speterbut WITHOUT ANY WARRANTY; without even the implied warranty of 1618334SpeterMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1718334SpeterGNU General Public License for more details. 1818334Speter 1918334SpeterYou should have received a copy of the GNU General Public License 2018334Speteralong with GNU CC; see the file COPYING. If not, write to 2118334Speterthe Free Software Foundation, 59 Temple Place - Suite 330, 2218334SpeterBoston, MA 02111-1307, USA. */ 2318334Speter 2418334Speter/* Store in OUTPUT a string (made with alloca) containing 2518334Speter an assembler-name for a local static variable or function named NAME. 2618334Speter LABELNO is an integer which is different for each call. */ 2718334Speter 2818334Speter#ifndef ASM_FORMAT_PRIVATE_NAME 2918334Speter#define ASM_FORMAT_PRIVATE_NAME(OUTPUT, NAME, LABELNO) \ 3018334Speter do { \ 3118334Speter int len = strlen (NAME); \ 3218334Speter char *temp = (char *) alloca (len + 3); \ 3318334Speter temp[0] = 'L'; \ 3418334Speter strcpy (&temp[1], (NAME)); \ 3518334Speter temp[len + 1] = '.'; \ 3618334Speter temp[len + 2] = 0; \ 3718334Speter (OUTPUT) = (char *) alloca (strlen (NAME) + 11); \ 3818334Speter ASM_GENERATE_INTERNAL_LABEL (OUTPUT, temp, LABELNO); \ 3918334Speter } while (0) 4018334Speter#endif 4118334Speter 4218334Speter#ifndef ASM_STABD_OP 4318334Speter#define ASM_STABD_OP ".stabd" 4418334Speter#endif 4518334Speter 4618334Speter/* This is how to output an element of a case-vector that is absolute. 4718334Speter Some targets don't use this, but we have to define it anyway. */ 4818334Speter 4918334Speter#ifndef ASM_OUTPUT_ADDR_VEC_ELT 5018334Speter#define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \ 5118334Speterdo { fprintf (FILE, "\t%s\t", ASM_LONG); \ 5218334Speter ASM_OUTPUT_INTERNAL_LABEL (FILE, "L", (VALUE)); \ 5318334Speter fputc ('\n', FILE); \ 5418334Speter } while (0) 5518334Speter#endif 5618334Speter 5718334Speter/* choose a reasonable default for ASM_OUTPUT_ASCII. */ 5818334Speter 5918334Speter#ifndef ASM_OUTPUT_ASCII 6018334Speter#define ASM_OUTPUT_ASCII(MYFILE, MYSTRING, MYLENGTH) \ 6118334Speter do { \ 6218334Speter FILE *_hide_asm_out_file = (MYFILE); \ 6318334Speter unsigned char *_hide_p = (unsigned char *) (MYSTRING); \ 6418334Speter int _hide_thissize = (MYLENGTH); \ 6518334Speter { \ 6618334Speter FILE *asm_out_file = _hide_asm_out_file; \ 6718334Speter unsigned char *p = _hide_p; \ 6818334Speter int thissize = _hide_thissize; \ 6918334Speter int i; \ 7018334Speter fprintf (asm_out_file, "\t.ascii \""); \ 7118334Speter \ 7218334Speter for (i = 0; i < thissize; i++) \ 7318334Speter { \ 7418334Speter register int c = p[i]; \ 7518334Speter if (c == '\"' || c == '\\') \ 7618334Speter putc ('\\', asm_out_file); \ 7718334Speter if (c >= ' ' && c < 0177) \ 7818334Speter putc (c, asm_out_file); \ 7918334Speter else \ 8018334Speter { \ 8118334Speter fprintf (asm_out_file, "\\%o", c); \ 8218334Speter /* After an octal-escape, if a digit follows, \ 8318334Speter terminate one string constant and start another. \ 8418334Speter The Vax assembler fails to stop reading the escape \ 8518334Speter after three digits, so this is the only way we \ 8618334Speter can get it to parse the data properly. */ \ 8718334Speter if (i < thissize - 1 \ 8818334Speter && p[i + 1] >= '0' && p[i + 1] <= '9') \ 8918334Speter fprintf (asm_out_file, "\"\n\t.ascii \""); \ 9018334Speter } \ 9118334Speter } \ 9218334Speter fprintf (asm_out_file, "\"\n"); \ 9318334Speter } \ 9418334Speter } \ 9518334Speter while (0) 9618334Speter#endif 9718334Speter 9818334Speter#ifndef ASM_IDENTIFY_GCC 9918334Speter /* Default the definition, only if ASM_IDENTIFY_GCC is not set, 10018334Speter because if it is set, we might not want ASM_IDENTIFY_LANGUAGE 10118334Speter outputting labels, if we do want it to, then it must be defined 10218334Speter in the tm.h file. */ 10318334Speter#ifndef ASM_IDENTIFY_LANGUAGE 10418334Speter#define ASM_IDENTIFY_LANGUAGE(FILE) output_lang_identify (FILE); 10518334Speter#endif 10618334Speter#endif 10718334Speter 10818334Speter/* This is how we tell the assembler to equate two values. */ 10918334Speter#ifdef SET_ASM_OP 11018334Speter#ifndef ASM_OUTPUT_DEF 11118334Speter#define ASM_OUTPUT_DEF(FILE,LABEL1,LABEL2) \ 11218334Speter do { fprintf ((FILE), "\t%s\t", SET_ASM_OP); \ 11318334Speter assemble_name (FILE, LABEL1); \ 11418334Speter fprintf (FILE, ","); \ 11518334Speter assemble_name (FILE, LABEL2); \ 11618334Speter fprintf (FILE, "\n"); \ 11718334Speter } while (0) 11818334Speter#endif 11918334Speter#endif 12018334Speter 12151885Sobrien/* This is how to output a reference to a user-level label named NAME. */ 12251885Sobrien 12351885Sobrien#ifndef ASM_OUTPUT_LABELREF 12451885Sobrien#define ASM_OUTPUT_LABELREF(FILE,NAME) \ 12551885Sobrien do { fputs (USER_LABEL_PREFIX, FILE); fputs (NAME, FILE); } while (0) 12651885Sobrien#endif 12751885Sobrien 12818334Speter/* This determines whether or not we support weak symbols. */ 12918334Speter#ifndef SUPPORTS_WEAK 13018334Speter#ifdef ASM_WEAKEN_LABEL 13118334Speter#define SUPPORTS_WEAK 1 13218334Speter#else 13318334Speter#define SUPPORTS_WEAK 0 13418334Speter#endif 13518334Speter#endif 13651885Sobrien 13751885Sobrien/* If we have a definition of INCOMING_RETURN_ADDR_RTX, assume that 13851885Sobrien the rest of the DWARF 2 frame unwind support is also provided. */ 13951885Sobrien#if !defined (DWARF2_UNWIND_INFO) && defined (INCOMING_RETURN_ADDR_RTX) 14051885Sobrien#define DWARF2_UNWIND_INFO 1 14151885Sobrien#endif 142