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

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

?? linux.c

?? vhdl集成電路設計軟件.需要用gcc-4.0.2版本編譯.
?? C
字號:
/*  GRT stacks implementation for linux and other *nix.    Copyright (C) 2002, 2003, 2004, 2005 Tristan Gingold.    GHDL is free software; you can redistribute it and/or modify it under    the terms of the GNU General Public License as published by the Free    Software Foundation; either version 2, or (at your option) any later    version.    GHDL 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 General Public License    for more details.    You should have received a copy of the GNU General Public License    along with GCC; see the file COPYING.  If not, write to the Free    Software Foundation, 59 Temple Place - Suite 330, Boston, MA    02111-1307, USA.*/#define _GNU_SOURCE#include <unistd.h>#include <sys/mman.h>#include <signal.h>#include <fcntl.h>#include <sys/ucontext.h>//#include <stdint.h>/* On x86, the stack growns downward.  */#define STACK_GROWNS_DOWNWARD 1#ifdef linux/* If set, SIGSEGV is caught in order to automatically grow the stacks.  */#define EXTEND_STACK 1#endif/* Defined in Grt.Stacks.  */extern unsigned int stack_size;extern unsigned int stack_max_size;/* Size of a memory page.  */static size_t page_size;extern void grt_stack_error_grow_failed (void);extern void grt_stack_error_null_access (void);extern void grt_stack_error_memory_access (void);extern void grt_overflow_error (void);/* Definitions:   The base of the stack is the address before the first available byte on the     stack.  If the stack grows downward, the base is equal to the high bound.*/   /* Per stack context.   This context is allocated at the top (or bottom if the stack grows   upward) of the stack.   Therefore, the base of the stack can be easily deduced from the context.  */struct stack_context{  /* The current stack pointer.  */  void *cur_sp;  /* The current stack length.  */  size_t cur_length;};/* Context for the main stack.  */static struct stack_context main_stack_context;extern struct stack_context *grt_stack_main_stack;/* If MAP_ANONYMOUS is not defined, use /dev/zero. */#ifndef MAP_ANONYMOUS#define USE_DEV_ZEROstatic int dev_zero_fd;#define MAP_ANONYMOUS 0#define MMAP_FILEDES dev_zero_fd#else#define MMAP_FILEDES -1#endif#if EXTEND_STACK/* Defined in Grt.Processes (body).   This is the current process being run.   FIXME: this won't work with pthread!  */extern void **grt_cur_proc;/* Stack used for signals.   The stack must be different from the running stack, because we want to be   able to extend the running stack.  When the stack need to be extended, the   current stack pointer does not point to a valid address.  Therefore, the   stack cannot be used or else a second SIGSEGV is generated while the   arguments are pushed.  */static unsigned long sig_stack[SIGSTKSZ / sizeof (long)];/* Signal stack descriptor.  */static stack_t sig_stk;static struct sigaction prev_sigsegv_act;static struct sigaction sigsegv_act;/* The following code assumes stack grows downward.  */#if !STACK_GROWNS_DOWNWARD#error "Not implemented"#endif/* Handler for SIGSEGV signal, which grow the stack.  */static void grt_sigsegv_handler (int signo, siginfo_t *info, void *ptr){  static int in_handler;  void *addr;  struct stack_context *ctxt;  void *stack_high;  void *stack_low;  void *n_low;  size_t n_len;  ucontext_t *uctxt = (ucontext_t *)ptr;  in_handler++;#ifdef __i386__  /* Linux generates a SIGSEGV (!) for an overflow exception.  */  if (uctxt->uc_mcontext.gregs[REG_TRAPNO] == 4)    {      grt_overflow_error ();    }#endif  if (info == NULL || grt_cur_proc == NULL || in_handler > 1)    {      /* We loose.  */      sigaction (SIGSEGV, &prev_sigsegv_act, NULL);      return;    }  addr = info->si_addr;    /* Check ADDR belong to the stack.  */  ctxt = *grt_cur_proc;  stack_high = (void *)(ctxt + 1);  stack_low = stack_high - stack_max_size;  if (addr > stack_high || addr < stack_low)    {      /* Out of the stack.  */      if (addr < (void *)page_size)	grt_stack_error_null_access ();      else	grt_stack_error_memory_access ();    }  /* Compute the address of the faulting page.  */  n_low = (void *)((unsigned long)addr & ~(page_size - 1));  /* Should not happen.  */  if (n_low < stack_low)    abort ();  /*  Allocate one more page, if possible.  */  if (n_low != stack_low)    n_low -= page_size;  /* Compute the new length.  */  n_len = stack_high - n_low;  if (mmap (n_low, n_len - ctxt->cur_length,  PROT_READ | PROT_WRITE,	    MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS, MMAP_FILEDES, 0)      != n_low)    {      /* Cannot grow the stack.  */      grt_stack_error_grow_failed ();    }  ctxt->cur_length = n_len;  sigaction (SIGSEGV, &sigsegv_act, NULL);  in_handler--;  /* Hopes we can resume!  */  return;}static void grt_signal_setup (void){  sigsegv_act.sa_sigaction = &grt_sigsegv_handler;  sigemptyset (&sigsegv_act.sa_mask);  sigsegv_act.sa_flags = SA_ONESHOT | SA_ONSTACK | SA_SIGINFO;  /* Use an alternate stack during signals.  */  sig_stk.ss_sp = sig_stack;  sig_stk.ss_size = sizeof (sig_stack);  sig_stk.ss_flags = 0;  sigaltstack (&sig_stk, NULL);  /* We don't care about the return status.     If the handler is not installed, then some feature are lost.  */  sigaction (SIGSEGV, &sigsegv_act, &prev_sigsegv_act);}#endifvoidgrt_stack_init (void){  size_t pg_round;  page_size = getpagesize ();  pg_round = page_size - 1;  /* Align size.  */  stack_size = (stack_size + pg_round) & ~pg_round;  stack_max_size = (stack_max_size + pg_round) & ~pg_round;  /* Set mimum values.  */  if (stack_size < 2 * page_size)    stack_size = 2 * page_size;  if (stack_max_size < (stack_size + 2 * page_size))    stack_max_size = stack_size + 2 * page_size;  /* Initialize the main stack context.  */  main_stack_context.cur_sp = NULL;  main_stack_context.cur_length = 0;  grt_stack_main_stack = &main_stack_context;#ifdef USE_DEV_ZERO  dev_zero_fd = open ("/dev/zero", O_RDWR);  if (dev_zero_fd < 0)    abort ();#endif#if EXTEND_STACK  grt_signal_setup ();#endif}/* Allocate a stack.   Called by i386.S  */struct stack_context *grt_stack_allocate (void){  struct stack_context *res;  void *r;  void *base;  /* Allocate the stack, but without any rights.  This is a guard.  */  base = (void *)mmap (NULL, stack_max_size, PROT_NONE,		       MAP_PRIVATE | MAP_ANONYMOUS, MMAP_FILEDES, 0);  if (base == (void *)-1)    return NULL;  /* Set rights on the allocated stack.  */#if STACK_GROWNS_DOWNWARD  r = base + stack_max_size - stack_size;#else  r = base;#endif  if (mmap (r, stack_size,  PROT_READ | PROT_WRITE,	    MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS, MMAP_FILEDES, 0)      != r)    return NULL;#if STACK_GROWNS_DOWNWARD  res = (struct stack_context *)    (base + stack_max_size - sizeof (struct stack_context));#else  res = (struct stack_context *)(base + sizeof (struct stack_context));#endif  res->cur_sp = (void *)res;  res->cur_length = stack_size;  return res;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线免费观看视频一区| 亚洲午夜视频在线| 精品无人码麻豆乱码1区2区 | 精品久久一二三区| 国产福利一区二区三区视频在线| 17c精品麻豆一区二区免费| 91麻豆精品国产91久久久久久久久| 国产一区二区视频在线播放| ㊣最新国产の精品bt伙计久久| 国产精品久久久久久久久久久免费看 | 日本一区二区视频在线| 欧美最猛性xxxxx直播| 欧美伊人久久久久久久久影院 | 色天天综合色天天久久| 看电视剧不卡顿的网站| 亚洲免费在线视频| 久久亚洲精精品中文字幕早川悠里 | 色婷婷久久久久swag精品| 91视频免费观看| 国产精品亚洲综合一区在线观看| 亚洲国产一区视频| 青草国产精品久久久久久| 一区二区三区在线影院| 国产精品久久久久久亚洲伦| 日韩美女精品在线| 国产欧美一区二区精品性色| 久久众筹精品私拍模特| 中文久久乱码一区二区| 精品人在线二区三区| 中文成人综合网| 亚洲伊人伊色伊影伊综合网| 综合久久久久久| 无码av免费一区二区三区试看| 亚洲精品免费视频| 成人免费在线视频观看| 首页亚洲欧美制服丝腿| 日韩高清在线一区| 天天做天天摸天天爽国产一区 | 国产一区91精品张津瑜| 日本乱人伦aⅴ精品| 成+人+亚洲+综合天堂| 不卡一区二区在线| 91精品在线免费观看| 国产精品久线在线观看| 日本麻豆一区二区三区视频| 97久久久精品综合88久久| 91蝌蚪国产九色| 日韩欧美电影一二三| 欧美xxxxx牲另类人与| 亚洲日本丝袜连裤袜办公室| 美女国产一区二区| 国产精品亚洲午夜一区二区三区 | 国产精品123| 欧美精品视频www在线观看| 欧美色老头old∨ideo| 69久久夜色精品国产69蝌蚪网| 日本一区二区三区四区| 捆绑调教美女网站视频一区| 欧美午夜精品久久久久久超碰 | 亚洲在线观看免费视频| 国产精品一区二区久激情瑜伽| 欧美日韩一区精品| 亚洲精品美国一| 波多野结衣在线aⅴ中文字幕不卡| 久久精品国产秦先生| 欧美日韩一本到| 亚洲精品视频在线| 91蝌蚪porny成人天涯| 国产精品电影一区二区三区| 国产精品77777| www国产精品av| 蜜桃av一区二区三区电影| 欧美日韩的一区二区| 欧美一区日本一区韩国一区| 欧美电影免费观看高清完整版 | 日韩欧美一级二级三级久久久| 亚洲国产精品精华液网站| 99精品视频免费在线观看| 中文字幕不卡在线| 亚洲一区二区三区四区不卡| 在线区一区二视频| 亚洲一区二区美女| 欧美视频日韩视频在线观看| 亚洲无人区一区| 欧美日韩不卡一区二区| 日韩国产欧美在线视频| 日韩精品专区在线影院重磅| 久久se这里有精品| 国产欧美一区二区精品性| 成人国产视频在线观看| 综合亚洲深深色噜噜狠狠网站| 99热精品国产| 亚洲国产精品视频| 欧美一区二区三区精品| 国产一区二三区| 欧美激情一区在线观看| 色狠狠av一区二区三区| 亚洲va欧美va国产va天堂影院| 成人91在线观看| 樱桃视频在线观看一区| 欧美日韩高清一区二区不卡| 精品亚洲成av人在线观看| 国产精品美女久久久久aⅴ| 色婷婷av一区二区三区之一色屋| 日精品一区二区三区| 久久综合久久99| 色婷婷精品久久二区二区蜜臀av| 免费观看成人鲁鲁鲁鲁鲁视频| 久久精品人人做人人爽人人| 久久国产精品72免费观看| 国产亚洲精品中文字幕| 欧美在线免费视屏| 国精产品一区一区三区mba视频| 777a∨成人精品桃花网| 国产精品一区2区| 一区二区三区欧美| 久久久久成人黄色影片| 国产一区二区女| 一区二区三区成人| 久久综合色鬼综合色| 在线观看日韩电影| 国产乱妇无码大片在线观看| 亚洲国产成人高清精品| 国产精品美日韩| 欧美成人猛片aaaaaaa| 91精品1区2区| 国产精品综合网| 石原莉奈在线亚洲二区| 日韩伦理免费电影| 久久日韩粉嫩一区二区三区| 欧美日韩大陆在线| 91在线观看视频| 国产精品中文字幕一区二区三区| 五月婷婷另类国产| 亚洲欧美日韩国产手机在线| 久久久久国产精品麻豆ai换脸| 欧美美女网站色| 欧美专区在线观看一区| 99在线视频精品| 波多野结衣亚洲一区| 国产精品一二三四区| 九九在线精品视频| 日韩精品电影在线观看| 亚洲国产va精品久久久不卡综合| 国产精品国产a| 国产精品少妇自拍| 国产欧美日韩另类视频免费观看 | 国产一区二区久久| 另类小说图片综合网| 日韩av一级片| 免费一区二区视频| 午夜精品aaa| 午夜一区二区三区在线观看| 亚洲一区在线电影| 亚洲在线视频一区| 亚洲国产视频网站| 亚洲国产精品一区二区www在线| 国产精品区一区二区三| 国产精品欧美极品| 国产精品久久久久桃色tv| 国产精品私人自拍| 国产精品传媒视频| 亚洲欧美偷拍另类a∨色屁股| 亚洲视频在线观看一区| 一区二区三区在线免费播放| 一区二区高清在线| 亚洲3atv精品一区二区三区| 日韩黄色片在线观看| 麻豆成人免费电影| 国产成人自拍在线| 91欧美一区二区| 欧美狂野另类xxxxoooo| 日韩欧美二区三区| 国产精品美女久久久久aⅴ| 亚洲视频一二区| 亚洲bt欧美bt精品777| 国产在线看一区| 99视频一区二区三区| 欧美日韩精品一区二区三区蜜桃| 欧美日韩一区二区三区在线看| 日韩欧美一区二区免费| 久久一区二区三区国产精品| 日韩久久一区二区| 日韩中文字幕不卡| 国产不卡免费视频| 亚洲福利视频一区二区| 精品综合免费视频观看| 国产成人精品亚洲午夜麻豆| 一本高清dvd不卡在线观看| 91精品国产综合久久久久久| 久久色.com| 天堂在线一区二区| 国产成人免费视频| 欧美日韩黄色一区二区| 久久久久综合网| 天堂一区二区在线| 99久久精品国产毛片| 日韩视频国产视频| 久久蜜桃一区二区| 亚欧色一区w666天堂|