diff --git a/platform/linux-generic/include/api/odp_debug.h b/platform/linux-generic/include/api/odp_debug.h
index c9b2edd..1a6fbda 100644
--- a/platform/linux-generic/include/api/odp_debug.h
+++ b/platform/linux-generic/include/api/odp_debug.h
@@ -76,7 +76,8 @@ typedef enum odp_log_level {
 	ODP_LOG_DBG,
 	ODP_LOG_ERR,
 	ODP_LOG_UNIMPLEMENTED,
-	ODP_LOG_ABORT
+	ODP_LOG_ABORT,
+	ODP_LOG_PRI,
 } odp_log_level_e;
 
 /**
@@ -94,6 +95,10 @@ do { \
 			fprintf(stderr, "%s:%d:%s():" fmt, __FILE__, \
 			__LINE__, __func__, ##__VA_ARGS__); \
 		break; \
+	case ODP_LOG_PRI: \
+		fprintf(stderr, "%s:%d:%s():" fmt, __FILE__, \
+		__LINE__, __func__, ##__VA_ARGS__); \
+		break; \
 	case ODP_LOG_ABORT: \
 		fprintf(stderr, "%s:%d:%s(): " fmt, __FILE__, \
 		__LINE__, __func__, ##__VA_ARGS__); \
@@ -111,6 +116,13 @@ do { \
 } while (0)
 
 /**
+ * Printing macro, which prints output when the application
+ * calls one of the ODP APIs specifically for dumping internal data.
+ */
+#define ODP_PRI(fmt, ...) \
+		ODP_LOG(ODP_LOG_PRI, fmt, ##__VA_ARGS__)
+
+/**
  * Debug printing macro, which prints output when DEBUG flag is set.
  */
 #define ODP_DBG(fmt, ...) \
diff --git a/platform/linux-generic/odp_buffer.c b/platform/linux-generic/odp_buffer.c
index e54e0e7..2ee0461 100644
--- a/platform/linux-generic/odp_buffer.c
+++ b/platform/linux-generic/odp_buffer.c
@@ -52,7 +52,7 @@ int odp_buffer_snprint(char *str, size_t n, odp_buffer_t buf)
 	int len = 0;
 
 	if (!odp_buffer_is_valid(buf)) {
-		printf("Buffer is not valid.\n");
+		ODP_PRI("Buffer is not valid.\n");
 		return len;
 	}
 
@@ -98,7 +98,7 @@ void odp_buffer_print(odp_buffer_t buf)
 	len = odp_buffer_snprint(str, max_len-1, buf);
 	str[len] = 0;
 
-	printf("\n%s\n", str);
+	ODP_PRI("\n%s\n", str);
 }
 
 void odp_buffer_copy_scatter(odp_buffer_t buf_dst, odp_buffer_t buf_src)
diff --git a/platform/linux-generic/odp_buffer_pool.c b/platform/linux-generic/odp_buffer_pool.c
index a48d7d6..3555166 100644
--- a/platform/linux-generic/odp_buffer_pool.c
+++ b/platform/linux-generic/odp_buffer_pool.c
@@ -523,20 +523,20 @@ void odp_buffer_pool_print(odp_buffer_pool_t pool_hdl)
 	pool_id = pool_handle_to_index(pool_hdl);
 	pool    = get_pool_entry(pool_id);
 
-	printf("Pool info\n");
-	printf("---------\n");
-	printf("  pool          %i\n",           pool->s.pool_hdl);
-	printf("  name          %s\n",           pool->s.name);
-	printf("  pool base     %p\n",           pool->s.pool_base_addr);
-	printf("  buf base      0x%"PRIxPTR"\n", pool->s.buf_base);
-	printf("  pool size     0x%"PRIx64"\n",  pool->s.pool_size);
-	printf("  buf size      %zu\n",          pool->s.user_size);
-	printf("  buf align     %zu\n",          pool->s.user_align);
-	printf("  hdr size      %zu\n",          pool->s.hdr_size);
-	printf("  alloc size    %zu\n",          pool->s.buf_size);
-	printf("  offset to hdr %zu\n",          pool->s.buf_offset);
-	printf("  num bufs      %"PRIu64"\n",    pool->s.num_bufs);
-	printf("  free bufs     %"PRIu64"\n",    pool->s.free_bufs);
+	ODP_PRI("Pool info\n");
+	ODP_PRI("---------\n");
+	ODP_PRI("  pool          %i\n",           pool->s.pool_hdl);
+	ODP_PRI("  name          %s\n",           pool->s.name);
+	ODP_PRI("  pool base     %p\n",           pool->s.pool_base_addr);
+	ODP_PRI("  buf base      0x%"PRIxPTR"\n", pool->s.buf_base);
+	ODP_PRI("  pool size     0x%"PRIx64"\n",  pool->s.pool_size);
+	ODP_PRI("  buf size      %zu\n",          pool->s.user_size);
+	ODP_PRI("  buf align     %zu\n",          pool->s.user_align);
+	ODP_PRI("  hdr size      %zu\n",          pool->s.hdr_size);
+	ODP_PRI("  alloc size    %zu\n",          pool->s.buf_size);
+	ODP_PRI("  offset to hdr %zu\n",          pool->s.buf_offset);
+	ODP_PRI("  num bufs      %"PRIu64"\n",    pool->s.num_bufs);
+	ODP_PRI("  free bufs     %"PRIu64"\n",    pool->s.free_bufs);
 
 	/* first chunk */
 	chunk_hdr = pool->s.head;
