home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.3 (Developer) / NeXT_Developer-3.3.iso / NextDeveloper / Source / GNU / cc / config / pa / next-pdo.h < prev    next >
Encoding:
C/C++ Source or Header  |  1993-11-30  |  13.1 KB  |  391 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. This file is part of GNU CC.
  5.  
  6. GNU CC is free software; you can redistribute it and/or modify
  7. it under the terms of the GNU General Public License as published by
  8. the Free Software Foundation; either version 2, or (at your option)
  9. any later version.
  10.  
  11. GNU CC is distributed in the hope that it will be useful,
  12. but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14. GNU General Public License for more details.
  15.  
  16. You should have received a copy of the GNU General Public License
  17. along with GNU CC; see the file COPYING.  If not, write to
  18. the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  19.  
  20. /* added <jf> */
  21. #define USE_GAS
  22.  
  23. /* this may not work for double values --  hard coded to 32 bit entities */
  24.  
  25. #define OBJC_FORWARDING_REG_OFFSET(ISREG, OFF, REGNO) \
  26.   do { OFF = (FP_REG_CLASS_P( REGNO_REG_CLASS(REGNO)) \
  27.               ? -2 * ((REGNO) - 44) - 4               \
  28.               :  4 * ((REGNO) - 26) - 4);             \
  29.        ISREG = 0; } while (0)
  30.  
  31. /* pa1-ghpux originally includes pa-ghpux.h and pa.h */
  32. #include "pa/pa1-ghpux.h"
  33.  
  34. #define NEXT_OBJC_RUNTIME
  35.  
  36. #define OBJC_HPUX_PADDING
  37.  
  38. #define NEXT_PDO
  39.  
  40. /* 
  41.  * overrides for the funky places we put stuff
  42.  *    there was a bug in the beta where the /usr was not prefixed
  43.  */
  44. #undef    INCLUDE_DEFAULTS
  45. #define INCLUDE_DEFAULTS                \
  46.   {                            \
  47.     { GPLUSPLUS_INCLUDE_DIR, 1},            \
  48.     { GCC_INCLUDE_DIR, 0},                \
  49.     { LOCAL_INCLUDE_DIR, 0},                \
  50.     { "/usr/NextDeveloper/Headers", 0},            \
  51.     { "/usr/NextDeveloper/Headers/ansi", 0},        \
  52.     { "/usr/NextDeveloper/Headers/bsd", 0},        \
  53.     { "/usr/LocalDeveloper/Headers", 0},        \
  54.     { "/usr/LocalDeveloper/Headers/ansi", 0},        \
  55.     { "/usr/LocalDeveloper/Headers/bsd", 0},        \
  56.     { STANDARD_INCLUDE_DIR, 0},                \
  57.     { 0, 0}                        \
  58.   }
  59.  
  60. /*
  61. #define REPORT_EVENT(TYPE, NAME, FILE, LINE, MSG, ARG1, ARG2, ARG3)    \
  62.   make_support (TYPE, NAME, FILE, LINE, MSG, ARG1, ARG2, ARG3)
  63. */
  64.  
  65. /*
  66.  * override default prefix behavior
  67.  */
  68.  
  69. #undef STANDARD_EXEC_PREFIX
  70. #define STANDARD_EXEC_PREFIX "/usr/NextDeveloper/lib/"
  71. /* when looking for specs */
  72. #undef STANDARD_STARTFILE_PREFIX
  73. #define STANDARD_STARTFILE_PREFIX "/usr/NextDeveloper/lib/"
  74. #undef TOOLDIR_BASE_PREFIX
  75. #define TOOLDIR_BASE_PREFIX "/usr/NextDeveloper/"
  76.  
  77. /*
  78.  * specs
  79.  *
  80.  */
  81.  
  82. /* should -L really be in LIB_SPEC ? <jf> */
  83. #undef LIB_SPEC
  84. #define LIB_SPEC "%{!p:%{!pg:-L/usr/NextDeveloper/lib -lpdo -lc -lm}}%{p:-L/usr/NextDeveloper/lib -L/lib/libp/ -lpdo -lc -lm}%{pg:-L/usr/NextDeveloper/lib -L/lib/libp/ -lpdo -lc -lm}"
  85.  
  86. #ifndef STARTFILE_SPEC
  87. #define STARTFILE_SPEC  \
  88.   "%{pg:gcrt0.o%s crtPDO.o%s}%{!pg:%{p:mcrt0.o%s crtPDO.o%s}%{!p:crt0.o%s crtPDO.o%s}}"
  89. #endif
  90.  
  91. /* config.h can define ENDFILE_SPEC to override the default crtn files.  */
  92. #ifndef ENDFILE_SPEC
  93. #define ENDFILE_SPEC "crtnPDO.o%s"
  94. #endif
  95.  
  96.  
  97. /* RIPPED OFF FROM nextstep.h */
  98.  
  99. /* Give methods pretty symbol names on NeXT. */
  100.  
  101. #undef    OBJC_GEN_METHOD_LABEL
  102. #define OBJC_GEN_METHOD_LABEL(BUF,IS_INST,CLASS_NAME,CAT_NAME,SEL_NAME,NUM) \
  103.   do { if (CAT_NAME)                            \
  104.      sprintf (BUF, "%c[%s(%s) %s]", (IS_INST) ? '-' : '+',        \
  105.           (CLASS_NAME), (CAT_NAME), (SEL_NAME));        \
  106.        else                                \
  107.      sprintf (BUF, "%c[%s %s]", (IS_INST) ? '-' : '+',        \
  108.           (CLASS_NAME), (SEL_NAME));                \
  109.      } while (0)
  110.  
  111. /* Wrap new method names in quotes so the assembler doesn't gag.
  112.    Make Objective-C internal symbols local.  */
  113.  
  114. /* work around the gnu'ism of the @ at the begining of the symbol name */
  115.  
  116. #undef    ASM_OUTPUT_LABELREF
  117. #define ASM_OUTPUT_LABELREF(FILE,NAME)    \
  118.   do {  \
  119.     if (FUNCTION_NAME_P (NAME) && (NAME[1] == '+' || NAME[1] == '-')) \
  120.         fprintf (FILE, "\"%s\"", NAME+1); \
  121.     else if (NAME[0] == '+' || NAME[0] == '-') \
  122.         fprintf (FILE, "\"%s\"", NAME[0]); \
  123.     else if (!strncmp (NAME, "_OBJC_", 6)) \
  124.         fprintf (FILE, "L%s", NAME);   \
  125.     else if (!strncmp (NAME, ".objc_class_name_", 17))        \
  126.         fprintf (FILE, "%s", NAME);                \
  127.     else fprintf ((FILE), "%s", (NAME) + (FUNCTION_NAME_P (NAME) ? 1 : 0)); } while (0)
  128.  
  129.  
  130. /* This is how to output an assembler line defining an `int' constant.  
  131.     this is used in the OBJC_INSTANCE_METHODS segment 
  132.     removed code that put P% infront of code being linked to shared libs 
  133.  */
  134.  
  135. #undef ASM_OUTPUT_INT
  136. #define ASM_OUTPUT_INT(FILE,VALUE)  \
  137. { fprintf (FILE, "\t.word ");            \
  138.   if (function_label_operand (VALUE, VOIDmode)  \
  139.       && in_section != in_text)            \
  140.     fprintf (FILE, "P%%");            \
  141.   output_addr_const (FILE, (VALUE));        \
  142.   fprintf (FILE, "\n");}
  143.  
  144. /* from josh */
  145.  
  146.  
  147. #undef    SECTION_FUNCTION
  148. #define SECTION_FUNCTION(FUNCTION, SECTION, SUBSPACE)            \
  149. void                                    \
  150. FUNCTION ()                                \
  151. {                                    \
  152.   extern void text_section ();                         \
  153.   extern void objc_section_init ();                    \
  154.   extern int flag_no_mach_text_sections;                \
  155.   static int been_here = 0;                        \
  156.                                      \
  157.   if (in_section != SECTION)                        \
  158.     {                                    \
  159.       objc_section_init ();                        \
  160.       fprintf (asm_out_file, "\t.SPACE $PRIVATE$\n");            \
  161.       fprintf (asm_out_file, "\t.SUBSPA %s", SUBSPACE);            \
  162.       if (!been_here) {                            \
  163.         fprintf(asm_out_file,",QUAD=1,ALIGN=4,ACCESS=31");        \
  164.     been_here = 1;                            \
  165.         }                                \
  166.       fprintf(asm_out_file,"\n");                     \
  167.       in_section = SECTION;                        \
  168.     }                                    \
  169. }                                    \
  170.  
  171. #undef    EXTRA_SECTIONS
  172. #define EXTRA_SECTIONS    in_bss, in_readonly_data,    \
  173.   in_objc_class, in_objc_meta_class, in_objc_category,    \
  174.   in_objc_class_vars, in_objc_instance_vars,        \
  175.   in_objc_cls_meth, in_objc_inst_meth,            \
  176.   in_objc_cat_cls_meth, in_objc_cat_inst_meth,        \
  177.   in_objc_selector_refs,                \
  178.   in_objc_symbols, in_objc_module_info,            \
  179.   in_objc_protocol, in_objc_string_object,        \
  180.   in_objc_class_names, in_objc_meth_var_names,        \
  181.   in_objc_meth_var_types, in_objc_cls_refs
  182.  
  183. #undef    EXTRA_SECTION_FUNCTIONS
  184. #define EXTRA_SECTION_FUNCTIONS            \
  185. void                        \
  186. bss_section ()                    \
  187. {                        \
  188.   if (in_section != in_bss)            \
  189.     {                        \
  190.       fprintf (asm_out_file, "%s\n",         \
  191.            BSS_SECTION_ASM_OP);        \
  192.       in_section = in_bss;            \
  193.     }                        \
  194. }                        \
  195. void                        \
  196. readonly_data ()                \
  197. {                        \
  198.   if (in_section != in_readonly_data)        \
  199.     {                        \
  200.       fprintf (asm_out_file, "%s\n",         \
  201.            READONLY_DATA_ASM_OP);        \
  202.       in_section = in_readonly_data;        \
  203.     }                        \
  204. }                        \
  205. SECTION_FUNCTION (objc_class_section,        \
  206.           in_objc_class,        \
  207.           "$$OBJC_CLASS$$")        \
  208. SECTION_FUNCTION (objc_meta_class_section,    \
  209.           in_objc_meta_class,        \
  210.           "$$OBJC_METACLASS$$")        \
  211. SECTION_FUNCTION (objc_category_section,    \
  212.           in_objc_category,        \
  213.          "$$OBJC_CATEGORY$$")        \
  214. SECTION_FUNCTION (objc_class_vars_section,    \
  215.           in_objc_class_vars,        \
  216.           "$$OBJC_CLASS_VARS$$")    \
  217. SECTION_FUNCTION (objc_instance_vars_section,    \
  218.           in_objc_instance_vars,    \
  219.           "$$OBJC_INSTANCE_VARS$$")    \
  220. SECTION_FUNCTION (objc_cls_meth_section,    \
  221.           in_objc_cls_meth,        \
  222.           "$$OBJC_CLS_METH$$")        \
  223. SECTION_FUNCTION (objc_inst_meth_section,    \
  224.           in_objc_inst_meth,        \
  225.           "$$OBJC_INST_METHODS$$")    \
  226. SECTION_FUNCTION (objc_cat_cls_meth_section,    \
  227.           in_objc_cat_cls_meth,        \
  228.           "$$OBJC_CAT_CLS_METH$$")    \
  229. SECTION_FUNCTION (objc_cat_inst_meth_section,    \
  230.           in_objc_cat_inst_meth,    \
  231.           "$$OBJC_CAT_INST_METH$$")    \
  232. SECTION_FUNCTION (objc_selector_refs_section,    \
  233.           in_objc_selector_refs,    \
  234.           "$$OBJC_MESSAGE_REFS$$")    \
  235. SECTION_FUNCTION (objc_symbols_section,        \
  236.           in_objc_symbols,        \
  237.           "$$OBJC_SYMBOLS$$")        \
  238. SECTION_FUNCTION (objc_module_info_section,    \
  239.           in_objc_module_info,        \
  240.           "$$OBJC_MODULES$$")        \
  241. SECTION_FUNCTION (objc_protocol_section,    \
  242.           in_objc_protocol,        \
  243.           "$$OBJC_PROTOCOL$$")        \
  244. SECTION_FUNCTION (objc_string_object_section,    \
  245.           in_objc_string_object,    \
  246.           "$$OBJC_STRING_OBJECT$$")    \
  247. SECTION_FUNCTION (objc_class_names_section,    \
  248.         in_objc_class_names,        \
  249.         "$$OBJC_CLASS_NAMES$$")        \
  250. SECTION_FUNCTION (objc_meth_var_names_section,    \
  251.         in_objc_meth_var_names,        \
  252.         "$$OBJC_METH_VAR_NAMES$$")    \
  253. SECTION_FUNCTION (objc_meth_var_types_section,    \
  254.         in_objc_meth_var_types,        \
  255.         "$$OBJC_METH_VAR_TYPES$$")    \
  256. SECTION_FUNCTION (objc_cls_refs_section,    \
  257.         in_objc_cls_refs,        \
  258.         "$$OBJC_CLS_REFS$$")        \
  259.                         \
  260. void                        \
  261. objc_section_init ()                \
  262. {                        \
  263.   static int been_here = 0;            \
  264.                         \
  265.   if (been_here == 0)                \
  266.     {                        \
  267.       been_here = 1;                \
  268.       objc_class_section ();            \
  269.       objc_meta_class_section ();        \
  270.       objc_cat_cls_meth_section ();        \
  271.       objc_cat_inst_meth_section ();        \
  272.       objc_cls_meth_section ();            \
  273.       objc_inst_meth_section ();        \
  274.       objc_selector_refs_section ();        \
  275.       objc_symbols_section ();            \
  276.       objc_category_section ();            \
  277.       objc_protocol_section ();            \
  278.       objc_class_vars_section ();        \
  279.       objc_instance_vars_section ();        \
  280.       objc_module_info_section ();        \
  281.       objc_string_object_section ();        \
  282.       objc_class_names_section ();        \
  283.       objc_meth_var_names_section ();        \
  284.       objc_meth_var_types_section ();        \
  285.       objc_cls_refs_section ();            \
  286.     }                        \
  287. }
  288.  
  289. /* different from NS version in that no literalX_section */ 
  290. #undef    SELECT_SECTION
  291. #define SELECT_SECTION(exp,reloc)                \
  292.   do                                \
  293.     {                                \
  294.       if (TREE_CODE (exp) == STRING_CST)            \
  295.     {                            \
  296.       if (flag_writable_strings)                \
  297.         data_section ();                    \
  298.       else     \
  299.         readonly_data_section ();                \
  300.     }                            \
  301.       else if (TREE_CODE (exp) == INTEGER_CST            \
  302.            || TREE_CODE (exp) == REAL_CST)            \
  303.         {                            \
  304.         readonly_data_section ();                \
  305.     }                            \
  306.       else if (TREE_CODE (exp) == CONSTRUCTOR                \
  307.            && TREE_TYPE (exp)                    \
  308.            && TREE_CODE (TREE_TYPE (exp)) == RECORD_TYPE        \
  309.            && TYPE_NAME (TREE_TYPE (exp))                \
  310.            && TREE_CODE (TYPE_NAME (TREE_TYPE (exp))) == IDENTIFIER_NODE \
  311.            && IDENTIFIER_POINTER (TYPE_NAME (TREE_TYPE (exp))))    \
  312.       {                                \
  313.       if (!strcmp (IDENTIFIER_POINTER (TYPE_NAME (TREE_TYPE (exp))), \
  314.             "NXConstantString"))                \
  315.       objc_string_object_section ();                \
  316.     else if ((TREE_READONLY (exp) || TREE_CONSTANT (exp))        \
  317.         && !TREE_SIDE_EFFECTS (exp))                \
  318.       readonly_data_section ();                    \
  319.     else                                \
  320.       data_section ();                        \
  321.       }                                    \
  322.       else if (TREE_CODE (exp) == VAR_DECL &&                \
  323.            DECL_NAME (exp) &&                    \
  324.            TREE_CODE (DECL_NAME (exp)) == IDENTIFIER_NODE &&    \
  325.            IDENTIFIER_POINTER (DECL_NAME (exp)) &&            \
  326.            !strncmp (IDENTIFIER_POINTER (DECL_NAME (exp)), "_OBJC_", 6)) \
  327.     {                                \
  328.       const char *name = IDENTIFIER_POINTER (DECL_NAME (exp));    \
  329.                                       \
  330.       if (!strncmp (name, "_OBJC_CLASS_METHODS_", 20))        \
  331.         objc_cls_meth_section ();                    \
  332.       else if (!strncmp (name, "_OBJC_INSTANCE_METHODS_", 23))    \
  333.         objc_inst_meth_section ();                    \
  334.       else if (!strncmp (name, "_OBJC_CATEGORY_CLASS_METHODS_", 20)) \
  335.         objc_cat_cls_meth_section ();                \
  336.       else if (!strncmp (name, "_OBJC_CATEGORY_INSTANCE_METHODS_", 23)) \
  337.         objc_cat_inst_meth_section ();                \
  338.       else if (!strncmp (name, "_OBJC_CLASS_VARIABLES_", 22))    \
  339.         objc_class_vars_section ();                    \
  340.       else if (!strncmp (name, "_OBJC_INSTANCE_VARIABLES_", 25))    \
  341.         objc_instance_vars_section ();                \
  342.       else if (!strncmp (name, "_OBJC_CLASS_PROTOCOLS_", 22))    \
  343.         objc_cat_cls_meth_section ();                \
  344.       else if (!strncmp (name, "_OBJC_CLASS_NAME_", 17))        \
  345.         objc_class_names_section ();                \
  346.       else if (!strncmp (name, "_OBJC_METH_VAR_NAME_", 20))        \
  347.         objc_meth_var_names_section ();                \
  348.       else if (!strncmp (name, "_OBJC_METH_VAR_TYPE_", 20))        \
  349.         objc_meth_var_types_section ();                \
  350.       else if (!strncmp (name, "_OBJC_CLASS_REFERENCES", 22))    \
  351.         objc_cls_refs_section ();                    \
  352.       else if (!strncmp (name, "_OBJC_CLASS_", 12))            \
  353.         objc_class_section ();                    \
  354.       else if (!strncmp (name, "_OBJC_METACLASS_", 16))        \
  355.         objc_meta_class_section ();                    \
  356.       else if (!strncmp (name, "_OBJC_CATEGORY_", 15))        \
  357.         objc_category_section ();                    \
  358.       else if (!strncmp (name, "_OBJC_SELECTOR_REFERENCES", 25))    \
  359.         objc_selector_refs_section ();                \
  360.       else if (!strncmp (name, "_OBJC_SYMBOLS", 13))        \
  361.         objc_symbols_section ();                    \
  362.       else if (!strncmp (name, "_OBJC_MODULES", 13))        \
  363.         objc_module_info_section ();                \
  364.       else if (!strncmp (name, "_OBJC_PROTOCOL_INSTANCE_METHODS_", 32)) \
  365.         objc_cat_inst_meth_section ();                              \
  366.       else if (!strncmp (name, "_OBJC_PROTOCOL_CLASS_METHODS_", 29)) \
  367.         objc_cat_cls_meth_section ();                               \
  368.       else if (!strncmp (name, "_OBJC_PROTOCOL_REFS_", 20))         \
  369.         objc_cat_cls_meth_section ();                               \
  370.       else if (!strncmp (name, "_OBJC_PROTOCOL_", 15))              \
  371.         objc_protocol_section ();                                   \
  372.       else if ((TREE_READONLY (exp) || TREE_CONSTANT (exp))        \
  373.         && !TREE_SIDE_EFFECTS (exp))                 \
  374.         readonly_data_section ();                                   \
  375.       else                                \
  376.         data_section ();                        \
  377.     }                                \
  378.       else if ((TREE_READONLY (exp) || TREE_CONSTANT (exp))    \
  379.            && !TREE_SIDE_EFFECTS (exp))                \
  380.     readonly_data_section ();                    \
  381.       else                                \
  382.         data_section ();                        \
  383.     }                                    \
  384.   while (0)
  385.  
  386. /* this was added to support unresolved references in the gas assembler */
  387. #undef DECLARE_UNRESOLVED_REFERENCE
  388.  
  389.  
  390.  
  391.