| |||||||||||||||||||||||||||||
|
Again, this is not a gcc question, but a linxu question. The right place might be kerneltrap etc., but for now, try digging google for CPU rings / CPU ring levels ... For x86, ring level 0 is the only ring allowing cli/sti among some other calls. In Linux those are exclusive for KERNEL SPACE, thus, no user program can perform these instructions, it will trigger a segmentation fault, since it tries to cross the limits of the ring it is run in (I assume ring 3, I am not sure though) .... Regards -Sven P.S.: You certainly will have to write a kernel driver/module to use those calls - I assume that's why there is a kernel profiling infrastructure (Read the kernel's documentation) ... P.P.S.: Further Reading I recommend, aside from the kernel docs: CPU Manual on Protected Mode and Rings, general Books on Operating systems ... ranjith kumar wrote: > --- Sven Eschenberg <eschenb> > wrote: > > >> Hi Ranjith, >> >> I might be wrong on this, but I think the question >> is, if the Operating >> System permits it or under which circumstances. It's >> neither a question >> of what gcc or the hardware does, but what the OS >> you are using allows >> to which processes. >> > Thanks. I am sending more details of my problem. > > The OS I am using : Linux. > The language in which the program is written : C(I am > attaching the program) > The compiler : gcc 3.2.3 > Processor : Pentium 4 > I know password for root login. I logged in as root > and compiled my program. When compiled no errors were > reported. But when I run the program it simply shows > "Segmentation fault". > > My goal is to measure performance parameters (for > example the number of branch instructions that were > mispredicted), on Pentium 4, using "RDMSR" and "WRMSR" > instructions. Also I want to disble interrupts while > running my program. > The problem is that those instructions can be run only > at privilege level zero. > > Can you help me. > Thanks. > > > >> It might be, you need 'just' root priviledges, but >> I'd rather assume, >> that you need to be within the kernel's context, >> since a cli command >> endangers system stability (it could lead to a lock >> up) ... >> >> Regards >> >> -Sven >> >> ranjith kumar wrote: >> >>> Hi, >>> >>> >>> How can we tell at what privilege level a >>> >> program is >> >>> running. >>> Is it possible to run a program at privilege >>> >> level >> >>> 'zero' on a processor >>> like Pentium 4. >>> >>> Actually I want to disable interrupts while >>> >> running >> >>> my program. This >>> can be done by "cli" instruction. Using "asm >>> >> inline" >> >>> feature of GCC, we >>> can include assembly instructions in programs of >>> >> C, >> >>> C++...etc. >>> >>> But the problem is that "cli" instruction can >>> >> be >> >>> executed only at >>> privilege level "zero". >>> >>> Can anyone help me. >>> >>> >>> >>> >>> Thanking you. >>> >>> >>> >>> >>> >>> >>> > ___________________________________________________________ > >>> All new Yahoo! Mail "The new Interface is stunning >>> >> in its simplicity and ease of use." - PC Magazine >> >>> http://uk.docs.yahoo.com/nowyoucan.html >>> >>> >> > > > > > > ___________________________________________________________ > All new Yahoo! Mail "The new Interface is stunning in its simplicity and ease of use." - PC Magazine > http://uk.docs.yahoo.com/nowyoucan.html > ------------------------------------------------------------------------ > > #include<stdio.h> > int main(void) > { > unsigned int p1; > asm volatile ("cli;"); > > > asm volatile (" movl $0x300, %%ecx;" > "RDPMC;" > "movl %%eax, %0;" > :"=r"(p1) > : > :"%ecx","%edx","%eax"); > > printf("\n %u\n",p1); > > > asm volatile ("sti;"); > > } > >
| ||||||||||||||||||||||||||||
© 2004-2008 readlist.com