Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 21 Jan 2006 20:26:41 GMT
From:      Tanaka Akira <akr@m17n.org>
To:        freebsd-gnats-submit@FreeBSD.org
Subject:   misc/92110: setcontext restore the carry flag
Message-ID:  <200601212026.k0LKQfk1097826@www.freebsd.org>
Resent-Message-ID: <200601212030.k0LKU41a038440@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         92110
>Category:       misc
>Synopsis:       setcontext restore the carry flag
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Sat Jan 21 20:30:03 GMT 2006
>Closed-Date:
>Last-Modified:
>Originator:     Tanaka Akira
>Release:        FreeBSD 5.4
>Organization:
AIST
>Environment:
FreeBSD freebsd54.vmw 5.4-RELEASE FreeBSD 5.4-RELEASE #0: Sun May  8 10:21:06 UTC 2005     root@harlow.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC  i386

>Description:
On Pentium, getcontext saves EFLAGS and setcontext restores it.
When CF is set in EFLAGS, setcontext treats it as an system call error.

>How-To-Repeat:
% cat t.c
#include <stdlib.h>
#include <stdio.h>
#include <ucontext.h>

ucontext_t c;
int first;

volatile int carry_set;

int main()
{
  first = 1;

  carry_set = ~0;
  carry_set += 1;
  if (getcontext(&c) != 0) {
    perror("getcontext");
    exit(1);
  }

  printf("first:%d\n", first);

  if (first == 0)
    exit(0);

  first = 0;

  if (setcontext(&c) != 0) {
    perror("setcontext");
    exit(1);
  }

  printf("setcontext returns\n");
  exit(1);
}

% gcc -march=pentium4 t.c      
% ./a.out 
first:1
setcontext: Unknown error: 0

If "carry_set += 1" is changed to "carry_set -= 1", it works fine:

% ./a.out 
first:1
first:0

>Fix:
              
>Release-Note:
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200601212026.k0LKQfk1097826>