[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Minios-devel] [UNIKRAFT PATCH] lib/ukdebug: Print bottom of stack instead of thread name
The option of printing the thread name of the one issueing a uk_printd() call did not work all the time and causes the system to access invalid memory addresses for retrieving the thread name string. The reason is that we currently do not have a fast and efficient way to differentiate if a stack was created by libuksched or not (e.g., boot stacks, interrupt stacks). This patch changes this option to print the bottom address of the current stack instead. This way, the user can still distinguish different threads or stack types by their stack address and we remove any dependency to other libraries or system configuration. Signed-off-by: Simon Kuenzer <simon.kuenzer@xxxxxxxxx> --- lib/ukdebug/Config.uk | 8 ++++---- lib/ukdebug/print.c | 30 ++++++++++-------------------- 2 files changed, 14 insertions(+), 24 deletions(-) diff --git a/lib/ukdebug/Config.uk b/lib/ukdebug/Config.uk index 2a1ea7e..dcaeb3a 100644 --- a/lib/ukdebug/Config.uk +++ b/lib/ukdebug/Config.uk @@ -44,10 +44,10 @@ config LIBUKDEBUG_PRINTD_TIME default y depends on LIBUKDEBUG_PRINTD -config LIBUKDEBUG_PRINTD_THREAD - bool "Show name of thread in debug messages" - default y - depends on LIBUKDEBUG_PRINTD && LIBUKSCHED +config LIBUKDEBUG_PRINTD_STACK + bool "Print bottom address of stack in debug messages" + default n + depends on LIBUKDEBUG_PRINTD choice prompt "Message redirection" diff --git a/lib/ukdebug/print.c b/lib/ukdebug/print.c index 9673dc9..42dca4a 100644 --- a/lib/ukdebug/print.c +++ b/lib/ukdebug/print.c @@ -44,9 +44,6 @@ #include <uk/plat/console.h> #include <uk/plat/time.h> #include <uk/print.h> -#if LIBUKSCHED -#include <uk/thread.h> -#endif #include <uk/errptr.h> #include <uk/arch/lcpu.h> @@ -96,24 +93,17 @@ static void _printd_timestamp(void) } #endif -#if LIBUKDEBUG_PRINTD_THREAD -static void _printd_thread(void) +#if LIBUKDEBUG_PRINTD_STACK +static void _printd_stack(void) { - struct uk_thread *thread; + unsigned long stackb; + char buf[BUFLEN]; + int len; - thread = uk_thread_current(); - if (!PTRISERR(thread) && thread->name) { - _ukplat_coutd("<", 1); - _ukplat_coutd((char *)thread->name, - strlen(thread->name)); - _ukplat_coutd("> ", 2); - } else { - char buf[BUFLEN]; - int len; + stackb = (ukarch_read_sp() & ~(__STACK_SIZE - 1)) + __STACK_SIZE; - len = snprintf(buf, BUFLEN, "<%p> ", thread); - _ukplat_coutd((char *)buf, len); - } + len = snprintf(buf, BUFLEN, "<%p> ", (void *) stackb); + _ukplat_coutd((char *)buf, len); } #endif @@ -175,8 +165,8 @@ static inline void _vprintd(int lvl, const char *libname, const char *srcname, _printd_timestamp(); #endif _ukplat_coutd(DECONST(char *, msghdr), 6); -#if LIBUKDEBUG_PRINTD_THREAD - _printd_thread(); +#if LIBUKDEBUG_PRINTD_STACK + _printd_stack(); #endif if (libname) { _ukplat_coutd("[", 1); -- 2.7.4 _______________________________________________ Minios-devel mailing list Minios-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/minios-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |