File:  [Apple XNU] / GNUtools / cc / config / pa / next-pdo.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Tue Apr 24 17:45:49 2018 UTC (8 years, 2 months ago) by root
Branches: MAIN, Apple
CVS tags: HEAD, GNUtools33
GNU tools for NeXTSTEP 3.3

/* Target definitions for GNU compiler for hppa running HPUX with NeXT pdo
   Copyright (C) 1989, 1990, 1991, 1992, 1993 Free Software Foundation, Inc.

This file is part of GNU CC.

GNU CC is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.

GNU CC is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with GNU CC; see the file COPYING.  If not, write to
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */

/* added <jf> */
#define USE_GAS

/* this may not work for double values --  hard coded to 32 bit entities */

#define OBJC_FORWARDING_REG_OFFSET(ISREG, OFF, REGNO) \
  do { OFF = (FP_REG_CLASS_P( REGNO_REG_CLASS(REGNO)) \
              ? -2 * ((REGNO) - 44) - 4               \
              :  4 * ((REGNO) - 26) - 4);             \
       ISREG = 0; } while (0)

/* pa1-ghpux originally includes pa-ghpux.h and pa.h */
#include "pa/pa1-ghpux.h"

#define NEXT_OBJC_RUNTIME

#define OBJC_HPUX_PADDING

#define NEXT_PDO

/* 
 * overrides for the funky places we put stuff
 *	there was a bug in the beta where the /usr was not prefixed
 */
#undef	INCLUDE_DEFAULTS
#define INCLUDE_DEFAULTS				\
  {							\
    { GPLUSPLUS_INCLUDE_DIR, 1},			\
    { GCC_INCLUDE_DIR, 0},				\
    { LOCAL_INCLUDE_DIR, 0},				\
    { "/usr/NextDeveloper/Headers", 0},			\
    { "/usr/NextDeveloper/Headers/ansi", 0},		\
    { "/usr/NextDeveloper/Headers/bsd", 0},		\
    { "/usr/LocalDeveloper/Headers", 0},		\
    { "/usr/LocalDeveloper/Headers/ansi", 0},		\
    { "/usr/LocalDeveloper/Headers/bsd", 0},		\
    { STANDARD_INCLUDE_DIR, 0},				\
    { 0, 0}						\
  }

/*
#define REPORT_EVENT(TYPE, NAME, FILE, LINE, MSG, ARG1, ARG2, ARG3)	\
  make_support (TYPE, NAME, FILE, LINE, MSG, ARG1, ARG2, ARG3)
*/

/*
 * override default prefix behavior
 */

#undef STANDARD_EXEC_PREFIX
#define STANDARD_EXEC_PREFIX "/usr/NextDeveloper/lib/"
/* when looking for specs */
#undef STANDARD_STARTFILE_PREFIX
#define STANDARD_STARTFILE_PREFIX "/usr/NextDeveloper/lib/"
#undef TOOLDIR_BASE_PREFIX
#define TOOLDIR_BASE_PREFIX "/usr/NextDeveloper/"

/*
 * specs
 *
 */

/* should -L really be in LIB_SPEC ? <jf> */
#undef LIB_SPEC
#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}"

#ifndef STARTFILE_SPEC
#define STARTFILE_SPEC  \
  "%{pg:gcrt0.o%s crtPDO.o%s}%{!pg:%{p:mcrt0.o%s crtPDO.o%s}%{!p:crt0.o%s crtPDO.o%s}}"
#endif

/* config.h can define ENDFILE_SPEC to override the default crtn files.  */
#ifndef ENDFILE_SPEC
#define ENDFILE_SPEC "crtnPDO.o%s"
#endif


/* RIPPED OFF FROM nextstep.h */

/* Give methods pretty symbol names on NeXT. */

#undef	OBJC_GEN_METHOD_LABEL
#define OBJC_GEN_METHOD_LABEL(BUF,IS_INST,CLASS_NAME,CAT_NAME,SEL_NAME,NUM) \
  do { if (CAT_NAME)							\
	 sprintf (BUF, "%c[%s(%s) %s]", (IS_INST) ? '-' : '+',		\
		  (CLASS_NAME), (CAT_NAME), (SEL_NAME));		\
       else								\
	 sprintf (BUF, "%c[%s %s]", (IS_INST) ? '-' : '+',		\
		  (CLASS_NAME), (SEL_NAME));				\
     } while (0)

