syscalls.h
enum Syscall {
OPEN_FILE,
READ_FILE,
CLOSE_FILE
};
syscalls.s
extern WRITE_TO_SCREEN
global write_to_screen
write_to_screen:
mov eax, WRITE_TO_SCREEN
mov ebx, [esp+4]
int 0x80
ret
给我这个错误:
stdlib/syscalls.o: In function `write_to_screen':
stdlib/syscalls.s:(.text+0x1): undefined reference to `WRITE_TO_SCREEN'
make: *** [kernel.elf] Error 1
答案 0 :(得分:4)
没有没有。
你可以这样做:
#ifdef __ASSEMBLER__
#define ENUM_START
#define ENUM_VALUE(key,value) .equ key,value
#define ENUM_END(typename)
#else
#define ENUM_START typedef enum{
#define ENUM_VALUE(key,value) key=value,
#define ENUM_END(typename)} typename;
#endif
#include "enum_support.h"
ENUM_START
ENUM_VALUE(OPEN_FILE,0)
ENUM_VALUE(READ_FILE,1)
ENUM_VALUE(CLOSE_FILE,2)
ENUM_END(Syscall)
然后让test.c
和test.s
包含syscalls.h
gcc -c test.c
gcc -c test.s
不确定它是否非常有用,但我不知道任何其他方式来共享枚举(在装配中不存在)。
您可以cpp test.c
或cpp -D__ASSEMBLER__ test.s
查看已发出的代码。