freebsd.h revision 95810
134229Speter/* Definitions for Intel 386 running FreeBSD with either a.out or ELF format 295349Sobrien Copyright (C) 1996, 2000, 2002 Free Software Foundation, Inc. 334229Speter Contributed by Eric Youngdale. 434229Speter Modified for stabs-in-ELF by H.J. Lu. 551408Sobrien Adapted from GNU/Linux version by John Polstra. 634229Speter Added support for generating "old a.out gas" on the fly by Peter Wemm. 752112Sobrien Continued development by David O'Brien <obrien@freebsd.org> 818334Speter 918334SpeterThis file is part of GNU CC. 1018334Speter 1118334SpeterGNU CC is free software; you can redistribute it and/or modify 1218334Speterit under the terms of the GNU General Public License as published by 1318334Speterthe Free Software Foundation; either version 2, or (at your option) 1418334Speterany later version. 1518334Speter 1618334SpeterGNU CC is distributed in the hope that it will be useful, 1718334Speterbut WITHOUT ANY WARRANTY; without even the implied warranty of 1818334SpeterMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1918334SpeterGNU General Public License for more details. 2018334Speter 2118334SpeterYou should have received a copy of the GNU General Public License 2218334Speteralong with GNU CC; see the file COPYING. If not, write to 2318334Speterthe Free Software Foundation, 59 Temple Place - Suite 330, 2418334SpeterBoston, MA 02111-1307, USA. */ 2518334Speter 2651408Sobrien/* $FreeBSD: head/contrib/gcc/config/i386/freebsd.h 95810 2002-04-30 17:15:01Z obrien $ */ 2718334Speter 2895810Sobrien#undef TARGET_VERSION 2995810Sobrien#define TARGET_VERSION fprintf (stderr, " (i386 FreeBSD/ELF)"); 3051408Sobrien 3158478Sobrien#undef CC1_SPEC 3295810Sobrien#define CC1_SPEC "%(cc1_cpu) %{profile:-p} \ 3358478Sobrien %{gline:%{!g:%{!g0:%{!g1:%{!g2: -g1}}}}} \ 3458478Sobrien %{maout: %{!mno-underscores: %{!munderscores: -munderscores }}}" 3551408Sobrien 3658478Sobrien#undef ASM_SPEC 3758478Sobrien#define ASM_SPEC "%{v*: -v} %{maout: %{fpic:-k} %{fPIC:-k}}" 3858478Sobrien 3995349Sobrien#undef ASM_FINAL_SPEC 4058478Sobrien#define ASM_FINAL_SPEC "%|" 4158478Sobrien 4258478Sobrien/* Provide a LINK_SPEC appropriate for FreeBSD. Here we provide support 4358478Sobrien for the special GCC options -static and -shared, which allow us to 4458478Sobrien link things in one of these three modes by applying the appropriate 4558478Sobrien combinations of options at link-time. We like to support here for 4658478Sobrien as many of the other GNU linker options as possible. But I don't 4758478Sobrien have the time to search for those flags. I am sure how to add 4858478Sobrien support for -soname shared_object_name. H.J. 4958478Sobrien 5058478Sobrien When the -shared link option is used a final link is not being 5158478Sobrien done. */ 5258478Sobrien 5358478Sobrien#undef LINK_SPEC 5458478Sobrien#define LINK_SPEC "\ 5558478Sobrien %{p:%e`-p' not supported; use `-pg' and gprof(1)} \ 5658478Sobrien %{maout: %{shared:-Bshareable} \ 5758478Sobrien %{!shared:%{!nostdlib:%{!r:%{!e*:-e start}}} -dc -dp %{static:-Bstatic} \ 5858478Sobrien %{pg:-Bstatic} %{Z}} \ 5958478Sobrien %{assert*} %{R*}} \ 6058478Sobrien %{!maout: \ 6158478Sobrien %{Wl,*:%*} \ 6295349Sobrien %{v:-V} \ 6358478Sobrien %{assert*} %{R*} %{rpath*} %{defsym*} \ 6458478Sobrien %{shared:-Bshareable %{h*} %{soname*}} \ 6558478Sobrien %{!shared: \ 6658478Sobrien %{!static: \ 6758478Sobrien %{rdynamic: -export-dynamic} \ 6858478Sobrien %{!dynamic-linker: -dynamic-linker /usr/libexec/ld-elf.so.1}} \ 6995349Sobrien %{static:-Bstatic}} \ 7095349Sobrien %{symbolic:-Bsymbolic}}" 7158478Sobrien 7295349Sobrien/* Provide a STARTFILE_SPEC appropriate for FreeBSD. Here we add the magical 7395349Sobrien crtbegin.o file (see crtstuff.c) which provides part of the support for 7495349Sobrien getting C++ file-scope static object constructed before entering `main'. */ 7595349Sobrien 7658478Sobrien#undef STARTFILE_SPEC 7758478Sobrien#define STARTFILE_SPEC "\ 7858478Sobrien %{maout: %{shared:c++rt0.o%s} \ 7958478Sobrien %{!shared: \ 8058478Sobrien %{pg:gcrt0.o%s}%{!pg: \ 8158478Sobrien %{static:scrt0.o%s} \ 8258478Sobrien %{!static:crt0.o%s}}}} \ 8358478Sobrien %{!maout: \ 8458478Sobrien %{!shared: \ 8558478Sobrien %{pg:gcrt1.o%s} \ 8658478Sobrien %{!pg: \ 8758478Sobrien %{p:gcrt1.o%s} \ 8858478Sobrien %{!p:crt1.o%s}}} \ 8995349Sobrien crti.o%s \ 9095349Sobrien %{!shared:crtbegin.o%s} \ 9195349Sobrien %{shared:crtbeginS.o%s}}" 9258478Sobrien 9358478Sobrien/* Provide an ENDFILE_SPEC appropriate for FreeBSD/i386. Here we tack on our 9495349Sobrien own magical crtend.o file (see crtstuff.c) which provides part of the 9558478Sobrien support for getting C++ file-scope static object constructed before 9658478Sobrien entering `main', followed by the normal "finalizer" file, `crtn.o'. */ 9758478Sobrien 9858478Sobrien#undef ENDFILE_SPEC 9958478Sobrien#define ENDFILE_SPEC "\ 10058478Sobrien %{!maout: \ 10158478Sobrien %{!shared:crtend.o%s} \ 10258478Sobrien %{shared:crtendS.o%s} crtn.o%s}" 10358478Sobrien 10458478Sobrien 10558478Sobrien/************************[ Target stuff ]***********************************/ 10658478Sobrien 10795349Sobrien/* Define the actual types of some ANSI-mandated types. 10858478Sobrien Needs to agree with <machine/ansi.h>. GCC defaults come from c-decl.c, 10958478Sobrien c-common.c, and config/<arch>/<arch>.h. */ 11058478Sobrien 11195349Sobrien#undef SIZE_TYPE 11258478Sobrien#define SIZE_TYPE "unsigned int" 11395349Sobrien 11495349Sobrien#undef PTRDIFF_TYPE 11558478Sobrien#define PTRDIFF_TYPE "int" 11658478Sobrien 11795349Sobrien#undef WCHAR_TYPE_SIZE 11895349Sobrien#define WCHAR_TYPE_SIZE BITS_PER_WORD 11995349Sobrien 12058478Sobrien#undef TARGET_VERSION 12158478Sobrien#define TARGET_VERSION fprintf (stderr, " (i386 FreeBSD/ELF)"); 12258478Sobrien 12334229Speter#define MASK_PROFILER_EPILOGUE 010000000000 12434229Speter#define MASK_AOUT 004000000000 /* a.out not elf */ 12534229Speter#define MASK_UNDERSCORES 002000000000 /* use leading _ */ 12618349Speter 12734229Speter#define TARGET_PROFILER_EPILOGUE (target_flags & MASK_PROFILER_EPILOGUE) 12834229Speter#define TARGET_AOUT (target_flags & MASK_AOUT) 12934229Speter#define TARGET_ELF ((target_flags & MASK_AOUT) == 0) 13034229Speter#define TARGET_UNDERSCORES ((target_flags & MASK_UNDERSCORES) != 0) 13118349Speter 13234229Speter#undef SUBTARGET_SWITCHES 13352112Sobrien#define SUBTARGET_SWITCHES \ 13468601Sobrien { "profiler-epilogue", MASK_PROFILER_EPILOGUE, "Function profiler epilogue"}, \ 13568601Sobrien { "no-profiler-epilogue", -MASK_PROFILER_EPILOGUE, "No function profiler epilogue"}, \ 13668601Sobrien { "aout", MASK_AOUT, "Generate an a.out (vs. ELF) binary"}, \ 13768601Sobrien { "no-aout", -MASK_AOUT, "Do not generate an a.out binary"}, \ 13868601Sobrien { "underscores", MASK_UNDERSCORES, "Add leading underscores to symbols"}, \ 13968601Sobrien { "no-underscores", -MASK_UNDERSCORES, "Do not add leading underscores to symbols"}, 14018349Speter 14158478Sobrien/* This goes away when the math emulator is fixed. */ 14295810Sobrien#undef TARGET_SUBTARGET_DEFAULT 14395810Sobrien#define TARGET_SUBTARGET_DEFAULT \ 14458478Sobrien (MASK_80387 | MASK_IEEE_FP | MASK_FLOAT_RETURNS | MASK_NO_FANCY_MATH_387) 14558478Sobrien 14695349Sobrien/* Don't default to pcc-struct-return, we want to retain compatibility with 14795349Sobrien older gcc versions AND pcc-struct-return is nonreentrant. 14895349Sobrien (even though the SVR4 ABI for the i386 says that records and unions are 14995349Sobrien returned in memory). */ 15018349Speter 15195349Sobrien#undef DEFAULT_PCC_STRUCT_RETURN 15295349Sobrien#define DEFAULT_PCC_STRUCT_RETURN 0 15395349Sobrien 15458478Sobrien/* The a.out tools do not support "linkonce" sections. */ 15558478Sobrien#undef SUPPORTS_ONE_ONLY 15658478Sobrien#define SUPPORTS_ONE_ONLY TARGET_ELF 15718349Speter 15895349Sobrien/* Prefix for internally generated assembler labels. If we aren't using 15995349Sobrien underscores, we are using prefix `.'s to identify labels that should 16095349Sobrien be ignored, as in `i386/gas.h' --karl@cs.umb.edu */ 16195349Sobrien#undef LPREFIX 16295349Sobrien#define LPREFIX ((TARGET_UNDERSCORES) ? "L" : ".L") 16318349Speter 16458478Sobrien/* supply our own hook for calling __main() from main() */ 16558478Sobrien#undef INVOKE__main 16658478Sobrien#define INVOKE__main 16758478Sobrien#undef GEN_CALL__MAIN 16858478Sobrien#define GEN_CALL__MAIN \ 16958478Sobrien do { \ 17058478Sobrien if (!(TARGET_ELF)) \ 17158478Sobrien emit_library_call (gen_rtx (SYMBOL_REF, Pmode, NAME__MAIN), 0, \ 17258478Sobrien VOIDmode, 0); \ 17358478Sobrien } while (0) 17458478Sobrien 17558478Sobrien/* Tell final.c that we don't need a label passed to mcount. */ 17695810Sobrien#define NO_PROFILE_COUNTERS 1 17758478Sobrien 17858478Sobrien/* Output assembler code to FILE to begin profiling of the current function. 17958478Sobrien LABELNO is an optional label. */ 18058478Sobrien 18158478Sobrien#undef FUNCTION_PROFILER 18258478Sobrien#define FUNCTION_PROFILER(FILE, LABELNO) \ 18358478Sobrien do { \ 18458478Sobrien char *_name = TARGET_AOUT ? "mcount" : ".mcount"; \ 18558478Sobrien if (flag_pic) \ 18658478Sobrien fprintf ((FILE), "\tcall *%s@GOT(%%ebx)\n", _name); \ 18758478Sobrien else \ 18858478Sobrien fprintf ((FILE), "\tcall %s\n", _name); \ 18958478Sobrien } while (0) 19058478Sobrien 19158478Sobrien/* Output assembler code to FILE to end profiling of the current function. */ 19258478Sobrien 19395810Sobrien#undef FUNCTION_PROFILER_EPILOGUE /* BDE will need to fix this. */ 19458478Sobrien 19558478Sobrien 19658478Sobrien/************************[ Assembler stuff ]********************************/ 19758478Sobrien 19895348Sobrien/* Override the default comment-starter of "/" from unix.h. */ 19995348Sobrien#undef ASM_COMMENT_START 20095348Sobrien#define ASM_COMMENT_START "#" 20195348Sobrien 20258478Sobrien#undef ASM_APP_ON 20358478Sobrien#define ASM_APP_ON "#APP\n" 20458478Sobrien 20558478Sobrien#undef ASM_APP_OFF 20695349Sobrien#define ASM_APP_OFF "#NO_APP\n" 20758478Sobrien 20834229Speter/* This is how to store into the string BUF 20995349Sobrien the symbol_ref name of an internal numbered label where 21095349Sobrien PREFIX is the class of label and NUM is the number within the class. 21134229Speter This is suitable for output with `assemble_name'. */ 21234229Speter#undef ASM_GENERATE_INTERNAL_LABEL 21395810Sobrien#define ASM_GENERATE_INTERNAL_LABEL(LABEL, PREFIX, NUM) \ 21495810Sobrien sprintf ((LABEL), "*%s%s%u", (TARGET_UNDERSCORES) ? "" : ".", \ 21595810Sobrien (PREFIX), (unsigned) (NUM)) 21618349Speter 21734229Speter/* This is how to output an internal numbered label where 21858478Sobrien PREFIX is the class of label and NUM is the number within the class. 21958478Sobrien For most svr4/ELF systems, the convention is that any symbol which begins 22058478Sobrien with a period is not put into the linker symbol table by the assembler. */ 22134229Speter#undef ASM_OUTPUT_INTERNAL_LABEL 22295810Sobrien#define ASM_OUTPUT_INTERNAL_LABEL(FILE, PREFIX, NUM) \ 22395810Sobrien fprintf ((FILE), "%s%s%u:\n", (TARGET_UNDERSCORES) ? "" : ".", \ 22495810Sobrien (PREFIX), (unsigned) (NUM)) 22518334Speter 22658478Sobrien/* This is how to output a reference to a user-level label named NAME. */ 22758478Sobrien#undef ASM_OUTPUT_LABELREF 22858478Sobrien#define ASM_OUTPUT_LABELREF(FILE, NAME) \ 22958478Sobrien do { \ 23058478Sobrien char *_name = (NAME); \ 23158478Sobrien /* Hack to avoid writing lots of rtl in \ 23258478Sobrien FUNCTION_PROFILER_EPILOGUE (). */ \ 23358478Sobrien if (*_name == '.' && strcmp(_name + 1, "mexitcount") == 0) \ 23458478Sobrien { \ 23558478Sobrien if (TARGET_AOUT) \ 23658478Sobrien _name++; \ 23758478Sobrien if (flag_pic) \ 23858478Sobrien fprintf ((FILE), "*%s@GOT(%%ebx)", _name); \ 23958478Sobrien else \ 24058478Sobrien fprintf ((FILE), "%s", _name); \ 24158478Sobrien } \ 24258478Sobrien else \ 24358478Sobrien fprintf (FILE, "%s%s", TARGET_UNDERSCORES ? "_" : "", _name); \ 24458478Sobrien} while (0) 24558478Sobrien 24656810Sobrien/* This is how to hack on the symbol code of certain relcalcitrant 24756810Sobrien symbols to modify their output in output_pic_addr_const (). */ 24856810Sobrien 24995810Sobrien#undef ASM_HACK_SYMBOLREF_CODE /* BDE will need to fix this. */ 25056810Sobrien 25134229Speter/* This is how to output an element of a case-vector that is relative. 25234229Speter This is only used for PIC code. See comments by the `casesi' insn in 25334229Speter i386.md for an explanation of the expression this outputs. */ 25458478Sobrien#undef ASM_OUTPUT_ADDR_DIFF_ELT 25558478Sobrien#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \ 25652112Sobrien fprintf ((FILE), "\t.long _GLOBAL_OFFSET_TABLE_+[.-%s%d]\n", LPREFIX, (VALUE)) 25718349Speter 25858478Sobrien#undef ASM_OUTPUT_ALIGN 25952112Sobrien#define ASM_OUTPUT_ALIGN(FILE, LOG) \ 26051408Sobrien if ((LOG)!=0) { \ 26151408Sobrien if (in_text_section()) \ 26251408Sobrien fprintf ((FILE), "\t.p2align %d,0x90\n", (LOG)); \ 26351408Sobrien else \ 26451408Sobrien fprintf ((FILE), "\t.p2align %d\n", (LOG)); \ 26551408Sobrien } 26618349Speter 26773305Sobrien#undef ASM_OUTPUT_ALIGNED_COMMON 26873305Sobrien#define ASM_OUTPUT_ALIGNED_COMMON(FILE, NAME, SIZE, ALIGN) \ 26973305Sobrien do { \ 27073305Sobrien if (TARGET_ELF) \ 27173305Sobrien { \ 27273305Sobrien fprintf ((FILE), "%s", COMMON_ASM_OP); \ 27373305Sobrien assemble_name ((FILE), (NAME)); \ 27473305Sobrien fprintf ((FILE), ",%u,%u\n", (SIZE), (ALIGN) / BITS_PER_UNIT); \ 27573305Sobrien } \ 27673305Sobrien else \ 27773305Sobrien { \ 27873305Sobrien int rounded = (SIZE); \ 27973305Sobrien if (rounded == 0) rounded = 1; \ 28073305Sobrien rounded += (BIGGEST_ALIGNMENT / BITS_PER_UNIT) - 1; \ 28173305Sobrien rounded = (rounded / (BIGGEST_ALIGNMENT / BITS_PER_UNIT) \ 28273305Sobrien * (BIGGEST_ALIGNMENT / BITS_PER_UNIT)); \ 28373305Sobrien fprintf ((FILE), "%s ", COMMON_ASM_OP); \ 28473305Sobrien assemble_name ((FILE), (NAME)); \ 28573305Sobrien fprintf ((FILE), ",%u\n", (rounded)); \ 28673305Sobrien } \ 28773305Sobrien } while (0) 28873305Sobrien 28973305Sobrien/* This says how to output assembler code to declare an 29073305Sobrien uninitialized internal linkage data object. Under SVR4, 29173305Sobrien the linker seems to want the alignment of data objects 29273305Sobrien to depend on their types. We do exactly that here. */ 29373305Sobrien 29473305Sobrien#undef ASM_OUTPUT_ALIGNED_LOCAL 29573305Sobrien#define ASM_OUTPUT_ALIGNED_LOCAL(FILE, NAME, SIZE, ALIGN) \ 29673305Sobrien do { \ 29773305Sobrien if (TARGET_ELF) \ 29873305Sobrien { \ 29973305Sobrien fprintf ((FILE), "%s", LOCAL_ASM_OP); \ 30073305Sobrien assemble_name ((FILE), (NAME)); \ 30173305Sobrien fprintf ((FILE), "\n"); \ 30273305Sobrien ASM_OUTPUT_ALIGNED_COMMON ((FILE), (NAME), (SIZE), (ALIGN)); \ 30373305Sobrien } \ 30473305Sobrien else \ 30573305Sobrien { \ 30673305Sobrien int rounded = (SIZE); \ 30773305Sobrien if (rounded == 0) rounded = 1; \ 30873305Sobrien rounded += (BIGGEST_ALIGNMENT / BITS_PER_UNIT) - 1; \ 30973305Sobrien rounded = (rounded / (BIGGEST_ALIGNMENT / BITS_PER_UNIT) \ 31073305Sobrien * (BIGGEST_ALIGNMENT / BITS_PER_UNIT)); \ 31173305Sobrien fputs ("\t.lcomm\t", (FILE)); \ 31273305Sobrien assemble_name ((FILE), (NAME)); \ 31373305Sobrien fprintf ((FILE), ",%u\n", (rounded)); \ 31473305Sobrien } \ 31573305Sobrien } while (0) 31673305Sobrien 31773305Sobrien/* How to output some space. The rules are different depending on the 31873305Sobrien object format. */ 31973305Sobrien#undef ASM_OUTPUT_SKIP 32073305Sobrien#define ASM_OUTPUT_SKIP(FILE, SIZE) \ 32173305Sobrien do { \ 32273305Sobrien if (TARGET_ELF) \ 32373305Sobrien { \ 32473305Sobrien fprintf ((FILE), "%s%u\n", SKIP_ASM_OP, (SIZE)); \ 32573305Sobrien } \ 32673305Sobrien else \ 32773305Sobrien { \ 32873305Sobrien fprintf ((FILE), "\t.space\t%u\n", (SIZE)); \ 32973305Sobrien } \ 33073305Sobrien } while (0) 33173305Sobrien 33258478Sobrien#undef ASM_OUTPUT_SOURCE_LINE 33358478Sobrien#define ASM_OUTPUT_SOURCE_LINE(FILE, LINE) \ 33458478Sobrien do { \ 33558478Sobrien static int sym_lineno = 1; \ 33658478Sobrien if (TARGET_ELF) \ 33758478Sobrien { \ 33858478Sobrien fprintf ((FILE), ".stabn 68,0,%d,.LM%d-", (LINE), sym_lineno); \ 33958478Sobrien assemble_name ((FILE), \ 34058478Sobrien XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0)); \ 34158478Sobrien fprintf ((FILE), "\n.LM%d:\n", sym_lineno); \ 34258478Sobrien sym_lineno += 1; \ 34358478Sobrien } \ 34458478Sobrien else \ 34558478Sobrien { \ 34658478Sobrien fprintf ((FILE), "\t%s %d,0,%d\n", ASM_STABD_OP, N_SLINE, \ 34758478Sobrien lineno); \ 34858478Sobrien } \ 34958478Sobrien } while (0) 35018334Speter 35195810Sobrien/* A C statement to output to the stdio stream FILE an assembler 35295810Sobrien command to advance the location counter to a multiple of 1<<LOG 35395810Sobrien bytes if it is within MAX_SKIP bytes. 35451408Sobrien 35595810Sobrien This is used to align code labels according to Intel recommendations. */ 35651408Sobrien 35795810Sobrien#ifdef HAVE_GAS_MAX_SKIP_P2ALIGN 35895810Sobrien#define ASM_OUTPUT_MAX_SKIP_ALIGN(FILE, LOG, MAX_SKIP) \ 35995810Sobrien if ((LOG) != 0) { \ 36095810Sobrien if ((MAX_SKIP) == 0) fprintf ((FILE), "\t.p2align %d\n", (LOG)); \ 36195810Sobrien else fprintf ((FILE), "\t.p2align %d,,%d\n", (LOG), (MAX_SKIP)); \ 36258478Sobrien } 36395810Sobrien#endif 36458478Sobrien 36573305Sobrien 36658478Sobrien/************************[ Debugger stuff ]*********************************/ 36718334Speter 36895349Sobrien/* The a.out tools do not support "Lscope" .stabs symbols. */ 36995349Sobrien#undef NO_DBX_FUNCTION_END 37095349Sobrien#define NO_DBX_FUNCTION_END TARGET_AOUT 37195349Sobrien 37295349Sobrien/* In ELF, the function stabs come first, before the relative offsets. */ 37395349Sobrien#undef DBX_FUNCTION_FIRST 37495349Sobrien#define DBX_CHECK_FUNCTION_FIRST TARGET_ELF 37595349Sobrien 37634229Speter#undef DBX_REGISTER_NUMBER 37795810Sobrien#define DBX_REGISTER_NUMBER(n) (TARGET_64BIT ? dbx64_register_map[n] \ 37895810Sobrien : (write_symbols == DWARF2_DEBUG \ 37993263Sobrien || write_symbols == DWARF_DEBUG) \ 38095810Sobrien ? svr4_dbx_register_map[(n)] \ 38195810Sobrien : dbx_register_map[(n)]) 38234229Speter 38358478Sobrien/* tag end of file in elf mode */ 38458478Sobrien#undef DBX_OUTPUT_MAIN_SOURCE_FILE_END 38558478Sobrien#define DBX_OUTPUT_MAIN_SOURCE_FILE_END(FILE, FILENAME) \ 38658478Sobrien do { \ 38758478Sobrien if (TARGET_ELF) { \ 38895810Sobrien fprintf ((FILE), "\t.text\n\t.stabs \"\",%d,0,0,%LLetext\n%LLetext:\n", \ 38958478Sobrien N_SO); \ 39018334Speter } \ 39158478Sobrien } while (0) 39218334Speter 39358478Sobrien/* stabs-in-elf has offsets relative to function beginning */ 39458478Sobrien#undef DBX_OUTPUT_LBRAC 39558478Sobrien#define DBX_OUTPUT_LBRAC(FILE, NAME) \ 39658478Sobrien do { \ 39758478Sobrien fprintf (asmfile, "%s %d,0,0,", ASM_STABN_OP, N_LBRAC); \ 39858478Sobrien assemble_name (asmfile, buf); \ 39958478Sobrien if (TARGET_ELF) \ 40058478Sobrien { \ 40158478Sobrien fputc ('-', asmfile); \ 40258478Sobrien assemble_name (asmfile, \ 40358478Sobrien XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0)); \ 40458478Sobrien } \ 40558478Sobrien fprintf (asmfile, "\n"); \ 40658478Sobrien } while (0) 40752112Sobrien 40858478Sobrien#undef DBX_OUTPUT_RBRAC 40958478Sobrien#define DBX_OUTPUT_RBRAC(FILE, NAME) \ 41058478Sobrien do { \ 41158478Sobrien fprintf (asmfile, "%s %d,0,0,", ASM_STABN_OP, N_RBRAC); \ 41258478Sobrien assemble_name (asmfile, buf); \ 41358478Sobrien if (TARGET_ELF) \ 41458478Sobrien { \ 41558478Sobrien fputc ('-', asmfile); \ 41658478Sobrien assemble_name (asmfile, \ 41758478Sobrien XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0)); \ 41858478Sobrien } \ 41958478Sobrien fprintf (asmfile, "\n"); \ 42058478Sobrien } while (0) 421