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

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

?? dl-machine.h

?? glibc 2.9,最新版的C語言庫函數(shù)
?? H
?? 第 1 頁 / 共 2 頁
字號:
/* Machine-dependent ELF dynamic relocation inline functions.  Sparc64 version.   Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 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 "sparc64"#include <string.h>#include <sys/param.h>#include <ldsodefs.h>#include <sysdep.h>#ifndef VALIDX# define VALIDX(tag) (DT_NUM + DT_THISPROCNUM + DT_VERSIONTAGNUM \		      + DT_EXTRANUM + DT_VALTAGIDX (tag))#endif#define ELF64_R_TYPE_ID(info)	((info) & 0xff)#define ELF64_R_TYPE_DATA(info) ((info) >> 8)/* 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_SPARCV9;}/* 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 {	Elf64_Addr tmp;		\	__asm("sethi %%hi(_GLOBAL_OFFSET_TABLE_-4), %1\n\t" \	      "rd %%pc, %0\n\t" \	      "add %1, %%lo(_GLOBAL_OFFSET_TABLE_+4), %1\n\t" \	      "add %0, %1, %0" \	      : "=r" (PIC_REG), "=r" (tmp)); \} 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 Elf64_Addrelf_machine_dynamic (void){  register Elf64_Addr *elf_pic_register __asm__("%l7");  LOAD_PIC_REG (elf_pic_register);  return *elf_pic_register;}/* Return the run-time load address of the shared object.  */static inline Elf64_Addrelf_machine_load_address (void){  register Elf32_Addr *pc __asm ("%o7");  register Elf64_Addr *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 (Elf64_Addr) got - *got + (Elf32_Sword) ((pc[2] - pc[3]) * 4) - 4;}/* We have 4 cases to handle.  And we code different code sequences   for each one.  I love V9 code models...  */static inline void __attribute__ ((always_inline))sparc64_fixup_plt (struct link_map *map, const Elf64_Rela *reloc,		   Elf64_Addr *reloc_addr, Elf64_Addr value,		   Elf64_Addr high, int t){  unsigned int *insns = (unsigned int *) reloc_addr;  Elf64_Addr plt_vaddr = (Elf64_Addr) reloc_addr;  Elf64_Sxword disp = value - plt_vaddr;  /* Now move plt_vaddr up to the call instruction.  */  plt_vaddr += ((t + 1) * 4);  /* PLT entries .PLT32768 and above look always the same.  */  if (__builtin_expect (high, 0) != 0)    {      *reloc_addr = value - map->l_addr;    }  /* Near destination.  */  else if (disp >= -0x800000 && disp < 0x800000)    {      /* As this is just one instruction, it is thread safe and so	 we can avoid the unnecessary sethi FOO, %g1.	 b,a target  */      insns[0] = 0x30800000 | ((disp >> 2) & 0x3fffff);      __asm __volatile ("flush %0" : : "r" (insns));    }  /* 32-bit Sparc style, the target is in the lower 32-bits of     address space.  */  else if (insns += t, (value >> 32) == 0)    {      /* sethi	%hi(target), %g1	 jmpl	%g1 + %lo(target), %g0  */      insns[1] = 0x81c06000 | (value & 0x3ff);      __asm __volatile ("flush %0 + 4" : : "r" (insns));      insns[0] = 0x03000000 | ((unsigned int)(value >> 10));      __asm __volatile ("flush %0" : : "r" (insns));    }  /* We can also get somewhat simple sequences if the distance between     the target and the PLT entry is within +/- 2GB.  */  else if ((plt_vaddr > value	    && ((plt_vaddr - value) >> 31) == 0)	   || (value > plt_vaddr	       && ((value - plt_vaddr) >> 31) == 0))    {      unsigned int displacement;      if (plt_vaddr > value)	displacement = (0 - (plt_vaddr - value));      else	displacement = value - plt_vaddr;      /* mov	%o7, %g1	 call	displacement	  mov	%g1, %o7  */      insns[2] = 0x9e100001;      __asm __volatile ("flush %0 + 8" : : "r" (insns));      insns[1] = 0x40000000 | (displacement >> 2);      __asm __volatile ("flush %0 + 4" : : "r" (insns));      insns[0] = 0x8210000f;      __asm __volatile ("flush %0" : : "r" (insns));    }  /* Worst case, ho hum...  */  else    {      unsigned int high32 = (value >> 32);      unsigned int low32 = (unsigned int) value;      /* ??? Some tricks can be stolen from the sparc64 egcs backend	     constant formation code I wrote.  -DaveM  */      if (__builtin_expect (high32 & 0x3ff, 0))	{	  /* sethi	%hh(value), %g1	     sethi	%lm(value), %g5	     or		%g1, %hm(value), %g1	     or		%g5, %lo(value), %g5	     sllx	%g1, 32, %g1	     jmpl	%g1 + %g5, %g0	      nop  */	  insns[5] = 0x81c04005;	  __asm __volatile ("flush %0 + 20" : : "r" (insns));	  insns[4] = 0x83287020;	  __asm __volatile ("flush %0 + 16" : : "r" (insns));	  insns[3] = 0x8a116000 | (low32 & 0x3ff);	  __asm __volatile ("flush %0 + 12" : : "r" (insns));	  insns[2] = 0x82106000 | (high32 & 0x3ff);	}      else	{	  /* sethi	%hh(value), %g1	     sethi	%lm(value), %g5	     sllx	%g1, 32, %g1	     or		%g5, %lo(value), %g5	     jmpl	%g1 + %g5, %g0	      nop  */	  insns[4] = 0x81c04005;	  __asm __volatile ("flush %0 + 16" : : "r" (insns));	  insns[3] = 0x8a116000 | (low32 & 0x3ff);	  __asm __volatile ("flush %0 + 12" : : "r" (insns));	  insns[2] = 0x83287020;	}      __asm __volatile ("flush %0 + 8" : : "r" (insns));      insns[1] = 0x0b000000 | (low32 >> 10);      __asm __volatile ("flush %0 + 4" : : "r" (insns));      insns[0] = 0x03000000 | (high32 >> 10);      __asm __volatile ("flush %0" : : "r" (insns));    }}static inline Elf64_Addr __attribute__ ((always_inline))elf_machine_fixup_plt (struct link_map *map, lookup_t t,		       const Elf64_Rela *reloc,		       Elf64_Addr *reloc_addr, Elf64_Addr value){  sparc64_fixup_plt (map, reloc, reloc_addr, value + reloc->r_addend,		     reloc->r_addend, 1);  return value;}/* Return the final value of a plt relocation.  */static inline Elf64_Addrelf_machine_plt_value (struct link_map *map, const Elf64_Rela *reloc,		       Elf64_Addr value){  /* Don't add addend here, but in elf_machine_fixup_plt instead.     value + reloc->r_addend is the value which should actually be     stored into .plt data slot.  */  return value;}/* 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 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 Elf64_Rel relocations.  */#define ELF_MACHINE_NO_REL 1/* The SPARC overlaps DT_RELA and DT_PLTREL.  */#define ELF_MACHINE_PLTREL_OVERLAP 1/* 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){  if (l->l_info[DT_JMPREL] && lazy)    {      extern void _dl_runtime_resolve_0 (void);      extern void _dl_runtime_resolve_1 (void);      extern void _dl_runtime_profile_0 (void);      extern void _dl_runtime_profile_1 (void);      Elf64_Addr res0_addr, res1_addr;      unsigned int *plt = (void *) D_PTR (l, l_info[DT_PLTGOT]);      if (__builtin_expect(profile, 0))	{	  res0_addr = (Elf64_Addr) &_dl_runtime_profile_0;	  res1_addr = (Elf64_Addr) &_dl_runtime_profile_1;	  if (GLRO(dl_profile) != NULL	      && _dl_name_match_p (GLRO(dl_profile), l))	    GL(dl_profile_map) = l;	}      else	{	  res0_addr = (Elf64_Addr) &_dl_runtime_resolve_0;	  res1_addr = (Elf64_Addr) &_dl_runtime_resolve_1;	}      /* PLT0 looks like:         sethi	%uhi(_dl_runtime_{resolve,profile}_0), %g4	 sethi	%hi(_dl_runtime_{resolve,profile}_0), %g5	 or	%g4, %ulo(_dl_runtime_{resolve,profile}_0), %g4	 or	%g5, %lo(_dl_runtime_{resolve,profile}_0), %g5	 sllx	%g4, 32, %g4	 add	%g4, %g5, %g5	 jmpl	%g5, %g4	  nop       */      plt[0] = 0x09000000 | (res0_addr >> (64 - 22));      plt[1] = 0x0b000000 | ((res0_addr >> 10) & 0x003fffff);      plt[2] = 0x88112000 | ((res0_addr >> 32) & 0x3ff);      plt[3] = 0x8a116000 | (res0_addr & 0x3ff);      plt[4] = 0x89293020;      plt[5] = 0x8a010005;      plt[6] = 0x89c14000;      plt[7] = 0x01000000;      /* PLT1 looks like:         sethi	%uhi(_dl_runtime_{resolve,profile}_1), %g4	 sethi	%hi(_dl_runtime_{resolve,profile}_1), %g5	 or	%g4, %ulo(_dl_runtime_{resolve,profile}_1), %g4	 or	%g5, %lo(_dl_runtime_{resolve,profile}_1), %g5	 sllx	%g4, 32, %g4	 add	%g4, %g5, %g5	 jmpl	%g5, %g4	  nop       */      plt[8] = 0x09000000 | (res1_addr >> (64 - 22));      plt[9] = 0x0b000000 | ((res1_addr >> 10) & 0x003fffff);      plt[10] = 0x88112000 | ((res1_addr >> 32) & 0x3ff);      plt[11] = 0x8a116000 | (res1_addr & 0x3ff);      plt[12] = 0x89293020;      plt[13] = 0x8a010005;      plt[14] = 0x89c14000;      plt[15] = 0x01000000;      /* Now put the magic cookie at the beginning of .PLT2	 Entry .PLT3 is unused by this implementation.  */      *((struct link_map **)(&plt[16])) = 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.  */	  Elf64_Rela *rela = (Elf64_Rela *) D_PTR (l, l_info[DT_JMPREL]);	  Elf64_Rela *relaend	    = (Elf64_Rela *) ((char *) rela			      + l->l_info[DT_PLTRELSZ]->d_un.d_val);	  /* prelink must ensure there are no R_SPARC_NONE relocs left	     in .rela.plt.  */	  while (rela < relaend)	    {	      if (__builtin_expect (rela->r_addend, 0) != 0)		{                  Elf64_Addr slot = ((rela->r_offset + 0x400				      - (Elf64_Addr) plt)				     / 0x1400) * 0x1400				    + (Elf64_Addr) plt - 0x400;		  /* ldx [%o7 + X], %g1  */		  unsigned int first_ldx = *(unsigned int *)(slot + 12);		  Elf64_Addr ptr = slot + (first_ldx & 0xfff) + 4;		  *(Elf64_Addr *) rela->r_offset		    = (Elf64_Addr) plt		      - (slot + ((rela->r_offset - ptr) / 8) * 24 + 4);		  ++rela;		  continue;		}	      *(unsigned int *) rela->r_offset		= 0x03000000 | (rela->r_offset - (Elf64_Addr) plt);	      *(unsigned int *) (rela->r_offset + 4)		= 0x30680000 | ((((Elf64_Addr) plt + 32				  - rela->r_offset - 4) >> 2) & 0x7ffff);	      __asm __volatile ("flush %0" : : "r" (rela->r_offset));	      __asm __volatile ("flush %0+4" : : "r" (rela->r_offset));	      ++rela;	    }	}    }  return lazy;}/* The PLT uses Elf64_Rela relocs.  */#define elf_machine_relplt elf_machine_rela

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91麻豆精品国产91| 国产日韩欧美麻豆| 高清免费成人av| 亚洲大片精品永久免费| 国产人久久人人人人爽| 7777精品伊人久久久大香线蕉| 成人美女视频在线观看18| 免费成人美女在线观看| 一区二区三区在线播放| 国产免费观看久久| 久久亚洲私人国产精品va媚药| 在线观看网站黄不卡| 成人精品一区二区三区中文字幕| 麻豆精品精品国产自在97香蕉| 亚洲精品免费一二三区| 中文字幕亚洲不卡| 国产欧美日韩精品在线| 久久日韩粉嫩一区二区三区| 日韩欧美一二三区| 欧美高清dvd| 欧美喷水一区二区| 欧美日韩国产系列| 在线观看视频一区二区 | 国产一区二区导航在线播放| 亚洲综合网站在线观看| 17c精品麻豆一区二区免费| 国产清纯白嫩初高生在线观看91| 欧美一区二区在线免费播放| 欧美三级日韩在线| 欧美三级视频在线观看| 欧美色爱综合网| 欧美精选在线播放| 9191精品国产综合久久久久久| 欧美色手机在线观看| 欧美日韩精品欧美日韩精品一综合| 91香蕉视频在线| 99re这里只有精品首页| 色综合中文字幕国产 | 亚洲素人一区二区| 国产欧美一区二区精品性| 久久蜜桃av一区二区天堂| 精品国产乱码久久久久久夜甘婷婷| 91精品国产品国语在线不卡| 日韩视频不卡中文| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 欧美日韩高清一区二区不卡| 欧美日韩国产中文| 日韩一区二区三区电影| 精品电影一区二区三区| 国产视频一区二区三区在线观看| 久久久久国产精品免费免费搜索| 国产亚洲欧美色| 国产精品久久久久一区 | 91精品久久久久久久99蜜桃| 在线观看91精品国产麻豆| 日韩欧美精品在线视频| 亚洲精品在线网站| 中文字幕五月欧美| 夜夜嗨av一区二区三区| 美女久久久精品| 粉嫩aⅴ一区二区三区四区五区| 成人高清在线视频| 在线亚洲高清视频| 精品久久五月天| 18成人在线观看| 日韩av一区二区在线影视| 国产黄色成人av| 色婷婷综合在线| 欧美大片在线观看一区| 中文文精品字幕一区二区| 亚洲午夜私人影院| 精品一区二区免费| av激情综合网| 91精品久久久久久蜜臀| 欧美激情中文字幕一区二区| 亚洲gay无套男同| 国产麻豆视频精品| 欧美在线观看一区| 久久综合网色—综合色88| 综合分类小说区另类春色亚洲小说欧美| 亚洲成a人片在线观看中文| 精品亚洲成a人| 日本道精品一区二区三区| 精品毛片乱码1区2区3区| 国产精品不卡在线| 麻豆成人综合网| 色婷婷综合久久| 国产日韩av一区| 日韩成人免费看| 日本韩国一区二区三区视频| 国产亚洲精品bt天堂精选| 亚洲国产精品久久不卡毛片| 国产成+人+日韩+欧美+亚洲| 欧美精品久久久久久久久老牛影院| 中文字幕巨乱亚洲| 麻豆精品在线看| 欧美亚日韩国产aⅴ精品中极品| 国产亚洲自拍一区| 免费观看久久久4p| 欧美做爰猛烈大尺度电影无法无天| 久久亚洲捆绑美女| 日韩精品一级中文字幕精品视频免费观看 | 91在线观看下载| 久久久美女毛片| 久久精品国产成人一区二区三区| 欧美影院一区二区三区| 国产精品三级av| 国产一区在线看| 欧美成人a视频| 青青草97国产精品免费观看无弹窗版| 91尤物视频在线观看| 国产欧美日韩三区| 国产揄拍国内精品对白| 日韩欧美国产一二三区| 午夜久久久影院| 91美女片黄在线观看| 中文字幕+乱码+中文字幕一区| 成人一区二区三区视频在线观看| 91精品国产丝袜白色高跟鞋| 亚洲一区二区三区视频在线播放 | 成人永久免费视频| 久久久亚洲精品一区二区三区| 久久精品二区亚洲w码| 欧美一区二区免费视频| 五月婷婷久久丁香| 欧美麻豆精品久久久久久| 亚洲一区二区三区影院| 日本福利一区二区| 亚洲色图清纯唯美| 一本色道久久综合狠狠躁的推荐| 国产精品嫩草影院com| 成人精品小蝌蚪| 国产精品美女久久久久aⅴ国产馆| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 亚洲国产另类av| 欧美在线观看视频在线| 亚洲mv在线观看| 91精品国产色综合久久不卡电影 | 福利一区福利二区| 久久九九影视网| 懂色av一区二区夜夜嗨| 亚洲国产精品精华液ab| 99久久综合精品| 一区二区三区91| 欧美老肥妇做.爰bbww| 免费久久精品视频| 久久久久久久电影| 成人精品免费看| 亚洲精品视频在线| 91精品在线麻豆| 国产一区二区剧情av在线| 国产精品久久久久影院色老大 | 久久99热这里只有精品| 久久精品夜色噜噜亚洲aⅴ| 99久久久国产精品| 亚洲一区二区免费视频| 欧美一卡二卡在线观看| 国产一区二区三区免费看| 中文字幕日本不卡| 欧美日韩国产123区| 精品一区二区成人精品| 中文字幕一区三区| 欧美日韩一区二区三区四区五区| 蜜桃视频免费观看一区| 国产精品人妖ts系列视频| 欧洲一区二区三区在线| 激情丁香综合五月| 亚洲免费高清视频在线| 91精品国产欧美一区二区| 国产成a人亚洲| 午夜精品久久久久久久| 久久久久久久综合日本| 在线免费精品视频| 国产精品一级片| 亚洲午夜在线电影| www日韩大片| 欧美主播一区二区三区| 久久99国产精品成人| 亚洲人成亚洲人成在线观看图片| 日韩丝袜情趣美女图片| 成人黄色软件下载| 麻豆国产欧美日韩综合精品二区 | 欧美国产一区二区| 欧美伊人久久大香线蕉综合69 | 亚洲午夜在线观看视频在线| 久久综合给合久久狠狠狠97色69| 在线视频一区二区三| 国产精品69久久久久水密桃| 亚洲成人免费影院| 国产精品日日摸夜夜摸av| 欧美白人最猛性xxxxx69交| 日本韩国一区二区| 成人精品国产免费网站| 麻豆精品在线视频| 亚瑟在线精品视频| 成人免费在线播放视频| 国产日产欧美一区二区三区| 日韩欧美国产三级| 欧美性色黄大片| 色婷婷久久久亚洲一区二区三区|