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

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

?? dl-machine.h

?? glibc2.5版源代碼
?? H
?? 第 1 頁 / 共 2 頁
字號(hào):
/* Machine-dependent ELF dynamic relocation inline functions.  SPARC version.   Copyright (C) 1996-2003, 2004, 2005, 2006 Free Software Foundation, Inc.   This file is part of the GNU C Library.   The GNU C Library is free software; you can redistribute it and/or   modify it under the terms of the GNU Lesser General Public   License as published by the Free Software Foundation; either   version 2.1 of the License, or (at your option) any later version.   The GNU C Library 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   Lesser General Public License for more details.   You should have received a copy of the GNU Lesser General Public   License along with the GNU C Library; if not, write to the Free   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA   02111-1307 USA.  */#ifndef dl_machine_h#define dl_machine_h#define ELF_MACHINE_NAME "sparc"#include <string.h>#include <sys/param.h>#include <ldsodefs.h>#include <tls.h>#ifndef VALIDX# define VALIDX(tag) (DT_NUM + DT_THISPROCNUM + DT_VERSIONTAGNUM \		      + DT_EXTRANUM + DT_VALTAGIDX (tag))#endif/* Some SPARC opcodes we need to use for self-modifying code.  */#define OPCODE_NOP	0x01000000 /* nop */#define OPCODE_CALL	0x40000000 /* call ?; add PC-rel word address */#define OPCODE_SETHI_G1	0x03000000 /* sethi ?, %g1; add value>>10 */#define OPCODE_JMP_G1	0x81c06000 /* jmp %g1+?; add lo 10 bits of value */#define OPCODE_SAVE_SP	0x9de3bfa8 /* save %sp, -(16+6)*4, %sp */#define OPCODE_BA	0x30800000 /* b,a ?; add PC-rel word address *//* Return nonzero iff ELF header is compatible with the running host.  */static inline intelf_machine_matches_host (const Elf32_Ehdr *ehdr){  if (ehdr->e_machine == EM_SPARC)    return 1;  else if (ehdr->e_machine == EM_SPARC32PLUS)    {      /* XXX The following is wrong!  Dave Miller rejected to implement it	 correctly.  If this causes problems shoot *him*!  */#ifdef SHARED      return GLRO(dl_hwcap) & GLRO(dl_hwcap_mask) & HWCAP_SPARC_V9;#else      return GLRO(dl_hwcap) & HWCAP_SPARC_V9;#endif    }  else    return 0;}/* We have to do this because elf_machine_{dynamic,load_address} can be   invoked from functions that have no GOT references, and thus the compiler   has no obligation to load the PIC register.  */#define LOAD_PIC_REG(PIC_REG)	\do {	register Elf32_Addr pc __asm("o7"); \	__asm("sethi %%hi(_GLOBAL_OFFSET_TABLE_-4), %1\n\t" \	      "call 1f\n\t" \	      "add %1, %%lo(_GLOBAL_OFFSET_TABLE_+4), %1\n" \	      "1:\tadd %1, %0, %1" \	      : "=r" (pc), "=r" (PIC_REG)); \} while (0)/* Return the link-time address of _DYNAMIC.  Conveniently, this is the   first element of the GOT.  This must be inlined in a function which   uses global data.  */static inline Elf32_Addrelf_machine_dynamic (void){  register Elf32_Addr *got asm ("%l7");  LOAD_PIC_REG (got);  return *got;}/* Return the run-time load address of the shared object.  */static inline Elf32_Addrelf_machine_load_address (void){  register Elf32_Addr *pc __asm ("%o7"), *got __asm ("%l7");  __asm ("sethi %%hi(_GLOBAL_OFFSET_TABLE_-4), %1\n\t"	 "call 1f\n\t"	 " add %1, %%lo(_GLOBAL_OFFSET_TABLE_+4), %1\n\t"	 "call _DYNAMIC\n\t"	 "call _GLOBAL_OFFSET_TABLE_\n"	 "1:\tadd %1, %0, %1\n\t" : "=r" (pc), "=r" (got));  /* got is now l_addr + _GLOBAL_OFFSET_TABLE_     *got is _DYNAMIC     pc[2]*4 is l_addr + _DYNAMIC - (long)pc - 8     pc[3]*4 is l_addr + _GLOBAL_OFFSET_TABLE_ - (long)pc - 12  */  return (Elf32_Addr) got - *got + (pc[2] - pc[3]) * 4 - 4;}/* Set up the loaded object described by L so its unrelocated PLT   entries will jump to the on-demand fixup code in dl-runtime.c.  */static inline intelf_machine_runtime_setup (struct link_map *l, int lazy, int profile){  Elf32_Addr *plt;  extern void _dl_runtime_resolve (Elf32_Word);  extern void _dl_runtime_profile (Elf32_Word);  if (l->l_info[DT_JMPREL] && lazy)    {      Elf32_Addr rfunc;      /* The entries for functions in the PLT have not yet been filled in.	 Their initial contents will arrange when called to set the high 22	 bits of %g1 with an offset into the .rela.plt section and jump to	 the beginning of the PLT.  */      plt = (Elf32_Addr *) D_PTR (l, l_info[DT_PLTGOT]);      if (__builtin_expect(profile, 0))	{	  rfunc = (Elf32_Addr) &_dl_runtime_profile;	  if (GLRO(dl_profile) != NULL	      && _dl_name_match_p (GLRO(dl_profile), l))	    GL(dl_profile_map) = l;	}      else	{	  rfunc = (Elf32_Addr) &_dl_runtime_resolve;	}      /* The beginning of the PLT does:		sethi %hi(_dl_runtime_{resolve,profile}), %g2	 pltpc:	jmpl %g2 + %lo(_dl_runtime_{resolve,profile}), %g2		 nop		.word MAP         The PC value (pltpc) saved in %g2 by the jmpl points near the	 location where we store the link_map pointer for this object.  */      plt[0] = 0x05000000 | ((rfunc >> 10) & 0x003fffff);      plt[1] = 0x85c0a000 | (rfunc & 0x3ff);      plt[2] = OPCODE_NOP;	/* Fill call delay slot.  */      plt[3] = (Elf32_Addr) l;      if (__builtin_expect (l->l_info[VALIDX(DT_GNU_PRELINKED)] != NULL, 0)	  || __builtin_expect (l->l_info [VALIDX (DT_GNU_LIBLISTSZ)] != NULL, 0))	{	  /* Need to reinitialize .plt to undo prelinking.  */	  int do_flush;	  Elf32_Rela *rela = (Elf32_Rela *) D_PTR (l, l_info[DT_JMPREL]);	  Elf32_Rela *relaend	    = (Elf32_Rela *) ((char *) rela			      + l->l_info[DT_PLTRELSZ]->d_un.d_val);	  do_flush = GLRO(dl_hwcap) & HWCAP_SPARC_FLUSH;	  /* prelink must ensure there are no R_SPARC_NONE relocs left	     in .rela.plt.  */	  while (rela < relaend)	    {	      *(unsigned int *) rela->r_offset		= OPCODE_SETHI_G1 | (rela->r_offset - (Elf32_Addr) plt);	      *(unsigned int *) (rela->r_offset + 4)		= OPCODE_BA | ((((Elf32_Addr) plt				 - rela->r_offset - 4) >> 2) & 0x3fffff);	      if (do_flush)		{		  __asm __volatile ("flush %0" : : "r"(rela->r_offset));		  __asm __volatile ("flush %0+4" : : "r"(rela->r_offset));		}	      ++rela;	    }	}    }  return lazy;}/* ELF_RTYPE_CLASS_PLT iff TYPE describes relocation of a PLT entry, so   PLT entries should not be allowed to define the value.   ELF_RTYPE_CLASS_NOCOPY iff TYPE should not be allowed to resolve to one   of the main executable's symbols, as for a COPY reloc.  */#if defined USE_TLS && (!defined RTLD_BOOTSTRAP || USE___THREAD)# define elf_machine_type_class(type) \  ((((type) == R_SPARC_JMP_SLOT						      \     || ((type) >= R_SPARC_TLS_GD_HI22 && (type) <= R_SPARC_TLS_TPOFF64))     \    * ELF_RTYPE_CLASS_PLT)						      \   | (((type) == R_SPARC_COPY) * ELF_RTYPE_CLASS_COPY))#else# define elf_machine_type_class(type) \  ((((type) == R_SPARC_JMP_SLOT) * ELF_RTYPE_CLASS_PLT)			      \   | (((type) == R_SPARC_COPY) * ELF_RTYPE_CLASS_COPY))#endif/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries.  */#define ELF_MACHINE_JMP_SLOT	R_SPARC_JMP_SLOT/* The SPARC never uses Elf32_Rel relocations.  */#define ELF_MACHINE_NO_REL 1/* The SPARC overlaps DT_RELA and DT_PLTREL.  */#define ELF_MACHINE_PLTREL_OVERLAP 1/* Undo the sub %sp, 6*4, %sp; add %sp, 22*4, %o0 below to get at the   value we want in __libc_stack_end.  */#define DL_STACK_END(cookie) \  ((void *) (((long) (cookie)) - (22 - 6) * 4))/* Initial entry point code for the dynamic linker.   The C function `_dl_start' is the real entry point;   its return value is the user program's entry point.  */#define RTLD_START __asm__ ("\	.text\n\	.globl	_start\n\	.type	_start, @function\n\	.align	32\n\_start:\n\  /* Allocate space for functions to drop their arguments.  */\n\	sub	%sp, 6*4, %sp\n\  /* Pass pointer to argument block to _dl_start.  */\n\	call	_dl_start\n\	 add	%sp, 22*4, %o0\n\	/* FALTHRU */\n\	.globl	_dl_start_user\n\	.type	_dl_start_user, @function\n\_dl_start_user:\n\  /* Load the PIC register.  */\n\1:	call	2f\n\	 sethi	%hi(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7\n\2:	or	%l7, %lo(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7\n\	add	%l7, %o7, %l7\n\  /* Save the user entry point address in %l0 */\n\	mov	%o0, %l0\n\  /* See if we were run as a command with the executable file name as an\n\     extra leading argument.  If so, adjust the contents of the stack.  */\n\	sethi	%hi(_dl_skip_args), %g2\n\	or	%g2, %lo(_dl_skip_args), %g2\n\	ld	[%l7+%g2], %i0\n\	ld	[%i0], %i0\n\	tst	%i0\n\	beq	3f\n\	 ld	[%sp+22*4], %i5		/* load argc */\n\	/* Find out how far to shift.  */\n\	sethi	%hi(_dl_argv), %l3\n\	or	%l3, %lo(_dl_argv), %l3\n\	ld	[%l7+%l3], %l3\n\	sub	%i5, %i0, %i5\n\	ld	[%l3], %l4\n\	sll	%i0, 2, %i2\n\	st	%i5, [%sp+22*4]\n\	sub	%l4, %i2, %l4\n\	add	%sp, 23*4, %i1\n\	add	%i1, %i2, %i2\n\	st	%l4, [%l3]\n\	/* Copy down argv */\n\21:	ld	[%i2], %i3\n\	add	%i2, 4, %i2\n\	tst	%i3\n\	st	%i3, [%i1]\n\	bne	21b\n\	 add	%i1, 4, %i1\n\	/* Copy down env */\n\22:	ld	[%i2], %i3\n\	add	%i2, 4, %i2\n\	tst	%i3\n\	st	%i3, [%i1]\n\	bne	22b\n\	 add	%i1, 4, %i1\n\	/* Copy down auxiliary table.  */\n\23:	ld	[%i2], %i3\n\	ld	[%i2+4], %i4\n\	add	%i2, 8, %i2\n\	tst	%i3\n\	st	%i3, [%i1]\n\	st	%i4, [%i1+4]\n\	bne	23b\n\	 add	%i1, 8, %i1\n\  /* %o0 = _dl_loaded, %o1 = argc, %o2 = argv, %o3 = envp.  */\n\3:	sethi	%hi(_rtld_local), %o0\n\

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩二区三区| 精品福利在线导航| 黄色成人免费在线| 一区二区三区四区高清精品免费观看| 日韩网站在线看片你懂的| 99久久精品一区二区| 日韩高清一区二区| 亚洲一区免费在线观看| 国产女人18毛片水真多成人如厕| 欧美日韩精品系列| 91麻豆国产在线观看| 精品无人区卡一卡二卡三乱码免费卡| 亚洲精品国产第一综合99久久 | 99国内精品久久| 久久成人精品无人区| 亚洲国产日韩av| 亚洲欧洲国产日韩| 精品久久人人做人人爰| 在线一区二区三区四区五区| 国产成人在线色| 国产一区二区在线看| 日韩电影在线免费观看| 亚洲第一主播视频| 一级做a爱片久久| 中文字幕日韩一区| 欧美激情一区三区| 久久精品视频一区二区三区| 欧美大片国产精品| 91麻豆精品久久久久蜜臀| 日本高清无吗v一区| www.一区二区| 成人一区在线看| 国产成人午夜视频| 国内偷窥港台综合视频在线播放| 天堂va蜜桃一区二区三区| 亚洲电影中文字幕在线观看| 综合久久综合久久| 亚洲视频狠狠干| **欧美大码日韩| 国产精品久久久久久妇女6080| 久久久精品国产免大香伊 | 欧美一区二区美女| 欧美喷潮久久久xxxxx| 欧美日韩国产片| 欧美日韩一区二区三区在线 | 久久久一区二区三区| 欧美成人综合网站| 久久久美女艺术照精彩视频福利播放| 日韩欧美视频在线| 337p日本欧洲亚洲大胆精品 | 亚洲丝袜自拍清纯另类| 亚洲色欲色欲www| 亚洲与欧洲av电影| 亚洲国产三级在线| 久久国产生活片100| 国产乱码精品一区二区三区忘忧草| 精品午夜一区二区三区在线观看| 国产精品一区二区无线| 成人午夜免费电影| 91福利精品第一导航| 欧美日韩国产高清一区二区三区| 日韩欧美中文字幕精品| 国产拍欧美日韩视频二区| 中文字幕日本不卡| 亚洲成a人在线观看| 捆绑变态av一区二区三区| 激情亚洲综合在线| 99视频超级精品| 精品婷婷伊人一区三区三| 欧美成人精精品一区二区频| 欧美激情中文字幕一区二区| 亚洲女人****多毛耸耸8| 五月婷婷激情综合| 国产不卡一区视频| 欧美日韩亚州综合| 欧美成人性战久久| 亚洲裸体xxx| 美女一区二区三区在线观看| 成人做爰69片免费看网站| 欧美日韩精品福利| 欧美极品少妇xxxxⅹ高跟鞋| 午夜天堂影视香蕉久久| 国产一区91精品张津瑜| 欧美视频在线观看一区| 久久久影视传媒| 亚洲成av人片在线观看无码| 国产成人精品影院| 欧美久久久久久久久中文字幕| 久久九九国产精品| 午夜伊人狠狠久久| 成人99免费视频| 日韩三级中文字幕| 亚洲综合久久av| 国产不卡视频在线观看| 91麻豆精品国产自产在线| 1区2区3区精品视频| 另类小说欧美激情| 欧美日韩国产精品成人| 亚洲欧洲国产日韩| 国产传媒日韩欧美成人| 欧美一区二区不卡视频| 亚洲精品免费视频| 大胆欧美人体老妇| 精品国产亚洲在线| 日本强好片久久久久久aaa| 色美美综合视频| 中文字幕乱码日本亚洲一区二区| 视频一区中文字幕| 欧美性猛交xxxxxxxx| 中文字幕一区二区三区精华液| 国内成人免费视频| 日韩一区二区在线看片| 亚洲成人午夜影院| 一本色道久久综合亚洲精品按摩| 久久久久国产精品免费免费搜索| 丝袜国产日韩另类美女| 欧美午夜精品电影| 一区二区三区中文字幕在线观看| 国产老女人精品毛片久久| 51精品国自产在线| 婷婷开心激情综合| 欧美视频一区二区在线观看| 亚洲精品第一国产综合野| www.日韩精品| 中文成人av在线| 粉嫩一区二区三区在线看| 2014亚洲片线观看视频免费| 日韩电影在线观看电影| 在线成人午夜影院| 天堂va蜜桃一区二区三区漫画版| 91国产福利在线| 亚洲精品国产第一综合99久久| 91社区在线播放| 亚洲丝袜制服诱惑| 91国模大尺度私拍在线视频| 亚洲乱码国产乱码精品精的特点| 91亚洲精华国产精华精华液| 国产精品看片你懂得| 懂色av噜噜一区二区三区av| 欧美激情一区二区三区四区| 国产福利一区在线| 中日韩av电影| 91日韩在线专区| 一区二区三区中文在线| 欧美日韩免费高清一区色橹橹 | 国产色产综合产在线视频| 国产suv精品一区二区三区| 国产亚洲欧美日韩在线一区| 风间由美中文字幕在线看视频国产欧美| 国产日韩v精品一区二区| 成人理论电影网| 亚洲欧美一区二区久久| 在线观看www91| 日日欢夜夜爽一区| 欧美xxxx老人做受| 国产黄色精品视频| 亚洲美女在线一区| 欧美精品v国产精品v日韩精品 | 亚洲激情校园春色| 欧美日韩精品一区二区三区蜜桃 | 国产亚洲一区二区三区四区| 成人激情电影免费在线观看| 亚洲精品综合在线| 欧美日韩精品欧美日韩精品| 久久国内精品自在自线400部| 久久一区二区三区四区| 91丨porny丨国产入口| 亚洲一区日韩精品中文字幕| 日韩精品一区国产麻豆| 成人黄色777网| 亚洲午夜精品网| 久久综合色一综合色88| 9人人澡人人爽人人精品| 亚洲一区二区三区视频在线播放 | 亚洲最快最全在线视频| 宅男在线国产精品| 成人sese在线| 免费在线欧美视频| 最新日韩av在线| 7777精品伊人久久久大香线蕉完整版| 国产一区二区伦理片| 一区二区在线观看av| 日韩免费电影网站| 91美女在线观看| 国产最新精品精品你懂的| 亚洲老妇xxxxxx| 久久综合99re88久久爱| 欧美视频一区二区| 粉嫩久久99精品久久久久久夜| 亚洲va欧美va国产va天堂影院| 麻豆精品在线视频| 亚洲精品国产一区二区精华液| 亚洲精品一区二区精华| 欧美色倩网站大全免费| 成人一区二区三区视频在线观看 | 亚洲一区二区欧美日韩| 久久久www成人免费毛片麻豆 | 亚洲精品午夜久久久| 久久亚洲精华国产精华液| 欧美在线观看18|