I have a set of assembly function which I want to use in C programs by creating a header file. For instance, if I have asm_functions.s which defines the actual assembly routines and asm_functions.h which has prototypes for the functions as well as some standard #define's I needed. My goal is to use a C program, say test_asm.c to call the assembly functions. asm__functions.h:
#define ASM_CONST_1 0x80 #define ASM_CONST_2 0xafasm__functions.s:uint8_t asm_foo( int, int, int );
/* dont need this: #include "asm_functions.h" */test__asm.c: #include "asm_foo.h".section .text .type asm_foo, @function asm__foo: /* asm code with proper stack manipulation for C calling conventions */ ret
int main()
In a situation like this what would be the proper way to compile a link the program? I was trying something like this:
gas -o asm_foo.o asm_foo.s gcc -o test_asm test_asm.c
But I still get a linker error from GCC saying that my assembly routine is undefined. I hope this contrived example is good enough to explain the situation. Thanks! EDIT: Here is a snippet of output when I compile with a single command:
tja@tja-desktop:~/RIT/SP2/latest$ gcc -o test_pci pci_config.s test_pci.c /tmp/ccY0SmMN.o: In function _pci_bios_read_byte': (.text+0x8): undefined reference to
PCI_FUNCTION_ID' /tmp/ccY0SmMN.o: In function _pci_bios_read_byte': (.text+0xa): undefined reference to
READ_CONFIG_BYTE' /tmp/ccY0SmMN.o: In function _pci_bios_read_byte': (.text+0x18): undefined reference to
PCI_BIOS_FUNCTION_INT' /tmp/ccY0SmMN.o: In function _pci_bios_read_byte': (.text+0x1b): undefined reference to
BAD_REGISTER_NUMBER' /tmp/ccY0SmMN.o: In function _pci_bios_read_word': (.text+0x30): undefined reference to
PCI_FUNCTION_ID' .
All of those, such as PCI_FUNCTION_ID, are defined in my header file, which is included by the C program. When I compile the assembly code by itself there are no errors.