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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? loader.c.svn-base

?? 模擬多核狀態(tài)下龍芯處理器的功能
?? SVN-BASE
?? 第 1 頁 / 共 2 頁
字號:
#else /* !BFD_LOADER, i.e., standalone loader */

  {
    FILE *fobj;
    long floc;
    Elf32_Ehdr elf_ehdr;
    Elf32_Phdr elf_phdr;
    Elf32_Shdr elf_shdr,elf_shstrtab;
    char *stringtable,*name;
    
    

    /* set up a local stack pointer, this is where the argv and envp
       data is written into program memory */
    ld_stack_base = MD_STACK_BASE;
    sp = ROUND_DOWN(MD_STACK_BASE - MD_MAX_ENVIRON, sizeof(dfloat_t));
    ld_stack_size = ld_stack_base - sp;

    /* initial stack pointer value */
    ld_environ_base = sp;

    /* record profile file name */
    ld_prog_fname = argv[0];

    /* load the program into memory, try both endians */
#if defined(__CYGWIN32__) || defined(_MSC_VER)
    fobj = fopen(argv[0], "rb");
#else
    fobj = fopen(argv[0], "r");
#endif
    if (!fobj)
      fatal("cannot open executable `%s'", argv[0]);

    if (fread(&elf_ehdr, sizeof(Elf32_Ehdr), 1, fobj) < 1)
      fatal("cannot read elf header from executable `%s'", argv[0]);

    /* record endian of target */
    
	if ((elf_ehdr.e_ident[EI_MAG0] != ELFMAG0)||
		(elf_ehdr.e_ident[EI_MAG1] != ELFMAG1)||
		(elf_ehdr.e_ident[EI_MAG2] != ELFMAG2)||
		(elf_ehdr.e_ident[EI_MAG3] != ELFMAG3))
		fatal("bad magic number in executable `%s' (not a MIPS file?)",argv[0]);	
	else if (elf_ehdr.e_type != ET_EXEC)
		fatal("%s is not executable",argv[0]);
	else if ((elf_ehdr.e_version != EV_CURRENT)||(elf_ehdr.e_ident[EI_VERSION] != EV_CURRENT))
		fatal("invalid object file version");
	else if(elf_ehdr.e_ident[EI_DATA] == ELFDATA2LSB)
		ld_target_big_endian = FALSE;
	else 
		ld_target_big_endian = TRUE;

	/* load the program headers in the elf executable file */
	
	for (i=0; i<elf_ehdr.e_phnum; i++)
	{
		char *p;

		floc = elf_ehdr.e_phoff + i*sizeof(Elf32_Phdr);
		if (fseek(fobj, floc, 0) == -1)
	  	  fatal("could not reset location in executable");

		fread(&elf_phdr, sizeof(Elf32_Phdr), 1, fobj);
		switch (elf_phdr.p_type)
		{
			case PT_LOAD:
		
			/* check whether the segment is text segment or data segment */
			/* the .rdata section contributes to the text segment */
			
			if (elf_phdr.p_flags == (PF_X + PF_R))
			  ld_text_size = elf_phdr.p_memsz;
			if (elf_phdr.p_flags == (PF_W + PF_R))
			  ld_data_size = elf_phdr.p_memsz;
			/* load the loadable segment to the virtual memory */
						
			p = calloc(elf_phdr.p_filesz, sizeof(char));
			if (!p)
	     	  fatal("out of virtual memory");
			if (fseek(fobj, elf_phdr.p_offset, 0) == -1)
			  fatal("could not reset locate the segment in executable file");
			if (fread(p, elf_phdr.p_filesz, 1, fobj) < 1)
			  fatal("could not read the segment from executable file");

			/* copy program segment into simulator target memory */
	    	mem_bcopy(mem_access, mem, Write, elf_phdr.p_vaddr, p, elf_phdr.p_filesz);

	    	/* create tail alignment and copy into simulator target memory */
	    	mem_bzero(mem_access, mem, 
	    		elf_phdr.p_vaddr+elf_phdr.p_memsz, SEGMENT_ALIGNMENT_PADDING);

	    	/* release the section buffer */
	    	free(p);

	    	break;

			case PT_NULL:
						
			case PT_DYNAMIC:
						
			case PT_INTERP:

			case PT_NOTE:

			case PT_SHLIB:

			case PT_PHDR:

			case PT_LOPROC:

			case PT_HIPROC:

			break;
		} /* end of switch */
	}


#if 0
    Data_start = ahdr.data_start;
    Data_size = ahdr.dsize;
    Bss_size = ahdr.bsize;
    Bss_start = ahdr.bss_start;
    Gp_value = ahdr.gp_value;
    Text_entry = ahdr.entry;
#endif


    /* compute data segment size from data break point */
    ld_text_base = MD_TEXT_BASE;
    ld_data_base = MD_DATA_BASE;
    ld_prog_entry = elf_ehdr.e_entry;
    data_break = ld_data_base + ld_data_size;

	/* find the size of .text section header, it contains the actual instructions executecd */

	/* first find the section header string table */
    if (fseek(fobj, elf_ehdr.e_shoff + elf_ehdr.e_shstrndx*sizeof(Elf32_Shdr), 0) == -1)
	  fatal("could not locate the string table section header");
	if (fread(&elf_shstrtab, sizeof(Elf32_Shdr), 1, fobj) < 1)
	  fatal("could not read the information of string table");

	stringtable = calloc(elf_shstrtab.sh_size, sizeof(char));
	if (!stringtable)
	  fatal("out of virtual memory");

	if (fseek(fobj, elf_shstrtab.sh_offset, 0) == -1)
	  fatal("could not locate the string table");
	if ((i=fread(stringtable, elf_shstrtab.sh_size, 1, fobj)) < 1)
	  fatal("could not read the string table");

	/* begin to find the .text section header */
	if (fseek(fobj, elf_ehdr.e_shoff, 0) == -1)
	  fatal("could not locate the first section header");
	for (i=0; i<elf_ehdr.e_shnum; i++)
	{
		if (fread(&elf_shdr, sizeof(Elf32_Shdr), 1, fobj) <1)
		  fatal("could not read the section header");
		name = stringtable + elf_shdr.sh_name;
		if ((*name == '.')&&(*(name+1) == 't')&&(*(name+2) == 'e')
			&&(*(name+3) == 'x')&&(*(name+4) == 't')&&(*(name+5) == '\0'))
		  text_section_size = elf_shdr.sh_size;		
	}


    /* done with the executable, close it */
    if (fclose(fobj))
      fatal("could not close executable `%s'", argv[0]);
  }
