Я пытаюсь связать файл символа с искаженными сгенерированными из заголовка. (сопоставление функций, расположенных в ПЗУ, с функциями в ОЗУ.)
В .sym у меня есть функция с параметром "PFvv", обычно деманглированная на -> VOID (fn*)(VOID).
Вместо этого компилятор выдает в качестве параметра следующий вывод: PFYvv
Результат: компоновщик не связывается.
Вопросы:
Что означает Y? Есть ли справочный документ по искажению ARM?
.sym искаженное имя:
_ZN10CCasd15lolEP13strPcPFvvEhPvm
сгенерированное компилятором имя:
_ZN10CCasd15lolEP13strPcPFYvvEhPvm
.h определение
class CCasd{
static int lol(in_str*h, char* name, void(*fn)(void), unsigned char p, void *s, unsigned long l);
};
КОД ОТВЕТА ПОСЛЕ:
Вот как вы можете сгенерировать искаженные имена PFvv и PFYvv:
#ifdef __cplusplus
extern "C" { /* C declarations in C++ */
#endif
class CCASD {
public:
static int lol(in_str*h, char* name, void(*fn)(void), unsigned char p, void *s, unsigned long l);//Will be PFYvv
};
#ifdef __cplusplus
} /* End of C declarations */
#endif
class CCASD {
public:
static int lol(in_str*h, char* name, void(*fn)(void), unsigned char p, void *s, unsigned long l);//Will be PFvv
};