亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? symout.c

?? 這是完整的gcc源代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* Output GDB-format symbol table information from GNU compiler.   Copyright (C) 1987, 1988 Free Software Foundation, Inc.This file is part of GNU CC.GNU CC is free software; you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe Free Software Foundation; either version 1, 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 ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See theGNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong with GNU CC; see the file COPYING.  If not, write tothe Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */#include "config.h"#include "tree.h"#include "symseg.h"#include "rtl.h"#include "gdbfiles.h"#include <stdio.h>#undef NULL/* <...> used here so one can prevent use of ./stddef.h   by changing the -I options used.  */#include <stddef.h>/* Get N_SO from stab.h if we can expect the file to exist.  */#ifdef DBX_DEBUGGING_INFO#ifdef USG#include "gstab.h"  /* If doing DBX on sysV, use our own stab.h.  */#else#include <stab.h>  /* On BSD, use the system's stab.h.  */#endif /* not USG */#endif/* .stabs code for source file name.  */#ifndef N_SO#define	N_SO 0x64#endif/* Unix maximum on file name length.  Needed for getwd.  */#define MAXNAMLEN 1024/* Get the number to output for a reference to type TYPE.  */#define TYPE_OUTPUT_ADDRESS(TYPE) \  TYPE_SYMTAB_ADDRESS (TYPE_MAIN_VARIANT (TYPE))/* Stream for writing symbol table file.  */static FILE *symfile;/* Name of symbol table file.  */static char *symfile_name;/* Stream for writing to assembler file.  */static FILE *asmfile;/* Address for allocating space in symbol table file.   Changes in this variable are paired globally with writes to symfile,   but often we allocate many structures, advancing next_address,   before writing any of them.  */static int next_address;/* Chain recording all the types that have been output,   giving the address-in-the-symseg of each one.  */struct typevec_elt{  int address;  struct typevec_elt *next;};static struct typevec_elt *typevec;/* Number of types recorded so far in the chain.  */static int total_types;/* Lists of types to which forward references have been made.   Separate lists for temporary and permanent types.  */static tree temporary_fwd_refs;static tree permanent_fwd_refs;/* `blockvec' is a chain recording all the symbol-blocks that have been output,   giving the address-in-the-symseg of each one.  */struct blockvec_elt{  int address;  struct blockvec_elt *next;};static struct blockvec_elt *blockvec;/* Number of blocks recorded so far in the chain.  */static int total_blocks;static void symout_range_bounds ();static void symout_array_domain ();static void symout_record_fields ();static void symout_enum_values ();static void symout_record_field_names ();static void symout_enum_value_names ();static int subrange_p ();static void symout_strings_skip ();static void symout_strings_print ();/* At the beginning of compilation, start writing the symbol table.   Initialize the type and block chain.   Also open and initialize the symseg file.  */voidsymout_init (filename, asm_file, sourcename)     char *filename;     FILE *asm_file;     char *sourcename;{  struct symbol_root buffer;#ifdef VMS  fatal ("Cannot write GDB debugging format on VMS");#endif  asmfile = asm_file;  fprintf (asmfile, ".text 0\n.gdbbeg 0\n.gdbbeg 1\n");  fprintf (asmfile,	   "Ltext:\t.stabs \"%s\",%d,0,0,Ltext\n",	   sourcename, N_SO);  fprintf (asmfile, ".data 0\nLdata:\n");  ASM_OUTPUT_LOCAL (asmfile, "Lbss", 0, 0);  fprintf (asmfile, ".gdbsym Ldata,%d\n",	   (char *) &buffer.databeg - (char *) &buffer);  fprintf (asmfile, ".gdbsym Lbss,%d\n",	   (char *) &buffer.bssbeg - (char *) &buffer);  symfile = fopen (filename, "w");  if (symfile == 0)    pfatal_with_name (filename);  symfile_name = (char *) malloc (strlen (filename) + 1);  strcpy (symfile_name, filename);  typevec = 0;  blockvec = 0;  total_types = 0;  total_blocks = 0;  permanent_fwd_refs = 0;  temporary_fwd_refs = 0;  bzero (&buffer, sizeof buffer);  fwrite (&buffer, sizeof buffer, 1, symfile);  next_address = sizeof buffer;}/* Functions for outputting strings into the symbol table.   The string to be output is effectively the concatenation of   the two strings P1 and P2.  Their lengths are given as S1 and S2.   If P1 or P2 is zero, that string is not used.   A null character is output to terminate the string,   and it is followed by more nulls as padding to a word boundary.  */static voidsymout_strings (p1, s1, p2, s2)     char *p1;     int s1;     char *p2;     int s2;{  symout_strings_print (p1, s1, p2, s2);  symout_strings_skip (p1, s1, p2, s2);}/* Like symout_strings but only output; do not update next_address.  */static voidsymout_strings_print (p1, s1, p2, s2)     char *p1;     int s1;     char *p2;     int s2;{  register int total;  if (p1 && s1 == 0)    s1 = strlen (p1);  if (p2 && s2 == 0)    s2 = strlen (p2);  if (p1)    fwrite (p1, s1, 1, symfile);  if (p2)    fwrite (p2, s2, 1, symfile);  putc (0, symfile);  total = s1 + s2 + 1;  while (total % sizeof (int))    {      putc (0, symfile);      total++;    }}/* Like symout_strings but just update next_address; do not output.  */static voidsymout_strings_skip (p1, s1, p2, s2)     char *p1;     int s1;     char *p2;     int s2;{  register int total;  if (p1 && s1 == 0)    s1 = strlen (p1);  if (p2 && s2 == 0)    s2 = strlen (p2);  total = s1 + s2 + 1;  while (total % sizeof (int))    total++;  next_address += total;}/* Call here to output a chain of types.   After each function, this is done first for the chain of permanent types   made during the function, and then for the chain of temporary types.   This must be done before outputting the symbols and blocks of the function.   At the end of compilation, this is done for all the permanent types   made since the last function.   Each permanent type is done once, at the beginning of the next function,   or at the end of the compilation if no functions follow.   Once a type has been processed here, its TYPE_SYMTAB_ADDRESS remains   set up.  */voidsymout_types (types)     tree types;{  struct typerec  {    int number;    int address;    int nfields;    int fields_address;    int name_address;    char *name;    char *name_prefix;  };  register int n_types, i;  register struct typerec *records;  register tree next;  struct type buffer;  int this_run_address = next_address;  /* Count the number of types to be handled here.  */  for (next = types, n_types = 0;       next;       next = TREE_CHAIN (next), n_types++);  records = (struct typerec *) alloca (n_types * sizeof (struct typerec));  /* Compute the amount of space each type needs, updating next_address     and storing the address of the data for each type.  */  for (next = types, i = 0;       next;       next = TREE_CHAIN (next), i++)    {      register struct typevec_elt *velt	= (struct typevec_elt *) xmalloc (sizeof (struct typevec_elt));      velt->next = typevec;      typevec = velt;      total_types++;      if (TYPE_NAME (next))	{	  records[i].name_address = next_address;	  if (TREE_CODE (TYPE_NAME (next)) == IDENTIFIER_NODE)	    {	      records[i].name = IDENTIFIER_POINTER (TYPE_NAME (next));	      switch (TREE_CODE (next))		{		case RECORD_TYPE:		  records[i].name_prefix = "struct ";		  break;		case UNION_TYPE:		  records[i].name_prefix = "union ";		  break;		case ENUMERAL_TYPE:		  records[i].name_prefix = "enum ";		  break;		}	    }	  else	    {	      records[i].name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (next)));	      records[i].name_prefix = 0;	    }	  symout_strings_skip (records[i].name_prefix, 0,			       records[i].name, 0);	}      else	{	  records[i].name = 0;	  records[i].name_address = 0;	  records[i].name_prefix = 0;	}      /* If this type was forward-referenced from a previous call	 to symout_types, store this type's address into the reference.  */      if (TYPE_POINTER_TO (next) != 0	  && TYPE_SYMTAB_ADDRESS (TYPE_POINTER_TO (next)) != 0	  && TYPE_SYMTAB_ADDRESS (TYPE_POINTER_TO (next)) < this_run_address)	{	  int pos = ftell (symfile);	  int myaddr = next_address;	  fflush (symfile);	  fseek (symfile,		 (TYPE_SYMTAB_ADDRESS (TYPE_POINTER_TO (next))		  + offsetof (struct type, target_type)),		 0);	  fwrite (&myaddr, sizeof (int), 1, symfile);	  fflush (symfile);	  fseek (symfile, pos, 0);	}      records[i].address = next_address;      TYPE_SYMTAB_ADDRESS (next) = next_address;      velt->address = next_address;      next_address += sizeof (struct type);      records[i].nfields = 0;      records[i].fields_address = 0;      switch (TREE_CODE (next))	{	case ARRAY_TYPE:	  records[i].nfields	    = (TYPE_DOMAIN(next)	       ? ! integer_zerop (TYPE_MIN_VALUE (TYPE_DOMAIN (next)))	       : 0 );	  break;	case INTEGER_TYPE:	  if (subrange_p (next))	    buffer.nfields = 2;	  break;	case RECORD_TYPE:	case UNION_TYPE:	case ENUMERAL_TYPE:	  records[i].nfields = list_length (TYPE_FIELDS (next));	}      if (records[i].nfields)	records[i].fields_address = next_address;      next_address += records[i].nfields * sizeof (struct field);    }  /* Now write the data whose space we have assigned.     First fill the data into BUFFER, then write BUFFER.  */  for (next = types, i = 0;       next;       next = TREE_CHAIN (next), i++)    {      if (records[i].name)	symout_strings_print (records[i].name_prefix, 0,			      records[i].name, 0);      if (TREE_TYPE (next) != 0 && TYPE_OUTPUT_ADDRESS (TREE_TYPE (next)) == 0)	{	  /* We are making a forward-reference to our target type.	     Make a list of all of these.  */	  if (TREE_PERMANENT (next))	    permanent_fwd_refs	      = perm_tree_cons (TREE_TYPE (next), 0, permanent_fwd_refs);	  else	    temporary_fwd_refs	      = tree_cons (TREE_TYPE (next), 0, temporary_fwd_refs);	}      if (TYPE_SIZE (next) == 0)	buffer.length = 0;      else	buffer.length	  = (TREE_INT_CST_LOW (TYPE_SIZE (next))	     * TYPE_SIZE_UNIT (next) / BITS_PER_UNIT);      buffer.name = (char *) records[i].name_address;      buffer.target_type = (struct type *) (TREE_TYPE (next) ? TYPE_OUTPUT_ADDRESS (TREE_TYPE (next)) : 0);      buffer.pointer_type = 0;      buffer.function_type = 0;      buffer.flags	= ((TREE_CODE (next) == INTEGER_TYPE || TREE_CODE (next) == ENUMERAL_TYPE)	   && TREE_UNSIGNED (next))	  ? TYPE_FLAG_UNSIGNED : 0;      buffer.nfields = records[i].nfields;      buffer.fields = (struct field *) records[i].fields_address;      switch (TREE_CODE (next))	{	case INTEGER_TYPE:	  buffer.code = TYPE_CODE_INT;	  if (buffer.nfields)	    buffer.code = TYPE_CODE_RANGE;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线免费观看一区| 精品国产91久久久久久久妲己| 欧美日韩综合一区| 精品国产成人在线影院| 最新久久zyz资源站| 九一九一国产精品| 欧美无乱码久久久免费午夜一区 | 极品美女销魂一区二区三区免费| av电影在线观看完整版一区二区| 日韩免费性生活视频播放| 一区二区三区中文在线| 国产夫妻精品视频| 日韩欧美色综合| 日韩精品一区第一页| 97久久精品人人做人人爽50路| 国产日韩精品一区二区三区| 日av在线不卡| 91精品麻豆日日躁夜夜躁| 有码一区二区三区| 91网站黄www| 国产精品九色蝌蚪自拍| 韩国v欧美v日本v亚洲v| 日韩精品中文字幕在线一区| 性做久久久久久久久| 一本色道久久加勒比精品 | 欧美男男青年gay1069videost| 中文字幕不卡在线观看| 国产成人精品免费看| 日韩欧美一级片| 美女免费视频一区二区| 欧美一区欧美二区| 日本麻豆一区二区三区视频| 91免费视频大全| ●精品国产综合乱码久久久久| 成人激情校园春色| 亚洲色图视频网| 91麻豆精东视频| 亚洲欧美偷拍卡通变态| 99久精品国产| 亚洲一区二区三区四区在线观看| 日本乱人伦一区| 亚洲国产成人91porn| 欧美午夜不卡在线观看免费| 亚洲福利国产精品| 欧美一级高清大全免费观看| 麻豆国产欧美日韩综合精品二区| 精品毛片乱码1区2区3区| 久久99精品一区二区三区三区| 日韩欧美一区二区免费| 国产精品一区二区三区网站| 国产精品少妇自拍| 日本乱码高清不卡字幕| 五月婷婷欧美视频| 欧美精品一区二区三区蜜桃 | 奇米四色…亚洲| 精品少妇一区二区三区在线播放| 九色|91porny| 中文字幕一区二区三区蜜月 | 精品久久久久香蕉网| 国产69精品久久99不卡| 亚洲三级在线免费观看| 欧美日韩另类一区| 国产真实精品久久二三区| 亚洲欧洲日韩在线| 欧美日本韩国一区| 国产经典欧美精品| 一区二区三区精品视频在线| 欧美精品99久久久**| 国产精品一区二区不卡| 亚洲中国最大av网站| 久久久亚洲综合| 色婷婷亚洲精品| 蜜桃精品视频在线| 亚洲精品老司机| 欧美精品一区视频| 欧美日韩在线电影| 豆国产96在线|亚洲| 天堂影院一区二区| 国产精品你懂的| 欧美一区二区三区四区五区| 成人一级片在线观看| 日韩成人一级片| 1024亚洲合集| 久久久www免费人成精品| 在线国产电影不卡| 国产精品自拍在线| 奇米精品一区二区三区在线观看一| 国产精品欧美久久久久无广告| 91麻豆精品国产自产在线观看一区 | 91.麻豆视频| 99久久99久久综合| 国产a精品视频| 久久99国产精品久久| 一区二区高清在线| 国产精品久久久久久亚洲伦 | 欧美性生活久久| caoporm超碰国产精品| 国产在线视频一区二区三区| 亚洲高清视频在线| 一区二区三区中文在线观看| 国产欧美一区二区精品忘忧草| 欧美日韩mp4| 在线视频国内自拍亚洲视频| 成人网在线免费视频| 激情综合一区二区三区| 免费av成人在线| 午夜私人影院久久久久| 亚洲自拍偷拍麻豆| 亚洲精品视频观看| 亚洲欧美另类在线| 中文字幕在线一区二区三区| 国产亚洲欧美激情| 久久久国产精品麻豆| 久久久久久免费| 久久在线观看免费| 国产欧美精品区一区二区三区| 久久久久久免费| 国产日韩欧美麻豆| 欧美国产精品v| 国产午夜亚洲精品不卡| 国产农村妇女精品| 国产精品久久久久永久免费观看| 国产日韩欧美精品一区| 国产精品三级av| 亚洲婷婷在线视频| 亚洲激情男女视频| 亚洲综合成人在线视频| 亚洲成人自拍偷拍| 日韩av一区二区三区| 九色综合狠狠综合久久| 国产一区999| 99re在线视频这里只有精品| 色综合色综合色综合色综合色综合| 91年精品国产| 5月丁香婷婷综合| 精品三级在线看| 国产精品国产三级国产有无不卡| 亚洲免费观看视频| 午夜激情一区二区三区| 九九九久久久精品| 9色porny自拍视频一区二区| 91福利国产成人精品照片| 91麻豆精品91久久久久同性| 精品日韩成人av| 亚洲欧美一区二区不卡| 日韩vs国产vs欧美| 国产成人啪免费观看软件| 91一区二区三区在线观看| 欧美日韩亚洲另类| 国产亚洲一二三区| 亚洲在线视频免费观看| 精品亚洲成av人在线观看| 成人黄色a**站在线观看| 欧美日韩国产一二三| 久久久青草青青国产亚洲免观| 亚洲婷婷国产精品电影人久久| 日韩高清不卡在线| 不卡视频免费播放| 欧美一二三区在线观看| 国产精品高潮呻吟久久| 日韩电影在线免费看| 暴力调教一区二区三区| 91精品国产日韩91久久久久久| 欧美国产国产综合| 另类小说欧美激情| 色综合天天综合色综合av| 欧美大度的电影原声| 亚洲一区二区欧美| 成人高清免费在线播放| 精品日韩一区二区三区| 亚洲成人一区在线| 成人久久视频在线观看| 精品久久久久久久久久久久久久久| 一区二区三区国产精华| eeuss影院一区二区三区| www国产精品av| 日韩电影在线观看一区| 在线观看亚洲专区| 国产精品剧情在线亚洲| 激情小说亚洲一区| 日韩午夜三级在线| 三级一区在线视频先锋| 一本大道av一区二区在线播放| 国产午夜精品福利| 精品一区二区三区在线观看国产| 欧美日韩视频一区二区| 亚洲欧洲制服丝袜| 91欧美激情一区二区三区成人| 中文字幕精品一区| 国产精品小仙女| 欧美精品一区二区三区在线 | 不卡一区二区中文字幕| 国产女主播在线一区二区| 国产米奇在线777精品观看| 精品国产伦一区二区三区观看方式| 亚洲一级片在线观看| 在线观看区一区二| 亚洲va中文字幕| 欧美日韩在线免费视频| 天天影视网天天综合色在线播放|