修复ipc映射时错误的bug

This commit is contained in:
zhangzheng
2023-10-02 01:38:38 +08:00
parent eea118f9b7
commit a6bc1d330e
11 changed files with 192 additions and 284 deletions

View File

@@ -189,98 +189,97 @@ RPC_TYPE_DEF_ALL(int) //!< 定义所有的
* @brief 数组类型的RPC定义用于定义任意长度
*
*/
#define RPC_ARRAY_DEF(len_type, data_type, length) \
RPC_ARRAY_TYPE_DEF(len_type, data_type, length); \
RPC_SVR_MSG_TO_BUF_WITHOUT_IMPL(rpc_array_##len_type##_##data_type##_##length##_t, int) \
{ \
if (rpc_align(len, __alignof(d->len)) + d->len > \
IPC_MSG_SIZE) \
{ \
return -ETOLONG; \
} \
len = rpc_align(len, __alignof(d->len)); \
*((typeof(d->len) *)(&buf[len])) = d->len; \
if (rpc_align(d->len, __alignof(d->data[0]) + d->len * sizeof(d->data[0])) > IPC_MSG_SIZE) \
{ \
return -ETOLONG; \
} \
len += sizeof(d->len); \
len = rpc_align(len, __alignof(d->data[0])); \
for (int i = 0; i < d->len * sizeof(d->data[0]); i++) \
{ \
buf[i + len] = ((uint8_t *)(d->data))[i]; \
} \
len += d->len * sizeof(d->data[0]); \
return len; \
} \
RPC_SVR_BUF_TO_MSG_WITHOUT_IMPL(rpc_array_##len_type##_##data_type##_##length##_t, int) \
{ \
if (rpc_align(len, __alignof(d->len)) + d->len > \
max) \
{ \
return -ETOLONG; \
} \
len = rpc_align(len, __alignof(d->len)); \
d->len = *((typeof(d->len) *)(&buf[len])); \
if (rpc_align(d->len, __alignof(d->data[0]) + d->len * sizeof(d->data[0])) > max) \
{ \
return -ETOLONG; \
} \
len += sizeof(d->len); \
len = rpc_align(len, __alignof(d->data[0])); \
for (int i = 0; i < d->len * sizeof(d->data[0]); i++) \
{ \
((uint8_t *)(d->data))[i] = buf[i + len]; \
} \
len += d->len * sizeof(d->data[0]); \
return len; \
} \
RPC_CLI_MSG_TO_BUF_WITHOUT_IMPL(rpc_array_##len_type##_##data_type##_##length##_t, int) \
{ \
if (rpc_align(len, __alignof(d->len)) + d->len > \
IPC_MSG_SIZE) \
{ \
return -ETOLONG; \
} \
len = rpc_align(len, __alignof(d->len)); \
*((typeof(d->len) *)(&buf[len])) = d->len; \
if (rpc_align(d->len, __alignof(d->data[0]) + d->len * sizeof(d->data[0])) > IPC_MSG_SIZE) \
{ \
return -ETOLONG; \
} \
len += sizeof(d->len); \
len = rpc_align(len, __alignof(d->data[0])); \
for (int i = 0; i < d->len * sizeof(d->data[0]); i++) \
{ \
buf[i + len] = ((uint8_t *)(d->data))[i]; \
} \
len += d->len * sizeof(d->data[0]); \
return len; \
} \
RPC_CLI_BUF_TO_MSG_WITHOUT_IMPL(rpc_array_##len_type##_##data_type##_##length##_t, int) \
{ \
if (rpc_align(len, __alignof(d->len)) + d->len > \
max) \
{ \
return -ETOLONG; \
} \
len = rpc_align(len, __alignof(d->len)); \
d->len = *((typeof(d->len) *)(&buf[len])); \
if (rpc_align(d->len, __alignof(d->data[0]) + d->len * sizeof(d->data[0])) > max) \
{ \
return -ETOLONG; \
} \
len += sizeof(d->len); \
len = rpc_align(len, __alignof(d->data[0])); \
for (int i = 0; i < d->len * sizeof(d->data[0]); i++) \
{ \
((uint8_t *)(d->data))[i] = buf[i + len]; \
} \
len += d->len * sizeof(d->data[0]); \
return len; \
} \
RPC_TYPE_INIT_WITHOUT_IMPL(rpc_array_##len_type##_##data_type##_##length##_t) \
{ \
#define RPC_ARRAY_DEF(len_type, data_type, length) \
RPC_ARRAY_TYPE_DEF(len_type, data_type, length); \
RPC_SVR_MSG_TO_BUF_WITHOUT_IMPL(rpc_array_##len_type##_##data_type##_##length##_t, int) \
{ \
if (rpc_align(len, __alignof(d->len)) > \
IPC_MSG_SIZE) \
{ \
return -ETOLONG; \
} \
len = rpc_align(len, __alignof(d->len)); \
*((typeof(d->len) *)(&buf[len])) = d->len; \
if (rpc_align(len, __alignof(d->data[0]) + d->len * sizeof(d->data[0])) > IPC_MSG_SIZE) \
{ \
return -ETOLONG; \
} \
len += sizeof(d->len); \
len = rpc_align(len, __alignof(d->data[0])); \
for (int i = 0; i < d->len * sizeof(d->data[0]); i++) \
{ \
buf[i + len] = ((uint8_t *)(d->data))[i]; \
} \
len += d->len * sizeof(d->data[0]); \
return len; \
} \
RPC_SVR_BUF_TO_MSG_WITHOUT_IMPL(rpc_array_##len_type##_##data_type##_##length##_t, int) \
{ \
if (rpc_align(len, __alignof(d->len)) > \
max) \
{ \
return -ETOLONG; \
} \
len = rpc_align(len, __alignof(d->len)); \
d->len = *((typeof(d->len) *)(&buf[len])); \
if (rpc_align(len, __alignof(d->data[0]) + d->len * sizeof(d->data[0])) > max) \
{ \
return -ETOLONG; \
} \
len += sizeof(d->len); \
len = rpc_align(len, __alignof(d->data[0])); \
for (int i = 0; i < d->len * sizeof(d->data[0]); i++) \
{ \
((uint8_t *)(d->data))[i] = buf[i + len]; \
} \
len += d->len * sizeof(d->data[0]); \
return len; \
} \
RPC_CLI_MSG_TO_BUF_WITHOUT_IMPL(rpc_array_##len_type##_##data_type##_##length##_t, int) \
{ \
if (rpc_align(len, __alignof(d->len)) > \
IPC_MSG_SIZE) \
{ \
return -ETOLONG; \
} \
len = rpc_align(len, __alignof(d->len)); \
*((typeof(d->len) *)(&buf[len])) = d->len; \
if (rpc_align(len, __alignof(d->data[0]) + d->len * sizeof(d->data[0])) > IPC_MSG_SIZE) \
{ \
return -ETOLONG; \
} \
len += sizeof(d->len); \
len = rpc_align(len, __alignof(d->data[0])); \
for (int i = 0; i < d->len * sizeof(d->data[0]); i++) \
{ \
buf[i + len] = ((uint8_t *)(d->data))[i]; \
} \
len += d->len * sizeof(d->data[0]); \
return len; \
} \
RPC_CLI_BUF_TO_MSG_WITHOUT_IMPL(rpc_array_##len_type##_##data_type##_##length##_t, int) \
{ \
if (rpc_align(len, __alignof(d->len)) > max) \
{ \
return -ETOLONG; \
} \
len = rpc_align(len, __alignof(d->len)); \
d->len = *((typeof(d->len) *)(&buf[len])); \
if (rpc_align(len, __alignof(d->data[0]) + d->len * sizeof(d->data[0])) > max) \
{ \
return -ETOLONG; \
} \
len += sizeof(d->len); \
len = rpc_align(len, __alignof(d->data[0])); \
for (int i = 0; i < d->len * sizeof(d->data[0]); i++) \
{ \
((uint8_t *)(d->data))[i] = buf[i + len]; \
} \
len += d->len * sizeof(d->data[0]); \
return len; \
} \
RPC_TYPE_INIT_WITHOUT_IMPL(rpc_array_##len_type##_##data_type##_##length##_t) \
{ \
}
//!< end
/**
@@ -304,50 +303,50 @@ RPC_ARRAY_DEF(uint32_t, uint8_t, 32)
* @brief 引用类型的数组定义
*
*/
#define RPC_REF_ARRAY_DEF(len_type, data_type, length) \
RPC_REF_ARRAY_TYPE_DEF(len_type, data_type, length); \
RPC_CLI_MSG_TO_BUF_WITHOUT_IMPL(rpc_ref_array_##len_type##_##data_type##_##length##_t, int) \
{ \
if (rpc_align(len, __alignof(d->len)) + d->len > IPC_MSG_SIZE) \
{ \
return -ETOLONG; \
} \
len = rpc_align(len, __alignof(d->len)); \
*((typeof(d->len) *)(&buf[len])) = d->len; \
if (rpc_align(d->len, __alignof(d->data[0]) + d->len * sizeof(d->data[0])) > IPC_MSG_SIZE) \
{ \
return -ETOLONG; \
} \
len += sizeof(d->len); \
len = rpc_align(len, __alignof(d->data[0])); \
for (int i = 0; i < d->len * sizeof(d->data[0]); i++) \
{ \
buf[i + len] = ((uint8_t *)(d->data))[i]; \
} \
len += d->len * sizeof(d->data[0]); \
return len; \
} \
RPC_CLI_BUF_TO_MSG_WITHOUT_IMPL(rpc_ref_array_uint32_t_uint8_t_32_t, int) \
{ \
if (rpc_align(len, __alignof(d->len)) + d->len > \
max) \
{ \
return -ETOLONG; \
} \
len = rpc_align(len, __alignof(d->len)); \
d->len = *((typeof(d->len) *)(&buf[len])); \
if (rpc_align(d->len, __alignof(d->data[0]) + d->len * sizeof(d->data[0])) > max) \
{ \
return -ETOLONG; \
} \
len += sizeof(d->len); \
len = rpc_align(len, __alignof(d->data[0])); \
for (int i = 0; i < d->len * sizeof(d->data[0]); i++) \
{ \
((uint8_t *)(d->data))[i] = buf[i + len]; \
} \
len += d->len * sizeof(d->data[0]); \
return len; \
#define RPC_REF_ARRAY_DEF(len_type, data_type, length) \
RPC_REF_ARRAY_TYPE_DEF(len_type, data_type, length); \
RPC_CLI_MSG_TO_BUF_WITHOUT_IMPL(rpc_ref_array_##len_type##_##data_type##_##length##_t, int) \
{ \
if (rpc_align(len, __alignof(d->len)) > IPC_MSG_SIZE) \
{ \
return -ETOLONG; \
} \
len = rpc_align(len, __alignof(d->len)); \
*((typeof(d->len) *)(&buf[len])) = d->len; \
if (rpc_align(len, __alignof(d->data[0]) + d->len * sizeof(d->data[0])) > IPC_MSG_SIZE) \
{ \
return -ETOLONG; \
} \
len += sizeof(d->len); \
len = rpc_align(len, __alignof(d->data[0])); \
for (int i = 0; i < d->len * sizeof(d->data[0]); i++) \
{ \
buf[i + len] = ((uint8_t *)(d->data))[i]; \
} \
len += d->len * sizeof(d->data[0]); \
return len; \
} \
RPC_CLI_BUF_TO_MSG_WITHOUT_IMPL(rpc_ref_array_uint32_t_uint8_t_32_t, int) \
{ \
if (rpc_align(len, __alignof(d->len)) > \
max) \
{ \
return -ETOLONG; \
} \
len = rpc_align(len, __alignof(d->len)); \
d->len = *((typeof(d->len) *)(&buf[len])); \
if (rpc_align(len, __alignof(d->data[0]) + d->len * sizeof(d->data[0])) > max) \
{ \
return -ETOLONG; \
} \
len += sizeof(d->len); \
len = rpc_align(len, __alignof(d->data[0])); \
for (int i = 0; i < d->len * sizeof(d->data[0]); i++) \
{ \
((uint8_t *)(d->data))[i] = buf[i + len]; \
} \
len += d->len * sizeof(d->data[0]); \
return len; \
}
//!< end
@@ -361,7 +360,16 @@ RPC_REF_ARRAY_DEF(uint32_t, uint8_t, 32)
* @brief Construct a new rpc type def object
*
*/
RPC_TYPE_DEF(obj_handler_t);
// RPC_TYPE_DEF(obj_handler_t);
#define RPC_OBJ_HANDLER_TYPE_DEF(type) \
typedef struct rpc_##type \
{ \
type data; \
uint8_t del_map_flags; \
} rpc_##type##_t
RPC_OBJ_HANDLER_TYPE_DEF(obj_handler_t);
/**
* @brief Construct a new rpc cli msg to buf without impl object
*
@@ -373,7 +381,7 @@ RPC_CLI_MSG_TO_BUF_WITHOUT_IMPL(rpc_obj_handler_t_t, int)
return -ETOLONG;
}
len = rpc_align(len, __alignof(d->data));
*((umword_t *)(buf + len)) = vpage_create_raw3(KOBJ_ALL_RIGHTS, 0, d->data).raw;
*((umword_t *)(buf + len)) = vpage_create_raw3(KOBJ_ALL_RIGHTS, 0xff & (~(d->del_map_flags)), d->data).raw;
return sizeof(d->data) + rpc_align(len, __alignof(d->data));
}
/**
@@ -395,7 +403,7 @@ RPC_SVR_MSG_TO_BUF_WITHOUT_IMPL(rpc_obj_handler_t_t, int)
return -ETOLONG;
}
len = rpc_align(len, __alignof(d->data));
*((umword_t *)(buf + len)) = vpage_create_raw3(KOBJ_ALL_RIGHTS, 0, d->data).raw;
*((umword_t *)(buf + len)) = vpage_create_raw3(KOBJ_ALL_RIGHTS, 0xff & (~(d->del_map_flags)), d->data).raw;
return sizeof(d->data) + rpc_align(len, __alignof(d->data));
}
/**