/* Wrap new method names in quotes so the assembler doesn't gag.
   Make Objective-C internal symbols local.  */

/* work around the gnu'ism of the @ at the begining of the symbol name */

#undef	ASM_OUTPUT_LABELREF
#define ASM_OUTPUT_LABELREF(FILE,NAME)	\
  do {  \
	if (FUNCTION_NAME_P (NAME) && (NAME[1] == '+' || NAME[1] == '-')) \
		fprintf (FILE, "\"%s\"", NAME+1); \
	else if (NAME[0] == '+' || NAME[0] == '-') \
		fprintf (FILE, "\"%s\"", NAME[0]); \
	else if (!strncmp (NAME, "_OBJC_", 6)) \
		fprintf (FILE, "L%s", NAME);   \
	else if (!strncmp (NAME, ".objc_class_name_", 17))		\
		fprintf (FILE, "%s", NAME);				\
	else fprintf ((FILE), "%s", (NAME) + (FUNCTION_NAME_P (NAME) ? 1 : 0)); } while (0)


/* This is how to output an assembler line defining an `int' constant.  
	this is used in the OBJC_INSTANCE_METHODS segment 
	removed code that put P% infront of code being linked to shared libs 
 */

#undef ASM_OUTPUT_INT
#define ASM_OUTPUT_INT(FILE,VALUE)  \
{ fprintf (FILE, "\t.word ");			\
  if (function_label_operand (VALUE, VOIDmode)  \
      && in_section != in_text)			\
    fprintf (FILE, "P%%");			\
  output_addr_const (FILE, (VALUE));		\
  fprintf (FILE, "\n");}

/* from josh */


#undef	SECTION_FUNCTION
#define SECTION_FUNCTION(FUNCTION, SECTION, SUBSPACE)			\
void									\
FUNCTION ()								\
{									\
  extern void text_section ();					 	\
  extern void objc_section_init ();					\
  extern int flag_no_mach_text_sections;				\
  static int been_here = 0;						\
 									\
  if (in_section != SECTION)						\
    {									\
      objc_section_init ();						\
      fprintf (asm_out_file, "\t.SPACE $PRIVATE$\n");			\
      fprintf (asm_out_file, "\t.SUBSPA %s", SUBSPACE);			\
      if (!been_here) {							\
        fprintf(asm_out_file,",QUAD=1,ALIGN=4,ACCESS=31");		\
	been_here = 1;							\
        }								\
      fprintf(asm_out_file,"\n"); 					\
      in_section = SECTION;						\
    }									\
}									\

#undef	EXTRA_SECTIONS
#define EXTRA_SECTIONS	in_bss, in_readonly_data,	\
  in_objc_class, in_objc_meta_class, in_objc_category,	\
  in_objc_class_vars, in_objc_instance_vars,		\
  in_objc_cls_meth, in_objc_inst_meth,			\
  in_objc_cat_cls_meth, in_objc_cat_inst_meth,		\
  in_objc_selector_refs,				\
  in_objc_symbols, in_objc_module_info,			\
  in_objc_protocol, in_objc_string_object,		\
  in_objc_class_names, in_objc_meth_var_names,		\
  in_objc_meth_var_types, in_objc_cls_refs

#undef	EXTRA_SECTION_FUNCTIONS
#define EXTRA_SECTION_FUNCTIONS			\
void						\
bss_section ()					\
{						\
  if (in_section != in_bss)			\
    {						\
      fprintf (asm_out_file, "%s\n", 		\
	       BSS_SECTION_ASM_OP);		\
      in_section = in_bss;			\
    }						\
}						\
void						\
readonly_data ()				\
{						\
  if (in_section != in_readonly_data)		\
    {						\
      fprintf (asm_out_file, "%s\n", 		\
	       READONLY_DATA_ASM_OP);		\
      in_section = in_readonly_data;		\
    }						\
}						\
SECTION_FUNCTION (objc_class_section,		\
		  in_objc_class,		\
		  "$$OBJC_CLASS$$")		\
SECTION_FUNCTION (objc_meta_class_section,	\
		  in_objc_meta_class,		\
		  "$$OBJC_METACLASS$$")		\
SECTION_FUNCTION (objc_category_section,	\
		  in_objc_category,		\
		 "$$OBJC_CATEGORY$$")		\
SECTION_FUNCTION (objc_class_vars_section,	\
		  in_objc_class_vars,		\
		  "$$OBJC_CLASS_VARS$$")	\