@@ -546,7 +546,7 @@ void odp_buffer_pool_print(odp_buffer_pool_t pool_hdl)
 		return;
 	}
 
-	printf("\n  First chunk\n");
+	ODP_PRI("\n  First chunk\n");
 
 	for (i = 0; i < chunk_hdr->chunk.num_bufs - 1; i++) {
 		uint32_t index;
@@ -555,20 +555,20 @@ void odp_buffer_pool_print(odp_buffer_pool_t pool_hdl)
 		index = chunk_hdr->chunk.buf_index[i];
 		hdr   = index_to_hdr(pool, index);
 
-		printf("  [%i] addr %p, id %"PRIu32"\n", i, hdr->addr, index);
+		ODP_PRI("  [%i] addr %p, id %"PRIu32"\n", i, hdr->addr, index);
 	}
 
-	printf("  [%i] addr %p, id %"PRIu32"\n", i, chunk_hdr->buf_hdr.addr,
-	       chunk_hdr->buf_hdr.index);
+	ODP_PRI("  [%i] addr %p, id %"PRIu32"\n", i, chunk_hdr->buf_hdr.addr,
+	        chunk_hdr->buf_hdr.index);
 
 	/* next chunk */
 	chunk_hdr = next_chunk(pool, chunk_hdr);
 
 	if (chunk_hdr) {
-		printf("  Next chunk\n");
-		printf("  addr %p, id %"PRIu32"\n", chunk_hdr->buf_hdr.addr,
-		       chunk_hdr->buf_hdr.index);
+		ODP_PRI("  Next chunk\n");
+		ODP_PRI("  addr %p, id %"PRIu32"\n", chunk_hdr->buf_hdr.addr,
+		        chunk_hdr->buf_hdr.index);
 	}
 
-	printf("\n");
+	ODP_PRI("\n");
 }
diff --git a/platform/linux-generic/odp_packet.c b/platform/linux-generic/odp_packet.c
index 82ea879..7fe9ed0 100644
--- a/platform/linux-generic/odp_packet.c
+++ b/platform/linux-generic/odp_packet.c
@@ -346,7 +346,7 @@ void odp_packet_print(odp_packet_t pkt)
 			"  input        %u\n", hdr->input);
 	str[len] = '\0';
 
-	printf("\n%s\n", str);
+	ODP_PRI("\n%s\n", str);
 }
 
 int odp_packet_copy(odp_packet_t pkt_dst, odp_packet_t pkt_src)
diff --git a/platform/linux-generic/odp_shared_memory.c b/platform/linux-generic/odp_shared_memory.c
index 24a5d60..cd4415d 100644
--- a/platform/linux-generic/odp_shared_memory.c
+++ b/platform/linux-generic/odp_shared_memory.c
@@ -285,14 +285,14 @@ void odp_shm_print_all(void)
 {
 	int i;
 
-	printf("\nShared memory\n");
-	printf("--------------\n");
-	printf("  page size:      %"PRIu64" kB\n", odp_sys_page_size() / 1024);
-	printf("  huge page size: %"PRIu64" kB\n",
-	       odp_sys_huge_page_size() / 1024);
-	printf("\n");
+	ODP_PRI("\nShared memory\n");
+	ODP_PRI("--------------\n");
+	ODP_PRI("  page size:      %"PRIu64" kB\n", odp_sys_page_size() / 1024);
+	ODP_PRI("  huge page size: %"PRIu64" kB\n",
+	        odp_sys_huge_page_size() / 1024);
+	ODP_PRI("\n");
 
-	printf("  id name                       kB align huge addr\n");
+	ODP_PRI("  id name                       kB align huge addr\n");
 
 	for (i = 0; i < ODP_SHM_NUM_BLOCKS; i++) {
 		odp_shm_block_t *block;
@@ -300,15 +300,15 @@ void odp_shm_print_all(void)
 		block = &odp_shm_tbl->block[i];
 
 		if (block->addr) {
-			printf("  %2i %-24s %4"PRIu64"  %4"PRIu64" %2c   %p\n",
-			       i,
-			       block->name,
-			       block->size/1024,
-			       block->align,
-			       (block->huge ? '*' : ' '),
-			       block->addr);
+			ODP_PRI("  %2i %-24s %4"PRIu64"  %4"PRIu64" %2c   %p\n",
+			        i,
+			        block->name,
+			        block->size/1024,
+			        block->align,
+			        (block->huge ? '*' : ' '),
+			        block->addr);
 		}
 	}
 
-	printf("\n");
+	ODP_PRI("\n");
 }
