PFYvv 代表什么? (不是 PFvv!)
What does PFYvv stands for? (not PFvv!)
我正在尝试 link 一个符号的文件,其中包含来自 header 的损坏的生成文件。
(将 ROM 定位功能与 RAM 定位功能相匹配。)
在 .sym 中我有一个带有“PFvv”参数的函数,
通常分解为 -> VOID (fn*)(VOID).
编译器生成以下输出作为参数:PFYvv
结果:linker 没有 link。
问题:
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);
};
POST-ANSWER 代码:
以下是生成 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
};
显然,the ARM ABI is based on the more common Itanium ABI(链接文档中列举了一些修改)。
所以我们对您的 "pointer to function" 类型进行了 over there… and discover that the Y
comes from the <function-type>
production 处理,并进行了如下解释:
A "Y" prefix for the bare function type encodes extern "C" in implementations which distinguish between function types with "C" and "C++" language linkage. This affects only type mangling, since extern "C" function objects have unmangled names.
至于你是否有这些实现之一(我的意思是一般情况下;显然你的就是其中之一),this answer值得一读。
我正在尝试 link 一个符号的文件,其中包含来自 header 的损坏的生成文件。 (将 ROM 定位功能与 RAM 定位功能相匹配。)
在 .sym 中我有一个带有“PFvv”参数的函数, 通常分解为 -> VOID (fn*)(VOID).
编译器生成以下输出作为参数:PFYvv
结果:linker 没有 link。
问题:
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);
};
POST-ANSWER 代码:
以下是生成 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
};
显然,the ARM ABI is based on the more common Itanium ABI(链接文档中列举了一些修改)。
所以我们对您的 "pointer to function" 类型进行了 over there… and discover that the Y
comes from the <function-type>
production 处理,并进行了如下解释:
A "Y" prefix for the bare function type encodes extern "C" in implementations which distinguish between function types with "C" and "C++" language linkage. This affects only type mangling, since extern "C" function objects have unmangled names.
至于你是否有这些实现之一(我的意思是一般情况下;显然你的就是其中之一),this answer值得一读。