falkTX wrote:well it's your plugin and you have the code for both the host and plugin..
if there's a change I need to make let me know.
Just commented out and re-built:
Code: Select all
void getParameterName(const uint32_t parameterId, char* const strBuf) const noexcept override
{
CARLA_SAFE_ASSERT_RETURN(fEffect != nullptr,);
CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count,);
strBuf[0] = '\0';
/* VstParameterProperties prop;
carla_zeroStruct(prop);
if (dispatcher(effGetParameterProperties, static_cast<int32_t>(parameterId), 0, &prop, 0) == 1 && prop.label[0] != '\0')
{
std::strncpy(strBuf, prop.label, 64);
strBuf[64] = '\0';
return;
}*/
strBuf[0] = '\0';
dispatcher(effGetParamName, static_cast<int32_t>(parameterId), 0, strBuf, 0.0f);
}
Works fine.
Then I've added some debug code in CarlaStandalone.cpp:
Code: Select all
if (CarlaPlugin* const plugin = gStandalone.engine->getPlugin(pluginId))
{
if (parameterId < plugin->getParameterCount())
{
char strBufName[STR_MAX+1];
char strBufSymbol[STR_MAX+1];
char strBufUnit[STR_MAX+1];
carla_zeroChars(strBufName, STR_MAX+1);
carla_zeroChars(strBufSymbol, STR_MAX+1);
carla_zeroChars(strBufUnit, STR_MAX+1);
info.scalePointCount = plugin->getParameterScalePointCount(parameterId);
std::fprintf(stderr, "get_parameter_name %d, %p [%d]\n", parameterId, strBufName, int(STR_MAX+1));
plugin->getParameterName(parameterId, strBufName);
std::fprintf(stderr, "get_parameter_name returned %s\n", strBufName);
info.name = carla_strdup_safe(strBufName);
std::fprintf(stderr, "strdup_safe ok = %s\n", info.name);
plugin->getParameterSymbol(parameterId, strBufSymbol);
info.symbol = carla_strdup_safe(strBufSymbol);
plugin->getParameterUnit(parameterId, strBufUnit);
info.unit = carla_strdup_safe(strBufUnit);
checkStringPtr(info.name);
checkStringPtr(info.symbol);
checkStringPtr(info.unit);
}
else
carla_stderr2("carla_get_parameter_info(%i, %i) - parameterId out of bounds", pluginId, parameterId);
And CarlaPluginVST2.cpp:
Code: Select all
void getParameterName(const uint32_t parameterId, char* const strBuf) const noexcept override
{
CARLA_SAFE_ASSERT_RETURN(fEffect != nullptr,);
CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count,);
strBuf[0] = '\0';
VstParameterProperties prop;
carla_zeroStruct(prop);
std::fprintf(stderr, "CARLA query parameter properties %p\n", &prop);
if ((dispatcher(effGetParameterProperties, static_cast<int32_t>(parameterId), 0, &prop, 0) == 1) && (prop.label[0] != '\0'))
{
std::fprintf(stderr, "CARLA label: %s, copy to %p\n", prop.label, strBuf);
std::strncpy(strBuf, prop.label, 64);
strBuf[63] = '\0';
std::fprintf(stderr, "CARLA return: %s\n", strBuf);
return;
}
strBuf[0] = '\0';
std::fprintf(stderr, "CARLA call getParamName %p\n", strBuf);
dispatcher(effGetParamName, static_cast<int32_t>(parameterId), 0, strBuf, 0.0f);
std::fprintf(stderr, "CARLA call OK\n");
std::fprintf(stderr, "CARLA param name = %s\n", strBuf);
}
I get such log:
Code: Select all
get_parameter_name 0, 0x7fffffff85b0 [256]
CARLA query parameter properties 0x7fffffff8510
T[vst.cpp: 303] vst_dispatcher: vst_dispatcher effect=0x11a3760, opcode=56 (effGetParameterProperties), index=0, value=0, ptr=0x7fffffff8510, opt = 0,000
T[vst.cpp: 59] vst_get_parameter_properties: parameter id=bypass, name=Bypass
CARLA label: Bypass, copy to 0x7fffffff85b0
CARLA return: Bypass
get_parameter_name returned Bypass
Program received signal SIGSEGV, Segmentation fault.
0x00007fffd738eeca in carla_get_parameter_info () from /usr/local/lib/carla/libcarla_standalone2.so
The backtrace:
Code: Select all
(gdb) bt
#0 0x00007fffd738eeca in carla_get_parameter_info () at /usr/local/lib/carla/libcarla_standalone2.so
#1 0x00007fffe015752a in ffi_call_unix64 () at /usr/lib64/python3.4/lib-dynload/_ctypes.cpython-34m.so
#2 0x00007fffe0155df9 in ffi_call () at /usr/lib64/python3.4/lib-dynload/_ctypes.cpython-34m.so
#3 0x00007fffe014cd9d in _ctypes_callproc () at /usr/lib64/python3.4/lib-dynload/_ctypes.cpython-34m.so
#4 0x00007fffe0143948 in () at /usr/lib64/python3.4/lib-dynload/_ctypes.cpython-34m.so
#5 0x00007ffff7a4df3a in PyObject_Call () at /usr/lib64/libpython3.4m.so.1.0
#6 0x00007ffff7a70907 in PyEval_EvalFrameEx () at /usr/lib64/libpython3.4m.so.1.0
#7 0x00007ffff7a70a44 in PyEval_EvalFrameEx () at /usr/lib64/libpython3.4m.so.1.0
#8 0x00007ffff7a70a44 in PyEval_EvalFrameEx () at /usr/lib64/libpython3.4m.so.1.0
#9 0x00007ffff7a70a44 in PyEval_EvalFrameEx () at /usr/lib64/libpython3.4m.so.1.0
#10 0x00007ffff7a764e0 in PyEval_EvalCodeEx () at /usr/lib64/libpython3.4m.so.1.0
#11 0x00007ffff7a51ec8 in () at /usr/lib64/libpython3.4m.so.1.0
#12 0x00007ffff7a4df3a in PyObject_Call () at /usr/lib64/libpython3.4m.so.1.0
And the disassembly:
Code: Select all
│0x7fffd738ee49 <carla_get_parameter_info+233> lea 0x200(%rsp),%r14 │
│0x7fffd738ee51 <carla_get_parameter_info+241> mov %r12d,%esi │
│0x7fffd738ee54 <carla_get_parameter_info+244> mov %rsp,%r13 │
│0x7fffd738ee57 <carla_get_parameter_info+247> mov %rsp,%rbp │
│0x7fffd738ee5a <carla_get_parameter_info+250> mov %r15,%rdi │
│0x7fffd738ee5d <carla_get_parameter_info+253> mov $0x20,%cl │
│0x7fffd738ee5f <carla_get_parameter_info+255> rep stos %rax,%es:(%rdi) │
│0x7fffd738ee62 <carla_get_parameter_info+258> mov %r14,%rdi │
│0x7fffd738ee65 <carla_get_parameter_info+261> mov $0x20,%cl │
│0x7fffd738ee67 <carla_get_parameter_info+263> rep stos %rax,%es:(%rdi) │
│0x7fffd738ee6a <carla_get_parameter_info+266> mov %rbx,%rdi │
│0x7fffd738ee6d <carla_get_parameter_info+269> mov (%rbx),%rax │
│0x7fffd738ee70 <carla_get_parameter_info+272> callq *0x40(%rax) │
│0x7fffd738ee73 <carla_get_parameter_info+275> mov %eax,0xd7ab5f(%rip) # 0x7fffd81099d8 │
│0x7fffd738ee79 <carla_get_parameter_info+281> mov 0xd67060(%rip),%rax # 0x7fffd80f5ee0 │
│0x7fffd738ee80 <carla_get_parameter_info+288> lea 0x26cdc9(%rip),%rsi # 0x7fffd75fbc50 │
│0x7fffd738ee87 <carla_get_parameter_info+295> mov $0x100,%r8d │
│0x7fffd738ee8d <carla_get_parameter_info+301> mov %rsp,%rcx │
│0x7fffd738ee90 <carla_get_parameter_info+304> mov %r12d,%edx │
│0x7fffd738ee93 <carla_get_parameter_info+307> mov (%rax),%rdi │
│0x7fffd738ee96 <carla_get_parameter_info+310> xor %eax,%eax │
│0x7fffd738ee98 <carla_get_parameter_info+312> callq 0x7fffd7372a70 <fprintf@plt> │
│0x7fffd738ee9d <carla_get_parameter_info+317> mov (%rbx),%rax │
│0x7fffd738eea0 <carla_get_parameter_info+320> mov %rsp,%rdx │
│0x7fffd738eea3 <carla_get_parameter_info+323> mov %r12d,%esi │
│0x7fffd738eea6 <carla_get_parameter_info+326> mov %rbx,%rdi │
│0x7fffd738eea9 <carla_get_parameter_info+329> callq *0x88(%rax) │
│0x7fffd738eeaf <carla_get_parameter_info+335> mov 0xd6702a(%rip),%rax # 0x7fffd80f5ee0 │
│0x7fffd738eeb6 <carla_get_parameter_info+342> lea 0x26cdb3(%rip),%rsi # 0x7fffd75fbc70 │
│0x7fffd738eebd <carla_get_parameter_info+349> mov %rsp,%rdx │
│0x7fffd738eec0 <carla_get_parameter_info+352> mov (%rax),%rdi │
│0x7fffd738eec3 <carla_get_parameter_info+355> xor %eax,%eax │
│0x7fffd738eec5 <carla_get_parameter_info+357> callq 0x7fffd7372a70 <fprintf@plt> │
>│0x7fffd738eeca <carla_get_parameter_info+362> mov 0x0(%rbp),%edx │
│0x7fffd738eecd <carla_get_parameter_info+365> add $0x4,%rbp │
│0x7fffd738eed1 <carla_get_parameter_info+369> lea -0x1010101(%rdx),%eax │
│0x7fffd738eed7 <carla_get_parameter_info+375> not %edx │
│0x7fffd738eed9 <carla_get_parameter_info+377> and %edx,%eax │
│0x7fffd738eedb <carla_get_parameter_info+379> and $0x80808080,%eax │
│0x7fffd738eee0 <carla_get_parameter_info+384> je 0x7fffd738eeca <carla_get_parameter_info+362>
By currently unknown reason the RBP register is corrupt:
Code: Select all
rax 0x23 35
rbx 0x0 0
rcx 0x7ffff7490d8d 140737342147981
rdx 0x0 0
rsi 0x0 0
rdi 0x7fffffff5dc0 140737488313792
rbp 0x0 0x0
rsp 0x7fffffff85b0 0x7fffffff85b0
r8 0x7ffff7fc4700 140737353893632
r9 0x7ffff7757bc0 140737345059776
r10 0xfffffffa 4294967290
r11 0x0 0
r12 0x0 0
r13 0x0 0
r14 0x0 0
r15 0x7fffffff86b0 140737488324272
rip 0x7fffd738eeca 0x7fffd738eeca <carla_get_parameter_info+362>
eflags 0x10202 [ IF RF ]
cs 0x33 51
ss 0x2b 43