home *** CD-ROM | disk | FTP | other *** search
/ OpenStep 4.2J (Developer) / os42jdev.iso / NextDeveloper / Source / GNU / gcc / config / alpha / next-pdo.h < prev    next >
C/C++ Source or Header  |  1997-01-22  |  20KB  |  377 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.     { TOOL_INCLUDE_DIR, 0},                \
  54.     { LOCAL_INCLUDE_DIR, 0},                            \
  55.     { "/usr/NextDeveloper/Headers", 0},                 \
  56.     { "/usr/NextDeveloper/Headers/ansi", 0},            \
  57.     { "/usr/LocalDeveloper/Headers", 0},                \
  58.     { "/usr/LocalDeveloper/Headers/ansi", 0},           \
  59.     { STANDARD_INCLUDE_DIR, 0},                         \
  60.     { 0, 0}                                             \
  61.   }
  62.  
  63. /* RIPPED OFF FROM nextstep.h */
  64.  
  65. /* Give methods pretty symbol names on NeXT. */
  66.  
  67. #undef  OBJC_GEN_METHOD_LABEL
  68. #define OBJC_GEN_METHOD_LABEL(BUF,IS_INST,CLASS_NAME,CAT_NAME,SEL_NAME,NUM) \
  69.   do { if (CAT_NAME)                                                    \
  70.          sprintf (BUF, "%c[%s(%s) %s]", (IS_INST) ? '-' : '+',          \
  71.                   (CLASS_NAME), (CAT_NAME), (SEL_NAME));                \
  72.        else                                                             \
  73.          sprintf (BUF, "%c[%s %s]", (IS_INST) ? '-' : '+',              \
  74.                   (CLASS_NAME), (SEL_NAME));                            \
  75.      } while (0)
  76.  
  77. /* Wrap new method names in quotes so the assembler doesn't gag.
  78.    Make Objective-C internal symbols local.  */
  79.  
  80. #undef  ASM_OUTPUT_LABELREF
  81. #define ASM_OUTPUT_LABELREF(FILE,NAME)  \
  82.   do {  \
  83.         if (NAME[1] == '+' || NAME[1] == '-') \
  84.                 fprintf (FILE, "\"%s\"", NAME+1); \
  85.         else if (NAME[0] == '+' || NAME[0] == '-') \
  86.                 fprintf (FILE, "\"%s\"", NAME); \
  87.         else fprintf ((FILE), "%s", NAME); } while (0)
  88.  
  89.  
  90. #undef CPP_PREDEFINES
  91. #define CPP_PREDEFINES \
  92.   "-Dunix -D__osf__ -D__alpha -D__alpha__ -D__alpha -DNeXT_PDO -D_LONGLONG \
  93.    -DSYSTYPE_BSD -D_SYSTYPE_BSD -D__ARCHITECTURE__=\"alpha\" \
  94.    -D__LITTLE_ENDIAN__ -Asystem(unix) \
  95.    -Asystem(xpg4) -Acpu(alpha) -Amachine(alpha)"
  96.  
  97. #undef LIB_SPEC
  98. #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}"
  99.  
  100. /* RIPPED OFF FROM nextstep.h */
  101. #undef WORD_SWITCH_TAKES_ARG
  102. #define WORD_SWITCH_TAKES_ARG(STR)                \
  103.   (DEFAULT_WORD_SWITCH_TAKES_ARG (STR)                \
  104.    || !strcmp (STR, "target")                     \
  105.    || !strcmp (STR, "assert")                    \
  106.    || !strcmp (STR, "arch")                    \
  107.    || !strcmp (STR, "filelist")                    \
  108.    || !strcmp (STR, "framework"))
  109.  
  110.  
  111. #undef  WORD_SWITCH
  112. #define WORD_SWITCH(STR)                        \
  113.   (WORD_SWITCH_TAKES_ARG (STR)                  \
  114.    || !strcmp (STR, "bsd")                      \
  115.    || !strcmp (STR, "object")                   \
  116.    || !strcmp (STR, "ObjC")                     \
  117.    || !strcmp (STR, "all_load"))
  118.  
  119. #undef  SECTION_FUNCTION
  120. #define SECTION_FUNCTION(FUNCTION, SECTION, DIRECTIVE, WAS_TEXT, OBJC)  \
  121. void                                                                    \
  122. FUNCTION ()                                                             \
  123. {                                                                       \
  124.   extern void text_section ();                                          \
  125.   extern void objc_section_init ();                                     \
  126.   extern int flag_no_mach_text_sections;                                \
  127.                                                                         \
  128.   if (WAS_TEXT && flag_no_mach_text_sections)                           \
  129.     text_section ();                                                    \
  130.   else if (in_section != SECTION)                                       \
  131.     {                                                                   \
  132.       if (OBJC)                                                         \
  133.         objc_section_init ();                                           \
  134.       fprintf (asm_out_file, "%s\n", DIRECTIVE);                        \
  135.       in_section = SECTION;                                             \
  136.     }                                                                   \
  137. }                                                     \
  138.  
  139.  
  140. #undef  EXTRA_SECTIONS
  141. #define EXTRA_SECTIONS                                  \
  142.   in_sdata, in_lit4, in_lit8, in_lita, in_rdata, \
  143.   in_objc_class, in_objc_meta_class, in_objc_category,  \
  144.   in_objc_class_vars, in_objc_instance_vars,            \
  145.   in_objc_cls_meth, in_objc_inst_meth,                  \
  146.   in_objc_cat_cls_meth, in_objc_cat_inst_meth,          \
  147.   in_objc_selector_refs,                                \
  148.   in_objc_symbols, in_objc_module_info,                 \
  149.   in_objc_protocol, in_objc_string_object,              \
  150.   in_objc_class_names, in_objc_meth_var_names,          \
  151.   in_objc_meth_var_types, in_objc_cls_refs
  152.  
  153. #undef  EXTRA_SECTION_FUNCTIONS
  154. #define EXTRA_SECTION_FUNCTIONS                 \
  155. SECTION_FUNCTION (sdata_section,              \
  156.                   in_sdata,                   \
  157.                   ".sdata", 0, 0)             \
  158. SECTION_FUNCTION (lit4_section,             \
  159.                   in_lit4,                  \
  160.                   ".sdata", 0, 0)            \
  161. SECTION_FUNCTION (lit8_section,             \
  162.                   in_lit8,                  \
  163.                   ".sdata", 0, 0)            \
  164. SECTION_FUNCTION (lita_section,             \
  165.                   in_lita,                  \
  166.                   ".sdata", 0, 0)            \
  167. SECTION_FUNCTION (rdata_section,           \
  168.                   in_rdata,                \
  169.                   ".rdata", 0, 0)          \
  170. SECTION_FUNCTION (objc_class_section,           \
  171.                   in_objc_class,                \
  172.                   ".data \t#.objc_class", 0, 1)          \
  173. SECTION_FUNCTION (objc_meta_class_section,      \
  174.                   in_objc_meta_class,           \
  175.                   ".data \t#.objc_meta_class", 0, 1)     \
  176. SECTION_FUNCTION (objc_category_section,        \
  177.                   in_objc_category,             \
  178.                 ".data \t#.objc_category", 0, 1)         \
  179. SECTION_FUNCTION (objc_class_vars_section,      \
  180.                   in_objc_class_vars,           \
  181.                   ".data \t#.objc_class_vars", 0, 1)     \
  182. SECTION_FUNCTION (objc_instance_vars_section,   \
  183.                   in_objc_instance_vars,        \
  184.                   ".data \t#.objc_instance_vars", 0, 1)  \
  185. SECTION_FUNCTION (objc_cls_meth_section,        \
  186.                   in_objc_cls_meth,             \
  187.                   ".data \t#.objc_cls_meth", 0, 1)       \
  188. SECTION_FUNCTION (objc_inst_meth_section,       \
  189.                   in_objc_inst_meth,            \
  190.                   ".data \t#.objc_inst_meth", 0, 1)      \
  191. SECTION_FUNCTION (objc_cat_cls_meth_section,    \
  192.                   in_objc_cat_cls_meth,         \
  193.                   ".data \t#.objc_cat_cls_meth", 0, 1)   \
  194. SECTION_FUNCTION (objc_cat_inst_meth_section,   \
  195.                   in_objc_cat_inst_meth,        \
  196.                   ".data \t#.objc_cat_inst_meth", 0, 1)  \
  197. SECTION_FUNCTION (objc_selector_refs_section,   \
  198.                   in_objc_selector_refs,        \
  199.                   ".data \t#.objc_message_refs", 0, 1)   \
  200. SECTION_FUNCTION (objc_symbols_section,         \
  201.                   in_objc_symbols,              \
  202.                   ".data \t#.objc_symbols", 0, 1)        \
  203. SECTION_FUNCTION (objc_module_info_section,     \
  204.                   in_objc_module_info,          \
  205.                   ".text \t#.objc_module_info", 0, 1)    \
  206. SECTION_FUNCTION (objc_protocol_section,        \
  207.                   in_objc_protocol,             \
  208.                   ".data \t#.objc_protocol", 0, 1)       \
  209. SECTION_FUNCTION (objc_string_object_section,   \
  210.                   in_objc_string_object,        \
  211.                   ".data \t#.objc_string_object", 0, 1)  \
  212. SECTION_FUNCTION (objc_class_names_section,     \
  213.                 in_objc_class_names,            \
  214.                 ".data \t#.objc_class_names", 0, 1)      \
  215. SECTION_FUNCTION (objc_meth_var_names_section,  \
  216.                 in_objc_meth_var_names,         \
  217.                 ".data \t#.objc_meth_var_names", 0, 1)   \
  218. SECTION_FUNCTION (objc_meth_var_types_section,  \
  219.                 in_objc_meth_var_types,         \
  220.                 ".data \t#.objc_meth_var_types", 0, 1)   \
  221. SECTION_FUNCTION (objc_cls_refs_section,        \
  222.                 in_objc_cls_refs,               \
  223.                 ".data \t#.objc_cls_refs", 0, 1)         \
  224.                                                 \
  225. void                                            \
  226. objc_section_init ()                            \
  227. {                                               \
  228.   static int been_here = 0;                     \
  229.                                                 \
  230.   if (been_here == 0)                           \
  231.     {                                           \
  232.       been_here = 1;                            \
  233.       objc_class_section ();                    \
  234.       objc_meta_class_section ();               \
  235.       objc_cat_cls_meth_section ();             \
  236.       objc_cls_meth_section ();                 \
  237.       objc_inst_meth_section ();                \
  238.       objc_selector_refs_section ();            \
  239.       objc_symbols_section ();                  \
  240.       objc_category_section ();                 \
  241.       objc_protocol_section ();                 \
  242.       objc_class_vars_section ();               \
  243.       objc_instance_vars_section ();            \
  244.       objc_module_info_section ();              \
  245.       objc_string_object_section ();            \
  246.       objc_class_names_section ();              \
  247.       objc_meth_var_names_section ();           \
  248.       objc_meth_var_types_section ();           \
  249.       objc_cls_refs_section ();                 \
  250.     }                                           \
  251. }
  252.  
  253. #undef  READONLY_DATA_SECTION
  254. #define READONLY_DATA_SECTION rdata_section
  255.  
  256. #undef  SELECT_SECTION
  257. #define SELECT_SECTION(exp,reloc)                               \
  258.   do                                                            \
  259.     {                                                           \
  260.       if (TREE_CODE (exp) == STRING_CST)                        \
  261.         {                                                       \
  262.           if (flag_writable_strings)                            \
  263.             data_section ();                                    \
  264.           else         \
  265.             readonly_data_section ();                           \
  266.         }                                                       \
  267.       else if (TREE_CODE (exp) == INTEGER_CST                   \
  268.                || TREE_CODE (exp) == REAL_CST)                  \
  269.         {                                                       \
  270.           tree size = TYPE_SIZE (TREE_TYPE (exp));              \
  271.                                                                 \
  272.           if (TREE_CODE (size) == INTEGER_CST &&                \
  273.               TREE_INT_CST_LOW (size) == 4 &&                   \
  274.               TREE_INT_CST_HIGH (size) == 0)                    \
  275.             lit4_section ();                                \
  276.           else if (TREE_CODE (size) == INTEGER_CST &&           \
  277.               TREE_INT_CST_LOW (size) == 8 &&                   \
  278.               TREE_INT_CST_HIGH (size) == 0)                    \
  279.             lit8_section ();                                \
  280.           else                                                  \
  281.             readonly_data_section ();                           \
  282.         }                                                       \
  283.       else if (TREE_CODE (exp) == CONSTRUCTOR                           \
  284.                && TREE_TYPE (exp)                                       \
  285.                && TREE_CODE (TREE_TYPE (exp)) == RECORD_TYPE            \
  286.                && TYPE_NAME (TREE_TYPE (exp)))                          \
  287.         {                                                               \
  288.           tree name = TYPE_NAME (TREE_TYPE (exp));                      \
  289.           if (TREE_CODE (name) == TYPE_DECL)                            \
  290.             name = DECL_NAME (name);                                    \
  291.           if (!strcmp (IDENTIFIER_POINTER (name), "NXConstantString"))  \
  292.             objc_string_object_section ();                              \
  293.           else if ((TREE_READONLY (exp) || TREE_CONSTANT (exp))         \
  294.                 && !TREE_SIDE_EFFECTS (exp))                            \
  295.             readonly_data_section ();                                   \
  296.           else                                                          \
  297.             data_section ();                                            \
  298.       }                                                                 \
  299.       else if (TREE_CODE (exp) == VAR_DECL &&                           \
  300.                DECL_NAME (exp) &&                                       \
  301.                TREE_CODE (DECL_NAME (exp)) == IDENTIFIER_NODE &&        \
  302.                IDENTIFIER_POINTER (DECL_NAME (exp)) &&                  \
  303.                !strncmp (IDENTIFIER_POINTER (DECL_NAME (exp)), "_OBJC_", 6)) \
  304.         {                                                               \
  305.           const char *name = IDENTIFIER_POINTER (DECL_NAME (exp));      \
  306.                                                                         \
  307.           if (!strncmp (name, "_OBJC_CLASS_METHODS_", 20))              \
  308.             objc_cls_meth_section ();                                   \
  309.           else if (!strncmp (name, "_OBJC_INSTANCE_METHODS_", 23))      \
  310.             objc_inst_meth_section ();                                  \
  311.           else if (!strncmp (name, "_OBJC_CATEGORY_CLASS_METHODS_", 20)) \
  312.             objc_cat_cls_meth_section ();                               \
  313.           else if (!strncmp (name, "_OBJC_CATEGORY_INSTANCE_METHODS_", 23)) \
  314.             objc_cat_inst_meth_section ();                              \
  315.           else if (!strncmp (name, "_OBJC_CLASS_VARIABLES_", 22))       \
  316.             objc_class_vars_section ();                                 \
  317.           else if (!strncmp (name, "_OBJC_INSTANCE_VARIABLES_", 25))    \
  318.             objc_instance_vars_section ();                              \
  319.           else if (!strncmp (name, "_OBJC_CLASS_PROTOCOLS_", 22))       \
  320.             objc_cat_cls_meth_section ();                               \
  321.           else if (!strncmp (name, "_OBJC_CLASS_NAME_", 17))            \
  322.             objc_class_names_section ();                                \
  323.           else if (!strncmp (name, "_OBJC_METH_VAR_NAME_", 20))         \
  324.             objc_meth_var_names_section ();                             \
  325.           else if (!strncmp (name, "_OBJC_METH_VAR_TYPE_", 20))         \
  326.             objc_meth_var_types_section ();                             \
  327.           else if (!strncmp (name, "_OBJC_CLASS_REFERENCES", 22))       \
  328.             objc_cls_refs_section ();                                   \
  329.           else if (!strncmp (name, "_OBJC_CLASS_", 12))                 \
  330.             objc_class_section ();                                      \
  331.           else if (!strncmp (name, "_OBJC_METACLASS_", 16))             \
  332.             objc_meta_class_section ();                                 \
  333.           else if (!strncmp (name, "_OBJC_CATEGORY_", 15))              \
  334.             objc_category_section ();                                   \
  335.           else if (!strncmp (name, "_OBJC_SELECTOR_REFERENCES", 25))    \
  336.             objc_selector_refs_section ();                              \
  337.           else if (!strncmp (name, "_OBJC_SYMBOLS", 13))                \
  338.             objc_symbols_section ();                                    \
  339.           else if (!strncmp (name, "_OBJC_MODULES", 13))                \
  340.             objc_module_info_section ();                                \
  341.           else if (!strncmp (name, "_OBJC_PROTOCOL_INSTANCE_METHODS_", 32)) \
  342.             objc_cat_inst_meth_section ();                              \
  343.           else if (!strncmp (name, "_OBJC_PROTOCOL_CLASS_METHODS_", 29)) \
  344.             objc_cat_cls_meth_section ();                               \
  345.           else if (!strncmp (name, "_OBJC_PROTOCOL_REFS_", 20))         \
  346.             objc_cat_cls_meth_section ();                               \
  347.           else if (!strncmp (name, "_OBJC_PROTOCOL_", 15))              \
  348.             objc_protocol_section ();                                   \
  349.           else if ((TREE_READONLY (exp) || TREE_CONSTANT (exp))         \
  350.                 && !TREE_SIDE_EFFECTS (exp))                            \
  351.             readonly_data_section ();                                   \
  352.           else                                                          \
  353.             data_section ();                                            \
  354.         }                                                               \
  355.       else if ((TREE_READONLY (exp) || TREE_CONSTANT (exp))     \
  356.                && !TREE_SIDE_EFFECTS (exp))                             \
  357.         readonly_data_section ();                                       \
  358.       else                                                              \
  359.         data_section ();                                                \
  360.     }                                                                   \
  361.   while (0)
  362.  
  363. #undef  SELECT_RTX_SECTION
  364. #define SELECT_RTX_SECTION(mode, rtx)                                   \
  365.   do                                                                    \
  366.     {                                                                   \
  367.       if (GET_MODE_SIZE(mode) == 8)                                     \
  368.         lit8_section();                                             \
  369.       else if (GET_MODE_SIZE(mode) == 4)                                \
  370.         lit4_section();                                             \
  371.       else                                                              \
  372.         rdata_section ();                                               \
  373.     }                                                                   \
  374.   while (0)
  375.  
  376.  
  377.