Index: tools/gdb/utils-gdb.py
===================================================================
--- tools/gdb/utils-gdb.py	(revision c0c0bd558dfd47b03c1d7cbb64297e373fc89305)
+++ tools/gdb/utils-gdb.py	(revision 341aa39e47d18ed4c1c920948bb80ef3fe7bbb54)
@@ -23,5 +23,5 @@
 gdb.execute('handle SIGUSR1 nostop noprint pass')
 
-CfaTypes = collections.namedtuple('CfaTypes', 'cluster_ptr processor_ptr thread_ptr int_ptr thread_state')
+CfaTypes = collections.namedtuple('CfaTypes', 'cluster_ptr processor_ptr thread_ptr int_ptr thread_state yield_state')
 
 class ThreadInfo:
@@ -52,8 +52,9 @@
 	# GDB types for various structures/types in CFA
 	return CfaTypes(cluster_ptr = gdb.lookup_type('struct cluster').pointer(),
-				  processor_ptr = gdb.lookup_type('struct processor').pointer(),
-					 thread_ptr = gdb.lookup_type('struct $thread').pointer(),
-						int_ptr = gdb.lookup_type('int').pointer(),
-				   thread_state = gdb.lookup_type('enum __Coroutine_State'))
+		processor_ptr = gdb.lookup_type('struct processor').pointer(),
+		thread_ptr = gdb.lookup_type('struct $thread').pointer(),
+		int_ptr = gdb.lookup_type('int').pointer(),
+		thread_state = gdb.lookup_type('enum __Coroutine_State'),
+		yield_state = gdb.lookup_type('enum __Preemption_Reason'))
 
 def get_addr(addr):
@@ -371,5 +372,17 @@
 	def print_thread(self, thread, tid, marked):
 		cfa_t = get_cfa_types()
-		self.print_formatted(marked, tid, thread['self_cor']['name'].string(), str(thread['state'].cast(cfa_t.thread_state)), str(thread))
+		ys = str(thread['preempted'].cast(cfa_t.yield_state))
+		if ys == '_X15__NO_PREEMPTIONKM19__Preemption_Reason_1':
+			state = str(thread['state'].cast(cfa_t.thread_state))
+		elif ys == '_X18__ALARM_PREEMPTIONKM19__Preemption_Reason_1':
+			state = 'preempted'
+		elif ys == '_X19__MANUAL_PREEMPTIONKM19__Preemption_Reason_1':
+			state = 'yield'
+		elif ys == '_X17__POLL_PREEMPTIONKM19__Preemption_Reason_1':
+			state = 'poll'
+		else:
+			print("error: thread {} in undefined preemption state {}".format(thread, ys))
+			state = 'error'
+		self.print_formatted(marked, tid, thread['self_cor']['name'].string(), state, str(thread))
 
 	def print_threads_by_cluster(self, cluster, print_system = False):
