⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 next.h

📁 早期freebsd实现
💻 H
📖 第 1 页 / 共 2 页
字号:
/* Create new Mach-O sections. */#define SECTION_FUNCTION(FUNCTION, SECTION, DIRECTIVE, WAS_TEXT)	\void									\FUNCTION ()								\{									\  extern void text_section ();					 	\  extern int flag_no_mach_text_sections;		 	      	\  									\  if (WAS_TEXT && flag_no_mach_text_sections)       			\    text_section ();							\  else if (in_section != SECTION)					\    {									\      fprintf (asm_out_file, "%s\n", DIRECTIVE);			\      in_section = SECTION;						\    }									\}									\#define EXTRA_SECTIONS					\  in_const, in_cstring, in_literal4, in_literal8,	\  in_constructor, in_destructor,			\  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_strs, in_objc_selector_refs,		\  in_objc_symbols, in_objc_module_info#define EXTRA_SECTION_FUNCTIONS			\SECTION_FUNCTION (const_section,		\		  in_const,			\		  ".const", 1)			\SECTION_FUNCTION (cstring_section,		\		  in_cstring,			\		  ".cstring", 1)		\SECTION_FUNCTION (literal4_section,		\		  in_literal4,			\		  ".literal4", 1)		\SECTION_FUNCTION (literal8_section,		\		  in_literal8,			\		  ".literal8", 1)		\SECTION_FUNCTION (constructor_section,		\		  in_constructor,		\		  ".constructor", 0)		\SECTION_FUNCTION (destructor_section,		\		  in_destructor,		\		  ".destructor", 0)		\SECTION_FUNCTION (objc_class_section,		\		  in_objc_class,		\		  ".objc_class", 0)		\SECTION_FUNCTION (objc_meta_class_section,	\		  in_objc_meta_class,		\		  ".objc_meta_class", 0)	\SECTION_FUNCTION (objc_category_section,	\		  in_objc_category,		\		".objc_category", 0)		\SECTION_FUNCTION (objc_class_vars_section,	\		  in_objc_class_vars,		\		  ".objc_class_vars", 0)	\SECTION_FUNCTION (objc_instance_vars_section,	\		  in_objc_instance_vars,	\		  ".objc_instance_vars", 0)	\SECTION_FUNCTION (objc_cls_meth_section,	\		  in_objc_cls_meth,		\		  ".objc_cls_meth", 0)		\SECTION_FUNCTION (objc_inst_meth_section,	\		  in_objc_inst_meth,		\		  ".objc_inst_meth", 0)		\SECTION_FUNCTION (objc_cat_cls_meth_section,	\		  in_objc_cat_cls_meth,		\		  ".objc_cat_cls_meth", 0)	\SECTION_FUNCTION (objc_cat_inst_meth_section,	\		  in_objc_cat_inst_meth,	\		  ".objc_cat_inst_meth", 0)	\SECTION_FUNCTION (objc_selector_strs_section,	\		  in_objc_selector_strs,	\		  ".objc_selector_strs", 0)	\SECTION_FUNCTION (objc_selector_refs_section,	\		  in_objc_selector_refs,	\		  ".objc_selector_refs", 0)	\SECTION_FUNCTION (objc_symbols_section,		\		  in_objc_symbols,		\		  ".objc_symbols", 0)		\SECTION_FUNCTION (objc_module_info_section,	\		  in_objc_module_info,		\		  ".objc_module_info", 0)#define READONLY_DATA_SECTION const_section#define SELECT_SECTION(exp,reloc)				\  do								\    {								\      if (TREE_CODE (exp) == STRING_CST)			\	{							\	  if (flag_writable_strings)				\	    data_section ();					\	  else if (TREE_STRING_LENGTH (exp) !=			\		   strlen (TREE_STRING_POINTER (exp)) + 1)	\	    readonly_data_section ();				\	  else							\	    cstring_section ();					\	}							\      else if (TREE_CODE (exp) == INTEGER_CST			\	       || TREE_CODE (exp) == REAL_CST)			\        {							\	  tree size = TYPE_SIZE (TREE_TYPE (exp));		\	  							\	  if (TREE_CODE (size) == INTEGER_CST &&		\	      TREE_INT_CST_LOW (size) == 4 &&			\	      TREE_INT_CST_HIGH (size) == 0)			\	    literal4_section ();				\	  else if (TREE_CODE (size) == INTEGER_CST &&		\	      TREE_INT_CST_LOW (size) == 8 &&			\	      TREE_INT_CST_HIGH (size) == 0)			\	    literal8_section ();				\	  else							\	    readonly_data_section ();				\	}							\      else if ((TREE_READONLY (exp) || TREE_CONSTANT (exp))	\	       && !TREE_SIDE_EFFECTS (exp))				\	readonly_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_", 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_STRINGS", 13))		\	    objc_selector_strs_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								\	    data_section ();						\	}								\      else								\        data_section ();						\    }									\  while (0)/* Force the assembler to create all the Objective-C sections,    so that their order is guaranteed. */  #define OBJC_PROLOGUE					\  do {							\	extern void objc_class_section ();		\	extern void objc_meta_class_section ();		\	extern void objc_cat_cls_meth_section ();	\	extern void objc_cat_inst_meth_section ();	\	extern void objc_cls_meth_section ();		\	extern void objc_inst_meth_section ();		\	extern void objc_selector_refs_section ();	\	extern void objc_symbols_section ();		\	extern void objc_category_section ();		\	extern void objc_class_vars_section ();		\	extern void objc_instance_vars_section ();	\	extern void objc_module_info_section ();	\	extern void objc_selector_strs_section ();	\							\	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_class_vars_section ();	\	objc_instance_vars_section ();	\	objc_module_info_section ();	\	objc_selector_strs_section ();	\     } while (0)/* We do not define JUMP_TABLES_IN_TEXT_SECTION, since we wish to keep   the text section pure.  There is no point in addressing the jump   tables using pc relative addressing, since they are not in the text   section, so we undefine CASE_VECTOR_PC_RELATIVE.  This also   causes the compiler to use absolute addresses in the jump table,   so we redefine CASE_VECTOR_MODE to be SImode. */#undef CASE_VECTOR_MODE#define CASE_VECTOR_MODE SImode#undef CASE_VECTOR_PC_RELATIVE/* Don't treat addresses involving labels differently from symbol names.   Previously, references to labels generated pc-relative addressing modes   while references to symbol names generated absolute addressing modes.  */#undef GO_IF_INDEXABLE_BASE(X, ADDR)#define GO_IF_INDEXABLE_BASE(X, ADDR)	\{ if (GET_CODE (X) == REG && REG_OK_FOR_BASE_P (X)) goto ADDR; }#define ALIGN_ASM_OP		".align"#undef ASM_OUTPUT_ALIGN#define ASM_OUTPUT_ALIGN(FILE,LOG)	\  if ((LOG) != 0)			\    fprintf (FILE, "\t%s %d\n", ALIGN_ASM_OP, (LOG))/* The maximum alignment which the object file format can support.   For NeXT's Mach-O format, this is 2^15.  */#define MAX_OFILE_ALIGNMENT 0x8000

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -