need help with inline assembly

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
ITchimp
Member
Member
Posts: 134
Joined: Sat Aug 18, 2018 8:44 pm

need help with inline assembly

Post by ITchimp »

I got a simple procedure to get the instruction pointer value

unsigned long long getRIP(){
unsigned long long l1=0LL;
asm("movq %%rip, %0":"=r"(l1));
return l1;
//return -1ULL;
}

gcc gives me the error message

testRIP.c: Assembler messages:
testRIP.c:5: Error: operand type mismatch for `movq'

my thought is that rip is s 64 bit value... define unsigned long long should be a 64 bit value...
so where ishte operand type mismatch from?
User avatar
Brendan
Member
Member
Posts: 8561
Joined: Sat Jan 15, 2005 12:00 am
Location: At his keyboard!
Contact:

Re: need help with inline assembly

Post by Brendan »

Hi,
ITchimp wrote:I got a simple procedure to get the instruction pointer value

unsigned long long getRIP(){
unsigned long long l1=0LL;
asm("movq %%rip, %0":"=r"(l1));
return l1;
//return -1ULL;
}

gcc gives me the error message

testRIP.c: Assembler messages:
testRIP.c:5: Error: operand type mismatch for `movq'

my thought is that rip is s 64 bit value... define unsigned long long should be a 64 bit value...
so where ishte operand type mismatch from?
The "MOV" instruction only works with general purpose registers, and RIP isn't considered a general purpose register. To do what you want you'd need to use RIP relative addressing and LEA.

I don't know what the syntax is for AT&T/GAS, but maybe something like "lea $0(%%rip), %0" might work.


Cheers,

Brendan
For all things; perfection is, and will always remain, impossible to achieve in practice. However; by striving for perfection we create things that are as perfect as practically possible. Let the pursuit of perfection be our guide.
User avatar
iansjack
Member
Member
Posts: 4706
Joined: Sat Mar 31, 2012 3:07 am
Location: Chichester, UK

Re: need help with inline assembly

Post by iansjack »

I'm intrigued as to why you want to find the value of the instruction pointer within the subroutine. I can see why you might want the value at the point that the routine is called but not why you want the value within a utility routine.
ITchimp
Member
Member
Posts: 134
Joined: Sat Aug 18, 2018 8:44 pm

Re: need help with inline assembly

Post by ITchimp »

I was reading Tannenbaum's OS book, in which he mentioned that p-thead and MACH os's C thread... both package does user space threading... I was thinking ... how do you transfer control among those user level threads.... do you have any scheduling mechanism among the thread groups that share the same process?
Also I am wondering if user level thread aforementioned is related to co-routines in Go?
Post Reply