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

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

?? init-first.c

?? glibc2.5版源代碼
?? C
字號:
/* Initialization code run first thing by the ELF startup code.  Alpha/Hurd.   Copyright (C) 1995,96,97,98,99,2000,01,02,03 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 <assert.h>#include <hurd.h>#include <stdio.h>#include <unistd.h>#include <string.h>#include <sysdep.h>#include <set-hooks.h>#include "hurdstartup.h"#include "hurdmalloc.h"		/* XXX */extern void __mach_init (void);extern void __init_misc (int, char **, char **);#ifdef USE_NONOPTION_FLAGSextern void __getopt_clean_environment (char **);#endif#ifndef SHAREDextern void _dl_non_dynamic_init (void) internal_function;#endifextern void __libc_global_ctors (void);unsigned int __hurd_threadvar_max;unsigned long int __hurd_threadvar_stack_offset;unsigned long int __hurd_threadvar_stack_mask;#ifndef SHAREDint __libc_enable_secure;#endifint __libc_multiple_libcs attribute_hidden = 1;extern int __libc_argc attribute_hidden;extern char **__libc_argv attribute_hidden;extern char **_dl_argv;void *(*_cthread_init_routine) (void); /* Returns new SP to use.  */void (*_cthread_exit_routine) (int status) __attribute__ ((__noreturn__));/* Things that want to be run before _hurd_init or much anything else.   Importantly, these are called before anything tries to use malloc.  */DEFINE_HOOK (_hurd_preinit_hook, (void));/* We call this once the Hurd magic is all set up and we are ready to be a   Posixoid program.  This does the same things the generic version does.  */static voidposixland_init (int argc, char **argv, char **envp){  __libc_argc = argc;  __libc_argv = argv;  __environ = envp;#ifndef SHARED  _dl_non_dynamic_init ();#endif  __init_misc (argc, argv, envp);#ifdef USE_NONOPTION_FLAGS  /* This is a hack to make the special getopt in GNU libc working.  */  __getopt_clean_environment (envp);#endif#ifdef SHARED  __libc_global_ctors ();#endif}static voidinit1 (intptr_t *data){  int argc = (intptr_t) *data;  char **argv = (char **) &data[1];  char **envp = &argv[argc + 1];  struct hurd_startup_data *d;  while (*envp)    ++envp;  d = (void *) ++envp;  /* If we are the bootstrap task started by the kernel,     then after the environment pointers there is no Hurd     data block; the argument strings start there.  */  /* OSF Mach starts the bootstrap task with argc == 0.     XXX This fails if a non-bootstrap task gets started     with argc == 0.  */  if (argc && (void *) d != argv[0])    {      _hurd_init_dtable = d->dtable;      _hurd_init_dtablesize = d->dtablesize;      {	/* Check if the stack we are now on is different from	   the one described by _hurd_stack_{base,size}.  */	char dummy;	const vm_address_t newsp = (vm_address_t) &dummy;	if (d->stack_size != 0 && (newsp < d->stack_base ||				   newsp - d->stack_base > d->stack_size))	  /* The new stack pointer does not intersect with the	     stack the exec server set up for us, so free that stack.  */	  __vm_deallocate (__mach_task_self (), d->stack_base, d->stack_size);      }    }  if ((void *) d != argv[0] && (d->portarray || d->intarray))    /* Initialize library data structures, start signal processing, etc.  */    _hurd_init (d->flags, argv,		d->portarray, d->portarraysize,		d->intarray, d->intarraysize);#ifndef SHARED  __libc_enable_secure = d->flags & EXEC_SECURE;#endif}static inline voidinit (intptr_t *data){  int argc = *data;  char **argv = (void *) (data + 1);  char **envp = &argv[argc + 1];  struct hurd_startup_data *d;  unsigned long int threadvars[_HURD_THREADVAR_MAX];  /* Provide temporary storage for thread-specific variables on the     startup stack so the cthreads initialization code can use them     for malloc et al, or so we can use malloc below for the real     threadvars array.  */  memset (threadvars, 0, sizeof threadvars);  __hurd_threadvar_stack_offset = (unsigned long int) threadvars;  /* Since the cthreads initialization code uses malloc, and the     malloc initialization code needs to get at the environment, make     sure we can find it.  We'll need to do this again later on since     switching stacks changes the location where the environment is     stored.  */  __environ = envp;  while (*envp)    ++envp;  d = (void *) ++envp;  /* The user might have defined a value for this, to get more variables.     Otherwise it will be zero on startup.  We must make sure it is set     properly before before cthreads initialization, so cthreads can know     how much space to leave for thread variables.  */  if (__hurd_threadvar_max < _HURD_THREADVAR_MAX)    __hurd_threadvar_max = _HURD_THREADVAR_MAX;  /* After possibly switching stacks, call `init1' (above) with the user     code as the return address, and the argument data immediately above     that on the stack.  */  if (_cthread_init_routine)    {      /* Initialize cthreads, which will allocate us a new stack to run on.  */      void *newsp = (*_cthread_init_routine) ();      struct hurd_startup_data *od;      void switch_stacks (void);      /* Copy per-thread variables from that temporary	 area onto the new cthread stack.  */      memcpy (__hurd_threadvar_location_from_sp (0, newsp),	      threadvars, sizeof threadvars);      /* Copy the argdata from the old stack to the new one.  */      newsp = memcpy (newsp - ((char *) &d[1] - (char *) data), data,		      (char *) d - (char *) data);#ifdef SHARED      /* And readjust the dynamic linker's idea of where the argument         vector lives.  */      assert (_dl_argv == argv);      _dl_argv = (void *) ((int *) newsp + 1);#endif      /* Set up the Hurd startup data block immediately following	 the argument and environment pointers on the new stack.  */      od = (newsp + ((char *) d - (char *) data));      if ((void *) argv[0] == d)	/* We were started up by the kernel with arguments on the stack.	   There is no Hurd startup data, so zero the block.  */	memset (od, 0, sizeof *od);      else	/* Copy the Hurd startup data block to the new stack.  */	*od = *d;      /*         Force NEWSP into sp and &init1 into pv, then branch to pv (call init1).       */      asm volatile ("lda $30,0(%0); lda $27,0(%1); jsr $26,($27)"		    : : "r" (newsp), "r" (&init1));    }  else    {      /* We are not using cthreads, so we will have just a single allocated	 area for the per-thread variables of the main user thread.  */      unsigned long int *array;      unsigned int i;      array = malloc (__hurd_threadvar_max * sizeof (unsigned long int));      if (array == NULL)	__libc_fatal ("Can't allocate single-threaded thread variables.");      /* Copy per-thread variables from the temporary array into the	 newly malloc'd space.  */      memcpy (array, threadvars, sizeof threadvars);      __hurd_threadvar_stack_offset = (unsigned long int) array;      for (i = _HURD_THREADVAR_MAX; i < __hurd_threadvar_max; ++i)	array[i] = 0;      init1 (data);    }}/* Do the first essential initializations that must precede all else.  */static inline voidfirst_init (void){  /* Initialize data structures so we can do RPCs.  */  __mach_init ();  RUN_HOOK (_hurd_preinit_hook, ());}#ifdef SHARED/* This function is called specially by the dynamic linker to do early   initialization of the shared C library before normal initializers   expecting a Posixoid environment can run.  It gets called with the   stack set up just as the user will see it, so it can switch stacks.  */void_dl_init_first (intptr_t argc, ...){  first_init ();  init (&argc);}#endif#ifdef SHARED/* The regular posixland initialization is what goes into libc's   normal initializer.  *//* NOTE!  The linker notices the magical name `_init' and sets the DT_INIT   pointer in the dynamic section based solely on that.  It is convention   for this function to be in the `.init' section, but the symbol name is   the only thing that really matters!!  */strong_alias (posixland_init, _init);void__libc_init_first (int argc, char **argv, char **envp){  /* Everything was done in the shared library initializer, _init.  */}#elsestrong_alias (posixland_init, __libc_init_first);void_hurd_stack_setup (volatile intptr_t argc, ...){  first_init ();  _hurd_startup ((void **) &argc, &init);}#endif/* This function is defined here so that if this file ever gets into   ld.so we will get a link error.  Having this file silently included   in ld.so causes disaster, because the _init definition above will   cause ld.so to gain an init function, which is not a cool thing. */void_dl_start (void){  abort ();}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩va亚洲va欧美va久久| 不卡大黄网站免费看| 亚洲人成伊人成综合网小说| 久久人人超碰精品| 精品成人在线观看| 久久婷婷国产综合精品青草 | 91免费版pro下载短视频| 国产sm精品调教视频网站| bt7086福利一区国产| 色综合天天综合在线视频| 色综合久久久久| 欧美美女直播网站| 欧美一区二区日韩一区二区| 欧美xxxxx牲另类人与| 久久九九久精品国产免费直播| 久久久亚洲午夜电影| 国产欧美一区二区精品久导航 | 欧美日韩国产乱码电影| 一本大道久久a久久精二百| 色8久久人人97超碰香蕉987| 欧美三级视频在线观看| 一本大道久久a久久精二百 | 欧美一区二区三区免费在线看| 欧美一区二区三区免费视频| 国产精品无码永久免费888| 亚洲狼人国产精品| 免费av网站大全久久| zzijzzij亚洲日本少妇熟睡| 欧美色成人综合| 中文字幕欧美三区| 美腿丝袜在线亚洲一区| 色88888久久久久久影院野外| 日韩手机在线导航| 一区二区三区在线视频免费| 美女视频黄久久| 99久久久免费精品国产一区二区| 欧美另类高清zo欧美| 国产视频亚洲色图| 美女在线视频一区| 色综合一个色综合亚洲| 国产人成亚洲第一网站在线播放| 日韩影院在线观看| 91网址在线看| 欧美精彩视频一区二区三区| 蜜桃在线一区二区三区| 91精品久久久久久蜜臀| 亚洲狠狠爱一区二区三区| 成人av在线电影| 亚洲欧美一区二区在线观看| 成人妖精视频yjsp地址| 欧美激情一区二区三区蜜桃视频| 国产真实乱对白精彩久久| 精品国产91洋老外米糕| 久久99精品久久久久久动态图 | 欧美一区二区三区喷汁尤物| 亚洲已满18点击进入久久| 色婷婷综合五月| 亚洲国产精品人人做人人爽| 欧美日韩高清一区二区三区| 免费欧美日韩国产三级电影| 日韩午夜三级在线| 成人开心网精品视频| 亚洲欧洲一区二区三区| 欧美午夜精品久久久久久超碰| 日韩高清不卡在线| 国产亚洲污的网站| 在线精品视频免费播放| 乱中年女人伦av一区二区| 亚洲色图制服丝袜| 日韩免费看的电影| 日本韩国一区二区三区| 国产一区二区三区久久久| 亚洲人成电影网站色mp4| 精品免费视频.| 欧美少妇xxx| 91美女在线观看| 国产一区二区三区蝌蚪| 亚洲成人免费看| 亚洲视频小说图片| 国产午夜精品一区二区| 欧美日韩成人综合天天影院| 国产麻豆午夜三级精品| 国产精品影视在线| 成人av网站免费| 97精品国产露脸对白| 在线观看免费一区| 久久综合狠狠综合| 伊人开心综合网| 久久国产精品一区二区| gogo大胆日本视频一区| 91免费小视频| 日韩欧美在线综合网| 国产日韩亚洲欧美综合| 亚洲一区二区三区自拍| 日韩不卡一二三区| www.日本不卡| 日韩视频在线观看一区二区| 国产天堂亚洲国产碰碰| 亚洲一区二区三区四区五区黄| 老汉av免费一区二区三区 | 黄色日韩网站视频| 精品综合久久久久久8888| 成人综合婷婷国产精品久久免费| 成人午夜电影网站| 欧美午夜一区二区三区免费大片| 欧美日韩一区二区三区四区五区 | 欧美疯狂性受xxxxx喷水图片| 欧美在线啊v一区| 在线观看91av| 国产欧美日本一区视频| 亚洲人吸女人奶水| 免费视频最近日韩| av不卡免费在线观看| 欧美日韩国产影片| 国产欧美一区二区三区沐欲 | 全国精品久久少妇| 成人午夜激情影院| 亚洲精品在线三区| 一区二区三区丝袜| 国产精品资源在线观看| 91女厕偷拍女厕偷拍高清| 欧美一区二区三区视频在线观看| 国产精品初高中害羞小美女文| 亚洲精品欧美激情| 国产高清不卡一区二区| 制服丝袜国产精品| 一区二区三区在线视频免费| aaa国产一区| 中文字幕av一区二区三区| 爽好多水快深点欧美视频| 91免费看视频| 亚洲欧洲精品一区二区精品久久久| 美女在线观看视频一区二区| 一本色道久久综合精品竹菊| 国产精品午夜在线观看| 国产福利精品导航| 欧美videossexotv100| 欧美一区三区四区| 一区二区三区美女| 国产成人在线色| 精品国内二区三区| 午夜精品久久久久久久久久久| 99久久精品费精品国产一区二区| 日韩午夜电影在线观看| 日精品一区二区| 精品视频999| 亚洲免费观看在线视频| 99re热这里只有精品免费视频| 日韩精品一区二区三区视频在线观看| 亚洲成人动漫在线观看| 国模少妇一区二区三区| 精品国产亚洲在线| 国产剧情一区二区| 中文在线一区二区| 91丨porny丨在线| 亚洲蜜臀av乱码久久精品蜜桃| 91丨九色丨尤物| 亚洲狠狠丁香婷婷综合久久久| 色噜噜夜夜夜综合网| 亚洲不卡av一区二区三区| 欧美久久久久久久久久| 精品在线播放免费| 国产亚洲欧美中文| 国产高清无密码一区二区三区| 国产日韩v精品一区二区| 99国产精品国产精品久久| 亚洲免费观看高清完整版在线观看| 色婷婷狠狠综合| 三级一区在线视频先锋| 久久奇米777| 欧美美女一区二区三区| 国产成人一级电影| 日日噜噜夜夜狠狠视频欧美人 | 欧美极品少妇xxxxⅹ高跟鞋| 99国产精品一区| 美国一区二区三区在线播放| 国产精品女人毛片| 久久午夜老司机| 99久久综合精品| 日韩精品欧美精品| 日韩毛片高清在线播放| 日韩午夜av一区| 日韩一区二区三区电影在线观看 | 3d成人动漫网站| 99久久国产免费看| 黄色精品一二区| 日韩**一区毛片| 国产伦精品一区二区三区视频青涩| 激情综合色播五月| 91香蕉视频污在线| 欧美亚一区二区| 久久久精品国产免费观看同学| 中文字幕一区二区三| 日本欧美韩国一区三区| 成人免费看的视频| 欧美精品1区2区3区| 国产精品进线69影院| 日本aⅴ亚洲精品中文乱码| 99re这里只有精品视频首页| 欧美日韩免费在线视频|