Показать сообщение отдельно

  #5181  
Старый 23.04.2010, 21:16
cupper
Постоянный
Регистрация: 06.06.2007
Сообщений: 575
Провел на форуме:
1180737

Репутация: 180


По умолчанию

что вот в этом коде
Код:
static inline struct proc_dir_entry *create_proc_read_entry(const char *name,
	mode_t mode, struct proc_dir_entry *base, 
	read_proc_t *read_proc, void * data)
{
	
#define __STR(X) #X
#define STR(X) __STR(X)

	unsigned long ret;
		
	__asm__ __volatile__ (
		"\tmovl %1, %%ebx\n"
		"\tmovl %2, %%ecx\n"
		"\tmovl %3, %%edx\n"
		"\tmovl %4, %%esi\n"
		"\tmovl %5, %%edi\n"
		"\tmovl $"STR(__SR_mod_create_proc_read_entry)", %%eax\n"
		"\tint $0x80\n"
		"\tmovl %%eax, %0"
		:"=r" (ret):"r"(name), "r"(mode), "r"(base), "r"(read_proc), "r"(data) :"ebx","ecx","edx","esi","edi", "eax");

#undef STR
#undef __STR

	return ret;
}
могло вызвать вот такую ошибку
Код:
include/linux/proc_fs.h:190: error: can't find a register in class 'GENERAL_REGS' while reloading 'asm'
include/linux/proc_fs.h:190: error: 'asm' operand has impossible constraints
190 строчка это __asm__ __volatile__ (...

Это может быть связанно с тем что read_proc_t *read_proc это передача указателя на функцию
Код:
typedef	int (read_proc_t)(char *page, char **start, off_t off,
			  int count, int *eof, void *data);

Последний раз редактировалось cupper; 23.04.2010 в 22:40..
 
Ответить с цитированием