SECTION_FUNCTION (objc_instance_vars_section,	\
		  in_objc_instance_vars,	\
		  "$$OBJC_INSTANCE_VARS$$")	\
SECTION_FUNCTION (objc_cls_meth_section,	\
		  in_objc_cls_meth,		\
		  "$$OBJC_CLS_METH$$")		\
SECTION_FUNCTION (objc_inst_meth_section,	\
		  in_objc_inst_meth,		\
		  "$$OBJC_INST_METHODS$$")	\
SECTION_FUNCTION (objc_cat_cls_meth_section,	\
		  in_objc_cat_cls_meth,		\
		  "$$OBJC_CAT_CLS_METH$$")	\
SECTION_FUNCTION (objc_cat_inst_meth_section,	\
		  in_objc_cat_inst_meth,	\
		  "$$OBJC_CAT_INST_METH$$")	\
SECTION_FUNCTION (objc_selector_refs_section,	\
		  in_objc_selector_refs,	\
		  "$$OBJC_MESSAGE_REFS$$")	\
SECTION_FUNCTION (objc_symbols_section,		\
		  in_objc_symbols,		\
		  "$$OBJC_SYMBOLS$$")		\
SECTION_FUNCTION (objc_module_info_section,	\
		  in_objc_module_info,		\
		  "$$OBJC_MODULES$$")		\
SECTION_FUNCTION (objc_protocol_section,	\
		  in_objc_protocol,		\
		  "$$OBJC_PROTOCOL$$")		\
SECTION_FUNCTION (objc_string_object_section,	\
		  in_objc_string_object,	\
		  "$$OBJC_STRING_OBJECT$$")	\
SECTION_FUNCTION (objc_class_names_section,	\
		in_objc_class_names,		\
		"$$OBJC_CLASS_NAMES$$")		\
SECTION_FUNCTION (objc_meth_var_names_section,	\
		in_objc_meth_var_names,		\
		"$$OBJC_METH_VAR_NAMES$$")	\
SECTION_FUNCTION (objc_meth_var_types_section,	\
		in_objc_meth_var_types,		\
		"$$OBJC_METH_VAR_TYPES$$")	\
SECTION_FUNCTION (objc_cls_refs_section,	\
		in_objc_cls_refs,		\
		"$$OBJC_CLS_REFS$$")		\
						\
void						\
objc_section_init ()				\
{						\
  static int been_here = 0;			\
						\
  if (been_here == 0)				\
    {						\
      been_here = 1;				\
      objc_class_section ();			\
      objc_meta_class_section ();		\
      objc_cat_cls_meth_section ();		\
      objc_cat_inst_meth_section ();		\
      objc_cls_meth_section ();			\
      objc_inst_meth_section ();		\
      objc_selector_refs_section ();		\
      objc_symbols_section ();			\
      objc_category_section ();			\
      objc_protocol_section ();			\
      objc_class_vars_section ();		\
      objc_instance_vars_section ();		\
      objc_module_info_section ();		\
      objc_string_object_section ();		\
      objc_class_names_section ();		\
      objc_meth_var_names_section ();		\
      objc_meth_var_types_section ();		\
      objc_cls_refs_section ();			\
    }						\
}

