Mail Archives: djgpp/1998/11/17/22:58:25
------ =_NextPart_000_01BE1264.A6C4D6A0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
Hi Eli,
Help needed.
I wrote C code with inline assembly. It accesses control registers CR0 =
and CR3. The code is as shown after this message. The problem is that it =
runs under WINDOWS DOS environment but fails when runs under pure DOS =
environment with error message "Exiting due to signal SIGSEGV, General =
Protection Fault at eip=3D........". I use djgcc version 2.1 and =
compiled the code with " gcc -fomit-frame-pointer -m386 -Wall ". =
Inside the code, I intentionally created v_test0 and v_test3 =
corresponding to v_getCR0 and v_getCR3 respectively with minor changes. =
In DOS environment, v_test0 and v_test3 went through but failed when =
v_getCR0 is encountered. Any idea? By the way the processor is a =
Pentium-s 166.
Thanks,
Jay
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D
#include <stdio.h>
unsigned long result=3D0;
void=20
v_test0()
{
__asm__ __volatile__
(
"movl $0x11111111, %eax\n"
"movl %eax, _result\n"
);
return;
}
void=20
v_getCR0()
{
__asm__ __volatile__
(
"movl %cr0, %eax\n"
"movl %eax, _result\n"
);
return;
}
void
v_test3()
{
asm volatile
(
"movl $0x22222222, %0\n"
: "=3Db" (result)
:=20
: "%ebx" , "memory"
);
return;
}
void
v_getCR3()
{
asm volatile
(
"movl %%cr3, %0\n"
: "=3Db" (result)
:=20
: "%ebx" , "memory"
);
return;
}
#define disable() __asm__ __volatile__ ("cli");
void main()
{
=20
disable();
v_test0();
printf("result=3D0x%x\n", result);
v_test3();
printf("result=3D0x%x\n", result);
v_getCR0();
printf("result=3Dcr0=3D0x%x\n", result);
v_getCR3();
printf("result=3Dcr3=3D0x%x\n", result);
return;
}
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
=20
------ =_NextPart_000_01BE1264.A6C4D6A0
Content-Type: application/octet-stream; name="junk.c"
Content-Transfer-Encoding: base64
I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCnVuc2lnbmVkIGxvbmcgcmVzdWx0PTA7DQoNCg0Kdm9pZCAN
CnZfdGVzdDAoKQ0Kew0KDQoJX19hc21fXyBfX3ZvbGF0aWxlX18NCgkoDQoJICJtb3ZsICQweDEx
MTExMTExLCAlZWF4XG4iDQoJICJtb3ZsICVlYXgsIF9yZXN1bHRcbiINCgkpOw0KCXJldHVybjsN
Cn0NCnZvaWQgDQp2X2dldENSMCgpDQp7DQoNCglfX2FzbV9fIF9fdm9sYXRpbGVfXw0KCSgNCgkg
Im1vdmwgJWNyMCwgJWVheFxuIg0KCSAibW92bCAlZWF4LCBfcmVzdWx0XG4iDQoJKTsNCglyZXR1
cm47DQp9DQoNCnZvaWQNCnZfdGVzdDMoKQ0Kew0KDQoJYXNtIHZvbGF0aWxlDQoJKA0KCSAibW92
bCAkMHgyMjIyMjIyMiwgJTBcbiINCgkgOiAiPWIiIChyZXN1bHQpDQoJIDogDQoJIDogIiVlYngi
ICwgIm1lbW9yeSINCgkpOw0KCXJldHVybjsNCn0NCnZvaWQNCnZfZ2V0Q1IzKCkNCnsNCg0KCWFz
bSB2b2xhdGlsZQ0KCSgNCgkgIm1vdmwgJSVjcjMsICUwXG4iDQoJIDogIj1iIiAocmVzdWx0KQ0K
CSA6IA0KCSA6ICIlZWJ4IiAsICJtZW1vcnkiDQoJKTsNCglyZXR1cm47DQp9DQoNCiNkZWZpbmUg
ZGlzYWJsZSgpIF9fYXNtX18gX192b2xhdGlsZV9fICgiY2xpIik7DQoNCg0KDQp2b2lkIG1haW4o
KQ0Kew0KICAgDQoJZGlzYWJsZSgpOw0KCXZfdGVzdDAoKTsNCglwcmludGYoInJlc3VsdD0weCV4
XG4iLCByZXN1bHQpOw0KCXZfdGVzdDMoKTsNCglwcmludGYoInJlc3VsdD0weCV4XG4iLCByZXN1
bHQpOw0KCXZfZ2V0Q1IwKCk7DQoJcHJpbnRmKCJyZXN1bHQ9Y3IwPTB4JXhcbiIsIHJlc3VsdCk7
DQoJdl9nZXRDUjMoKTsNCglwcmludGYoInJlc3VsdD1jcjM9MHgleFxuIiwgcmVzdWx0KTsNCg0K
CXJldHVybjsNCg0KfQ0KDQo=
------ =_NextPart_000_01BE1264.A6C4D6A0--
- Raw text -