regarding privilege levels of pentium 4

Sven Eschenberg eschenb@cs.uni-frankfurt.de
Sat Sep 30 22:32:00 GMT 2006


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@cs.uni-frankfurt.de>
> 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;");
>
> }
>
>   



More information about the Gcc-help mailing list