Hello,
Thanks for your suggestion, tried objconv, but it seems to strip debug symbols...
Any other ideas are appreciated.
Thanks
Ajit
1. generate elf format with debug information
bin/nasm -felf -Fstabs hello_asm_func.asm -l hello_asm_func.lst
2. use objconv to convert back to osx format
bin/objconv -fmac32 -nu hello_asm_func.o test.o
Input file: hello_asm_func.o, output file: test.o
Converting from ELF32 to Mach-O Little Endian32
Adding leading underscores to symbol names
2 Debug sections removed
0 Exception sections removed
1 Changes in leading underscores on symbol names3. objconv message
3. asm sample code used
section .text
global _hello_asm ;must be declared for linker (ld)
_syscall:
int 0x80 ;system call
ret
_hello_asm: ;entry point for linker
push ebp ;save callers stack
mov ebp, esp ;establish new stack frame
push esi ;save critical registers
push edi
push dword len ;message length
push dword msg ;message to write
push dword 1 ;file descriptor (stdout)
mov eax,0x4 ;system call number (sys_write)
call _syscall ;call kernel
pop edi ;restore registers
pop esi
mov esp, ebp
pop ebp ;clean up stack
ret
section .data
msg db "hello from asm!",0xa ;message
len equ $ - msg ;length of message
4. c code to call asm
#include <stdio.h>
extern "C" {
extern void hello_asm();
}
int main( int argc, char *argv[])
{
printf("start calling asm\n");
hello_asm();
printf("done calling asm\n");
return 0;
}