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

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

?? dl-sysdep.c

?? glibc 庫, 不僅可以學習使用庫函數,還可以學習函數的具體實現,是提高功力的好資料
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* Operating system support for run-time dynamic linker.  Hurd version.   Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004	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.  */#include <hurd.h>#include <link.h>#include <unistd.h>#include <fcntl.h>#include <stdlib.h>#include <sys/mman.h>#include <ldsodefs.h>#include <sys/wait.h>#include <assert.h>#include <sysdep.h>#include <mach/mig_support.h>#include "hurdstartup.h"#include <hurd/lookup.h>#include <hurd/auth.h>#include <hurd/term.h>#include <stdarg.h>#include <ctype.h>#include <sys/stat.h>#include <sys/uio.h>#include <entry.h>#include <dl-machine.h>#include <dl-procinfo.h>extern void __mach_init (void);extern int _dl_argc;extern char **_dl_argv;extern char **_environ;int __libc_enable_secure = 0;INTVARDEF(__libc_enable_secure)int __libc_multiple_libcs = 0;	/* Defining this here avoids the inclusion				   of init-first.  *//* This variable containts the lowest stack address ever used.  */void *__libc_stack_end;#if HP_TIMING_AVAILhp_timing_t _dl_cpuclock_offset;#endifstruct hurd_startup_data *_dl_hurd_data;/* This is used only within ld.so, via dl-minimal.c's __errno_location.  */#undef errnoint errno attribute_hidden;/* Defining these variables here avoids the inclusion of hurdsig.c.  */unsigned long int __hurd_sigthread_stack_base;unsigned long int __hurd_sigthread_stack_end;unsigned long int *__hurd_sigthread_variables;/* Defining these variables here avoids the inclusion of init-first.c.   We need to provide temporary storage for the per-thread variables   of the main user thread here, since it is used for storing the   `errno' variable.  Note that this information is lost once we   relocate the dynamic linker.  */static unsigned long int threadvars[_HURD_THREADVAR_MAX];unsigned long int __hurd_threadvar_stack_offset  = (unsigned long int) &threadvars;unsigned long int __hurd_threadvar_stack_mask;#define FMH defined(__i386__)#if ! FMH# define fmh()		((void)0)# define unfmh()	((void)0)#else/* XXX loser kludge for vm_map kernel bug */#undef	ELF_MACHINE_USER_ADDRESS_MASK#define ELF_MACHINE_USER_ADDRESS_MASK	0static vm_address_t fmha;static vm_size_t fmhs;static void unfmh(void){__vm_deallocate(__mach_task_self(),fmha,fmhs);}static void fmh(void) {    error_t err;int x;mach_port_t p;    vm_address_t a=0x08000000U,max=VM_MAX_ADDRESS;    while (!(err=__vm_region(__mach_task_self(),&a,&fmhs,&x,&x,&x,&x,&p,&x))){      __mach_port_deallocate(__mach_task_self(),p);      if (a+fmhs>=0x80000000U){	max=a; break;}      fmha=a+=fmhs;}    if (err) assert(err==KERN_NO_SPACE);    if (!fmha)fmhs=0;else{    fmhs=max-fmha;    err = __vm_map (__mach_task_self (),		    &fmha, fmhs, 0, 0, MACH_PORT_NULL, 0, 1,		    VM_PROT_NONE, VM_PROT_NONE, VM_INHERIT_COPY);    assert_perror(err);}  }/* XXX loser kludge for vm_map kernel bug */#endifElfW(Addr)_dl_sysdep_start (void **start_argptr,		  void (*dl_main) (const ElfW(Phdr) *phdr, ElfW(Word) phent,				   ElfW(Addr) *user_entry)){  void go (intptr_t *argdata)    {      extern unsigned int _dl_skip_args; /* rtld.c */      char **p;      /* Cache the information in various global variables.  */      _dl_argc = *argdata;      _dl_argv = 1 + (char **) argdata;      _environ = &_dl_argv[_dl_argc + 1];      for (p = _environ; *p++;); /* Skip environ pointers and terminator.  */      if ((void *) p == _dl_argv[0])	{	  static struct hurd_startup_data nodata;	  _dl_hurd_data = &nodata;	  nodata.user_entry = (vm_address_t) ENTRY_POINT;	}      else	_dl_hurd_data = (void *) p;      INTUSE(__libc_enable_secure) = _dl_hurd_data->flags & EXEC_SECURE;      if (_dl_hurd_data->flags & EXEC_STACK_ARGS &&	  _dl_hurd_data->user_entry == 0)	_dl_hurd_data->user_entry = (vm_address_t) ENTRY_POINT;unfmh();			/* XXX */#if 0				/* XXX make this work for real someday... */      if (_dl_hurd_data->user_entry == (vm_address_t) ENTRY_POINT)	/* We were invoked as a command, not as the program interpreter.	   The generic ld.so code supports this: it will parse the args	   as "ld.so PROGRAM [ARGS...]".  For booting the Hurd, we	   support an additional special syntax:	     ld.so [-LIBS...] PROGRAM [ARGS...]	   Each LIBS word consists of "FILENAME=MEMOBJ";	   for example "-/lib/libc.so=123" says that the contents of	   /lib/libc.so are found in a memory object whose port name	   in our task is 123.  */	while (_dl_argc > 2 && _dl_argv[1][0] == '-' && _dl_argv[1][1] != '-')	  {	    char *lastslash, *memobjname, *p;	    struct link_map *l;	    mach_port_t memobj;	    error_t err;	    ++_dl_skip_args;	    --_dl_argc;	    p = _dl_argv++[1] + 1;	    memobjname = strchr (p, '=');	    if (! memobjname)	      _dl_sysdep_fatal ("Bogus library spec: ", p, "\n", NULL);	    *memobjname++ = '\0';	    memobj = 0;	    while (*memobjname != '\0')	      memobj = (memobj * 10) + (*memobjname++ - '0');	    /* Add a user reference on the memory object port, so we will	       still have one after _dl_map_object_from_fd calls our	       `close'.  */	    err = __mach_port_mod_refs (__mach_task_self (), memobj,					MACH_PORT_RIGHT_SEND, +1);	    assert_perror (err);	    lastslash = strrchr (p, '/');	    l = _dl_map_object_from_fd (lastslash ? lastslash + 1 : p,					memobj, strdup (p), 0);	    /* Squirrel away the memory object port where it	       can be retrieved by the program later.  */	    l->l_info[DT_NULL] = (void *) memobj;	  }#endif      /* Call elf/rtld.c's main program.  It will set everything	 up and leave us to transfer control to USER_ENTRY.  */      (*dl_main) ((const ElfW(Phdr) *) _dl_hurd_data->phdr,		  _dl_hurd_data->phdrsz / sizeof (ElfW(Phdr)),		  &_dl_hurd_data->user_entry);      /* The call above might screw a few things up.	 First of all, if _dl_skip_args is nonzero, we are ignoring	 the first few arguments.  However, if we have no Hurd startup	 data, it is the magical convention that ARGV[0] == P.  The	 startup code in init-first.c will get confused if this is not	 the case, so we must rearrange things to make it so.  We'll	 overwrite the origional ARGV[0] at P with ARGV[_dl_skip_args].	 Secondly, if we need to be secure, it removes some dangerous	 environment variables.  If we have no Hurd startup date this	 changes P (since that's the location after the terminating	 NULL in the list of environment variables).  We do the same	 thing as in the first case but make sure we recalculate P.	 If we do have Hurd startup data, we have to move the data	 such that it starts just after the terminating NULL in the	 environment list.	 We use memmove, since the locations might overlap.  */      if (INTUSE(__libc_enable_secure) || _dl_skip_args)	{	  char **newp;	  for (newp = _environ; *newp++;);	  if (_dl_argv[-_dl_skip_args] == (char *) p)	    {	      if ((char *) newp != _dl_argv[0])		{		  assert ((char *) newp < _dl_argv[0]);		  _dl_argv[0] = memmove ((char *) newp, _dl_argv[0],					 strlen (_dl_argv[0]) + 1);		}	    }	  else	    {	      if ((void *) newp != _dl_hurd_data)		memmove (newp, _dl_hurd_data, sizeof (*_dl_hurd_data));	    }	}      {	extern void _dl_start_user (void);	/* Unwind the stack to ARGDATA and simulate a return from _dl_start	   to the RTLD_START code which will run the user's entry point.  */	RETURN_TO (argdata, &_dl_start_user, _dl_hurd_data->user_entry);      }    }  /* Set up so we can do RPCs.  */  __mach_init ();  /* Initialize frequently used global variable.  */  GLRO(dl_pagesize) = __getpagesize ();#if HP_TIMING_AVAIL  HP_TIMING_NOW (_dl_cpuclock_offset);#endiffmh();				/* XXX */  /* See hurd/hurdstartup.c; this deals with getting information     from the exec server and slicing up the arguments.     Then it will call `go', above.  */  _hurd_startup (start_argptr, &go);  LOSE;  abort ();}voidinternal_function_dl_sysdep_start_cleanup (void){  /* Deallocate the reply port and task port rights acquired by     __mach_init.  We are done with them now, and the user will     reacquire them for himself when he wants them.  */  __mig_dealloc_reply_port (MACH_PORT_NULL);  __mach_port_deallocate (__mach_task_self (), __mach_task_self_);}/* Minimal open/close/mmap implementation sufficient for initial loading of   shared libraries.  These are weak definitions so that when the   dynamic linker re-relocates itself to be user-visible (for -ldl),   it will get the user's definition (i.e. usually libc's).  *//* Open FILE_NAME and return a Hurd I/O for it in *PORT, or return an   error.  If STAT is non-zero, stat the file into that stat buffer.  */static error_topen_file (const char *file_name, int flags,	   mach_port_t *port, struct stat64 *stat){  enum retry_type doretry;  char retryname[1024];		/* XXX string_t LOSES! */  file_t startdir;  error_t err;  error_t use_init_port (int which, error_t (*operate) (file_t))    {      return (which < _dl_hurd_data->portarraysize	      ? ((*operate) (_dl_hurd_data->portarray[which]))	      : EGRATUITOUS);    }  file_t get_dtable_port (int fd)    {      if ((unsigned int) fd < _dl_hurd_data->dtablesize	  && _dl_hurd_data->dtable[fd] != MACH_PORT_NULL)	{	  __mach_port_mod_refs (__mach_task_self (), _dl_hurd_data->dtable[fd],				MACH_PORT_RIGHT_SEND, +1);	  return _dl_hurd_data->dtable[fd];	}      errno = EBADF;      return MACH_PORT_NULL;    }  assert (!(flags & ~O_READ));  startdir = _dl_hurd_data->portarray[file_name[0] == '/' ?				      INIT_PORT_CRDIR : INIT_PORT_CWDIR];  while (file_name[0] == '/')    file_name++;  err = __dir_lookup (startdir, (char *)file_name, O_RDONLY, 0,		      &doretry, retryname, port);  if (!err)    err = __hurd_file_name_lookup_retry (use_init_port, get_dtable_port,					 __dir_lookup, doretry, retryname,					 O_RDONLY, 0, port);  if (!err && stat)    {      err = __io_stat (*port, stat);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩亚洲欧美在线观看| 99精品国产热久久91蜜凸| 91精品国产黑色紧身裤美女| 亚洲超碰精品一区二区| 欧美日韩亚洲综合在线 | 一区二区在线观看不卡| 91色视频在线| 午夜欧美大尺度福利影院在线看| 欧美日韩国产一区| 免费观看久久久4p| 国产免费成人在线视频| 色综合久久久久综合| 日韩国产高清影视| 久久久另类综合| 91看片淫黄大片一级在线观看| 亚洲一区二区三区视频在线 | 欧美写真视频网站| 秋霞电影网一区二区| 久久精品视频免费| 色菇凉天天综合网| 裸体在线国模精品偷拍| 国产精品区一区二区三| 欧美日韩国产中文| 成人一区二区视频| 亚洲午夜免费福利视频| 日韩欧美激情四射| 97aⅴ精品视频一二三区| 视频在线观看一区| 国产精品久久久久影视| 欧美人体做爰大胆视频| 国产a级毛片一区| 日日夜夜一区二区| 中文字幕永久在线不卡| 中文字幕精品一区| 欧美日韩国产精品成人| 国产91精品免费| 石原莉奈一区二区三区在线观看| 国产欧美精品一区| 日韩午夜电影av| 91麻豆福利精品推荐| 韩国v欧美v日本v亚洲v| 性做久久久久久免费观看| 中文字幕av免费专区久久| 欧美一区二区在线免费播放 | 99国产精品久久久久| 久久精品国产一区二区三区免费看| 亚洲欧美一区二区三区极速播放| 精品乱码亚洲一区二区不卡| 欧美色图第一页| 成人国产精品免费观看动漫| 美女看a上一区| 图片区小说区国产精品视频| 国产精品国产自产拍在线| www一区二区| 欧美一卡二卡三卡四卡| 欧美在线视频全部完| 99久久99久久精品免费看蜜桃| 极品美女销魂一区二区三区| 一区二区成人在线视频| 亚洲欧美怡红院| 国产午夜精品在线观看| 精品国产乱码91久久久久久网站| 欧美日韩在线播放三区四区| 成人三级伦理片| 国产成人小视频| 国产激情一区二区三区四区 | 国产精品拍天天在线| 久久尤物电影视频在线观看| 精品美女一区二区| 日韩精品一区二区三区四区视频 | 精品国产麻豆免费人成网站| 91精品国产综合久久婷婷香蕉| 欧美性大战xxxxx久久久| 日本韩国一区二区三区视频| 99国产精品久久久久久久久久| 波多野结衣中文字幕一区二区三区| 国产伦精品一区二区三区免费| 免费成人在线观看视频| 久久精品国产999大香线蕉| 蜜臀av性久久久久蜜臀aⅴ流畅| 亚洲超碰精品一区二区| 免费亚洲电影在线| 极品少妇xxxx精品少妇| 岛国精品在线观看| 成人国产精品免费观看视频| 99精品国产视频| 欧美中文字幕亚洲一区二区va在线 | 国产高清不卡一区二区| 国产福利视频一区二区三区| 成人动漫一区二区在线| 99re8在线精品视频免费播放| 91浏览器打开| 欧美日韩国产首页在线观看| 日韩欧美中文字幕制服| 日韩美女视频在线| 久久久高清一区二区三区| 国产精品国产自产拍高清av王其| 亚洲欧美偷拍另类a∨色屁股| 一区二区三区成人| 日韩精品视频网| 国产高清在线精品| 日本乱人伦一区| 欧美一区二区三区免费大片 | 欧美精品成人一区二区三区四区| 日韩午夜三级在线| 国产精品国产三级国产| 亚洲在线视频免费观看| 久热成人在线视频| 91啪亚洲精品| 欧美一区二区网站| 国产精品无遮挡| 午夜激情一区二区| 国产老肥熟一区二区三区| 一本久久综合亚洲鲁鲁五月天| 欧美嫩在线观看| 国产片一区二区| 亚洲国产精品一区二区久久恐怖片| 久久精品国产77777蜜臀| 99久久久国产精品| 日韩免费高清视频| 一区二区三区在线观看视频| 久久国产剧场电影| 欧美色中文字幕| 中文字幕国产精品一区二区| 午夜精品久久久久久久| 成人短视频下载| 欧美videossexotv100| 一区二区高清视频在线观看| 国产高清亚洲一区| 91精品国产色综合久久不卡电影| 国产精品久久久久久久久果冻传媒 | 中文字幕欧美国产| 麻豆中文一区二区| 欧美无砖砖区免费| 国产精品视频一区二区三区不卡| 亚洲福利视频一区二区| 99久久久国产精品免费蜜臀| 精品久久久久香蕉网| 亚洲成人综合网站| 91麻豆福利精品推荐| 欧美国产精品中文字幕| 理论电影国产精品| 欧美日韩一区三区四区| 中文字幕日韩欧美一区二区三区| 狠狠色丁香久久婷婷综合_中| 欧美精品视频www在线观看| 国产精品二三区| 成人综合在线观看| 久久久久国产免费免费| 看片网站欧美日韩| 日韩一区二区三| 蜜臀久久久99精品久久久久久| 在线观看中文字幕不卡| 亚洲手机成人高清视频| 成人午夜免费视频| 欧美激情综合五月色丁香小说| 精品一区二区免费看| 欧美一级黄色片| 亚洲va国产va欧美va观看| 色婷婷久久99综合精品jk白丝| 国产免费成人在线视频| 国产在线观看免费一区| 2022国产精品视频| 国内久久婷婷综合| 久久久久国产精品人| 国产一区二区三区视频在线播放| 日韩欧美国产综合| 激情六月婷婷久久| 久久久久久电影| 成人app在线观看| 中文字幕亚洲一区二区va在线| 成人午夜av影视| 亚洲女与黑人做爰| 欧美三级电影精品| 青青草91视频| 久久美女高清视频| 成人免费av网站| 亚洲精选视频免费看| 91黄色免费网站| 日韩精品电影一区亚洲| 日韩欧美电影一区| 国产福利一区在线观看| 中文字幕人成不卡一区| 欧美羞羞免费网站| 日本成人在线视频网站| 2017欧美狠狠色| 99久久99久久免费精品蜜臀| 亚洲一区中文在线| 日韩免费一区二区| 国产suv精品一区二区6| 亚洲欧美日韩久久精品| 91精品黄色片免费大全| 国产综合色精品一区二区三区| 日本一区二区电影| 欧美午夜一区二区| 激情六月婷婷综合| 一区二区三区美女| 2020日本不卡一区二区视频| 99精品视频在线免费观看| 日韩精品一区第一页|