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

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

?? dl-machine.h

?? glibc2.5版源代碼
?? H
字號:
/* Machine-dependent ELF dynamic relocation inline functions.  PowerPC version.   Copyright (C) 1995-2002, 2003, 2005 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 "powerpc"#include <assert.h>#include <dl-tls.h>/* Translate a processor specific dynamic tag to the index   in l_info array.  */#define DT_PPC(x) (DT_PPC_##x - DT_LOPROC + DT_NUM)/* Return nonzero iff ELF header is compatible with the running host.  */static inline intelf_machine_matches_host (const Elf32_Ehdr *ehdr){  return ehdr->e_machine == EM_PPC;}/* Return the value of the GOT pointer.  */static inline Elf32_Addr * __attribute__ ((const))ppc_got (void){  Elf32_Addr *got;#ifdef HAVE_ASM_PPC_REL16  asm ("bcl 20,31,1f\n"       "1:	mflr %0\n"       "	addis %0,%0,_GLOBAL_OFFSET_TABLE_-1b@ha\n"       "	addi %0,%0,_GLOBAL_OFFSET_TABLE_-1b@l\n"       : "=b" (got) : : "lr");#else  asm (" bl _GLOBAL_OFFSET_TABLE_-4@local"       : "=l" (got));#endif  return got;}/* Return the link-time address of _DYNAMIC, stored as   the first value in the GOT. */static inline Elf32_Addr __attribute__ ((const))elf_machine_dynamic (void){  return *ppc_got ();}/* Return the run-time load address of the shared object.  */static inline Elf32_Addr __attribute__ ((const))elf_machine_load_address (void){  Elf32_Addr *branchaddr;  Elf32_Addr runtime_dynamic;  /* This is much harder than you'd expect.  Possibly I'm missing something.     The 'obvious' way:       Apparently, "bcl 20,31,$+4" is what should be used to load LR       with the address of the next instruction.       I think this is so that machines that do bl/blr pairing don't       get confused.     asm ("bcl 20,31,0f ;"	  "0: mflr 0 ;"	  "lis %0,0b@ha;"	  "addi %0,%0,0b@l;"	  "subf %0,%0,0"	  : "=b" (addr) : : "r0", "lr");     doesn't work, because the linker doesn't have to (and in fact doesn't)     update the @ha and @l references; the loader (which runs after this     code) will do that.     Instead, we use the following trick:     The linker puts the _link-time_ address of _DYNAMIC at the first     word in the GOT. We could branch to that address, if we wanted,     by using an @local reloc; the linker works this out, so it's safe     to use now. We can't, of course, actually branch there, because     we'd cause an illegal instruction exception; so we need to compute     the address ourselves. That gives us the following code: */  /* Get address of the 'b _DYNAMIC@local'...  */  asm ("bcl 20,31,0f;"       "b _DYNAMIC@local;"       "0:"       : "=l" (branchaddr));  /* So now work out the difference between where the branch actually points,     and the offset of that location in memory from the start of the file.  */  runtime_dynamic = ((Elf32_Addr) branchaddr		     + ((Elf32_Sword) (*branchaddr << 6 & 0xffffff00) >> 6));  return runtime_dynamic - elf_machine_dynamic ();}#define ELF_MACHINE_BEFORE_RTLD_RELOC(dynamic_info) /* nothing *//* The PLT uses Elf32_Rela relocs.  */#define elf_machine_relplt elf_machine_rela/* Mask identifying addresses reserved for the user program,   where the dynamic linker should not map anything.  */#define ELF_MACHINE_USER_ADDRESS_MASK	0xf0000000UL/* The actual _start code is in dl-start.S.  Use a really   ugly bit of assembler to let dl-start.o see _dl_start.  */#define RTLD_START asm (".globl _dl_start");/* Decide where a relocatable object should be loaded.  */extern ElfW(Addr)__elf_preferred_address(struct link_map *loader, size_t maplength,			ElfW(Addr) mapstartpref);#define ELF_PREFERRED_ADDRESS(loader, maplength, mapstartpref) \  __elf_preferred_address (loader, maplength, mapstartpref)/* 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.  *//* We never want to use a PLT entry as the destination of a   reloc, when what is being relocated is a branch. This is   partly for efficiency, but mostly so we avoid loops.  */#if defined USE_TLS && (!defined RTLD_BOOTSTRAP || USE___THREAD)#define elf_machine_type_class(type)			\  ((((type) == R_PPC_JMP_SLOT				\    || (type) == R_PPC_REL24				\    || ((type) >= R_PPC_DTPMOD32 /* contiguous TLS */	\	&& (type) <= R_PPC_DTPREL32)			\    || (type) == R_PPC_ADDR24) * ELF_RTYPE_CLASS_PLT)	\   | (((type) == R_PPC_COPY) * ELF_RTYPE_CLASS_COPY))#else#define elf_machine_type_class(type) \  ((((type) == R_PPC_JMP_SLOT				\    || (type) == R_PPC_REL24				\    || (type) == R_PPC_ADDR24) * ELF_RTYPE_CLASS_PLT)	\   | (((type) == R_PPC_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_PPC_JMP_SLOT/* The PowerPC never uses REL relocations.  */#define ELF_MACHINE_NO_REL 1/* 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.   Also install a small trampoline to be used by entries that have   been relocated to an address too far away for a single branch.  */extern int __elf_machine_runtime_setup (struct link_map *map,					int lazy, int profile);static inline intelf_machine_runtime_setup (struct link_map *map,			   int lazy, int profile){  if (map->l_info[DT_JMPREL] == 0)    return lazy;  if (map->l_info[DT_PPC(GOT)] == 0)    /* Handle old style PLT.  */    return __elf_machine_runtime_setup (map, lazy, profile);  /* New style non-exec PLT consisting of an array of addresses.  */  map->l_info[DT_PPC(GOT)]->d_un.d_ptr += map->l_addr;  if (lazy)    {      Elf32_Addr *plt, *got, glink;      Elf32_Word num_plt_entries;      void (*dlrr) (void);      extern void _dl_runtime_resolve (void);      extern void _dl_prof_resolve (void);      if (__builtin_expect (!profile, 1))	dlrr = _dl_runtime_resolve;      else	{	  if (GLRO(dl_profile) != NULL	      &&_dl_name_match_p (GLRO(dl_profile), map))	    GL(dl_profile_map) = map;	  dlrr = _dl_prof_resolve;	}      got = (Elf32_Addr *) map->l_info[DT_PPC(GOT)]->d_un.d_ptr;      glink = got[1];      got[1] = (Elf32_Addr) dlrr;      got[2] = (Elf32_Addr) map;      /* Relocate everything in .plt by the load address offset.  */      plt = (Elf32_Addr *) D_PTR (map, l_info[DT_PLTGOT]);      num_plt_entries = (map->l_info[DT_PLTRELSZ]->d_un.d_val			 / sizeof (Elf32_Rela));      /* If a library is prelinked but we have to relocate anyway,	 we have to be able to undo the prelinking of .plt section.	 The prelinker saved us at got[1] address of .glink	 section's start.  */      if (glink)	{	  glink += map->l_addr;	  while (num_plt_entries-- != 0)	    *plt++ = glink, glink += 4;	}      else	while (num_plt_entries-- != 0)	  *plt++ += map->l_addr;    }  return lazy;}/* Change the PLT entry whose reloc is 'reloc' to call the actual routine.  */extern Elf32_Addr __elf_machine_fixup_plt (struct link_map *map,					   const Elf32_Rela *reloc,					   Elf32_Addr *reloc_addr,					   Elf32_Addr finaladdr);static inline Elf32_Addrelf_machine_fixup_plt (struct link_map *map, lookup_t t,		       const Elf32_Rela *reloc,		       Elf32_Addr *reloc_addr, Elf64_Addr finaladdr){  if (map->l_info[DT_PPC(GOT)] == 0)    /* Handle old style PLT.  */    return __elf_machine_fixup_plt (map, reloc, reloc_addr, finaladdr);  *reloc_addr = finaladdr;  return finaladdr;}/* Return the final value of a plt relocation.  */static inline Elf32_Addrelf_machine_plt_value (struct link_map *map, const Elf32_Rela *reloc,		       Elf32_Addr value){  return value + reloc->r_addend;}/* Names of the architecture-specific auditing callback functions.  */#define ARCH_LA_PLTENTER ppc32_gnu_pltenter#define ARCH_LA_PLTEXIT ppc32_gnu_pltexit#endif /* dl_machine_h */#ifdef RESOLVE_MAP/* Do the actual processing of a reloc, once its target address   has been determined.  */extern void __process_machine_rela (struct link_map *map,				    const Elf32_Rela *reloc,				    struct link_map *sym_map,				    const Elf32_Sym *sym,				    const Elf32_Sym *refsym,				    Elf32_Addr *const reloc_addr,				    Elf32_Addr finaladdr,				    int rinfo) attribute_hidden;/* Call _dl_signal_error when a resolved value overflows a relocated area.  */extern void _dl_reloc_overflow (struct link_map *map,				const char *name,				Elf32_Addr *const reloc_addr,				const Elf32_Sym *refsym) attribute_hidden;/* Perform the relocation specified by RELOC and SYM (which is fully resolved).   LOADADDR is the load address of the object; INFO is an array indexed   by DT_* of the .dynamic section info.  */auto inline void __attribute__ ((always_inline))elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,		  const Elf32_Sym *sym, const struct r_found_version *version,		  void *const reloc_addr_arg){  Elf32_Addr *const reloc_addr = reloc_addr_arg;  const Elf32_Sym *const refsym = sym;  Elf32_Addr value;  const int r_type = ELF32_R_TYPE (reloc->r_info);  struct link_map *sym_map = NULL;#ifndef RESOLVE_CONFLICT_FIND_MAP  if (r_type == R_PPC_RELATIVE)    {      *reloc_addr = map->l_addr + reloc->r_addend;      return;    }  if (__builtin_expect (r_type == R_PPC_NONE, 0))    return;  /* binutils on ppc32 includes st_value in r_addend for relocations     against local symbols.  */  if (__builtin_expect (ELF32_ST_BIND (sym->st_info) == STB_LOCAL, 0)      && sym->st_shndx != SHN_UNDEF)    value = map->l_addr;  else    {      sym_map = RESOLVE_MAP (&sym, version, r_type);      value = sym_map == NULL ? 0 : sym_map->l_addr + sym->st_value;    }  value += reloc->r_addend;#else  value = reloc->r_addend;#endif  /* A small amount of code is duplicated here for speed.  In libc,     more than 90% of the relocs are R_PPC_RELATIVE; in the X11 shared     libraries, 60% are R_PPC_RELATIVE, 24% are R_PPC_GLOB_DAT or     R_PPC_ADDR32, and 16% are R_PPC_JMP_SLOT (which this routine     wouldn't usually handle).  As an bonus, doing this here allows     the switch statement in __process_machine_rela to work.  */  switch (r_type)    {    case R_PPC_GLOB_DAT:    case R_PPC_ADDR32:      *reloc_addr = value;      break;#if defined USE_TLS && (!defined RTLD_BOOTSTRAP || USE___THREAD) \    && !defined RESOLVE_CONFLICT_FIND_MAP# ifdef RTLD_BOOTSTRAP#  define NOT_BOOTSTRAP 0# else#  define NOT_BOOTSTRAP 1# endif    case R_PPC_DTPMOD32:      if (!NOT_BOOTSTRAP)	/* During startup the dynamic linker is always index 1.  */	*reloc_addr = 1;      else if (sym_map != NULL)	/* Get the information from the link map returned by the	   RESOLVE_MAP function.  */	*reloc_addr = sym_map->l_tls_modid;      break;    case R_PPC_DTPREL32:      /* During relocation all TLS symbols are defined and used.	 Therefore the offset is already correct.  */      if (NOT_BOOTSTRAP && sym_map != NULL)	*reloc_addr = TLS_DTPREL_VALUE (sym, reloc);      break;    case R_PPC_TPREL32:      if (!NOT_BOOTSTRAP || sym_map != NULL)	{	  if (NOT_BOOTSTRAP)	    CHECK_STATIC_TLS (map, sym_map);	  *reloc_addr = TLS_TPREL_VALUE (sym_map, sym, reloc);	}      break;#endif /* USE_TLS etc. */    case R_PPC_JMP_SLOT:#ifdef RESOLVE_CONFLICT_FIND_MAP      RESOLVE_CONFLICT_FIND_MAP (map, reloc_addr);#endif      if (map->l_info[DT_PPC(GOT)] != 0)	{	  *reloc_addr = value;	  break;	}      /* FALLTHROUGH */    default:      __process_machine_rela (map, reloc, sym_map, sym, refsym,			      reloc_addr, value, r_type);    }}auto inline void __attribute__ ((always_inline))elf_machine_rela_relative (Elf32_Addr l_addr, const Elf32_Rela *reloc,			   void *const reloc_addr_arg){  Elf32_Addr *const reloc_addr = reloc_addr_arg;  *reloc_addr = l_addr + reloc->r_addend;}auto inline void __attribute__ ((always_inline))elf_machine_lazy_rel (struct link_map *map,		      Elf32_Addr l_addr, const Elf32_Rela *reloc){  /* elf_machine_runtime_setup handles this. */}/* The SVR4 ABI specifies that the JMPREL relocs must be inside the   DT_RELA table.  */#define ELF_MACHINE_PLTREL_OVERLAP 1#endif /* RESOLVE_MAP */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精品一区第一页| 26uuu色噜噜精品一区二区| 欧美日韩国产片| 日韩欧美激情一区| 国产亚洲精品aa午夜观看| 亚洲激情综合网| 免费不卡在线观看| aaa欧美大片| 3atv一区二区三区| 国产精品萝li| 热久久国产精品| av福利精品导航| 欧美一级理论性理论a| 国产精品剧情在线亚洲| 日韩电影在线观看网站| caoporn国产精品| 欧美r级在线观看| 亚洲综合色成人| 国产精品亚洲а∨天堂免在线| 在线观看视频91| 国产校园另类小说区| 天堂午夜影视日韩欧美一区二区| 国产成人精品亚洲777人妖| 在线成人高清不卡| 日韩理论电影院| 国产真实乱对白精彩久久| 欧美综合亚洲图片综合区| 欧美激情一区二区三区在线| 日本在线观看不卡视频| 日本乱人伦一区| 久久精品欧美日韩| 免费在线观看不卡| 色婷婷综合久久久| 国产欧美一区二区精品秋霞影院| 日韩精品一二三区| 91福利在线播放| 国产精品福利av| 国产一区 二区 三区一级| 欧美日韩在线不卡| 亚洲免费av观看| 成人白浆超碰人人人人| 久久婷婷综合激情| 美腿丝袜一区二区三区| 欧美日韩在线不卡| 亚洲综合免费观看高清完整版在线 | 免费精品视频最新在线| 91久久精品一区二区二区| 亚洲国产精品传媒在线观看| 麻豆91免费观看| 91精品国产91久久久久久一区二区| 亚洲欧美一区二区三区久本道91| 成人性生交大合| 久久青草欧美一区二区三区| 久久国产婷婷国产香蕉| 日韩一区二区三| 奇米精品一区二区三区在线观看一| 91精品1区2区| 亚洲综合色网站| 在线日韩av片| 亚洲一线二线三线久久久| 91丨porny丨国产入口| 国产精品麻豆久久久| 成人综合婷婷国产精品久久| 国产日韩精品一区二区三区在线| 国内国产精品久久| 精品国产电影一区二区| 激情综合一区二区三区| 日韩精品一区二区三区视频| 久久精品国产秦先生| 精品久久一区二区三区| 九色综合狠狠综合久久| 欧美精品一区二区久久婷婷| 国产综合一区二区| 久久嫩草精品久久久精品| 国产v日产∨综合v精品视频| 国产日韩欧美a| 91在线一区二区三区| 亚洲激情成人在线| 欧美日韩午夜在线视频| 日韩高清电影一区| 日韩美女在线视频| 国产一区二区中文字幕| 久久精品人人做人人爽97| 国产91精品入口| 国产精品传媒入口麻豆| 91国在线观看| 免费看黄色91| 久久久不卡影院| 99久久久久久| 亚洲动漫第一页| 欧美刺激午夜性久久久久久久 | 国产亚洲人成网站| 99九九99九九九视频精品| 亚洲精品一二三四区| 欧美日本国产一区| 国产综合一区二区| 中文字幕一区二区日韩精品绯色| 色综合天天狠狠| 免费人成网站在线观看欧美高清| 亚洲精品一区二区精华| 成人蜜臀av电影| 性欧美大战久久久久久久久| 日韩一区二区三区观看| 国产91综合网| 亚洲午夜精品在线| www日韩大片| 色美美综合视频| 九九视频精品免费| 中文字幕一区二区三区不卡在线| 欧美日本一区二区| 国产福利电影一区二区三区| 一区二区理论电影在线观看| 91精品国产日韩91久久久久久| 国产丶欧美丶日本不卡视频| 亚洲国产综合91精品麻豆| 久久免费电影网| 欧美影院一区二区三区| 国产美女视频一区| 亚洲国产sm捆绑调教视频| 久久久久久99久久久精品网站| 欧洲精品在线观看| 国产毛片精品国产一区二区三区| 亚洲激情六月丁香| 国产亚洲自拍一区| 欧美性猛交一区二区三区精品| 国产一区二三区| 亚洲午夜免费视频| 国产三级一区二区| 91精品国产综合久久婷婷香蕉| 从欧美一区二区三区| 日本成人中文字幕在线视频| 亚洲日本免费电影| 久久色中文字幕| 欧美军同video69gay| 97超碰欧美中文字幕| 精品一区二区三区免费视频| 一区二区三区鲁丝不卡| 国产婷婷色一区二区三区 | 精品亚洲欧美一区| 亚洲成人自拍网| 国产精品美日韩| 精品精品国产高清a毛片牛牛| 欧美午夜不卡在线观看免费| 成人av在线播放网站| 另类欧美日韩国产在线| 亚洲国产日韩a在线播放| 国产精品电影一区二区| 国产无遮挡一区二区三区毛片日本| 69久久夜色精品国产69蝌蚪网| 91一区二区在线| 国产成人av一区| 久久99国产精品免费| 天堂成人国产精品一区| 亚洲在线观看免费视频| 国产精品女人毛片| 久久久欧美精品sm网站| 日韩欧美中文一区| 欧美精选在线播放| 欧美三级韩国三级日本三斤| 色美美综合视频| 99久久国产综合精品麻豆| 成人亚洲一区二区一| 国产成人精品在线看| 精彩视频一区二区三区| 日本美女一区二区三区| 日韩高清在线一区| 亚洲h在线观看| 亚洲午夜精品一区二区三区他趣| 亚洲精品写真福利| 亚洲桃色在线一区| 亚洲视频在线观看一区| 国产精品毛片大码女人| 亚洲国产精品精华液2区45| 国产日韩欧美电影| 国产欧美精品一区二区色综合| 国产喂奶挤奶一区二区三区| 国产日产亚洲精品系列| 久久九九全国免费| 亚洲国产精华液网站w| 欧美激情一二三区| 国产精品乱码一区二三区小蝌蚪| 国产色产综合色产在线视频| 欧美激情综合五月色丁香| 中文在线免费一区三区高中清不卡| 国产亚洲欧美激情| 国产精品久久久久四虎| 一区视频在线播放| 亚洲日穴在线视频| 亚洲一区二区三区自拍| 亚洲成人免费视| 午夜精品在线看| 美国毛片一区二区| 麻豆免费精品视频| 国产在线精品视频| 粉嫩一区二区三区在线看| 99久久综合精品| 在线观看91视频| 91精品国产一区二区三区香蕉| 日韩你懂的电影在线观看| 精品国产电影一区二区|