diff --git a/vxworks-6.9/target/src/os/vxtss.c b/vxworks-6.9/target/src/os/vxtss.c index 6e342a0a..2e1abde4 100644 --- a/vxworks-6.9/target/src/os/vxtss.c +++ b/vxworks-6.9/target/src/os/vxtss.c @@ -26,6 +26,7 @@ DESCRIPTION #include #include #include +#include typedef void (*tss_dtor_t)(void*); @@ -44,6 +45,7 @@ crypto_once(CRYPTO_ONCE *once_control, void (*init_routine)(void)) semTake(once_control->sem, WAIT_FOREVER); if (!once_control->done) { + OSSL_TRACE1(TSS, "Init routine invoked, run_once_arg: %s\n", once_control->run_once_arg); init_routine(); once_control->done = TRUE; } diff --git a/vxworks-6.9/target/src/os/vxtss_symlist.c b/vxworks-6.9/target/src/os/vxtss_symlist.c index 20038198..44263727 100644 --- a/vxworks-6.9/target/src/os/vxtss_symlist.c +++ b/vxworks-6.9/target/src/os/vxtss_symlist.c @@ -8,6 +8,7 @@ #include #include #include +#include #define MAX_TSS_SYM_ENTRY 256 #define MAX_CLONE_ENTRIES 32 @@ -233,6 +234,7 @@ tss_symlist_add_new_internal(TASK_ID taskId, void tss_symlist_task_cleanup_hook(int taskId) { + OSSL_TRACE2(TSS, "Cleanup hook invoked: task %s (0x%x)", name ? name : "(null)", (unsigned int)taskId); const char *name = taskName(taskId); CRYPTO_THREAD_write_lock(tss_sym_table_lock); @@ -250,9 +252,15 @@ tss_symlist_task_cleanup_hook(int taskId) *thread_local_ptr = (tss_t)0; if (entry) { + /* Log the entry being cleaned */ + OSSL_TRACE2(TSS, "Cleaning entry key='%s' arg='%s'", + tss_sym_table[i].info.tss_key_name ? tss_sym_table[i].info.tss_key_name : "(null)", + tss_sym_table[i].info.run_once_arg_str ? tss_sym_table[i].info.run_once_arg_str : "(null)"); /* Call destructor only if entry->var is non‑NULL and looks valid */ if (entry->var && tss_sym_table[i].info.dtor) { + OSSL_TRACE1(TSS, "Calling destructor for key '%s'", + tss_sym_table[i].info.tss_key_name); tss_sym_table[i].info.dtor(entry->var); } @@ -269,6 +277,8 @@ tss_symlist_task_cleanup_hook(int taskId) } CRYPTO_THREAD_unlock(tss_sym_table_lock); + + OSSL_TRACE(TSS, "Exiting cleanup hook\n"); } /* Initialize the TSS symbol table and clone list */ @@ -313,6 +323,8 @@ tss_symlist_add_new(TASK_ID taskId, char *run_once_arg_str, char *tss_key_name, run_once_arg_str == NULL || run_once_arg_str[0] == '\0') return ERROR; + OSSL_TRACE2(TSS, "Adding new entry: %s, %s\n", run_once_arg_str, tss_key_name); + /* Acquire lock */ CRYPTO_THREAD_write_lock(tss_sym_table_lock); @@ -331,6 +343,8 @@ tss_symlist_add_new(TASK_ID taskId, char *run_once_arg_str, char *tss_key_name, tmp.tss_key = key; tmp.dtor = tmp_entry ? tmp_entry->dtor : NULL; tss_clone_list_add(&tmp); + OSSL_TRACE4(TSS, "Adding to clone list: run_once_arg_str: %s, key_name: %s, tss_key: %p, *tss_key: %p\n", + run_once_arg_str, tss_key_name, tmp.tss_key, *tmp.tss_key); } /* Release lock */ @@ -382,6 +396,8 @@ tss_create_and_update_table(tss_t *key, char *tss_key_name, *key = (tss_t)0; return ERROR; } + OSSL_TRACE2(TSS, "Cloned and added an entry: %s, %s\n", run_once_arg_str, tss_key_name); + return OK; } @@ -438,6 +454,8 @@ tss_symlist_clone_entries_for_new_task(char *run_once_arg_string) } int i; + int clones_created = 0; + /* Iterate through clone list entries matching the argument string */ for (i = 0; i < MAX_CLONE_ENTRIES; i++) { if (tss_clone_list[i].tss_key == NULL) @@ -447,9 +465,19 @@ tss_symlist_clone_entries_for_new_task(char *run_once_arg_string) tss_clone_list[i].run_once_arg_str, tss_clone_list[i].tss_key, tss_clone_list[i].dtor); + + if (result == OK) { + clones_created++; + } } CRYPTO_THREAD_unlock(tss_sym_table_lock); + + /* Show table only if clones were created, AFTER releasing the lock */ + if (clones_created > 0) { + OSSL_TRACE3(TSS, "\n*** TSS Clone: Created %d entries for task %s (0x%x) ***\n", + clones_created, taskName((int)taskId) ? task_name : "(null)", (unsigned int)taskId); + } } /* De-initialize the TSS symbol table */