OSDev.org https://forum.osdev.org/ |
|
need help with inline assembly https://forum.osdev.org/viewtopic.php?f=1&t=33166 |
Page 1 of 1 |
Author: | ITchimp [ Fri Sep 07, 2018 6:57 pm ] |
Post subject: | need help with inline assembly |
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? |
Author: | Brendan [ Fri Sep 07, 2018 7:44 pm ] |
Post subject: | Re: need help with inline assembly |
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 |
Author: | iansjack [ Sat Sep 08, 2018 1:30 am ] |
Post subject: | Re: need help with inline assembly |
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. |
Author: | ITchimp [ Sat Sep 08, 2018 6:32 pm ] |
Post subject: | Re: need help with inline assembly |
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? |
Page 1 of 1 | All times are UTC - 6 hours |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |