home *** CD-ROM | disk | FTP | other *** search
/ OpenStep (Enterprise) / OpenStepENTCD.toast / OEDEV / GNUSRC.Z / next-pdo.h < prev    next >
Encoding:
C/C++ Source or Header  |  1996-01-23  |  19.3 KB  |  376 lines

  1.  
  2. /* Definitions of target machine for GNU compiler, for DEC Alpha.
  3.    Copyright (C) 1992, 1993 Free Software Foundation, Inc.
  4.    Contributed by Richard Kenner (kenner@nyu.edu)
  5.  
  6. This file is part of GNU CC.
  7.  
  8. GNU CC is free software; you can redistribute it and/or modify
  9. it under the terms of the GNU General Public License as published by
  10. the Free Software Foundation; either version 2, or (at your option)
  11. any later version.
  12.  
  13. GNU CC is distributed in the hope that it will be useful,
  14. but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16. GNU General Public License for more details.
  17.  
  18. You should have received a copy of the GNU General Public License
  19. along with GNU CC; see the file COPYING.  If not, write to
  20. the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  21.  
  22. #include "alpha/alpha-gdb.h"
  23.  
  24. /* Let's not have gas strip the symbols which start with 'L' or mips-tfile
  25. ** will complain!
  26. */
  27.  
  28. #undef ASM_SPEC
  29. #define ASM_SPEC "-L -nocpp"
  30.  
  31. /* This need to be verified on GOLD (the linker bug should be solved so we have
  32.    to be able to get rid of it ! */
  33. #undef LINK_SPEC
  34. #define LINK_SPEC  \
  35.   "-G 8 -O1 %{static|r:-non_shared} %{!static:%{!r:-call_shared}}"
  36.  
  37. #define USE_GAS
  38.  
  39. #define NEXT_OBJC_RUNTIME
  40.  
  41. #define NEXT_PDO
  42.  
  43. /*
  44.  * overrides for the funky places they put stuff
  45.  */
  46. #undef  GPLUSPLUS_INCLUDE_DIR
  47. #define GPLUSPLUS_INCLUDE_DIR "/usr/NextDeveloper/Headers/g++"
  48. #undef  INCLUDE_DEFAULTS
  49. #define INCLUDE_DEFAULTS                                \
  50.   {                                                     \
  51.     { GPLUSPLUS_INCLUDE_DIR, 1},                        \
  52.     { GCC_INCLUDE_DIR, 0},                              \
  53.     { LOCAL_INCLUDE_DIR, 0},                            \
  54.     { "/usr/NextDeveloper/Headers", 0},                 \
  55.     { "/usr/NextDeveloper/Headers/ansi", 0},            \
  56.     { "/usr/LocalDeveloper/Headers", 0},                \
  57.     { "/usr/LocalDeveloper/Headers/ansi", 0},           \
  58.     { STANDARD_INCLUDE_DIR, 0},                         \
  59.     { 0, 0}                                             \
  60.   }
  61.  
  62. /* RIPPED OFF FROM nextstep.h */
  63.  
  64. /* Give methods pretty symbol names on NeXT. */
  65.  
  66. #undef  OBJC_GEN_METHOD_LABEL
  67. #define OBJC_GEN_METHOD_LABEL(BUF,IS_INST,CLASS_NAME,CAT_NAME,SEL_NAME,NUM) \
  68.   do { if (CAT_NAME)                                                    \
  69.          sprintf (BUF, "%c[%s(%s) %s]", (IS_INST) ? '-' : '+',          \
  70.                   (CLASS_NAME), (CAT_NAME), (SEL_NAME));                \
  71.        else                                                             \
  72.          sprintf (BUF, "%c[%s %s]", (IS_INST) ? '-' : '+',              \
  73.                   (CLASS_NAME), (SEL_NAME));                            \
  74.      } while (0)
  75.  
  76. /* Wrap new method names in quotes so the assembler doesn't gag.
  77.    Make Objective-C internal symbols local.  */
  78.  
  79. #undef  ASM_OUTPUT_LABELREF
  80. #define ASM_OUTPUT_LABELREF(FILE,NAME)  \
  81.   do {  \
  82.         if (NAME[1] == '+' || NAME[1] == '-') \
  83.                 fprintf (FILE, "\"%s\"", NAME+1); \
  84.         else if (NAME[0] == '+' || NAME[0] == '-') \
  85.                 fprintf (FILE, "\"%s\"", NAME); \
  86.         else fprintf ((FILE), "%s", NAME); } while (0)
  87.  
  88.  
  89. #undef CPP_PREDEFINES
  90. #define CPP_PREDEFINES \
  91.   "-Dunix -D__osf__ -D__alpha -D__alpha__ -D__alpha -DNeXT_PDO -D_LONGLONG \
  92.    -DSYSTYPE_BSD -D_SYSTYPE_BSD -D__ARCHITECTURE__=\"alpha\" \
  93.    -D__LITTLE_ENDIAN__ -Asystem(unix) \
  94.    -Asystem(xpg4) -Acpu(alpha) -Amachine(alpha)"
  95.  
  96. #undef LIB_SPEC
  97. #define LIB_SPEC "%{!p:%{!pg:-L/usr/NextDeveloper/lib %{!nopdolib:-lpdo} -lc -lpthreads -lmach -lc_r}}%{p:-L/usr/NextDeveloper/lib %{!nopdolib:-lpdo} -L/usr/lib/cmplrs/cc/ -lprof1 -lc -lpthreads -lmach -lc_r}%{pg:-L/usr/NextDeveloper/lib %{!nopdolib:-lpdo} -L/usr/lib/cmplrs/cc/ -lprof1 -lc -lpthreads -lmach -lc_r}"
  98.  
  99. /* RIPPED OFF FROM nextstep.h */
  100. #undef WORD_SWITCH_TAKES_ARG
  101. #define WORD_SWITCH_TAKES_ARG(STR)                \
  102.   (DEFAULT_WORD_SWITCH_TAKES_ARG (STR)                \
  103.    || !strcmp (STR, "target")                     \
  104.    || !strcmp (STR, "assert")                    \
  105.    || !strcmp (STR, "arch")                    \
  106.    || !strcmp (STR, "filelist")                    \
  107.    || !strcmp (STR, "framework"))
  108.  
  109.  
  110. #undef  WORD_SWITCH
  111. #define WORD_SWITCH(STR)                        \
  112.   (WORD_SWITCH_TAKES_ARG (STR)                  \
  113.    || !strcmp (STR, "bsd")                      \
  114.    || !strcmp (STR, "object")                   \
  115.    || !strcmp (STR, "ObjC")                     \
  116.    || !strcmp (STR, "all_load"))
  117.  
  118. #undef  SECTION_FUNCTION
  119. #define SECTION_FUNCTION(FUNCTION, SECTION, DIRECTIVE, WAS_TEXT, OBJC)  \
  120. void                                                                    \
  121. FUNCTION ()                                                             \
  122. {                                                                       \
  123.   extern void text_section ();                                          \
  124.   extern void objc_section_init ();                                     \
  125.   extern int flag_no_mach_text_sections;                                \
  126.                                                                         \
  127.   if (WAS_TEXT && flag_no_mach_text_sections)                           \
  128.     text_section ();                                                    \
  129.   else if (in_section != SECTION)                                       \
  130.     {                                                                   \
  131.       if (OBJC)                                                         \
  132.         objc_section_init ();                                           \
  133.       fprintf (asm_out_file, "%s\n", DIRECTIVE);                        \
  134.       in_section = SECTION;                                             \
  135.     }                                                                   \
  136. }                                                     \
  137.  
  138.  
  139. #undef  EXTRA_SECTIONS
  140. #define EXTRA_SECTIONS                                  \
  141.   in_sdata, in_lit4, in_lit8, in_lita, in_rdata, \
  142.   in_objc_class, in_objc_meta_class, in_objc_category,  \
  143.   in_objc_class_vars, in_objc_instance_vars,            \
  144.   in_objc_cls_meth, in_objc_inst_meth,                  \
  145.   in_objc_cat_cls_meth, in_objc_cat_inst_meth,          \
  146.   in_objc_selector_refs,                                \
  147.   in_objc_symbols, in_objc_module_info,                 \
  148.   in_objc_protocol, in_objc_string_object,              \
  149.   in_objc_class_names, in_objc_meth_var_names,          \
  150.   in_objc_meth_var_types, in_objc_cls_refs
  151.  
  152. #undef  EXTRA_SECTION_FUNCTIONS
  153. #define EXTRA_SECTION_FUNCTIONS                 \
  154. SECTION_FUNCTION (sdata_section,              \
  155.                   in_sdata,                   \
  156.                   ".sdata", 0, 0)             \
  157. SECTION_FUNCTION (lit4_section,             \
  158.                   in_lit4,                  \
  159.                   ".sdata", 0, 0)            \
  160. SECTION_FUNCTION (lit8_section,             \
  161.                   in_lit8,                  \
  162.                   ".sdata", 0, 0)            \
  163. SECTION_FUNCTION (lita_section,             \
  164.                   in_lita,                  \
  165.                   ".sdata", 0, 0)            \
  166. SECTION_FUNCTION (rdata_section,           \
  167.                   in_rdata,                \
  168.                   ".rdata", 0, 0)          \
  169. SECTION_FUNCTION (objc_class_section,           \
  170.                   in_objc_class,                \
  171.                   ".data \t#.objc_class", 0, 1)          \
  172. SECTION_FUNCTION (objc_meta_class_section,      \
  173.                   in_objc_meta_class,           \
  174.                   ".data \t#.objc_meta_class", 0, 1)     \
  175. SECTION_FUNCTION (objc_category_section,        \
  176.                   in_objc_category,             \
  177.                 ".data \t#.objc_category", 0, 1)         \
  178. SECTION_FUNCTION (objc_class_vars_section,      \
  179.                   in_objc_class_vars,           \
  180.                   ".data \t#.objc_class_vars", 0, 1)     \
  181. SECTION_FUNCTION (objc_instance_vars_section,   \
  182.                   in_objc_instance_vars,        \
  183.                   ".data \t#.objc_instance_vars", 0, 1)  \
  184. SECTION_FUNCTION (objc_cls_meth_section,        \
  185.                   in_objc_cls_meth,             \
  186.                   ".data \t#.objc_cls_meth", 0, 1)       \
  187. SECTION_FUNCTION (objc_inst_meth_section,       \
  188.                   in_objc_inst_meth,            \
  189.                   ".data \t#.objc_inst_meth", 0, 1)      \
  190. SECTION_FUNCTION (objc_cat_cls_meth_section,    \
  191.                   in_objc_cat_cls_meth,         \
  192.                   ".data \t#.objc_cat_cls_meth", 0, 1)   \
  193. SECTION_FUNCTION (objc_cat_inst_meth_section,   \
  194.                   in_objc_cat_inst_meth,        \
  195.                   ".data \t#.objc_cat_inst_meth", 0, 1)  \
  196. SECTION_FUNCTION (objc_selector_refs_section,   \
  197.                   in_objc_selector_refs,        \
  198.                   ".data \t#.objc_message_refs", 0, 1)   \
  199. SECTION_FUNCTION (objc_symbols_section,         \
  200.                   in_objc_symbols,              \
  201.                   ".data \t#.objc_symbols", 0, 1)        \
  202. SECTION_FUNCTION (objc_module_info_section,     \
  203.                   in_objc_module_info,          \
  204.                   ".text \t#.objc_module_info", 0, 1)    \
  205. SECTION_FUNCTION (objc_protocol_section,        \
  206.                   in_objc_protocol,             \
  207.                   ".data \t#.objc_protocol", 0, 1)       \
  208. SECTION_FUNCTION (objc_string_object_section,   \
  209.                   in_objc_string_object,        \
  210.                   ".data \t#.objc_string_object", 0, 1)  \
  211. SECTION_FUNCTION (objc_class_names_section,     \
  212.                 in_objc_class_names,            \
  213.                 ".data \t#.objc_class_names", 0, 1)      \
  214. SECTION_FUNCTION (objc_meth_var_names_section,  \
  215.                 in_objc_meth_var_names,         \
  216.                 ".data \t#.objc_meth_var_names", 0, 1)   \
  217. SECTION_FUNCTION (objc_meth_var_types_section,  \
  218.                 in_objc_meth_var_types,         \
  219.                 ".data \t#.objc_meth_var_types", 0, 1)   \
  220. SECTION_FUNCTION (objc_cls_refs_section,        \
  221.                 in_objc_cls_refs,               \
  222.                 ".data \t#.objc_cls_refs", 0, 1)         \
  223.                                                 \
  224. void                                            \
  225. objc_section_init ()                            \
  226. {                                               \
  227.   static int been_here = 0;                     \
  228.                                                 \
  229.   if (been_here == 0)                           \
  230.     {                                           \
  231.       been_here = 1;                            \
  232.       objc_class_section ();                    \
  233.       objc_meta_class_section ();               \
  234.       objc_cat_cls_meth_section ();             \
  235.       objc_cls_meth_section ();                 \
  236.       objc_inst_meth_section ();                \
  237.       objc_selector_refs_section ();            \
  238.       objc_symbols_section ();                  \
  239.       objc_category_section ();                 \
  240.       objc_protocol_section ();                 \
  241.       objc_class_vars_section ();               \
  242.       objc_instance_vars_section ();            \
  243.       objc_module_info_section ();              \
  244.       objc_string_object_section ();            \
  245.       objc_class_names_section ();              \
  246.       objc_meth_var_names_section ();           \
  247.       objc_meth_var_types_section ();           \
  248.       objc_cls_refs_section ();                 \
  249.     }                                           \
  250. }
  251.  
  252. #undef  READONLY_DATA_SECTION
  253. #define READONLY_DATA_SECTION rdata_section
  254.  
  255. #undef  SELECT_SECTION
  256. #define SELECT_SECTION(exp,reloc)                               \
  257.   do                                                            \
  258.     {                                                           \
  259.       if (TREE_CODE (exp) == STRING_CST)                        \
  260.         {                                                       \
  261.           if (flag_writable_strings)                            \
  262.             data_section ();                                    \
  263.           else         \
  264.             readonly_data_section ();                           \
  265.         }                                                       \
  266.       else if (TREE_CODE (exp) == INTEGER_CST                   \
  267.                || TREE_CODE (exp) == REAL_CST)                  \
  268.         {                                                       \
  269.           tree size = TYPE_SIZE (TREE_TYPE (exp));              \
  270.                                                                 \
  271.           if (TREE_CODE (size) == INTEGER_CST &&                \
  272.               TREE_INT_CST_LOW (size) == 4 &&                   \
  273.               TREE_INT_CST_HIGH (size) == 0)                    \
  274.             lit4_section ();                                \
  275.           else if (TREE_CODE (size) == INTEGER_CST &&           \
  276.               TREE_INT_CST_LOW (size) == 8 &&                   \
  277.               TREE_INT_CST_HIGH (size) == 0)                    \
  278.             lit8_section ();                                \
  279.           else                                                  \
  280.             readonly_data_section ();                           \
  281.         }                                                       \
  282.       else if (TREE_CODE (exp) == CONSTRUCTOR                           \
  283.                && TREE_TYPE (exp)                                       \
  284.                && TREE_CODE (TREE_TYPE (exp)) == RECORD_TYPE            \
  285.                && TYPE_NAME (TREE_TYPE (exp)))                          \
  286.         {                                                               \
  287.           tree name = TYPE_NAME (TREE_TYPE (exp));                      \
  288.           if (TREE_CODE (name) == TYPE_DECL)                            \
  289.             name = DECL_NAME (name);                                    \
  290.           if (!strcmp (IDENTIFIER_POINTER (name), "NXConstantString"))  \
  291.             objc_string_object_section ();                              \
  292.           else if ((TREE_READONLY (exp) || TREE_CONSTANT (exp))         \
  293.                 && !TREE_SIDE_EFFECTS (exp))                            \
  294.             readonly_data_section ();                                   \
  295.           else                                                          \
  296.             data_section ();                                            \
  297.       }                                                                 \
  298.       else if (TREE_CODE (exp) == VAR_DECL &&                           \
  299.                DECL_NAME (exp) &&                                       \
  300.                TREE_CODE (DECL_NAME (exp)) == IDENTIFIER_NODE &&        \
  301.                IDENTIFIER_POINTER (DECL_NAME (exp)) &&                  \
  302.                !strncmp (IDENTIFIER_POINTER (DECL_NAME (exp)), "_OBJC_", 6)) \
  303.         {                                                               \
  304.           const char *name = IDENTIFIER_POINTER (DECL_NAME (exp));      \
  305.                                                                         \
  306.           if (!strncmp (name, "_OBJC_CLASS_METHODS_", 20))              \
  307.             objc_cls_meth_section ();                                   \
  308.           else if (!strncmp (name, "_OBJC_INSTANCE_METHODS_", 23))      \
  309.             objc_inst_meth_section ();                                  \
  310.           else if (!strncmp (name, "_OBJC_CATEGORY_CLASS_METHODS_", 20)) \
  311.             objc_cat_cls_meth_section ();                               \
  312.           else if (!strncmp (name, "_OBJC_CATEGORY_INSTANCE_METHODS_", 23)) \
  313.             objc_cat_inst_meth_section ();                              \
  314.           else if (!strncmp (name, "_OBJC_CLASS_VARIABLES_", 22))       \
  315.             objc_class_vars_section ();                                 \
  316.           else if (!strncmp (name, "_OBJC_INSTANCE_VARIABLES_", 25))    \
  317.             objc_instance_vars_section ();                              \
  318.           else if (!strncmp (name, "_OBJC_CLASS_PROTOCOLS_", 22))       \
  319.             objc_cat_cls_meth_section ();                               \
  320.           else if (!strncmp (name, "_OBJC_CLASS_NAME_", 17))            \
  321.             objc_class_names_section ();                                \
  322.           else if (!strncmp (name, "_OBJC_METH_VAR_NAME_", 20))         \
  323.             objc_meth_var_names_section ();                             \
  324.           else if (!strncmp (name, "_OBJC_METH_VAR_TYPE_", 20))         \
  325.             objc_meth_var_types_section ();                             \
  326.           else if (!strncmp (name, "_OBJC_CLASS_REFERENCES", 22))       \
  327.             objc_cls_refs_section ();                                   \
  328.           else if (!strncmp (name, "_OBJC_CLASS_", 12))                 \
  329.             objc_class_section ();                                      \
  330.           else if (!strncmp (name, "_OBJC_METACLASS_", 16))             \
  331.             objc_meta_class_section ();                                 \
  332.           else if (!strncmp (name, "_OBJC_CATEGORY_", 15))              \
  333.             objc_category_section ();                                   \
  334.           else if (!strncmp (name, "_OBJC_SELECTOR_REFERENCES", 25))    \
  335.             objc_selector_refs_section ();                              \
  336.           else if (!strncmp (name, "_OBJC_SYMBOLS", 13))                \
  337.             objc_symbols_section ();                                    \
  338.           else if (!strncmp (name, "_OBJC_MODULES", 13))                \
  339.             objc_module_info_section ();                                \
  340.           else if (!strncmp (name, "_OBJC_PROTOCOL_INSTANCE_METHODS_", 32)) \
  341.             objc_cat_inst_meth_section ();                              \
  342.           else if (!strncmp (name, "_OBJC_PROTOCOL_CLASS_METHODS_", 29)) \
  343.             objc_cat_cls_meth_section ();                               \
  344.           else if (!strncmp (name, "_OBJC_PROTOCOL_REFS_", 20))         \
  345.             objc_cat_cls_meth_section ();                               \
  346.           else if (!strncmp (name, "_OBJC_PROTOCOL_", 15))              \
  347.             objc_protocol_section ();                                   \
  348.           else if ((TREE_READONLY (exp) || TREE_CONSTANT (exp))         \
  349.                 && !TREE_SIDE_EFFECTS (exp))                            \
  350.             readonly_data_section ();                                   \
  351.           else                                                          \
  352.             data_section ();                                            \
  353.         }                                                               \
  354.       else if ((TREE_READONLY (exp) || TREE_CONSTANT (exp))     \
  355.                && !TREE_SIDE_EFFECTS (exp))                             \
  356.         readonly_data_section ();                                       \
  357.       else                                                              \
  358.         data_section ();                                                \
  359.     }                                                                   \
  360.   while (0)
  361.  
  362. #undef  SELECT_RTX_SECTION
  363. #define SELECT_RTX_SECTION(mode, rtx)                                   \
  364.   do                                                                    \
  365.     {                                                                   \
  366.       if (GET_MODE_SIZE(mode) == 8)                                     \
  367.         lit8_section();                                             \
  368.       else if (GET_MODE_SIZE(mode) == 4)                                \
  369.         lit4_section();                                             \
  370.       else                                                              \
  371.         rdata_section ();                                               \
  372.     }                                                                   \
  373.   while (0)
  374.  
  375.  
  376.