Index: cpukit/libcsupport/Makefile.am
===================================================================
--- cpukit/libcsupport/Makefile.am	(revision fa9f964f738502140a48e6ce4ae7025ec6f7dd26)
+++ cpukit/libcsupport/Makefile.am	(revision 0c431303cc7f0e91c70e06126353072e9a9bdb05)
@@ -39,4 +39,5 @@
     src/assocptrbyremote.c src/assocremotebylocalbitfield.c \
     src/assocremotebylocal.c src/assocremotebyname.c
+ASSOCIATION_C_FILES += src/assoc32tostring.c
 
 BASE_FS_C_FILES = src/base_fs.c src/mount.c src/unmount.c src/libio.c \
Index: cpukit/libcsupport/include/rtems/assoc.h
===================================================================
--- cpukit/libcsupport/include/rtems/assoc.h	(revision fa9f964f738502140a48e6ce4ae7025ec6f7dd26)
+++ cpukit/libcsupport/include/rtems/assoc.h	(revision 0c431303cc7f0e91c70e06126353072e9a9bdb05)
@@ -17,5 +17,6 @@
 /**@{*/
 
-#include <stdint.h> /* uint32_t */
+#include <stddef.h>
+#include <stdint.h>
 
 #ifdef __cplusplus
@@ -151,4 +152,34 @@
 #endif
 
+typedef struct {
+  uint32_t    bits;
+  const char *name;
+} rtems_assoc_32_pair;
+
+/**
+ * @brief Converts the specified value into a text representation.
+ *
+ * @param[in] value The value to convert.
+ * @param[in] buffer The buffer for the text representation.
+ * @param[in] buffer_size The buffer size in characters.
+ * @param[in] pairs Names for particular bits.
+ * @param[in] pair_count Count of pairs.
+ * @param[in] separator Separator between individual names.
+ * @param[in] fallback Fallback value in case no bits contained in the pairs
+ *   are set in the value.
+ *
+ * @retval The length of the text representation.  May be greater than the
+ * buffer size if truncation occurred.
+ */
+size_t rtems_assoc_32_to_string(
+  uint32_t                   value,
+  char                      *buffer,
+  size_t                     buffer_size,
+  const rtems_assoc_32_pair *pairs,
+  size_t                     pair_count,
+  const char                *separator,
+  const char                *fallback
+);
+
 #ifdef __cplusplus
 }
Index: cpukit/libcsupport/src/assoc32tostring.c
===================================================================
--- cpukit/libcsupport/src/assoc32tostring.c	(revision 0c431303cc7f0e91c70e06126353072e9a9bdb05)
+++ cpukit/libcsupport/src/assoc32tostring.c	(revision 0c431303cc7f0e91c70e06126353072e9a9bdb05)
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2016 embedded brains GmbH.
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.org/license/LICENSE.
+ */
+
+#if HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <rtems/assoc.h>
+
+#include <stdbool.h>
+#include <string.h>
+
+static size_t space( size_t buffer_size, size_t len )
+{
+  if ( len < buffer_size ) {
+    return buffer_size - len;
+  } else {
+    return 0;
+  }
+}
+
+size_t rtems_assoc_32_to_string(
+  uint32_t                   value,
+  char                      *buffer,
+  size_t                     buffer_size,
+  const rtems_assoc_32_pair *pairs,
+  size_t                     pair_count,
+  const char                *separator,
+  const char                *fallback
+)
+{
+  size_t len;
+  size_t i;
+
+  len = 0;
+
+  for ( i = 0; i < pair_count ; ++i ) {
+    const rtems_assoc_32_pair *p;
+
+    p = &pairs[ i ];
+
+    if ( ( value & p->bits ) != 0 ) {
+      if ( len > 0 ) {
+        len += strlcpy( &buffer[ len ], separator, space( buffer_size, len ) );
+      }
+
+      len += strlcpy( &buffer[ len ], p->name, space( buffer_size, len ) );
+    }
+  }
+
+  if ( len == 0 ) {
+    len += strlcpy( buffer, fallback, buffer_size );
+  }
+
+  return len;
+}
Index: testsuites/sptests/spassoc01/init.c
===================================================================
--- testsuites/sptests/spassoc01/init.c	(revision fa9f964f738502140a48e6ce4ae7025ec6f7dd26)
+++ testsuites/sptests/spassoc01/init.c	(revision 0c431303cc7f0e91c70e06126353072e9a9bdb05)
@@ -62,4 +62,63 @@
 }
 
+static void test_assoc_32_to_string( void )
+{
+  static const rtems_assoc_32_pair pairs[] = {
+    { 1, "A" },
+    { 2, "LOOOOONG" },
+    { 4, "C" }
+  };
+  char buf[4];
+  size_t len;
+
+  len = rtems_assoc_32_to_string(
+    0,
+    buf,
+    sizeof( buf ),
+    pairs,
+    RTEMS_ARRAY_SIZE( pairs ),
+    ":",
+    "D"
+  );
+  rtems_test_assert( len == 1 );
+  rtems_test_assert( strcmp( buf, "D" ) == 0 );
+
+  len = rtems_assoc_32_to_string(
+    1,
+    buf,
+    sizeof( buf ),
+    pairs,
+    RTEMS_ARRAY_SIZE( pairs ),
+    ":",
+    "D"
+  );
+  rtems_test_assert( len == 1 );
+  rtems_test_assert( strcmp( buf, "A" ) == 0 );
+
+  len = rtems_assoc_32_to_string(
+    5,
+    buf,
+    sizeof( buf ),
+    pairs,
+    RTEMS_ARRAY_SIZE( pairs ),
+    ":",
+    "D"
+  );
+  rtems_test_assert( len == 3 );
+  rtems_test_assert( strcmp( buf, "A:C" ) == 0 );
+
+  len = rtems_assoc_32_to_string(
+    7,
+    buf,
+    sizeof( buf ),
+    pairs,
+    RTEMS_ARRAY_SIZE( pairs ),
+    ":",
+    "D"
+  );
+  rtems_test_assert( len == 12 );
+  rtems_test_assert( strcmp( buf, "A:L" ) == 0 );
+}
+
 rtems_task Init(
   rtems_task_argument argument
@@ -218,4 +277,6 @@
   free( name );
 
+  test_assoc_32_to_string();
+
   TEST_END();
 
