看linux0.12内核遇到个很奇怪的赋值,求教用意.

出自linux/kernel/signal.c
C/C++ code

int sys_sigsuspend(int restart, unsigned long old_mask, unsigened long set)
{
  extern int sys_pause(void);
  
  if (restart) {
    current->blocked = old_mask;
    return -EINTR;
  }
  
  *(&restart) = 1;
  *(&old_mask) = current->blocked;
  current->blocked = set;
  (void) sys_pause();
  return -ERESTARTNOINIR;
}



上面 
*(&restart) = 1;
*(&old_mask) = current->blocked;
这2个干巴巴的指针操作让我很奇怪,在内核代码中难道能起到啥特别作用么?望高手解答.

作者: geine007   发布时间: 2011-05-09

给参数赋值过后貌似没有使用,看不懂。做个记号

作者: yuanlulu   发布时间: 2011-05-09

实在不清楚这个用法的用意,而且参数的传递不是指针传递,在进入函数的时候,参数是会被复制的.这里怎么修改都不可能修改到函数调用之前压栈的内容啊.

作者: geine007   发布时间: 2011-05-09