[英]Two mangled names demangling to the same function signature
I have a spidermonkey library that exports the following mangled symbol fora function JS_DefineProperty
: 我有一个Spidermonkey库,它为函数
JS_DefineProperty
导出以下损坏的符号:
_Z17JS_DefinePropertyP9JSContextP8JSObjectPKcN2JS5ValueEPFiS0_NS5_6HandleIS2_EENS7_I4jsidEENS5_13MutableHandleIS6_EEEPFiS0_S8_SA_iSC_Ej
When I try to compile a file that uses this function, the external reference is compiled as: 当我尝试编译使用此功能的文件时,外部引用被编译为:
_Z17JS_DefinePropertyP9JSContextP8JSObjectPKcN2JS5ValueEPFiS0_NS5_6HandleIS2_EENS7_IlEENS5_13MutableHandleIS6_EEEPFiS0_S8_S9_iSB_Ej
The end of the name is slightly different between the two. 两者的名称末尾略有不同。 I ran both through a name demangler and they both come out to the same signature:
我都经过一个名字分解器,它们都具有相同的签名:
JS_DefineProperty(JSContext*, JSObject*, char const*, JS::Value, int (*)(JSContext*, JS::Handle, JS::Handle, JS::MutableHandle), int (*)(JSContext*, JS::Handle, JS::Handle, int, JS::MutableHandle), unsigned int)
So I'm a little stumped as to what the difference is. 所以我对其中的区别有些困惑。 I believe both versions were compiled using
g++ 4.7
. 我相信两个版本都是使用
g++ 4.7
编译的。 Can anyone decode the extra difference in the name, so I can investigate further? 任何人都可以解码名称中的其他差异,以便我进一步调查吗?
There is in fact a difference between the two. 实际上,两者之间是有区别的。
_Z17JS_DefinePropertyP9JSContextP8JSObjectPKcN2JS5ValueEPFiS0_NS5_6HandleIS2_EENS7_I4jsidEENS5_13MutableHandleIS6_EEEPFiS0_S8_SA_iSC_Ej
demangles to : _Z17JS_DefinePropertyP9JSContextP8JSObjectPKcN2JS5ValueEPFiS0_NS5_6HandleIS2_EENS7_I4jsidEENS5_13MutableHandleIS6_EEEPFiS0_S8_SA_iSC_Ej
为:
JS_DefineProperty(JSContext*, JSObject*, char const*, JS::Value, int (*)(JSContext*, JS::Handle<JSObject*>, JS::Handle<jsid>, JS::MutableHandle<JS::Value>), int (*)(JSContext*, JS::Handle<JSObject*>, JS::Handle<jsid>, int, JS::MutableHandle<JS::Value>), unsigned int)
_Z17JS_DefinePropertyP9JSContextP8JSObjectPKcN2JS5ValueEPFiS0_NS5_6HandleIS2_EENS7_IlEENS5_13MutableHandleIS6_EEEPFiS0_S8_S9_iSB_Ej
demangles to : _Z17JS_DefinePropertyP9JSContextP8JSObjectPKcN2JS5ValueEPFiS0_NS5_6HandleIS2_EENS7_IlEENS5_13MutableHandleIS6_EEEPFiS0_S8_S9_iSB_Ej
为:
JS_DefineProperty(JSContext*, JSObject*, char const*, JS::Value, int (*)(JSContext*, JS::Handle<JSObject*>, JS::Handle<long>, JS::MutableHandle<JS::Value>), int (*)(JSContext*, JS::Handle<JSObject*>, JS::Handle<long>, int, JS::MutableHandle<JS::Value>), unsigned int)
Where the former is using JS::Handle<jsid>
, the latter is using JS::Handle<long>
. 前者使用
JS::Handle<jsid>
,后者则使用JS::Handle<long>
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.