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

📄 objcopy.c

📁 基于4个mips核的noc设计
💻 C
📖 第 1 页 / 共 5 页
字号:
	case 'g':	case 'd':	/* Historic BSD alias for -g.  Used by early NetBSD.  */	  strip_symbols = STRIP_DEBUG;	  break;	case OPTION_STRIP_UNNEEDED:	  strip_symbols = STRIP_UNNEEDED;	  break;	case 'K':	  add_specific_symbol (optarg, &keep_specific_list);	  break;	case 'N':	  add_specific_symbol (optarg, &strip_specific_list);	  break;	case 'o':	  output_file = optarg;	  break;	case 'p':	  preserve_dates = true;	  break;	case 'x':	  discard_locals = LOCALS_ALL;	  break;	case 'X':	  discard_locals = LOCALS_START_L;	  break;	case 'v':	  verbose = true;	  break;	case 'V':	  show_version = true;	  break;	case 0:	  break;		/* we've been given a long option */	case 'h':	  strip_usage (stdout, 0);	default:	  strip_usage (stderr, 1);	}    }  if (show_version)    print_version ("strip");  /* Default is to strip all symbols.  */  if (strip_symbols == STRIP_UNDEF      && discard_locals == LOCALS_UNDEF      && strip_specific_list == NULL)    strip_symbols = STRIP_ALL;  if (output_target == (char *) NULL)    output_target = input_target;  i = optind;  if (i == argc      || (output_file != NULL && (i + 1) < argc))    strip_usage (stderr, 1);  for (; i < argc; i++)    {      int hold_status = status;      struct stat statbuf;      char *tmpname;      if (preserve_dates)	{	  if (stat (argv[i], &statbuf) < 0)	    {	      non_fatal (_("%s: cannot stat: %s"), argv[i], strerror (errno));	      continue;	    }	}      if (output_file != NULL)	tmpname = output_file;      else	tmpname = make_tempname (argv[i]);      status = 0;      copy_file (argv[i], tmpname, input_target, output_target);      if (status == 0)	{	  if (preserve_dates)	    set_times (tmpname, &statbuf);	  if (output_file == NULL)	    smart_rename (tmpname, argv[i], preserve_dates);	  status = hold_status;	}      else	unlink (tmpname);      if (output_file == NULL)	free (tmpname);    }  return 0;}static intcopy_main (argc, argv)     int argc;     char *argv[];{  char *input_filename = NULL, *output_filename = NULL;  char *input_target = NULL, *output_target = NULL;  boolean show_version = false;  boolean change_warn = true;  int c;  struct section_list *p;  struct stat statbuf;  while ((c = getopt_long (argc, argv, "b:i:I:j:K:N:s:O:d:F:L:R:SpgxXVvW:",			   copy_options, (int *) 0)) != EOF)    {      switch (c)	{	case 'b':	  copy_byte = atoi (optarg);	  if (copy_byte < 0)	    fatal (_("byte number must be non-negative"));	  break;	case 'i':	  interleave = atoi (optarg);	  if (interleave < 1)	    fatal (_("interleave must be positive"));	  break;	case 'I':	case 's':		/* "source" - 'I' is preferred */	  input_target = optarg;	  break;	case 'O':	case 'd':		/* "destination" - 'O' is preferred */	  output_target = optarg;	  break;	case 'F':	  input_target = output_target = optarg;	  break;	case 'j':	  p = find_section_list (optarg, true);	  if (p->remove)	    fatal (_("%s both copied and removed"), optarg);	  p->copy = true;	  sections_copied = true;	  break;	case 'R':	  p = find_section_list (optarg, true);	  if (p->copy)	    fatal (_("%s both copied and removed"), optarg);	  p->remove = true;	  sections_removed = true;	  break;	case 'S':	  strip_symbols = STRIP_ALL;	  break;	case 'g':	  strip_symbols = STRIP_DEBUG;	  break;	case OPTION_STRIP_UNNEEDED:	  strip_symbols = STRIP_UNNEEDED;	  break;	case 'K':	  add_specific_symbol (optarg, &keep_specific_list);	  break;	case 'N':	  add_specific_symbol (optarg, &strip_specific_list);	  break;	case 'L':	  add_specific_symbol (optarg, &localize_specific_list);	  break;	case 'G':	  add_specific_symbol (optarg, &keepglobal_specific_list);	  break;	case 'W':	  add_specific_symbol (optarg, &weaken_specific_list);	  break;	case 'p':	  preserve_dates = true;	  break;	case 'x':	  discard_locals = LOCALS_ALL;	  break;	case 'X':	  discard_locals = LOCALS_START_L;	  break;	case 'v':	  verbose = true;	  break;	case 'V':	  show_version = true;	  break;	case OPTION_WEAKEN:	  weaken = true;	  break;	case OPTION_ADD_SECTION:	  {	    const char *s;	    struct stat st;	    struct section_add *pa;	    int len;	    char *name;	    FILE *f;	    s = strchr (optarg, '=');	    if (s == NULL)	      fatal (_("bad format for %s"), "--add-section");	    if (stat (s + 1, & st) < 0)	      fatal (_("cannot stat: %s: %s"), s + 1, strerror (errno));	    pa = (struct section_add *) xmalloc (sizeof (struct section_add));	    len = s - optarg;	    name = (char *) xmalloc (len + 1);	    strncpy (name, optarg, len);	    name[len] = '\0';	    pa->name = name;	    pa->filename = s + 1;	    pa->size = st.st_size;	    pa->contents = (bfd_byte *) xmalloc (pa->size);	    f = fopen (pa->filename, FOPEN_RB);	    if (f == NULL)	      fatal (_("cannot open: %s: %s"), pa->filename, strerror (errno));	    if (fread (pa->contents, 1, pa->size, f) == 0		|| ferror (f))	      fatal (_("%s: fread failed"), pa->filename);	    fclose (f);	    pa->next = add_sections;	    add_sections = pa;	  }	  break;	case OPTION_CHANGE_START:	  change_start = parse_vma (optarg, "--change-start");	  break;	case OPTION_CHANGE_SECTION_ADDRESS:	case OPTION_CHANGE_SECTION_LMA:	case OPTION_CHANGE_SECTION_VMA:	  {	    const char *s;	    int len;	    char *name;	    char *option = NULL;	    bfd_vma val;	    enum change_action what = CHANGE_IGNORE;	    switch (c)	      {	      case OPTION_CHANGE_SECTION_ADDRESS:		option = "--change-section-address";		break;	      case OPTION_CHANGE_SECTION_LMA:		option = "--change-section-lma";		break;	      case OPTION_CHANGE_SECTION_VMA:		option = "--change-section-vma";		break;	      }	    s = strchr (optarg, '=');	    if (s == NULL)	      {		s = strchr (optarg, '+');		if (s == NULL)		  {		    s = strchr (optarg, '-');		    if (s == NULL)		      fatal (_("bad format for %s"), option);		  }	      }	    len = s - optarg;	    name = (char *) xmalloc (len + 1);	    strncpy (name, optarg, len);	    name[len] = '\0';	    p = find_section_list (name, true);	    val = parse_vma (s + 1, option);	    switch (*s)	      {	      case '=': what = CHANGE_SET; break;	      case '-': val  = - val; /* Drop through.  */	      case '+': what = CHANGE_MODIFY; break;	      }	    switch (c)	      {	      case OPTION_CHANGE_SECTION_ADDRESS:		p->change_vma = what;		p->vma_val    = val;		/* Drop through.  */	      case OPTION_CHANGE_SECTION_LMA:		p->change_lma = what;		p->lma_val    = val;		break;	      case OPTION_CHANGE_SECTION_VMA:		p->change_vma = what;		p->vma_val    = val;		break;	      }	  }	  break;	case OPTION_CHANGE_ADDRESSES:	  change_section_address = parse_vma (optarg, "--change-addresses");	  change_start = change_section_address;	  break;	case OPTION_CHANGE_WARNINGS:	  change_warn = true;	  break;	case OPTION_CHANGE_LEADING_CHAR:	  change_leading_char = true;	  break;	case OPTION_DEBUGGING:	  convert_debugging = true;	  break;	case OPTION_GAP_FILL:	  {	    bfd_vma gap_fill_vma;	    gap_fill_vma = parse_vma (optarg, "--gap-fill");	    gap_fill = (bfd_byte) gap_fill_vma;	    if ((bfd_vma) gap_fill != gap_fill_vma)	      {		char buff[20];		sprintf_vma (buff, gap_fill_vma);		non_fatal (_("Warning: truncating gap-fill from 0x%s to 0x%x"),			   buff, gap_fill);	      }	    gap_fill_set = true;	  }	  break;	case OPTION_NO_CHANGE_WARNINGS:	  change_warn = false;	  break;	case OPTION_PAD_TO:	  pad_to = parse_vma (optarg, "--pad-to");	  pad_to_set = true;	  break;	case OPTION_REMOVE_LEADING_CHAR:	  remove_leading_char = true;	  break;	case OPTION_REDEFINE_SYM:	  {	    /* Push this redefinition onto redefine_symbol_list.  */	    int len;	    const char *s;	    const char *nextarg;	    char *source, *target;	    s = strchr (optarg, '=');	    if (s == NULL)	      {		fatal (_("bad format for %s"), "--redefine-sym");	      }	    len = s - optarg;	    source = (char *) xmalloc (len + 1);	    strncpy (source, optarg, len);	    source[len] = '\0';	    nextarg = s + 1;	    len = strlen (nextarg);	    target = (char *) xmalloc (len + 1);	    strcpy (target, nextarg);	    redefine_list_append (source, target);	    free (source);	    free (target);	  }	  break;	case OPTION_SET_SECTION_FLAGS:	  {	    const char *s;	    int len;	    char *name;	    s = strchr (optarg, '=');	    if (s == NULL)	      fatal (_("bad format for %s"), "--set-section-flags");	    len = s - optarg;	    name = (char *) xmalloc (len + 1);	    strncpy (name, optarg, len);	    name[len] = '\0';	    p = find_section_list (name, true);	    p->set_flags = true;	    p->flags = parse_flags (s + 1);	  }	  break;	case OPTION_SET_START:	  set_start = parse_vma (optarg, "--set-start");	  set_start_set = true;	  break;        case OPTION_SREC_LEN:          Chunk = parse_vma (optarg, "--srec-len");          break;        case OPTION_SREC_FORCES3:	  S3Forced = true;          break;	case OPTION_STRIP_SYMBOLS:	  add_specific_symbols (optarg, &strip_specific_list);	  break;	case OPTION_KEEP_SYMBOLS:	  add_specific_symbols (optarg, &keep_specific_list);	  break;	case OPTION_LOCALIZE_SYMBOLS:	  add_specific_symbols (optarg, &localize_specific_list);	  break;	case OPTION_KEEPGLOBAL_SYMBOLS:	  add_specific_symbols (optarg, &keepglobal_specific_list);

⌨️ 快捷键说明

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