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

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

?? dl-machine.h

?? glibc 庫, 不僅可以學習使用庫函數,還可以學習函數的具體實現,是提高功力的好資料
?? H
字號:
/* Machine-dependent ELF dynamic relocation inline functions.  S390 Version.   Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006   Free Software Foundation, Inc.   Contributed by Carl Pederson & Martin Schwidefsky.   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 "s390"#include <sys/param.h>#include <string.h>#include <link.h>/* This is an older, now obsolete value.  */#define EM_S390_OLD	0xA390/* 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_S390 || ehdr->e_machine == EM_S390_OLD)         && ehdr->e_ident[EI_CLASS] == ELFCLASS32;}/* 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( "        bras   %0,2f\n"       "1:      .long  _GLOBAL_OFFSET_TABLE_-1b\n"       "2:      al     %0,0(%0)"       : "=&a" (got) : : "0" );  return *got;}/* Return the run-time load address of the shared object.  */static inline Elf32_Addrelf_machine_load_address (void){  Elf32_Addr addr;  asm( "   bras  1,2f\n"       "1: .long _GLOBAL_OFFSET_TABLE_ - 1b\n"       "   .long _dl_start - 1b - 0x80000000\n"       "2: l     %0,4(1)\n"       "   ar    %0,1\n"       "   al    1,0(1)\n"       "   sl    %0,_dl_start@GOT12(1)"       : "=&d" (addr) : : "1" );  return addr;}/* 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 int __attribute__ ((unused))elf_machine_runtime_setup (struct link_map *l, int lazy, int profile){  extern void _dl_runtime_resolve (Elf32_Word);  extern void _dl_runtime_profile (Elf32_Word);  if (l->l_info[DT_JMPREL] && lazy)    {      /* The GOT entries for functions in the PLT have not yet been filled	 in.  Their initial contents will arrange when called to push an	 offset into the .rel.plt section, push _GLOBAL_OFFSET_TABLE_[1],	 and then jump to _GLOBAL_OFFSET_TABLE[2].  */      Elf32_Addr *got;      got = (Elf32_Addr *) D_PTR (l, l_info[DT_PLTGOT]);      /* If a library is prelinked but we have to relocate anyway,	 we have to be able to undo the prelinking of .got.plt.	 The prelinker saved us here address of .plt + 0x2c.  */      if (got[1])	{	  l->l_mach.plt = got[1] + l->l_addr;	  l->l_mach.gotplt = (Elf32_Addr) &got[3];	}      got[1] = (Elf32_Addr) l;	/* Identify this shared object.  */      /* The got[2] entry contains the address of a function which gets	 called to get the address of a so far unresolved function and	 jump to it.  The profiling extension of the dynamic linker allows	 to intercept the calls to collect information.  In this case we	 don't store the address in the GOT so that all future calls also	 end in this function.  */      if (__builtin_expect (profile, 0))	{	  got[2] = (Elf32_Addr) &_dl_runtime_profile;	  if (GLRO(dl_profile) != NULL	      && _dl_name_match_p (GLRO(dl_profile), l))	    /* This is the object we are looking for.  Say that we really	       want profiling and the timers are started.  */	    GL(dl_profile_map) = l;	}      else	/* This function will get called to fix up the GOT entry indicated by	   the offset on the stack, and then jump to the resolved address.  */	got[2] = (Elf32_Addr) &_dl_runtime_resolve;    }  return lazy;}/* Mask identifying addresses reserved for the user program,   where the dynamic linker should not map anything.  */#define ELF_MACHINE_USER_ADDRESS_MASK   0xf8000000UL/* 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 ("\n\.text\n\.align 4\n\.globl _start\n\.globl _dl_start_user\n\_start:\n\	basr  %r13,0\n\.L0:    ahi   %r13,.Llit-.L0\n\	lr    %r2,%r15\n\	# Alloc stack frame\n\	ahi   %r15,-96\n\	# Set the back chain to zero\n\	xc    0(4,%r15),0(%r15)\n\	# Call _dl_start with %r2 pointing to arg on stack\n\	l     %r14,.Ladr1-.Llit(%r13)\n\	bas   %r14,0(%r14,%r13)   # call _dl_start\n\_dl_start_user:\n\	# Save the user entry point address in %r8.\n\	lr    %r8,%r2\n\	# Point %r12 at the GOT.\n\	l     %r12,.Ladr0-.Llit(%r13)\n\	ar    %r12,%r13\n\	# See if we were run as a command with the executable file\n\	# name as an extra leading argument.\n\	l     %r1,_dl_skip_args@GOT12(0,%r12)\n\	l     %r1,0(%r1)          # load _dl_skip_args\n\	# Get the original argument count.\n\	l     %r0,96(%r15)\n\	# Subtract _dl_skip_args from it.\n\	sr    %r0,%r1\n\	# Adjust the stack pointer to skip _dl_skip_args words.\n\	sll   %r1,2\n\	ar    %r15,%r1\n\	# Set the back chain to zero again\n\	xc    0(4,%r15),0(%r15)\n\	# Store back the modified argument count.\n\	st    %r0,96(%r15)\n\	# The special initializer gets called with the stack just\n\	# as the application's entry point will see it; it can\n\	# switch stacks if it moves these contents over.\n\" RTLD_START_SPECIAL_INIT "\n\	# Call the function to run the initializers.\n\	# Load the parameters:\n\	# (%r2, %r3, %r4, %r5) = (_dl_loaded, argc, argv, envp)\n\	l     %r2,_rtld_local@GOT(%r12)\n\	l     %r2,0(%r2)\n\	l     %r3,96(%r15)\n\	la    %r4,100(%r15)\n\	lr    %r5,%r3\n\	sll   %r5,2\n\	la    %r5,104(%r5,%r15)\n\	l     %r1,.Ladr4-.Llit(%r13)\n\	bas   %r14,0(%r1,%r13)\n\	# Pass our finalizer function to the user in %r14, as per ELF ABI.\n\	l     %r14,_dl_fini@GOT(%r12)\n\	# Free stack frame\n\	ahi   %r15,96\n\	# Jump to the user's entry point (saved in %r8).\n\	br    %r8\n\.Llit:\n\.Ladr0: .long _GLOBAL_OFFSET_TABLE_-.Llit\n\.Ladr1: .long _dl_start-.Llit\n\.Ladr4: .long _dl_init_internal@PLT-.Llit\n\");#ifndef RTLD_START_SPECIAL_INIT#define RTLD_START_SPECIAL_INIT /* nothing */#endif/* ELF_RTYPE_CLASS_PLT iff TYPE describes relocation of a PLT entry or   TLS variable, so undefined references 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.  */#define elf_machine_type_class(type) \  ((((type) == R_390_JMP_SLOT || (type) == R_390_TLS_DTPMOD		      \     || (type) == R_390_TLS_DTPOFF || (type) == R_390_TLS_TPOFF)	      \    * ELF_RTYPE_CLASS_PLT)						      \   | (((type) == R_390_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_390_JMP_SLOT/* The S390 never uses Elf32_Rel relocations.  */#define ELF_MACHINE_NO_REL 1/* The S390 overlaps DT_RELA and DT_PLTREL.  */#define ELF_MACHINE_PLTREL_OVERLAP 1/* We define an initialization functions.  This is called very early in   _dl_sysdep_start.  */#define DL_PLATFORM_INIT dl_platform_init ()static inline void __attribute__ ((unused))dl_platform_init (void){  if (GLRO(dl_platform) != NULL && *GLRO(dl_platform) == '\0')    /* Avoid an empty string which would disturb us.  */    GLRO(dl_platform) = NULL;}static inline Elf32_Addrelf_machine_fixup_plt (struct link_map *map, lookup_t t,		       const Elf32_Rela *reloc,		       Elf32_Addr *reloc_addr, Elf32_Addr value){  return *reloc_addr = value;}/* 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;}/* Names of the architecture-specific auditing callback functions.  */#define ARCH_LA_PLTENTER s390_32_gnu_pltenter#define ARCH_LA_PLTEXIT s390_32_gnu_pltexit#endif /* !dl_machine_h */#ifdef RESOLVE_MAP/* Perform the relocation specified by RELOC and SYM (which is fully resolved).   MAP is the object containing the reloc.  */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 unsigned int r_type = ELF32_R_TYPE (reloc->r_info);#if !defined RTLD_BOOTSTRAP || !defined HAVE_Z_COMBRELOC  if (__builtin_expect (r_type == R_390_RELATIVE, 0))    {# if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC      /* This is defined in rtld.c, but nowhere in the static libc.a;	 make the reference weak so static programs can still link.	 This declaration cannot be done when compiling rtld.c	 (i.e. #ifdef RTLD_BOOTSTRAP) because rtld.c contains the	 common defn for _dl_rtld_map, which is incompatible with a	 weak decl in the same file.  */#  ifndef SHARED      weak_extern (GL(dl_rtld_map));#  endif      if (map != &GL(dl_rtld_map)) /* Already done in rtld itself.  */# endif	*reloc_addr = map->l_addr + reloc->r_addend;    }  else#endif  if (__builtin_expect (r_type == R_390_NONE, 0))    return;  else    {#ifndef RESOLVE_CONFLICT_FIND_MAP      const Elf32_Sym *const refsym = sym;#endif      struct link_map *sym_map = RESOLVE_MAP (&sym, version, r_type);      Elf32_Addr value = sym == NULL ? 0 : sym_map->l_addr + sym->st_value;      switch (r_type)	{	case R_390_GLOB_DAT:	case R_390_JMP_SLOT:	  *reloc_addr = value + reloc->r_addend;	  break;#if (!defined RTLD_BOOTSTRAP || USE___THREAD) \    && !defined RESOLVE_CONFLICT_FIND_MAP	case R_390_TLS_DTPMOD:# ifdef RTLD_BOOTSTRAP	  /* During startup the dynamic linker is always the module	     with index 1.	     XXX If this relocation is necessary move before RESOLVE	     call.  */	  *reloc_addr = 1;# else	  /* Get the information from the link map returned by the	     resolv function.  */	  if (sym_map != NULL)	    *reloc_addr = sym_map->l_tls_modid;# endif	  break;	case R_390_TLS_DTPOFF:# ifndef RTLD_BOOTSTRAP	  /* During relocation all TLS symbols are defined and used.	     Therefore the offset is already correct.  */	  if (sym != NULL)	    *reloc_addr = sym->st_value + reloc->r_addend;# endif	  break;	case R_390_TLS_TPOFF:	  /* The offset is negative, forward from the thread pointer.  */# ifdef RTLD_BOOTSTRAP	  *reloc_addr = sym->st_value + reloc->r_addend - map->l_tls_offset;# else	  /* We know the offset of the object the symbol is contained in.	     It is a negative value which will be added to the	     thread pointer.  */	  if (sym != NULL)	    {	      CHECK_STATIC_TLS (map, sym_map);	      *reloc_addr = (sym->st_value + reloc->r_addend			     - sym_map->l_tls_offset);	    }#endif	  break;#endif  /* use TLS */#ifndef RTLD_BOOTSTRAP# ifndef RESOLVE_CONFLICT_FIND_MAP	/* Not needed in dl-conflict.c.  */	case R_390_COPY:	  if (sym == NULL)	    /* This can happen in trace mode if an object could not be	       found.  */	    break;	  if (__builtin_expect (sym->st_size > refsym->st_size, 0)	      || (__builtin_expect (sym->st_size < refsym->st_size, 0)		  && __builtin_expect (GLRO(dl_verbose), 0)))	    {	      const char *strtab;	      strtab = (const char *) D_PTR(map,l_info[DT_STRTAB]);	      _dl_error_printf ("\%s: Symbol `%s' has different size in shared object, consider re-linking\n",				rtld_progname ?: "<program name unknown>",				strtab + refsym->st_name);	    }	  memcpy (reloc_addr_arg, (void *) value,		  MIN (sym->st_size, refsym->st_size));	  break;# endif	case R_390_32:	  *reloc_addr = value + reloc->r_addend;	  break;	case R_390_16:	  *(unsigned short *) reloc_addr = value + reloc->r_addend;	  break;	case R_390_8:	  *(char *) reloc_addr = value + reloc->r_addend;	  break;# ifndef RESOLVE_CONFLICT_FIND_MAP	case R_390_PC32:	  *reloc_addr = value + reloc->r_addend - (Elf32_Addr) reloc_addr;	  break;	case R_390_PC16DBL:	case R_390_PLT16DBL:	  *(unsigned short *) reloc_addr = (unsigned short)	    ((short) (value + reloc->r_addend - (Elf32_Addr) reloc_addr) >> 1);	  break;	case R_390_PC16:	  *(unsigned short *) reloc_addr =	    value + reloc->r_addend - (Elf32_Addr) reloc_addr;	  break;	case R_390_NONE:	  break;# endif#endif#if !defined(RTLD_BOOTSTRAP) || defined(_NDEBUG)	default:	  /* We add these checks in the version to relocate ld.so only	     if we are still debugging.	 */	  _dl_reloc_bad_type (map, r_type, 0);	  break;#endif	}    }}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){  Elf32_Addr *const reloc_addr = (void *) (l_addr + reloc->r_offset);  const unsigned int r_type = ELF32_R_TYPE (reloc->r_info);  /* Check for unexpected PLT reloc type.  */  if (__builtin_expect (r_type == R_390_JMP_SLOT, 1))    {      if (__builtin_expect (map->l_mach.plt, 0) == 0)	*reloc_addr += l_addr;      else	*reloc_addr =	  map->l_mach.plt	  + (((Elf32_Addr) reloc_addr) - map->l_mach.gotplt) * 8;    }  else    _dl_reloc_bad_type (map, r_type, 1);}#endif /* RESOLVE_MAP */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产亚洲一区二区三区在线观看| 制服丝袜日韩国产| 偷拍亚洲欧洲综合| 91香蕉视频mp4| 久久九九全国免费| 国产激情视频一区二区在线观看 | 欧美激情在线看| 精品一区二区三区欧美| 欧美一区二区三区免费视频| 亚洲综合丁香婷婷六月香| 91香蕉国产在线观看软件| 亚洲视频在线一区| 色综合天天综合网天天狠天天 | 国产无遮挡一区二区三区毛片日本| 日韩高清一级片| 日韩一区二区三区av| 老鸭窝一区二区久久精品| 日韩免费高清av| 国产在线精品免费av| 国产亚洲综合性久久久影院| 粉嫩嫩av羞羞动漫久久久| 亚洲国产精品成人综合色在线婷婷| 粉嫩久久99精品久久久久久夜| 国产精品麻豆视频| 色婷婷久久一区二区三区麻豆| 亚洲综合色丁香婷婷六月图片| 欧美疯狂性受xxxxx喷水图片| 日本在线不卡视频一二三区| 精品日产卡一卡二卡麻豆| 国产高清一区日本| 成人欧美一区二区三区黑人麻豆| 欧美亚洲自拍偷拍| 国产揄拍国内精品对白| 亚洲欧美中日韩| 欧美日韩一区二区电影| 国产精品123区| 亚洲午夜久久久久久久久久久| 欧美一区二区三级| 成人黄色国产精品网站大全在线免费观看 | 亚洲免费观看高清完整 | 久久97超碰国产精品超碰| 久久久久国产精品厨房| 日本二三区不卡| bt7086福利一区国产| 成人免费三级在线| 亚洲成年人网站在线观看| 欧美电影免费观看完整版| 不卡av免费在线观看| 日韩av在线免费观看不卡| 日韩免费福利电影在线观看| 99综合电影在线视频| 老司机午夜精品| 亚洲男同性恋视频| 欧美videossexotv100| 91福利国产成人精品照片| 欧洲一区二区三区在线| 久久69国产一区二区蜜臀| 奇米在线7777在线精品| 亚洲一区二区av在线| 国产精品国产三级国产a| 久久久精品2019中文字幕之3| 3atv一区二区三区| 欧美三级电影精品| 在线观看欧美精品| 欧洲色大大久久| 色综合久久88色综合天天免费| 国产成人av电影在线| 国产精品资源在线| 国产剧情在线观看一区二区 | 9191久久久久久久久久久| 欧美电影免费观看高清完整版| 麻豆国产精品777777在线| 亚洲成人先锋电影| 懂色av一区二区三区蜜臀| 91搞黄在线观看| 日韩欧美中文字幕公布| 精品国产伦一区二区三区观看体验| 日韩一二三四区| 国产精品理伦片| 亚洲午夜久久久久久久久电影网 | 久久久久久麻豆| 国产精品欧美久久久久一区二区| 国产精品理论在线观看| 五月天精品一区二区三区| 国产尤物一区二区| 国产精品一区二区91| 色琪琪一区二区三区亚洲区| 3atv一区二区三区| 中文字幕第一区综合| 亚洲男帅同性gay1069| 一区二区在线看| 狠狠色丁香久久婷婷综合丁香| 国产精品亚洲一区二区三区在线| 成人avav影音| 欧美一级淫片007| 中文字幕中文在线不卡住| 亚洲成人精品一区二区| 国产一区二区三区香蕉| 色综合视频一区二区三区高清| 日韩欧美一区二区视频| 一区二区三区四区在线| 国产一区二区不卡| 欧美一卡二卡三卡| 亚洲柠檬福利资源导航| 不卡av免费在线观看| 国产日韩欧美精品一区| 精品综合久久久久久8888| 欧美肥妇bbw| 三级精品在线观看| 欧美日韩精品一区二区在线播放| 久久婷婷综合激情| 亚洲成av人片在线| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 精品国精品国产| 亚洲一区二区三区激情| 91免费观看在线| 国产精品水嫩水嫩| 国产福利视频一区二区三区| 欧美一区二区成人| 日本欧美一区二区在线观看| 在线观看不卡视频| 亚洲色图另类专区| 91性感美女视频| 亚洲欧洲日韩综合一区二区| 国产高清精品在线| 国产色产综合产在线视频| 久久99国产精品久久99| 精品久久久久久久久久久院品网 | 国产精品一区在线观看乱码| 精品嫩草影院久久| 国产一区二区三区视频在线播放| 日韩免费性生活视频播放| 久久成人综合网| 国产午夜精品一区二区| 国产一区二区在线看| 国产婷婷色一区二区三区在线| 国产福利精品导航| 国产精品久久久99| 在线看国产一区二区| 日韩精品亚洲一区二区三区免费| 在线欧美小视频| 日本v片在线高清不卡在线观看| 精品欧美一区二区久久| 成人激情视频网站| 亚洲欧美日韩国产一区二区三区| 色噜噜狠狠一区二区三区果冻| 亚洲不卡一区二区三区| 日韩欧美第一区| 99精品视频一区| 久久疯狂做爰流白浆xx| 亚洲欧洲精品一区二区三区| 色婷婷综合在线| 激情文学综合网| 一片黄亚洲嫩模| 国产午夜精品在线观看| 欧美日韩在线三级| 国产高清无密码一区二区三区| 亚洲国产精品久久一线不卡| 久久久久久久综合| 一区二区高清视频在线观看| 精品久久久久久久久久久院品网| 99天天综合性| 国产精品自拍av| 蜜臀av一级做a爰片久久| 亚洲嫩草精品久久| 国产日韩欧美制服另类| 日韩精品中文字幕一区二区三区 | 久久久激情视频| 91精品国产综合久久婷婷香蕉 | 国产精品白丝jk白祙喷水网站| 一区二区免费视频| 国产精品成人免费在线| 久久综合色综合88| 欧美一区二区大片| 欧美日韩国产美女| 日本乱人伦aⅴ精品| 91在线国产福利| 国产成人欧美日韩在线电影| 精品一区中文字幕| 美国十次综合导航| 亚州成人在线电影| 亚洲摸摸操操av| 亚洲你懂的在线视频| 亚洲男人的天堂av| 亚洲欧洲国产专区| 一区二区三区资源| 一区二区三区在线播放| 又紧又大又爽精品一区二区| 亚洲免费大片在线观看| 亚洲精品成人在线| 樱桃视频在线观看一区| 亚洲影院久久精品| 蜜臀久久99精品久久久久宅男| 久久国产生活片100| 国产一本一道久久香蕉| 国产精品一卡二卡在线观看| 成人性生交大片免费看中文| 99精品国产99久久久久久白柏| 欧美视频三区在线播放| 6080日韩午夜伦伦午夜伦|