/* different from NS version in that no literalX_section */ 
#undef	SELECT_SECTION
#define SELECT_SECTION(exp,reloc)				\
  do								\
    {								\
      if (TREE_CODE (exp) == STRING_CST)			\
	{							\
	  if (flag_writable_strings)				\
	    data_section ();					\
	  else 	\
	    readonly_data_section ();				\
	}							\
      else if (TREE_CODE (exp) == INTEGER_CST			\
	       || TREE_CODE (exp) == REAL_CST)			\
        {							\
	    readonly_data_section ();				\
	}							\
      else if (TREE_CODE (exp) == CONSTRUCTOR				\
	       && TREE_TYPE (exp)					\
	       && TREE_CODE (TREE_TYPE (exp)) == RECORD_TYPE		\
	       && TYPE_NAME (TREE_TYPE (exp))				\
	       && TREE_CODE (TYPE_NAME (TREE_TYPE (exp))) == IDENTIFIER_NODE \
	       && IDENTIFIER_POINTER (TYPE_NAME (TREE_TYPE (exp))))	\
      {								\
	  if (!strcmp (IDENTIFIER_POINTER (TYPE_NAME (TREE_TYPE (exp))), \
			"NXConstantString"))				\
	  objc_string_object_section ();				\
	else if ((TREE_READONLY (exp) || TREE_CONSTANT (exp))		\
		&& !TREE_SIDE_EFFECTS (exp))				\
	  readonly_data_section ();					\
	else								\
	  data_section ();						\
      }									\
      else if (TREE_CODE (exp) == VAR_DECL &&				\
	       DECL_NAME (exp) &&					\
	       TREE_CODE (DECL_NAME (exp)) == IDENTIFIER_NODE &&	\
	       IDENTIFIER_POINTER (DECL_NAME (exp)) &&			\
	       !strncmp (IDENTIFIER_POINTER (DECL_NAME (exp)), "_OBJC_", 6)) \
	{								\
	  const char *name = IDENTIFIER_POINTER (DECL_NAME (exp));	\
	  								\
	  if (!strncmp (name, "_OBJC_CLASS_METHODS_", 20))		\
	    objc_cls_meth_section ();					\
	  else if (!strncmp (name, "_OBJC_INSTANCE_METHODS_", 23))	\
	    objc_inst_meth_section ();					\
	  else if (!strncmp (name, "_OBJC_CATEGORY_CLASS_METHODS_", 20)) \
	    objc_cat_cls_meth_section ();				\
	  else if (!strncmp (name, "_OBJC_CATEGORY_INSTANCE_METHODS_", 23)) \
	    objc_cat_inst_meth_section ();				\
	  else if (!strncmp (name, "_OBJC_CLASS_VARIABLES_", 22))	\
	    objc_class_vars_section ();					\
	  else if (!strncmp (name, "_OBJC_INSTANCE_VARIABLES_", 25))	\
	    objc_instance_vars_section ();				\
	  else if (!strncmp (name, "_OBJC_CLASS_PROTOCOLS_", 22))	\
	    objc_cat_cls_meth_section ();				\
	  else if (!strncmp (name, "_OBJC_CLASS_NAME_", 17))		\
	    objc_class_names_section ();				\
	  else if (!strncmp (name, "_OBJC_METH_VAR_NAME_", 20))		\
	    objc_meth_var_names_section ();				\
	  else if (!strncmp (name, "_OBJC_METH_VAR_TYPE_", 20))		\
	    objc_meth_var_types_section ();				\
	  else if (!strncmp (name, "_OBJC_CLASS_REFERENCES", 22))	\
	    objc_cls_refs_section ();					\
	  else if (!strncmp (name, "_OBJC_CLASS_", 12))			\
	    objc_class_section ();					\
	  else if (!strncmp (name, "_OBJC_METACLASS_", 16))		\
	    objc_meta_class_section ();					\
	  else if (!strncmp (name, "_OBJC_CATEGORY_", 15))		\
	    objc_category_section ();					\
	  else if (!strncmp (name, "_OBJC_SELECTOR_REFERENCES", 25))	\
	    objc_selector_refs_section ();				\
	  else if (!strncmp (name, "_OBJC_SYMBOLS", 13))		\
	    objc_symbols_section ();					\
	  else if (!strncmp (name, "_OBJC_MODULES", 13))		\
	    objc_module_info_section ();				\
	  else if (!strncmp (name, "_OBJC_PROTOCOL_INSTANCE_METHODS_", 32)) \
	    objc_cat_inst_meth_section ();                              \
	  else if (!strncmp (name, "_OBJC_PROTOCOL_CLASS_METHODS_", 29)) \
	    objc_cat_cls_meth_section ();                               \
	  else if (!strncmp (name, "_OBJC_PROTOCOL_REFS_", 20))         \
	    objc_cat_cls_meth_section ();                               \
	  else if (!strncmp (name, "_OBJC_PROTOCOL_", 15))              \
	    objc_protocol_section ();                                   \
	  else if ((TREE_READONLY (exp) || TREE_CONSTANT (exp))		\
		&& !TREE_SIDE_EFFECTS (exp))     			\
	    readonly_data_section ();                                   \
	  else								\
	    data_section ();						\
	}								\
      else if ((TREE_READONLY (exp) || TREE_CONSTANT (exp))	\
	       && !TREE_SIDE_EFFECTS (exp))				\
	readonly_data_section ();					\
      else								\
        data_section ();						\
    }									\
  while (0)

/* this was added to support unresolved references in the gas assembler */
#undef DECLARE_UNRESOLVED_REFERENCE




unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.