home *** CD-ROM | disk | FTP | other *** search
/ OpenStep 4.2J (Developer) / os42jdev.iso / NextDeveloper / Source / GNU / gcc / config / pa / next-pdo.h < prev    next >
C/C++ Source or Header  |  1997-01-22  |  16KB  |  459 lines

  1. /* Target definitions for GNU compiler for hppa running HPUX with NeXT pdo
  2.    Copyright (C) 1989, 1990, 1991, 1992, 1993 Free Software Foundation, Inc.
  3.  
  4. #define USE_GAS
  5.  
  6. #define OBJC_FORWARDING_REG_OFFSET(ISREG, OFF, REGNO) \
  7.   do { OFF = (FP_REG_CLASS_P( REGNO_REG_CLASS(REGNO)) \
  8.               ? -2 * ((REGNO) - 44) - 4               \
  9.               :  4 * ((REGNO) - 26) - 4);             \
  10.        ISREG = 0; } while (0)
  11.  
  12. /* pa1-ghpux originally includes pa-ghpux.h and pa.h */
  13. #include "pa/pa1-ghpux.h"
  14.  
  15. #define NEXT_OBJC_RUNTIME
  16.  
  17. #define OBJC_HPUX_PADDING
  18.  
  19. #define NEXT_PDO
  20.  
  21. /* Report errors to make application. */
  22.  
  23. #define REPORT_EVENT(TYPE, NAME, FILE, LINE, MSG, ARG1, ARG2, ARG3)    \
  24.   make_support (TYPE, NAME, FILE, LINE, MSG, ARG1, ARG2, ARG3)
  25. #define V_REPORT_EVENT(TYPE, NAME, FILE, LINE, MSG, AP)            \
  26.   v_make_support (TYPE, NAME, FILE, LINE, MSG, AP)
  27.  
  28. /* Return small structs in registers */
  29. #undef DEFAULT_PCC_STRUCT_RETURN
  30. #define DEFAULT_PCC_STRUCT_RETURN 0
  31.  
  32. #define readonly_data_section data_section
  33. /* 
  34.  * overrides for the funky places we put stuff
  35.  *    there was a bug in the beta where the /usr was not prefixed
  36.  */
  37. #undef  GPLUSPLUS_INCLUDE_DIR
  38. #define GPLUSPLUS_INCLUDE_DIR "/usr/NextDeveloper/Headers/g++"
  39. #undef    INCLUDE_DEFAULTS
  40. #define INCLUDE_DEFAULTS                \
  41.   {                            \
  42.     { GPLUSPLUS_INCLUDE_DIR, 1},            \
  43.     { GCC_INCLUDE_DIR, 0},                \
  44.     { TOOL_INCLUDE_DIR, 0},                \
  45.     { LOCAL_INCLUDE_DIR, 0},                \
  46.     { "/usr/NextDeveloper/Headers", 0},            \
  47.     { "/usr/NextDeveloper/Headers/ansi", 0},        \
  48.     { "/usr/LocalDeveloper/Headers", 0},        \
  49.     { "/usr/LocalDeveloper/Headers/ansi", 0},        \
  50.     { STANDARD_INCLUDE_DIR, 0},                \
  51.     { 0, 0}                        \
  52.   }
  53.  
  54. /*
  55. #define REPORT_EVENT(TYPE, NAME, FILE, LINE, MSG, ARG1, ARG2, ARG3)    \
  56.   make_support (TYPE, NAME, FILE, LINE, MSG, ARG1, ARG2, ARG3)
  57.  
  58. /*
  59.  * override default prefix behavior
  60.  */
  61. /*
  62. #define STANDARD_EXEC_PREFIX "/usr/NextDeveloper/lib/gcc-lib/"
  63. #define STANDARD_STARTFILE_PREFIX "/usr/NextDeveloper/lib/"
  64. #define TOOLDIR_BASE_PREFIX "/usr/NextDeveloper/"
  65. */
  66.  
  67. /*
  68.  * specs
  69.  *
  70.  */
  71.  
  72. #undef LINK_SPEC
  73. #define LINK_SPEC "-u main -a shared_archive"
  74.  
  75. #undef LIB_SPEC
  76. #define LIB_SPEC "%{!p:%{!pg:-L/usr/NextDeveloper/lib -lpdocma %{!nopdolib:-lpdo} -ldce -lm -lc_r -lc -lm}}%{p:-L/usr/NextDeveloper/lib -L/lib/libp/ -lpdocma %{!nopdolib:-lpdo} -ldce -lm -lc_r -lc -lm}%{pg:-L/usr/NextDeveloper/lib -L/lib/libp/ -lpdocma %{!nopdolib:-lpdo} -ldce -lm -lc_r -lc -lm}"
  77.  
  78. #undef CPP_PREDEFINES
  79. #define CPP_PREDEFINES "-DNeXT_PDO -Dhppa -Dhp9000s800 -D__hp9000s800 -Dhp9k8 -DPWB -Dhpux -Dunix -D_HPUX_SOURCE -Asystem(unix) -Asystem(hpux) -Acpu(hppa) -Amachine(hppa) -D__BIG_ENDIAN__ -D__ARCHITECTURE__=\"hppa\" -Dcma_read=read -Dcma_write=write"
  80.  
  81. #undef TARGET_VERSION
  82. #define TARGET_VERSION fprintf (stderr, " (hppa1.1-nextpdo-hpux)");
  83.  
  84. #ifndef STARTFILE_SPEC
  85. #define STARTFILE_SPEC  \
  86.   "%{pg:gcrt0.o%s}%{!pg:%{p:mcrt0.o%s}%{!p:crt0.o%s}}"
  87. #endif
  88.  
  89. /* RIPPED OFF FROM nextstep.h */
  90. #undef WORD_SWITCH_TAKES_ARG
  91. #define WORD_SWITCH_TAKES_ARG(STR)                \
  92.   (DEFAULT_WORD_SWITCH_TAKES_ARG (STR)                \
  93.    || !strcmp (STR, "target")                     \
  94.    || !strcmp (STR, "assert")                    \
  95.    || !strcmp (STR, "arch")                    \
  96.    || !strcmp (STR, "filelist")                    \
  97.    || !strcmp (STR, "framework"))
  98.  
  99.  
  100. #undef    WORD_SWITCH
  101. #define WORD_SWITCH(STR)            \
  102.   (WORD_SWITCH_TAKES_ARG (STR)            \
  103.    || !strcmp (STR, "bsd")            \
  104.    || !strcmp (STR, "object")            \
  105.    || !strcmp (STR, "ObjC")            \
  106.    || !strcmp (STR, "all_load"))
  107.  
  108. /* Give methods pretty symbol names on NeXT. */
  109.  
  110. #undef    OBJC_GEN_METHOD_LABEL
  111. #define OBJC_GEN_METHOD_LABEL(BUF,IS_INST,CLASS_NAME,CAT_NAME,SEL_NAME,NUM) \
  112.   do { if (CAT_NAME)                            \
  113.      sprintf (BUF, "%c[%s(%s) %s]", (IS_INST) ? '-' : '+',        \
  114.           (CLASS_NAME), (CAT_NAME), (SEL_NAME));        \
  115.        else                                \
  116.      sprintf (BUF, "%c[%s %s]", (IS_INST) ? '-' : '+',        \
  117.           (CLASS_NAME), (SEL_NAME));                \
  118.      } while (0)
  119.  
  120. /* Wrap new method names in quotes so the assembler doesn't gag.
  121.    Make Objective-C internal symbols local.  */
  122.  
  123. /* work around the gnu'ism of the @ at the begining of the symbol name */
  124.  
  125. #undef    ASM_OUTPUT_LABELREF
  126. #define ASM_OUTPUT_LABELREF(FILE,NAME)    \
  127.   do {  \
  128.     if (FUNCTION_NAME_P (NAME) && (NAME[1] == '+' || NAME[1] == '-')) \
  129.         fprintf (FILE, "\"%s\"", NAME+1); \
  130.     else if (NAME[0] == '+' || NAME[0] == '-') \
  131.         fprintf (FILE, "\"%s\"", NAME[0]); \
  132.     else if (!strncmp (NAME, "_OBJC_", 6)) \
  133.         fprintf (FILE, "L%s", NAME);   \
  134.     else if (!strncmp (NAME, ".objc_class_name_", 17))        \
  135.         fprintf (FILE, "P'%s", NAME);                \
  136.     else fprintf ((FILE), "%s", (NAME) + (FUNCTION_NAME_P (NAME) ? 1 : 0)); } while (0)
  137.  
  138. /* Modified version of the macro in pa.h.
  139.  
  140.    We make the first line stab special to avoid adding several
  141.    gross hacks to GAS.  */
  142.  
  143. #undef ASM_OUTPUT_SOURCE_LINE
  144. #define ASM_OUTPUT_SOURCE_LINE(file, line)        \
  145.   { static int sym_lineno = 1;                \
  146.     static tree last_function_decl = NULL;        \
  147.     if (current_function_decl == last_function_decl) {    \
  148.       char* label = XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0) + 1; \
  149.       if (label[0] == '+' || label[0] == '-')        \
  150.         fprintf (file, "\t.stabn 68,0,%d,L$M%d-\"%s\"\nL$M%d:\n", \
  151.             line, sym_lineno,            \
  152.             label,                 \
  153.             sym_lineno);            \
  154.       else                         \
  155.         fprintf (file, "\t.stabn 68,0,%d,L$M%d-%s\nL$M%d:\n", \
  156.             line, sym_lineno,            \
  157.             label,                 \
  158.             sym_lineno);            \
  159.       }                            \
  160.     else                        \
  161.       fprintf (file, "\t.stabn 68,0,%d,0\n", line);    \
  162.     last_function_decl = current_function_decl;        \
  163.     sym_lineno += 1; }
  164.  
  165. /* This is how to output the definition of a user-level label named NAME,
  166.    such as the label on a static function or variable NAME.  */
  167.  
  168. #undef ASM_OUTPUT_LABEL
  169. #define ASM_OUTPUT_LABEL(FILE, NAME)    \
  170.   do { assemble_name (FILE, NAME);     \
  171.      fputc (':', FILE);        \
  172.        fputc ('\n', FILE); } while (0)
  173.  
  174. /* This is how to output an assembler line defining an `int' constant.  
  175.     this is used in the OBJC_INSTANCE_METHODS segment 
  176.     removed code that put P% infront of code being linked to shared libs 
  177.  */
  178.  
  179. #undef    ASM_OUTPUT_INT
  180. #define ASM_OUTPUT_INT(FILE,VALUE)  \
  181. { fprintf (FILE, "\t.word ");            \
  182.   if (function_label_operand (VALUE, VOIDmode))    \
  183.     fprintf (FILE, "P'");            \
  184.   output_addr_const (FILE, (VALUE));        \
  185.   fprintf (FILE, "\n");}
  186.  
  187.  
  188.  
  189. #undef ASM_GLOBALIZE_LABEL
  190. #define ASM_GLOBALIZE_LABEL(FILE, NAME)                    \
  191.   if (strncmp(NAME,"_OBJC_PROTOCOL_",15))                                   \
  192.   do { fputs ("\t.EXPORT ", FILE); assemble_name (FILE, NAME);        \
  193.        if (FUNCTION_NAME_P (NAME))                    \
  194.      fputs (",CODE\n", FILE);                    \
  195.        else                                \
  196.      fputs (",DATA\n", FILE);} while (0)
  197.  
  198. /* from josh */
  199.  
  200.  
  201. #undef    SECTION_FUNCTION
  202. #define SECTION_FUNCTION(FUNCTION, SECTION, SUBSPACE)            \
  203. void                                    \
  204. FUNCTION ()                                \
  205. {                                    \
  206.   extern void text_section ();                         \
  207.   extern void objc_section_init ();                    \
  208.   extern int flag_no_mach_text_sections;                \
  209.   static int been_here = 0;                        \
  210.                                      \
  211.   if (in_section != SECTION)                        \
  212.     {                                    \
  213.       objc_section_init ();                        \
  214.       fprintf (asm_out_file, "\t.SPACE $PRIVATE$\n");            \
  215.       fprintf (asm_out_file, "\t.SUBSPA %s", SUBSPACE);            \
  216.       if (!been_here) {                            \
  217.         fprintf(asm_out_file,",QUAD=1,ALIGN=4,ACCESS=31");        \
  218.     been_here = 1;                            \
  219.     }                                \
  220.       fprintf(asm_out_file,"\n");                    \
  221.       in_section = SECTION;                        \
  222.     }                                    \
  223. }                                    \
  224.  
  225. #undef    EXTRA_SECTIONS
  226. #define EXTRA_SECTIONS    in_bss, in_readonly_data,    \
  227.   in_objc_class, in_objc_meta_class, in_objc_category,    \
  228.   in_objc_class_vars, in_objc_instance_vars,        \
  229.   in_objc_cls_meth, in_objc_inst_meth,            \
  230.   in_objc_cat_cls_meth, in_objc_cat_inst_meth,        \
  231.   in_objc_selector_refs,                \
  232.   in_objc_symbols, in_objc_module_info,            \
  233.   in_objc_protocol, in_objc_string_object,        \
  234.   in_objc_class_names, in_objc_meth_var_names,        \
  235.   in_objc_meth_var_types, in_objc_cls_refs
  236.  
  237. #undef    EXTRA_SECTION_FUNCTIONS
  238. #define EXTRA_SECTION_FUNCTIONS            \
  239. void                        \
  240. bss_section ()                    \
  241. {                        \
  242.   if (in_section != in_bss)            \
  243.     {                        \
  244.       fprintf (asm_out_file, "%s\n",         \
  245.            BSS_SECTION_ASM_OP);        \
  246.       in_section = in_bss;            \
  247.     }                        \
  248. }                        \
  249. void                        \
  250. readonly_data ()                \
  251. {                        \
  252.   if (in_section != in_readonly_data)        \
  253.     {                        \
  254.       fprintf (asm_out_file, "%s\n",         \
  255.            READONLY_DATA_ASM_OP);        \
  256.       in_section = in_readonly_data;        \
  257.     }                        \
  258. }                        \
  259. SECTION_FUNCTION (objc_class_section,        \
  260.           in_objc_class,        \
  261.           "$$OBJC_CLASS$$")        \
  262. SECTION_FUNCTION (objc_meta_class_section,    \
  263.           in_objc_meta_class,        \
  264.           "$$OBJC_METACLASS$$")        \
  265. SECTION_FUNCTION (objc_category_section,    \
  266.           in_objc_category,        \
  267.          "$$OBJC_CATEGORY$$")        \
  268. SECTION_FUNCTION (objc_class_vars_section,    \
  269.           in_objc_class_vars,        \
  270.           "$$OBJC_CLASS_VARS$$")    \
  271. SECTION_FUNCTION (objc_instance_vars_section,    \
  272.           in_objc_instance_vars,    \
  273.           "$$OBJC_INSTANCE_VARS$$")    \
  274. SECTION_FUNCTION (objc_cls_meth_section,    \
  275.           in_objc_cls_meth,        \
  276.           "$$OBJC_CLS_METH$$")        \
  277. SECTION_FUNCTION (objc_inst_meth_section,    \
  278.           in_objc_inst_meth,        \
  279.           "$$OBJC_INST_METHODS$$")    \
  280. SECTION_FUNCTION (objc_cat_cls_meth_section,    \
  281.           in_objc_cat_cls_meth,        \
  282.           "$$OBJC_CAT_CLS_METH$$")    \
  283. SECTION_FUNCTION (objc_cat_inst_meth_section,    \
  284.           in_objc_cat_inst_meth,    \
  285.           "$$OBJC_CAT_INST_METH$$")    \
  286. SECTION_FUNCTION (objc_selector_refs_section,    \
  287.           in_objc_selector_refs,    \
  288.           "$$OBJC_MESSAGE_REFS$$")    \
  289. SECTION_FUNCTION (objc_symbols_section,        \
  290.           in_objc_symbols,        \
  291.           "$$OBJC_SYMBOLS$$")        \
  292. SECTION_FUNCTION (objc_module_info_section,    \
  293.           in_objc_module_info,        \
  294.           "$$OBJC_MODULES$$")        \
  295. SECTION_FUNCTION (objc_protocol_section,    \
  296.           in_objc_protocol,        \
  297.           "$$OBJC_PROTOCOL$$")        \
  298. SECTION_FUNCTION (objc_string_object_section,    \
  299.           in_objc_string_object,    \
  300.           "$$OBJC_STRING_OBJECT$$")    \
  301. SECTION_FUNCTION (objc_class_names_section,    \
  302.         in_objc_class_names,        \
  303.         "$$OBJC_CLASS_NAMES$$")        \
  304. SECTION_FUNCTION (objc_meth_var_names_section,    \
  305.         in_objc_meth_var_names,        \
  306.         "$$OBJC_METH_VAR_NAMES$$")    \
  307. SECTION_FUNCTION (objc_meth_var_types_section,    \
  308.         in_objc_meth_var_types,        \
  309.         "$$OBJC_METH_VAR_TYPES$$")    \
  310. SECTION_FUNCTION (objc_cls_refs_section,    \
  311.         in_objc_cls_refs,        \
  312.         "$$OBJC_CLS_REFS$$")        \
  313.                         \
  314. void                        \
  315. objc_section_init ()                \
  316. {                        \
  317.   static int been_here = 0;            \
  318.                         \
  319.   if (been_here == 0)                \
  320.     {                        \
  321.       been_here = 1;                \
  322.       objc_class_section ();            \
  323.       objc_meta_class_section ();        \
  324.       objc_cat_cls_meth_section ();        \
  325.       objc_cat_inst_meth_section ();        \
  326.       objc_cls_meth_section ();            \
  327.       objc_inst_meth_section ();        \
  328.       objc_selector_refs_section ();        \
  329.       objc_symbols_section ();            \
  330.       objc_category_section ();            \
  331.       objc_protocol_section ();            \
  332.       objc_class_vars_section ();        \
  333.       objc_instance_vars_section ();        \
  334.       objc_module_info_section ();        \
  335.       objc_string_object_section ();        \
  336.       objc_class_names_section ();        \
  337.       objc_meth_var_names_section ();        \
  338.       objc_meth_var_types_section ();        \
  339.       objc_cls_refs_section ();            \
  340.     }                        \
  341. }
  342.  
  343. /* different from NS version in that no literalX_section */ 
  344. #undef    SELECT_SECTION
  345. #define SELECT_SECTION(exp,reloc)                \
  346.   do                                \
  347.     {                                \
  348.       if (TREE_CODE (exp) == STRING_CST)            \
  349.     {                            \
  350.       if (flag_writable_strings)                \
  351.         data_section ();                    \
  352.       else     \
  353.         readonly_data_section ();                \
  354.     }                            \
  355.       else if (TREE_CODE (exp) == INTEGER_CST            \
  356.            || TREE_CODE (exp) == REAL_CST)            \
  357.         {                            \
  358.         readonly_data_section ();                \
  359.     }                            \
  360.       else if (TREE_CODE (exp) == CONSTRUCTOR                \
  361.            && TREE_TYPE (exp)                    \
  362.            && TREE_CODE (TREE_TYPE (exp)) == RECORD_TYPE        \
  363.            && TYPE_NAME (TREE_TYPE (exp))                \
  364.            && TREE_CODE (TYPE_NAME (TREE_TYPE (exp))) == IDENTIFIER_NODE \
  365.            && IDENTIFIER_POINTER (TYPE_NAME (TREE_TYPE (exp))))    \
  366.       {                                \
  367.       if (!strcmp (IDENTIFIER_POINTER (TYPE_NAME (TREE_TYPE (exp))), \
  368.             "NSConstantString"))                \
  369.       objc_string_object_section ();                \
  370.       else if (!strcmp (IDENTIFIER_POINTER (TYPE_NAME (TREE_TYPE (exp))), \
  371.             "NXConstantString"))                \
  372.       objc_string_object_section ();                \
  373.     else if ((TREE_READONLY (exp) || TREE_CONSTANT (exp))        \
  374.         && !TREE_SIDE_EFFECTS (exp))                \
  375.       readonly_data_section ();                    \
  376.     else                                \
  377.       data_section ();                        \
  378.       }                                    \
  379.       else if (TREE_CODE (exp) == VAR_DECL &&                \
  380.            DECL_NAME (exp) &&                    \
  381.            TREE_CODE (DECL_NAME (exp)) == IDENTIFIER_NODE &&    \
  382.            IDENTIFIER_POINTER (DECL_NAME (exp)) &&            \
  383.            !strncmp (IDENTIFIER_POINTER (DECL_NAME (exp)), "_OBJC_", 6)) \
  384.     {                                \
  385.       const char *name = IDENTIFIER_POINTER (DECL_NAME (exp));    \
  386.                                       \
  387.       if (!strncmp (name, "_OBJC_CLASS_METHODS_", 20))        \
  388.         objc_cls_meth_section ();                    \
  389.       else if (!strncmp (name, "_OBJC_INSTANCE_METHODS_", 23))    \
  390.         objc_inst_meth_section ();                    \
  391.       else if (!strncmp (name, "_OBJC_CATEGORY_CLASS_METHODS_", 20)) \
  392.         objc_cat_cls_meth_section ();                \
  393.       else if (!strncmp (name, "_OBJC_CATEGORY_INSTANCE_METHODS_", 23)) \
  394.         objc_cat_inst_meth_section ();                \
  395.       else if (!strncmp (name, "_OBJC_CLASS_VARIABLES_", 22))    \
  396.         objc_class_vars_section ();                    \
  397.       else if (!strncmp (name, "_OBJC_INSTANCE_VARIABLES_", 25))    \
  398.         objc_instance_vars_section ();                \
  399.       else if (!strncmp (name, "_OBJC_CLASS_PROTOCOLS_", 22))    \
  400.         objc_cat_cls_meth_section ();                \
  401.       else if (!strncmp (name, "_OBJC_CLASS_NAME_", 17))        \
  402.         objc_class_names_section ();                \
  403.       else if (!strncmp (name, "_OBJC_METH_VAR_NAME_", 20))        \
  404.         objc_meth_var_names_section ();                \
  405.       else if (!strncmp (name, "_OBJC_METH_VAR_TYPE_", 20))        \
  406.         objc_meth_var_types_section ();                \
  407.       else if (!strncmp (name, "_OBJC_CLASS_REFERENCES", 22))    \
  408.         objc_cls_refs_section ();                    \
  409.       else if (!strncmp (name, "_OBJC_CLASS_", 12))            \
  410.         objc_class_section ();                    \
  411.       else if (!strncmp (name, "_OBJC_METACLASS_", 16))        \
  412.         objc_meta_class_section ();                    \
  413.       else if (!strncmp (name, "_OBJC_CATEGORY_", 15))        \
  414.         objc_category_section ();                    \
  415.       else if (!strncmp (name, "_OBJC_SELECTOR_REFERENCES", 25))    \
  416.         objc_selector_refs_section ();                \
  417.       else if (!strncmp (name, "_OBJC_SYMBOLS", 13))        \
  418.         objc_symbols_section ();                    \
  419.       else if (!strncmp (name, "_OBJC_MODULES", 13))        \
  420.         objc_module_info_section ();                \
  421.       else if (!strncmp (name, "_OBJC_PROTOCOL_INSTANCE_METHODS_", 32)) \
  422.         objc_cat_inst_meth_section ();                              \
  423.       else if (!strncmp (name, "_OBJC_PROTOCOL_CLASS_METHODS_", 29)) \
  424.         objc_cat_cls_meth_section ();                               \
  425.       else if (!strncmp (name, "_OBJC_PROTOCOL_REFS_", 20))         \
  426.         objc_cat_cls_meth_section ();                               \
  427.       else if (!strncmp (name, "_OBJC_PROTOCOL_", 15))              \
  428.         objc_protocol_section ();                                   \
  429.       else if ((TREE_READONLY (exp) || TREE_CONSTANT (exp))        \
  430.         && !TREE_SIDE_EFFECTS (exp))                 \
  431.         readonly_data_section ();                                   \
  432.       else                                \
  433.         data_section ();                        \
  434.     }                                \
  435.       else if ((TREE_READONLY (exp) || TREE_CONSTANT (exp))    \
  436.            && !TREE_SIDE_EFFECTS (exp))                \
  437.     data_section (); /* BUG in ObjC++ Compiler */        \
  438.       else                                \
  439.         data_section ();                        \
  440.     }                                    \
  441.   while (0)
  442.  
  443. /* this was added to support unresolved references in the gas assembler */
  444. #undef DECLARE_UNRESOLVED_REFERENCE
  445.  
  446. #undef ASM_OUTPUT_INTERNAL_LABEL
  447. #define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM)      \
  448. {fprintf (FILE, "%c$%s%04d", (PREFIX)[0], (PREFIX) + 1, NUM); \
  449.    if (TARGET_GAS)                                      \
  450.      fputs (":\n", FILE);                               \
  451.    else                                                 \
  452.      fputs ("\n", FILE);}
  453. #undef readonly_data_section
  454.  
  455. #define NEXT_FRAMEWORKS_DEFAULT            \
  456.     {"/usr/LocalLibrary/Frameworks", 0},        \
  457.     {"/usr/NextLibrary/Frameworks", 0}, 
  458.  
  459.