I'm trying to convert some 32 bit linked asm (which runs fine)
into 64 bit inline asm (g++) but am stumbling at the first hurdle
ie I'm getting -14 returned as the file descriptor for /dev/vcsa1.
Here's my attempt.
[code]
//My amd64 inline asm version
#include<iostream>
using namespace std;
void my_fn(){
const char * fl = "/dev/vcsa1";
const char * test_str = " "; //make same size as fl
int test_int = -1; //ie initialised to fail unless replaced by value
//1 open /dev/vcsa1& return file descriptor in rax
__asm__ __volatile__(
".equ sys_open, 2\n"
".equ O_RDWR, 02\n"
"mov $sys_open, %%rax\n"
"mov $O_RDWR, %%rcx\n"
"mov $0600, %%rdx\n" //read/write for user in x86. Not sure for AMD64?
"syscall\n"
:"=b"(test_str), "=a"(test_int)
:"b"(fl)
);
//test file name in rbx and returned file descriptor
cout<< test_str<< endl; // /dev/vcsa1 pass
cout<< test_int<< endl; // 2 before syscall -14 after ie fail
}
int main(){
my_fn();
return 0;
}
[/code]
I'd be grateful if someone could tell me where I'm going wrong.