glibc 2.0.7 POSIX signals, I/O blocking & egcs 1.1b

Frederick A Niles (Rick)
Wed Nov 11 15:21:00 GMT 1998

I understand this may be completely a glibc problem, but 
could you please look at it.  I can gladly send along the
assembly for a "good" version and a "bad" version.  But I
sort of assume this has been seen before.

(details see below)

	Rick Niles.

 * Runtime Segmentation fault.
 * This is a bug involving the POSIX signal system calls and a
 * character buffer.  System: Linux 2.1.127/glibc 2.0.7/egcs 1.1b.
 * Attempt to reproduce the fault by running this and then hitting C-c
 * to cause a SIGINT to happen. It seems to be a compiler issue since
 * the existance of 'buf' is required for the fault to happen.
 * Rick Niles <>

#define _POSIX_SOURCE 1  
#include <stdio.h>
#include <signal.h>

void callback(/*@unused@*/ int i) { }

/* Main */
main(int argc, char *argv[])
   * If this declaration of this character buffer is moved or
   * removed the bug goes away.  Also, size 8 is okay, but 9 is not.
  char buf[9]; 
  /* The bug only happen with POSIX style signals */
  struct sigaction act, oact;
  act.sa_handler = callback;
  (void) sigemptyset(&(act.sa_mask)); 
  (void) sigaction(SIGINT,  &act, &oact);
  signal(SIGINT, callback);  /* <-- This version will not fault */

  /* Insert any blocking system call here. */
  /* Then hit C-c to trigger a SIGINT */
    char c = getchar(); 

  return 0;

More information about the Gcc-bugs mailing list