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

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

?? dl-machine.h

?? glibc 2.9,最新版的C語言庫函數
?? H
?? 第 1 頁 / 共 2 頁
字號:
/* Machine-dependent ELF dynamic relocation inline functions.   PowerPC64 version.   Copyright 1995-2005, 2006, 2008 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 Library General Public License as   published by the Free Software Foundation; either version 2 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   Library General Public License for more details.   You should have received a copy of the GNU Library General Public   License along with the GNU C Library; see the file COPYING.LIB.  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 "powerpc64"#include <assert.h>#include <sys/param.h>#include <dl-tls.h>#include <sysdep.h>/* Translate a processor specific dynamic tag to the index   in l_info array.  */#define DT_PPC64(x) (DT_PPC64_##x - DT_LOPROC + DT_NUM)/* A PowerPC64 function descriptor.  The .plt (procedure linkage   table) and .opd (official procedure descriptor) sections are   arrays of these.  */typedef struct{  Elf64_Addr fd_func;  Elf64_Addr fd_toc;  Elf64_Addr fd_aux;} Elf64_FuncDesc;#define ELF_MULT_MACHINES_SUPPORTED/* Return nonzero iff ELF header is compatible with the running host.  */static inline intelf_machine_matches_host (const Elf64_Ehdr *ehdr){  return ehdr->e_machine == EM_PPC64;}/* Return nonzero iff ELF header is compatible with the running host,   but not this loader.  */static inline intelf_host_tolerates_machine (const Elf64_Ehdr *ehdr){  return ehdr->e_machine == EM_PPC;}/* Return nonzero iff ELF header is compatible with the running host,   but not this loader.  */static inline intelf_host_tolerates_class (const Elf64_Ehdr *ehdr){  return ehdr->e_ident[EI_CLASS] == ELFCLASS32;}/* Return the run-time load address of the shared object, assuming it   was originally linked at zero.  */static inline Elf64_Addrelf_machine_load_address (void) __attribute__ ((const));static inline Elf64_Addrelf_machine_load_address (void){  Elf64_Addr ret;  /* The first entry in .got (and thus the first entry in .toc) is the     link-time TOC_base, ie. r2.  So the difference between that and     the current r2 set by the kernel is how far the shared lib has     moved.  */  asm (	"	ld	%0,-32768(2)\n"	"	subf	%0,%0,2\n"	: "=r"	(ret));  return ret;}/* Return the link-time address of _DYNAMIC.  */static inline Elf64_Addrelf_machine_dynamic (void){  Elf64_Addr runtime_dynamic;  /* It's easier to get the run-time address.  */  asm (	"	addis	%0,2,_DYNAMIC@toc@ha\n"	"	addi	%0,%0,_DYNAMIC@toc@l\n"	: "=b"	(runtime_dynamic));  /* Then subtract off the load address offset.  */  return runtime_dynamic - elf_machine_load_address() ;}#define ELF_MACHINE_BEFORE_RTLD_RELOC(dynamic_info) /* nothing *//* The PLT uses Elf64_Rela relocs.  */#define elf_machine_relplt elf_machine_rela#ifdef HAVE_INLINED_SYSCALLS/* We do not need _dl_starting_up.  */# define DL_STARTING_UP_DEF#else# define DL_STARTING_UP_DEF \".LC__dl_starting_up:\n"  \"	.tc _dl_starting_up_internal[TC],_dl_starting_up_internal\n"#endif/* 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 (".pushsection \".text\"\n"					\"	.align	2\n"							\"	.type	" BODY_PREFIX "_start,@function\n"			\"	.pushsection \".opd\",\"aw\"\n"					\"	.align	3\n"							\"	.globl	_start\n"						\"	" ENTRY_2(_start) "\n"						\"_start:\n"								\"	" OPD_ENT(_start) "\n"						\"	.popsection\n"							\BODY_PREFIX "_start:\n"							\/* We start with the following on the stack, from top:			\   argc (4 bytes);							\   arguments for program (terminated by NULL);				\   environment variables (terminated by NULL);				\   arguments for the program loader.  */				\"	mr	3,1\n"							\"	li	4,0\n"							\"	stdu	4,-128(1)\n"						\/* Call _dl_start with one parameter pointing at argc.  */		\"	bl	" DOT_PREFIX "_dl_start\n"				\"	nop\n"								\/* Transfer control to _dl_start_user!  */				\"	b	" DOT_PREFIX "_dl_start_user\n"				\".LT__start:\n"								\"	.long 0\n"							\"	.byte 0x00,0x0c,0x24,0x40,0x00,0x00,0x00,0x00\n"		\"	.long .LT__start-" BODY_PREFIX "_start\n"			\"	.short .LT__start_name_end-.LT__start_name_start\n"		\".LT__start_name_start:\n"						\"	.ascii \"_start\"\n"						\".LT__start_name_end:\n"						\"	.align 2\n"							\"	" END_2(_start) "\n"						\"	.globl	_dl_start_user\n"					\"	.pushsection \".opd\",\"aw\"\n"					\"_dl_start_user:\n"							\"	" OPD_ENT(_dl_start_user) "\n"					\"	.popsection\n"							\"	.pushsection	\".toc\",\"aw\"\n"				\DL_STARTING_UP_DEF							\".LC__rtld_global:\n"							\"	.tc _rtld_global[TC],_rtld_global\n"				\".LC__dl_argc:\n"							\"	.tc _dl_argc[TC],_dl_argc\n"					\".LC__dl_argv:\n"							\"	.tc _dl_argv_internal[TC],_dl_argv_internal\n"			\".LC__dl_fini:\n"							\"	.tc _dl_fini[TC],_dl_fini\n"					\"	.popsection\n"							\"	.type	" BODY_PREFIX "_dl_start_user,@function\n"		\"	" ENTRY_2(_dl_start_user) "\n"					\/* Now, we do our main work of calling initialisation procedures.	\   The ELF ABI doesn't say anything about parameters for these,		\   so we just pass argc, argv, and the environment.			\   Changing these is strongly discouraged (not least because argc is	\   passed by value!).  */						\BODY_PREFIX "_dl_start_user:\n"						\/* the address of _start in r30.  */					\"	mr	30,3\n"							\/* &_dl_argc in 29, &_dl_argv in 27, and _dl_loaded in 28.  */		\"	ld	28,.LC__rtld_global@toc(2)\n"				\"	ld	29,.LC__dl_argc@toc(2)\n"				\"	ld	27,.LC__dl_argv@toc(2)\n"				\/* _dl_init (_dl_loaded, _dl_argc, _dl_argv, _dl_argv+_dl_argc+1).  */	\"	ld	3,0(28)\n"						\"	lwa	4,0(29)\n"						\"	ld	5,0(27)\n"						\"	sldi	6,4,3\n"						\"	add	6,5,6\n"						\"	addi	6,6,8\n"						\"	bl	" DOT_PREFIX "_dl_init\n"				\"	nop\n"								\/* Now, to conform to the ELF ABI, we have to:				\   Pass argc (actually _dl_argc) in r3;  */				\"	lwa	3,0(29)\n"						\/* Pass argv (actually _dl_argv) in r4;  */				\"	ld	4,0(27)\n"						\/* Pass argv+argc+1 in r5;  */						\"	sldi	5,3,3\n"						\"	add	6,4,5\n"						\"	addi	5,6,8\n"						\/* Pass the auxilary vector in r6. This is passed to us just after	\   _envp.  */								\"2:	ldu	0,8(6)\n"						\"	cmpdi	0,0\n"							\"	bne	2b\n"							\"	addi	6,6,8\n"						\/* Pass a termination function pointer (in this case _dl_fini) in	\   r7.  */								\"	ld	7,.LC__dl_fini@toc(2)\n"				\/* Pass the stack pointer in r1 (so far so good), pointing to a NULL	\   value.  This lets our startup code distinguish between a program	\   linked statically, which linux will call with argc on top of the	\   stack which will hopefully never be zero, and a dynamically linked	\   program which will always have a NULL on the top of the stack.	\   Take the opportunity to clear LR, so anyone who accidentally		\   returns from _start gets SEGV.  Also clear the next few words of	\   the stack.  */							\"	li	31,0\n"							\"	std	31,0(1)\n"						\"	mtlr	31\n"							\"	std	31,8(1)\n"						\"	std	31,16(1)\n"						\"	std	31,24(1)\n"						\/* Now, call the start function descriptor at r30...  */		\"	.globl	._dl_main_dispatch\n"					\"._dl_main_dispatch:\n"							\"	ld	0,0(30)\n"						\"	ld	2,8(30)\n"						\"	mtctr	0\n"							\"	ld	11,16(30)\n"						\"	bctr\n"								\".LT__dl_start_user:\n"							\"	.long 0\n"							\"	.byte 0x00,0x0c,0x24,0x40,0x00,0x00,0x00,0x00\n"		\"	.long .LT__dl_start_user-" BODY_PREFIX "_dl_start_user\n"	\"	.short .LT__dl_start_user_name_end-.LT__dl_start_user_name_start\n" \".LT__dl_start_user_name_start:\n"					\"	.ascii \"_dl_start_user\"\n"					\".LT__dl_start_user_name_end:\n"					\"	.align 2\n"							\"	" END_2(_dl_start_user) "\n"					\"	.popsection");/* 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.   To make function pointer comparisons work on most targets, the   relevant ABI states that the address of a non-local function in a   dynamically linked executable is the address of the PLT entry for   that function.  This is quite reasonable since using the real   function address in a non-PIC executable would typically require   dynamic relocations in .text, something to be avoided.  For such   functions, the linker emits a SHN_UNDEF symbol in the executable   with value equal to the PLT entry address.  Normally, SHN_UNDEF   symbols have a value of zero, so this is a clue to ld.so that it   should treat these symbols specially.  For relocations not in   ELF_RTYPE_CLASS_PLT (eg. those on function pointers), ld.so should   use the value of the executable SHN_UNDEF symbol, ie. the PLT entry   address.  For relocations in ELF_RTYPE_CLASS_PLT (eg. the relocs in   the PLT itself), ld.so should use the value of the corresponding   defined symbol in the object that defines the function, ie. the   real function address.  This complicates ld.so in that there are   now two possible values for a given symbol, and it gets even worse   because protected symbols need yet another set of rules.   On PowerPC64 we don't need any of this.  The linker won't emit   SHN_UNDEF symbols with non-zero values.  ld.so can make all   relocations behave "normally", ie. always use the real address   like PLT relocations.  So always set ELF_RTYPE_CLASS_PLT.  */#define elf_machine_type_class(type) \  (ELF_RTYPE_CLASS_PLT | (((type) == R_PPC64_COPY) * ELF_RTYPE_CLASS_COPY))/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries.  */#define ELF_MACHINE_JMP_SLOT	R_PPC64_JMP_SLOT/* The PowerPC never uses REL relocations.  */#define ELF_MACHINE_NO_REL 1/* Stuff for the PLT.  */#define PLT_INITIAL_ENTRY_WORDS 3#define GLINK_INITIAL_ENTRY_WORDS 8#define PPC_DCBST(where) asm volatile ("dcbst 0,%0" : : "r"(where) : "memory")#define PPC_DCBT(where) asm volatile ("dcbt 0,%0" : : "r"(where) : "memory")#define PPC_DCBF(where) asm volatile ("dcbf 0,%0" : : "r"(where) : "memory")#define PPC_SYNC asm volatile ("sync" : : : "memory")#define PPC_ISYNC asm volatile ("sync; isync" : : : "memory")#define PPC_ICBI(where) asm volatile ("icbi 0,%0" : : "r"(where) : "memory")#define PPC_DIE asm volatile ("tweq 0,0")/* Use this when you've modified some code, but it won't be in the   instruction fetch queue (or when it doesn't matter if it is). */#define MODIFIED_CODE_NOQUEUE(where) \     do { PPC_DCBST(where); PPC_SYNC; PPC_ICBI(where); } while (0)/* Use this when it might be in the instruction queue. */#define MODIFIED_CODE(where) \     do { PPC_DCBST(where); PPC_SYNC; PPC_ICBI(where); PPC_ISYNC; } while (0)/* Set up the loaded object described by MAP so its unrelocated PLT   entries will jump to the on-demand fixup code in dl-runtime.c.  */static inline int __attribute__ ((always_inline))elf_machine_runtime_setup (struct link_map *map, int lazy, int profile){  if (map->l_info[DT_JMPREL])    {      Elf64_Word i;      Elf64_Word *glink = NULL;      Elf64_Xword *plt = (Elf64_Xword *) D_PTR (map, l_info[DT_PLTGOT]);      Elf64_Word num_plt_entries = (map->l_info[DT_PLTRELSZ]->d_un.d_val				    / sizeof (Elf64_Rela));      Elf64_Addr l_addr = map->l_addr;      Elf64_Dyn **info = map->l_info;      char *p;      extern void _dl_runtime_resolve (void);      extern void _dl_profile_resolve (void);      /* Relocate the DT_PPC64_GLINK entry in the _DYNAMIC section.	 elf_get_dynamic_info takes care of the standard entries but	 doesn't know exactly what to do with processor specific	 entires.  */      if (info[DT_PPC64(GLINK)] != NULL)	info[DT_PPC64(GLINK)]->d_un.d_ptr += l_addr;      if (lazy)	{	  /* The function descriptor of the appropriate trampline	     routine is used to set the 1st and 2nd doubleword of the	     plt_reserve.  */	  Elf64_FuncDesc *resolve_fd;	  Elf64_Word glink_offset;	  /* the plt_reserve area is the 1st 3 doublewords of the PLT */	  Elf64_FuncDesc *plt_reserve = (Elf64_FuncDesc *) plt;	  Elf64_Word offset;	  resolve_fd = (Elf64_FuncDesc *) (profile ? _dl_profile_resolve					   : _dl_runtime_resolve);	  if (profile && GLRO(dl_profile) != NULL	      && _dl_name_match_p (GLRO(dl_profile), map))	    /* This is the object we are looking for.  Say that we really	       want profiling and the timers are started.  */	    GL(dl_profile_map) = map;	  /* We need to stuff the address/TOC of _dl_runtime_resolve	     into doublewords 0 and 1 of plt_reserve.  Then we need to	     stuff the map address into doubleword 2 of plt_reserve.	     This allows the GLINK0 code to transfer control to the	     correct trampoline which will transfer control to fixup	     in dl-machine.c.  */	  plt_reserve->fd_func = resolve_fd->fd_func;	  plt_reserve->fd_toc  = resolve_fd->fd_toc;	  plt_reserve->fd_aux  = (Elf64_Addr) map;#ifdef RTLD_BOOTSTRAP	  /* When we're bootstrapping, the opd entry will not have	     been relocated yet.  */	  plt_reserve->fd_func += l_addr;	  plt_reserve->fd_toc  += l_addr;#endif	  /* Set up the lazy PLT entries.  */	  glink = (Elf64_Word *) D_PTR (map, l_info[DT_PPC64(GLINK)]);	  offset = PLT_INITIAL_ENTRY_WORDS;	  glink_offset = GLINK_INITIAL_ENTRY_WORDS;	  for (i = 0; i < num_plt_entries; i++)	    {	      plt[offset] = (Elf64_Xword) &glink[glink_offset];	      offset += 3;	      /* The first 32k entries of glink can set an index and		 branch using two instructions;  Past that point,		 glink uses three instructions.  */	      if (i < 0x8000)          	glink_offset += 2;	      else          	glink_offset += 3;	    }	  /* Now, we've modified data.  We need to write the changes from	     the data cache to a second-level unified cache, then make	     sure that stale data in the instruction cache is removed.	     (In a multiprocessor system, the effect is more complex.)	     Most of the PLT shouldn't be in the instruction cache, but	     there may be a little overlap at the start and the end.	     Assumes that dcbst and icbi apply to lines of 16 bytes or	     more.  Current known line sizes are 16, 32, and 128 bytes.  */	  for (p = (char *) plt; p < (char *) &plt[offset]; p += 16)	    PPC_DCBST (p);	  PPC_SYNC;	}    }  return lazy;}/* Change the PLT entry whose reloc is 'reloc' to call the actual   routine.  */static inline Elf64_Addr __attribute__ ((always_inline))elf_machine_fixup_plt (struct link_map *map, lookup_t sym_map,		       const Elf64_Rela *reloc,		       Elf64_Addr *reloc_addr, Elf64_Addr finaladdr){  Elf64_FuncDesc *plt = (Elf64_FuncDesc *) reloc_addr;  Elf64_FuncDesc *rel = (Elf64_FuncDesc *) finaladdr;  Elf64_Addr offset = 0;  PPC_DCBT (&plt->fd_aux);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美国产成人一区二区| 天天影视涩香欲综合网| 在线亚洲免费视频| 99久久精品国产观看| 国产精品夜夜嗨| 国产精品综合二区| 国产精品一区二区在线观看不卡 | 91久久人澡人人添人人爽欧美 | 亚洲图片一区二区| 依依成人精品视频| 亚洲午夜免费福利视频| 亚洲电影视频在线| 捆绑调教美女网站视频一区| 美女在线观看视频一区二区| 韩日av一区二区| 国产成人精品三级| 成人激情免费网站| 欧美在线看片a免费观看| 97精品久久久午夜一区二区三区| 99久久久久久| 欧美在线视频日韩| 国产精品久久久久一区| 26uuu精品一区二区| 国产人久久人人人人爽| 椎名由奈av一区二区三区| 国产精品传媒视频| 亚洲高清一区二区三区| 亚洲18色成人| 精品写真视频在线观看| 国产**成人网毛片九色| 欧美亚洲动漫精品| 欧美xxxxx牲另类人与| 国产女人水真多18毛片18精品视频| 中文字幕av资源一区| 亚洲电影你懂得| 国产毛片精品视频| 99re成人精品视频| 日韩一区二区三区三四区视频在线观看 | 国产日韩欧美激情| 亚洲视频在线观看三级| 日本午夜精品视频在线观看| 成人久久18免费网站麻豆| 欧美日韩免费观看一区二区三区| 久久先锋资源网| 亚洲国产精品视频| 国产成人av电影在线观看| 欧美精品黑人性xxxx| 国产精品久久影院| 国产又粗又猛又爽又黄91精品| 在线视频你懂得一区| 久久久精品免费免费| 日韩高清中文字幕一区| 色系网站成人免费| 国产欧美一区二区在线| 秋霞影院一区二区| 在线日韩国产精品| 亚洲视频香蕉人妖| 国产成人精品免费在线| wwwwxxxxx欧美| 久久精品国产久精国产| 日本一区二区三区电影| 美脚の诱脚舐め脚责91| 欧美午夜影院一区| 亚洲色图都市小说| 99久久精品国产毛片| 国产喷白浆一区二区三区| 蜜桃免费网站一区二区三区 | 亚洲人成影院在线观看| 国产成人日日夜夜| 国产日本欧美一区二区| 国产一区二区免费视频| 精品国产成人系列| 久久福利视频一区二区| 91麻豆精品国产自产在线观看一区 | 亚洲人妖av一区二区| 粉嫩绯色av一区二区在线观看| 久久综合色一综合色88| 国产一区二区三区四区五区美女 | 欧美国产精品中文字幕| 国产v综合v亚洲欧| 国产精品网友自拍| 国产v日产∨综合v精品视频| 久久精品一区四区| 国产福利一区二区三区视频在线 | 日韩va欧美va亚洲va久久| 欧美三区免费完整视频在线观看| 国产精品国产三级国产aⅴ原创| 成人av电影在线| 亚洲免费毛片网站| 欧美日韩在线亚洲一区蜜芽| 日本视频在线一区| 日韩精品一区二区三区中文不卡| 久久99精品久久久久婷婷| 久久日韩粉嫩一区二区三区| 国产精品小仙女| 国产精品三级在线观看| 欧美激情在线一区二区三区| av男人天堂一区| 亚洲自拍与偷拍| 日韩午夜激情av| 国产精品18久久久久久vr| 日韩一区欧美小说| 欧美日韩一级片网站| 卡一卡二国产精品| 成人欧美一区二区三区视频网页| 91丨porny丨户外露出| 图片区小说区区亚洲影院| 日韩一级精品视频在线观看| 国产福利一区二区三区| 亚洲一区二区三区中文字幕| 欧美成人精品福利| 91在线观看一区二区| 日韩综合一区二区| 国产精品无遮挡| 欧美日韩精品福利| 不卡免费追剧大全电视剧网站| 亚洲一区在线视频| 精品国产乱码91久久久久久网站| 成人av资源在线观看| 秋霞午夜鲁丝一区二区老狼| 国产精品污污网站在线观看| 在线播放日韩导航| 色综合天天做天天爱| 激情五月婷婷综合网| 亚洲国产综合人成综合网站| 国产亚洲成av人在线观看导航| 精品视频资源站| 粉嫩久久99精品久久久久久夜| 日本成人中文字幕在线视频 | 亚洲一区二区三区激情| 久久免费精品国产久精品久久久久| 91黄色免费网站| 成人黄色免费短视频| 精品在线观看视频| 免费观看在线色综合| 亚洲一区在线免费观看| 亚洲色图第一区| 国产视频不卡一区| wwwwxxxxx欧美| 欧美一区二区三区视频免费播放 | 亚洲欧美日韩国产成人精品影院 | 一区二区高清免费观看影视大全| 精品国内二区三区| 欧美一区二区国产| 欧美日本在线播放| 91在线你懂得| 色综合久久天天综合网| 成人avav在线| 成人av一区二区三区| 成人免费黄色大片| 成人精品视频一区| 国产suv一区二区三区88区| 精品一区二区三区视频在线观看| 日日欢夜夜爽一区| 蜜臀91精品一区二区三区| 免费观看成人av| 蜜桃视频在线观看一区| 精品亚洲免费视频| 国产在线观看免费一区| 国产一区二区三区日韩| 国产成人精品aa毛片| 处破女av一区二区| 不卡区在线中文字幕| 91福利在线播放| 欧美日韩黄色影视| 日韩小视频在线观看专区| 日韩免费高清电影| 国产欧美日韩综合| 国产精品理伦片| 伊人开心综合网| 奇米精品一区二区三区四区| 麻豆精品蜜桃视频网站| 国产成人综合在线播放| 97超碰欧美中文字幕| 欧洲日韩一区二区三区| 欧美精品免费视频| 久久久久久久一区| 国产精品福利一区| 亚洲成a人片综合在线| 久久66热偷产精品| zzijzzij亚洲日本少妇熟睡| 在线观看av一区二区| 日韩一区二区三免费高清| 久久精品网站免费观看| 亚洲黄色录像片| 九一九一国产精品| 色香蕉成人二区免费| 欧美www视频| 亚洲欧美一区二区久久| 轻轻草成人在线| 不卡av在线网| 欧美一级理论性理论a| 亚洲美女视频在线| 91精品国产色综合久久不卡蜜臀| 精品久久免费看| 亚洲激情图片小说视频| 狠狠色丁香久久婷婷综合_中| 色综合网色综合| 久久久www成人免费无遮挡大片| 亚洲久本草在线中文字幕|