|
|
1.1.1.2 ! root 1: /* NETBSD_NATIVE is defined when gcc is integrated into the NetBSD ! 2: source tree so it can be configured appropriately without using ! 3: the GNU configure/build mechanism. */ ! 4: ! 5: #ifdef NETBSD_NATIVE ! 6: 1.1 root 7: /* Look for the include files in the system-defined places. */ 8: 9: #undef GPLUSPLUS_INCLUDE_DIR 10: #define GPLUSPLUS_INCLUDE_DIR "/usr/include/g++" 11: 12: #undef GCC_INCLUDE_DIR 13: #define GCC_INCLUDE_DIR "/usr/include" 14: 15: #undef INCLUDE_DEFAULTS 16: #define INCLUDE_DEFAULTS \ 17: { \ 18: { GPLUSPLUS_INCLUDE_DIR, 1, 1 }, \ 19: { GCC_INCLUDE_DIR, 0, 0 }, \ 20: { 0, 0, 0 } \ 21: } 22: 1.1.1.2 ! root 23: /* Under NetBSD, the normal location of the compiler back ends is the ! 24: /usr/libexec directory. */ 1.1 root 25: 1.1.1.2 ! root 26: #undef STANDARD_EXEC_PREFIX ! 27: #define STANDARD_EXEC_PREFIX "/usr/libexec/" 1.1 root 28: 29: /* Under NetBSD, the normal location of the various *crt*.o files is the 30: /usr/lib directory. */ 31: 1.1.1.2 ! root 32: #undef STANDARD_STARTFILE_PREFIX ! 33: #define STANDARD_STARTFILE_PREFIX "/usr/lib/" ! 34: ! 35: #endif 1.1 root 36: 37: 38: /* Provide a CPP_SPEC appropriate for NetBSD. Current we just deal with 39: the GCC option `-posix'. */ 40: 41: #undef CPP_SPEC 42: #define CPP_SPEC "%{posix:-D_POSIX_SOURCE}" 43: 44: /* Provide an ASM_SPEC appropriate for NetBSD. Currently we only deal 45: with the options for generating PIC code. */ 46: 47: #undef ASM_SPEC 48: #define ASM_SPEC " %| %{fpic:-k} %{fPIC:-k -K}" 49: 50: /* Provide a LIB_SPEC appropriate for NetBSD. Just select the appropriate 51: libc, depending on whether we're doing profiling. */ 52: 53: #undef LIB_SPEC 54: #define LIB_SPEC "%{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p}" 55: 56: /* Provide a LINK_SPEC appropriate for NetBSD. Here we provide support 57: for the special GCC options -static, -assert, and -nostdlib. */ 58: 59: #undef LINK_SPEC 60: #define LINK_SPEC \ 61: "%{!nostdlib:%{!r*:%{!e*:-e start}}} -dc -dp %{static:-Bstatic} %{assert*}" 62: 63: 64: /* We have atexit(3). */ 65: 66: #define HAVE_ATEXIT 67: 68: /* Implicit library calls should use memcpy, not bcopy, etc. */ 69: 70: #define TARGET_MEM_FUNCTIONS 71: 72: /* 73: * Some imports from svr4.h in support of shared libraries. 74: * Currently, we need the DECLARE_OBJECT_SIZE stuff. 75: */ 76: 77: /* Define the strings used for the special svr4 .type and .size directives. 78: These strings generally do not vary from one system running svr4 to 79: another, but if a given system (e.g. m88k running svr) needs to use 80: different pseudo-op names for these, they may be overridden in the 81: file which includes this one. */ 82: 83: #undef TYPE_ASM_OP 84: #undef SIZE_ASM_OP 85: #define TYPE_ASM_OP ".type" 86: #define SIZE_ASM_OP ".size" 1.1.1.2 ! root 87: ! 88: /* This is how we tell the assembler that a symbol is weak. */ ! 89: ! 90: #undef ASM_WEAKEN_LABEL ! 91: #define ASM_WEAKEN_LABEL(FILE,NAME) \ ! 92: do { fputs ("\t.weak\t", FILE); assemble_name (FILE, NAME); \ ! 93: fputc ('\n', FILE); } while (0) 1.1 root 94: 95: /* The following macro defines the format used to output the second 96: operand of the .type assembler directive. Different svr4 assemblers 97: expect various different forms for this operand. The one given here 98: is just a default. You may need to override it in your machine- 99: specific tm.h file (depending upon the particulars of your assembler). */ 100: 101: #undef TYPE_OPERAND_FMT 102: #define TYPE_OPERAND_FMT "@%s" 103: 104: /* Write the extra assembler code needed to declare a function's result. 105: Most svr4 assemblers don't require any special declaration of the 106: result value, but there are exceptions. */ 107: 108: #ifndef ASM_DECLARE_RESULT 109: #define ASM_DECLARE_RESULT(FILE, RESULT) 110: #endif 111: 112: /* These macros generate the special .type and .size directives which 113: are used to set the corresponding fields of the linker symbol table 114: entries in an ELF object file under SVR4. These macros also output 115: the starting labels for the relevant functions/objects. */ 116: 117: /* Write the extra assembler code needed to declare a function properly. 118: Some svr4 assemblers need to also have something extra said about the 119: function's return value. We allow for that here. */ 120: 121: #undef ASM_DECLARE_FUNCTION_NAME 122: #define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \ 123: do { \ 124: fprintf (FILE, "\t%s\t ", TYPE_ASM_OP); \ 125: assemble_name (FILE, NAME); \ 126: putc (',', FILE); \ 127: fprintf (FILE, TYPE_OPERAND_FMT, "function"); \ 128: putc ('\n', FILE); \ 129: ASM_DECLARE_RESULT (FILE, DECL_RESULT (DECL)); \ 130: ASM_OUTPUT_LABEL(FILE, NAME); \ 131: } while (0) 132: 133: /* Write the extra assembler code needed to declare an object properly. */ 134: 135: #undef ASM_DECLARE_OBJECT_NAME 136: #define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL) \ 137: do { \ 138: fprintf (FILE, "\t%s\t ", TYPE_ASM_OP); \ 139: assemble_name (FILE, NAME); \ 140: putc (',', FILE); \ 141: fprintf (FILE, TYPE_OPERAND_FMT, "object"); \ 142: putc ('\n', FILE); \ 143: size_directive_output = 0; \ 144: if (!flag_inhibit_size_directive && DECL_SIZE (DECL)) \ 145: { \ 146: size_directive_output = 1; \ 147: fprintf (FILE, "\t%s\t ", SIZE_ASM_OP); \ 148: assemble_name (FILE, NAME); \ 149: fprintf (FILE, ",%d\n", int_size_in_bytes (TREE_TYPE (DECL))); \ 150: } \ 151: ASM_OUTPUT_LABEL(FILE, NAME); \ 152: } while (0) 153: 154: /* Output the size directive for a decl in rest_of_decl_compilation 155: in the case where we did not do so before the initializer. 156: Once we find the error_mark_node, we know that the value of 157: size_directive_output was set 158: by ASM_DECLARE_OBJECT_NAME when it was run for the same decl. */ 159: 160: #undef ASM_FINISH_DECLARE_OBJECT 161: #define ASM_FINISH_DECLARE_OBJECT(FILE, DECL, TOP_LEVEL, AT_END) \ 162: do { \ 163: char *name = XSTR (XEXP (DECL_RTL (DECL), 0), 0); \ 164: if (!flag_inhibit_size_directive && DECL_SIZE (DECL) \ 165: && ! AT_END && TOP_LEVEL \ 166: && DECL_INITIAL (DECL) == error_mark_node \ 167: && !size_directive_output) \ 168: { \ 169: size_directive_output = 1; \ 170: fprintf (FILE, "\t%s\t ", SIZE_ASM_OP); \ 171: assemble_name (FILE, name); \ 172: fprintf (FILE, ",%d\n", int_size_in_bytes (TREE_TYPE (DECL))); \ 173: } \ 174: } while (0) 175: 176: /* This is how to declare the size of a function. */ 177: 178: #undef ASM_DECLARE_FUNCTION_SIZE 179: #define ASM_DECLARE_FUNCTION_SIZE(FILE, FNAME, DECL) \ 180: do { \ 181: if (!flag_inhibit_size_directive) \ 182: { \ 183: char label[256]; \ 184: static int labelno; \ 185: labelno++; \ 186: ASM_GENERATE_INTERNAL_LABEL (label, "Lfe", labelno); \ 187: ASM_OUTPUT_INTERNAL_LABEL (FILE, "Lfe", labelno); \ 188: fprintf (FILE, "\t%s\t ", SIZE_ASM_OP); \ 189: assemble_name (FILE, (FNAME)); \ 190: fprintf (FILE, ","); \ 191: assemble_name (FILE, label); \ 192: fprintf (FILE, "-"); \ 193: assemble_name (FILE, (FNAME)); \ 194: putc ('\n', FILE); \ 195: } \ 196: } while (0)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.