This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
egcs-19991004: ICE on SPARC Linux
- To: gcc-bugs at gcc dot gnu dot org
- Subject: egcs-19991004: ICE on SPARC Linux
- From: Horst von Brand <vonbrand at inf dot utfsm dot cl>
- Date: Tue, 05 Oct 1999 11:14:35 -0400
The following gets an signal 11 in cc1. It was chainsawed to size from
drivers/sbus/char/zs.c in linux-2.2.13pre15. Compile with gcc -O and watch
the fireworks:
extern __inline__ void setipl(unsigned long __orig_psr)
{
__asm__ __volatile__(""
:
: "r" (__orig_psr)
: "memory", "cc");
}
struct tq_struct {
};
typedef struct tq_struct * task_queue;
extern __inline__ void queue_task(struct tq_struct *bh_pointer)
{
unsigned long flags;
flags = 117;
setipl(flags);
}
struct tty_flip_buffer {
struct tq_struct tqueue;
};
struct tty_struct {
struct tty_flip_buffer flip;
};
struct sun_serial {
struct sun_serial *zs_next;
struct tty_struct *tty;
};
static inline void receive_chars(struct sun_serial *info)
{
struct tty_struct *tty = info->tty;
queue_task(&tty->flip.tqueue);
}
void zs_interrupt(int irq, void *dev_id)
{
struct sun_serial *info = (struct sun_serial *)0x12345;
unsigned char zs_intreg;
zs_intreg = irq;
if (zs_intreg == 0x0c ) {
receive_chars(info);
return;
}
if(zs_intreg == 0x04 ) {
receive_chars(info->zs_next);
return;
}
info = info->zs_next->zs_next;
}