gcc optimization

Question about which tools to use, bugs, the best way to implement a function, etc should go here. Don't forget to see if your question is answered in the wiki first! When in doubt post here.
Post Reply
User avatar
mcheung63
Member
Member
Posts: 175
Joined: Thu Jun 22, 2006 8:33 am
Location: Hong Kong
Contact:

gcc optimization

Post by mcheung63 »

void setGDTR(char *gdt, unsigned short numberOfGDTDescriptor) {
char gdtr[6];
memset(gdtr, 0, 6);
if (numberOfGDTDescriptor < 8192) {
if (numberOfGDTDescriptor == 0) {
*(unsigned short *)gdtr = (unsigned short) 0; //gdtr's limit is 8N-1
} else {
*(unsigned short *)gdtr = (unsigned short) (8 * numberOfGDTDescriptor)
- 1; //gdtr's limit is 8N-1
}
*(unsigned int *) (gdtr + 2) = gdt;
__asm__ __volatile__("lgdt (%%eax)"::"a"(gdtr));
}
}

GCC thinks I haven't used the gdtr variable, so all the line with gdtr will be be compiled into instruction code. May I know how to fix it?

thanks
from Peter ([email protected])
frank
Member
Member
Posts: 729
Joined: Sat Dec 30, 2006 2:31 pm
Location: East Coast, USA

Re: gcc optimization

Post by frank »

Maybe try

Code: Select all

-O0
User avatar
01000101
Member
Member
Posts: 1599
Joined: Fri Jun 22, 2007 12:47 pm
Contact:

Re: gcc optimization

Post by 01000101 »

this may give GCC the hint:

Code: Select all

*(volatile unsigned short *)gdtr =
User avatar
gravaera
Member
Member
Posts: 737
Joined: Tue Jun 02, 2009 4:35 pm
Location: Supporting the cause: Use \tabs to indent code. NOT \x20 spaces.

Re: gcc optimization

Post by gravaera »

Yup. 01000101 beat me to it. Whenever GCC engages in folly, I just volatile that ho (Ohhhh). ;)
17:56 < sortie> Paging is called paging because you need to draw it on pages in your notebook to succeed at it.
User avatar
mcheung63
Member
Member
Posts: 175
Joined: Thu Jun 22, 2006 8:33 am
Location: Hong Kong
Contact:

Re: gcc optimization

Post by mcheung63 »

thanks gentlemen
Post Reply