diff --git a/portable/ThirdParty/GCC/Posix/port.c b/portable/ThirdParty/GCC/Posix/port.c
index d0152169a..f84517346 100644
--- a/portable/ThirdParty/GCC/Posix/port.c
+++ b/portable/ThirdParty/GCC/Posix/port.c
@@ -51,6 +51,10 @@
 *----------------------------------------------------------*/
 #include "portmacro.h"
 
+#ifdef __linux__
+    #define __USE_GNU
+#endif
+
 #include <errno.h>
 #include <pthread.h>
 #include <signal.h>
@@ -134,6 +138,16 @@ void prvFatalError( const char * pcCall,
 }
 /*-----------------------------------------------------------*/
 
+static void prvPortSetCurrentThreadName(char * pxThreadName)
+{
+#ifdef __APPLE__
+    pthread_setname_np(pxThreadName);
+#else
+    pthread_setname_np(pthread_self(), pxThreadName);
+#endif
+}
+/*-----------------------------------------------------------*/
+
 /*
  * See header file for description.
  */
@@ -224,6 +238,7 @@ BaseType_t xPortStartScheduler( void )
     const ListItem_t * pxEndMarker;
 
     hMainThread = pthread_self();
+    prvPortSetCurrentThreadName("Scheduler");
 
     /* Start the timer that generates the tick ISR(SIGALRM).
      * Interrupts are disabled here already. */
@@ -383,6 +398,8 @@ static void * prvTimerTickHandler( void * arg )
 {
     ( void ) arg;
     
+    prvPortSetCurrentThreadName("Scheduler timer");
+
     while( xTimerTickThreadShouldRun )
     {
         /*
@@ -493,6 +510,9 @@ static void * prvWaitForStart( void * pvParams )
     uxCriticalNesting = 0;
     vPortEnableInterrupts();
 
+    /* Set thread name */
+    prvPortSetCurrentThreadName(pcTaskGetName(xTaskGetCurrentTaskHandle()));
+
     /* Call the task's entry point. */
     pxThread->pxCode( pxThread->pvParams );