#endif /* BFD_LOADER */

  /* perform sanity checks on segment ranges */
  if (!ld_text_base || !ld_text_size)
    fatal("executable is missing a `.text' section");
  if (!ld_data_base || !ld_data_size)
    fatal("executable is missing a `.data' section");
  if (!ld_prog_entry)
    fatal("program entry point not specified");

  /* determine byte/words swapping required to execute on this host */
  sim_swap_bytes = (endian_host_byte_order() != endian_target_byte_order());
  if (sim_swap_bytes)
    {
#if 0 /* FIXME: disabled until further notice... */
      /* cross-endian is never reliable, why this is so is beyond the scope
	 of this comment, e-mail me for details... */
      fprintf(stderr, "sim: *WARNING*: swapping bytes to match host...\n");
      fprintf(stderr, "sim: *WARNING*: swapping may break your program!\n");
#else
      fatal("binary endian does not match host endian");
#endif
    }
  sim_swap_words = (endian_host_word_order() != endian_target_word_order());
  if (sim_swap_words)
    {
#if 0 /* FIXME: disabled until further notice... */
      /* cross-endian is never reliable, why this is so is beyond the scope
	 of this comment, e-mail me for details... */
      fprintf(stderr, "sim: *WARNING*: swapping words to match host...\n");
      fprintf(stderr, "sim: *WARNING*: swapping may break your program!\n");
#else
      fatal("binary endian does not match host endian");
#endif
    }

  /* write [argc] to stack */
  temp = MD_SWAPW(argc);
  mem_access(mem, Write, sp, &temp, sizeof(word_t));
  sp += sizeof(word_t);

  /* skip past argv array and NULL */
  argv_addr = sp;
  sp = sp + (argc + 1) * sizeof(md_addr_t);

  /* save space for envp array and NULL */
  envp_addr = sp;
  for (i=0; envp[i]; i++)
    sp += sizeof(md_addr_t);
  sp += sizeof(md_addr_t);

  /* fill in aux vector --by zfx,new glibc may use it 
   * aux vectors are [type,val] pairs
   */
#define AT_PAGESZ  6
#define AT_NULL    0

  temp = AT_PAGESZ;
  mem_access(mem, Write, sp, &temp, sizeof(word_t));
  sp += sizeof(word_t);
  temp = MD_PAGE_SIZE;
  mem_access(mem, Write, sp, &temp, sizeof(word_t));
  sp += sizeof(word_t);

  temp = AT_NULL;
  mem_access(mem, Write, sp, &temp, sizeof(word_t));
  sp += sizeof(word_t);
  temp = 0;
  mem_access(mem, Write, sp, &temp, sizeof(word_t));
  sp += sizeof(word_t);

  /* fill in the argv pointer array and data */
  for (i=0; i<argc; i++)
    {
      /* write the argv pointer array entry */
      temp = MD_SWAPW(sp);
      mem_access(mem, Write, argv_addr + i*sizeof(md_addr_t),
		 &temp, sizeof(md_addr_t));
      /* and the data */
      mem_strcpy(mem_access, mem, Write, sp, argv[i]);
      sp += strlen(argv[i]) + 1;
    }
  /* terminate argv array with a NULL */
  mem_access(mem, Write, argv_addr + i*sizeof(md_addr_t),
	     &null_ptr, sizeof(md_addr_t));

  /* write envp pointer array and data to stack */
  for (i = 0; envp[i]; i++)
    {
      /* write the envp pointer array entry */
      temp = MD_SWAPW(sp);
      mem_access(mem, Write, envp_addr + i*sizeof(md_addr_t),
		 &temp, sizeof(md_addr_t));
      /* and the data */
      mem_strcpy(mem_access, mem, Write, sp, envp[i]);
      sp += strlen(envp[i]) + 1;
    }
  /* terminate the envp array with a NULL */
  mem_access(mem, Write, envp_addr + i*sizeof(md_addr_t),
	     &null_ptr, sizeof(md_addr_t));

  /* did we tromp off the stop of the stack? */
  if (sp > ld_stack_base)
    {
      /* we did, indicate to the user that MD_MAX_ENVIRON must be increased,
	 alternatively, you can use a smaller environment, or fewer
	 command line arguments */
      fatal("environment overflow, increase MD_MAX_ENVIRON in ss.h");
    }

  /* initialize the bottom of heap to top of data segment */
  //ld_brk_point = ROUND_UP(ld_data_base + ld_data_size, MD_PAGE_SIZE);
  ld_brk_point = ld_data_size + ld_data_base;
  
  /* set initial minimum stack pointer value to initial stack value */
  ld_stack_min = regs->regs_R[MD_REG_SP];

  /* set up initial register state */
  regs->regs_R[MD_REG_SP] = ld_environ_base;
  regs->regs_PC = ld_prog_entry;

  debug("ld_text_base: 0x%08x  ld_text_size: 0x%08x",
	ld_text_base, ld_text_size);
  debug("ld_data_base: 0x%08x  ld_data_size: 0x%08x",
	ld_data_base, ld_data_size);
  debug("ld_stack_base: 0x%08x  ld_stack_size: 0x%08x",
	ld_stack_base, ld_stack_size);
  debug("ld_prog_entry: 0x%08x", ld_prog_entry);

  /* finally, predecode the text segment... */
  /* we only execute the instructions in .text section */
 /*
  {
    md_addr_t addr;
    md_inst_t inst;
    enum md_fault_type fault;

    if (OP_MAX > 255)
      fatal("cannot perform fast decoding, too many opcodes");

    debug("sim: decoding text segment...");
    for (addr = ld_prog_entry;
	 addr < (ld_prog_entry + text_section_size);
	 addr += sizeof(md_inst_t))
      {
	fault = mem_access(mem, Read, addr, &inst, sizeof(inst));
	if (fault != md_fault_none)
	  fatal("could not read instruction memory");
	inst.a = (inst.a & ~0xff) | (word_t)MD_OP_ENUM(MD_OPFIELD(inst));
	fault = mem_access(mem, Write, addr, &inst, sizeof(inst));
	if (fault != md_fault_none)
	  fatal("could not write instruction memory");
      }
  }*/
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人综合在线播放| 午夜视频一区二区| 成人深夜视频在线观看| 国产亚洲一本大道中文在线| 国产成人一区二区精品非洲| 欧美激情一区二区| 91麻豆免费观看| 亚洲一区二区三区四区的| 777午夜精品免费视频| 精品在线免费观看| 中文字幕精品三区| 欧美亚洲另类激情小说| 麻豆91精品视频| 日本一区二区三区高清不卡| 在线视频你懂得一区| 视频一区二区中文字幕| 久久久不卡网国产精品一区| 91在线国产福利| 日本在线不卡视频| 国产精品美女久久久久av爽李琼| 欧美在线free| 国产综合成人久久大片91| 亚洲免费观看高清完整版在线| 精品视频999| 狠狠狠色丁香婷婷综合激情 | 国产精品成人免费在线| 欧美天天综合网| 精彩视频一区二区三区| 一区二区三区四区视频精品免费| 91麻豆精品国产| 高清国产一区二区| 日日摸夜夜添夜夜添国产精品| 久久久夜色精品亚洲| 在线观看国产日韩| 国产成人免费高清| 天堂va蜜桃一区二区三区漫画版| 国产欧美一区二区精品性色 | 色婷婷av一区二区三区大白胸| 日本欧美韩国一区三区| 自拍偷拍亚洲欧美日韩| 欧美精品乱码久久久久久| av不卡一区二区三区| 欧美一区二区三区喷汁尤物| 日韩国产欧美在线观看| 91精品免费在线| 久久国产精品露脸对白| 日韩精品一卡二卡三卡四卡无卡| 精品国产一区二区三区久久久蜜月| 色综合欧美在线| 成人综合在线观看| 精品亚洲国产成人av制服丝袜| 一区二区三区国产精华| 中文字幕国产一区二区| 久久综合久久综合久久| 欧美一区二区三区啪啪| 欧美揉bbbbb揉bbbbb| 97精品久久久久中文字幕| 国产成人综合自拍| 国产乱码精品一区二区三| 免费高清在线一区| 日韩精彩视频在线观看| 亚洲亚洲人成综合网络| 亚洲精品视频免费看| 欧美国产精品v| 中文欧美字幕免费| 国产欧美日韩亚州综合 | 成人av综合一区| 国产盗摄精品一区二区三区在线| 狠狠色丁香久久婷婷综| 九九精品视频在线看| 激情久久五月天| 精品一区二区在线视频| 精品在线一区二区| 国产精品中文字幕日韩精品 | 亚洲一区二区三区美女| 亚洲精品免费在线| 亚洲日韩欧美一区二区在线| 亚洲图片激情小说| 亚洲精品日产精品乱码不卡| 亚洲精品免费电影| 亚洲国产精品久久久久婷婷884| 亚洲午夜在线电影| 午夜久久久影院| 美女任你摸久久| 国产精品99久久久久| 欧美精品久久99| 欧美卡1卡2卡| 日韩免费高清电影| www.亚洲激情.com| 91原创在线视频| 色悠悠亚洲一区二区| 成人美女视频在线观看| 国产成人一区二区精品非洲| 国产一区二区三区免费| 亚洲综合色在线| 国产日韩综合av| 欧美大度的电影原声| 激情国产一区二区| 天堂影院一区二区| 亚洲国产精品久久一线不卡| 极品少妇一区二区| 久久久久久久综合日本| 亚洲美女视频在线| 蜜臀国产一区二区三区在线播放| 一区二区三区高清不卡| 亚洲福利视频导航| 丝袜国产日韩另类美女| 国产精品99久久久久久有的能看| 麻豆精品视频在线观看免费 | 91精品国产综合久久久久| 美女视频黄a大片欧美| 国产精品一区二区在线观看不卡 | 成人av在线看| 欧美性生活大片视频| 精品卡一卡二卡三卡四在线| 国产精品无遮挡| 亚洲成人动漫精品| 丁香六月久久综合狠狠色| 欧美日韩免费在线视频| 国产欧美1区2区3区| 亚洲国产精品综合小说图片区| 激情都市一区二区| 欧美日韩在线播放三区| 久久精品一级爱片| 亚洲成a人在线观看| 国产成人免费网站| 欧美一级高清片| 成人免费在线视频观看| 日本不卡视频在线观看| 91在线国产福利| 久久久天堂av| 日韩av中文在线观看| 91丨porny丨蝌蚪视频| 久久综合九色综合欧美98| 亚洲亚洲人成综合网络| 成人av网站大全| 久久日韩精品一区二区五区| 亚洲一区二区三区中文字幕| 成人涩涩免费视频| 日韩欧美国产系列| 午夜久久久久久久久久一区二区| www.亚洲色图| 欧美激情一区二区三区不卡 | 天天综合天天做天天综合| k8久久久一区二区三区| 久久综合九色综合久久久精品综合| 亚洲国产精品久久久久秋霞影院| av不卡在线观看| 国产日韩精品视频一区| 久88久久88久久久| 日韩午夜激情免费电影| 午夜国产精品一区| 欧洲另类一二三四区| 亚洲欧美国产高清| 97久久超碰精品国产| 国产精品狼人久久影院观看方式| 国产福利不卡视频| 久久精品亚洲精品国产欧美kt∨ | jiyouzz国产精品久久| 国产调教视频一区| 国产在线不卡一区| 欧美大片国产精品| 久久国产尿小便嘘嘘| 日韩一区二区中文字幕| 久久成人免费日本黄色| 欧美不卡一区二区| 国产毛片精品视频| 中文字幕第一区第二区| 成人免费毛片高清视频| 中文字幕一区二区三区精华液 | 麻豆成人91精品二区三区| 欧美一区二区三级| 久久av资源站| 亚洲精品一线二线三线| 国产精品一色哟哟哟| 国产精品色婷婷| 日本久久精品电影| 亚洲一区二区av电影| 欧美日韩高清一区二区三区| 图片区小说区国产精品视频| 日韩女优av电影| 国产一区二区不卡老阿姨| 中文字幕不卡在线播放| 91在线观看污| 三级不卡在线观看| 欧美精品一区二区三区四区| 成人精品免费看| 曰韩精品一区二区| 欧美高清视频不卡网| 精品亚洲成a人| 国产精品视频线看| 欧美视频一区二区三区四区 | 日韩无一区二区| 国产一区二区精品在线观看| 一区在线观看视频| 欧美精品久久久久久久多人混战| 久久精品国产秦先生| 亚洲国产精品黑人久久久| 精品视频在线免费观看| 另类人妖一区二区av|