Mail Archives: djgpp/2003/09/26/18:30:51
X-Authentication-Warning: | delorie.com: mail set sender to djgpp-bounces using -f
|
From: | "Jarek Pelczar" <spideros1 AT wp DOT pl>
|
Newsgroups: | comp.os.msdos.djgpp
|
Subject: | internal compiler error: Segmentation violation
|
Date: | Sat, 27 Sep 2003 00:20:06 +0200
|
Organization: | tp.internet - http://www.tpi.pl/
|
Lines: | 79
|
Message-ID: | <bl2e3k$6t4$1@atlantis.news.tpi.pl>
|
NNTP-Posting-Host: | pa92.krosno.cvx.ppp.tpnet.pl
|
X-Trace: | atlantis.news.tpi.pl 1064614837 7076 213.77.216.92 (26 Sep 2003 22:20:37 GMT)
|
X-Complaints-To: | usenet AT tpi DOT pl
|
NNTP-Posting-Date: | Fri, 26 Sep 2003 22:20:37 +0000 (UTC)
|
X-Priority: | 3
|
X-MSMail-Priority: | Normal
|
X-Newsreader: | Microsoft Outlook Express 6.00.2600.0000
|
X-MimeOLE: | Produced By Microsoft MimeOLE V6.00.2600.0000
|
To: | djgpp AT delorie DOT com
|
DJ-Gateway: | from newsgroup comp.os.msdos.djgpp
|
Reply-To: | djgpp AT delorie DOT com
|
test.c: In function `flush_thread':
test.c:52: internal compiler error: Segmentation violation
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://gcc.gnu.org/bugs.html> for instructions.
/*
test.c ---------------------------------------------------------------------
--------- */
#define NULL ((void *)0)
#define NR_TASKS 512
#define _set_tssldt_desc(n,addr,limit,type) \
__asm__ __volatile__ ("movw $" #limit ",%1\n\t" \
"movw %w0,%2\n\t" \
"rorl $16,%0\n\t" \
"movb %b0,%3\n\t" \
"movb $" type ",%4\n\t" \
"movb $0x00,%5\n\t" \
"movb %h0,%6\n\t" \
"rorl $16,%0" \
: /* no output */ \
:"r" (addr+0xc0000000), "m" (*(n)), "m" (*(n+2)), "m" (*(n+4)), \
"m" (*(n+5)), "m" (*(n+6)), "m" (*(n+7)) \
)
#define set_tss_desc(n,addr) _set_tssldt_desc(((char *)
(n)),((int)(addr)),235,"0x89")
#define set_ldt_desc(n,addr,size) \
_set_tssldt_desc(((char *) (n)),((int)(addr)),((size << 3) - 1),"0x82")
char default_ldt[8];
struct {
long a,b;
} gdt[256];
struct {
char * ldt;
long debugreg[10];
} * current,* task[NR_TASKS];
#define FIRST_LDT_ENTRY 10
void flush_thread(void)
{
int i;
if (current->ldt) {
free_page((unsigned long) current->ldt);
current->ldt = NULL;
for (i=1 ; i<NR_TASKS ; i++) {
if (task[i] == current) {
set_ldt_desc(gdt+(i<<1)+
FIRST_LDT_ENTRY,&default_ldt, 1);
load_ldt(i);
}
}
}
for (i=0 ; i<8 ; i++)
current->debugreg[i] = 0;
}
/* -------------------------------------------------------------------------
----- */
Compilation flags:
gcc -O2 -fomit-frame-pointer test.c -S
gcc -v dump:
Reading specs from c:/djgpp/lib/gcc-lib/djgpp/3.3/specs
Configured with: /devel/gnu/gcc/3.3/gnu/gcc-3.3/configure
i586-pc-msdosdjgpp --prefix=/dev/env/DJDIR --disable-nls
Thread model: single
gcc version 3.3
- Raw text -