Index: uspace/lib/c/generic/as.c
===================================================================
--- uspace/lib/c/generic/as.c	(revision 1edd6d0c4201fd549dcce1ac7154c0ee7d6ab4c9)
+++ uspace/lib/c/generic/as.c	(revision 3b3fcf369f7972634c32240f6c2c7e342deadefe)
@@ -108,4 +108,19 @@
 }
 
+/** Get address-space area information.
+ *
+ * @param address Virtual address pointing into the address space area being
+ *                modified.
+ * @param info    Pointer to information structure to fill in.
+ *
+ * @return zero on success or a code from @ref errno.h on failure.
+ *
+ */
+errno_t as_area_get_info(void *address, as_area_info_t *info)
+{
+	return (errno_t) __SYSCALL2(SYS_AS_AREA_GET_INFO, (sysarg_t) address,
+	    (sysarg_t) info);
+}
+
 /** Find mapping to physical address.
  *
Index: uspace/lib/c/generic/ipc_test.c
===================================================================
--- uspace/lib/c/generic/ipc_test.c	(revision 1edd6d0c4201fd549dcce1ac7154c0ee7d6ab4c9)
+++ uspace/lib/c/generic/ipc_test.c	(revision 3b3fcf369f7972634c32240f6c2c7e342deadefe)
@@ -34,4 +34,5 @@
 
 #include <abi/ipc/interfaces.h>
+#include <as.h>
 #include <errno.h>
 #include <ipc/services.h>
@@ -111,4 +112,113 @@
 }
 
+/** Get size of shared read-only memory area.
+ *
+ * @param test IPC test service
+ * @param rsize Place to store size of the shared area
+ * @return EOK on success or an error code
+ */
+errno_t ipc_test_get_ro_area_size(ipc_test_t *test, size_t *rsize)
+{
+	async_exch_t *exch;
+	errno_t retval;
+	sysarg_t size;
+
+	exch = async_exchange_begin(test->sess);
+	retval = async_req_0_1(exch, IPC_TEST_GET_RO_AREA_SIZE, &size);
+	async_exchange_end(exch);
+
+	if (retval != EOK)
+		return retval;
+
+	*rsize = size;
+	return EOK;
+}
+
+/** Get size of shared read-write memory area.
+ *
+ * @param test IPC test service
+ * @param rsize Place to store size of the shared area
+ * @return EOK on success or an error code
+ */
+errno_t ipc_test_get_rw_area_size(ipc_test_t *test, size_t *rsize)
+{
+	async_exch_t *exch;
+	errno_t retval;
+	sysarg_t size;
+
+	exch = async_exchange_begin(test->sess);
+	retval = async_req_0_1(exch, IPC_TEST_GET_RW_AREA_SIZE, &size);
+	async_exchange_end(exch);
+
+	if (retval != EOK)
+		return retval;
+
+	*rsize = size;
+	return EOK;
+}
+
+/** Test share-in of read-only area.
+ *
+ * @param test IPC test service
+ * @param size Size of the shared area
+ * @param rptr Place to store pointer to the shared-in area
+ * @return EOK on success or an error code
+ */
+errno_t ipc_test_share_in_ro(ipc_test_t *test, size_t size, const void **rptr)
+{
+	async_exch_t *exch;
+	ipc_call_t answer;
+	aid_t req;
+	void *dst;
+	errno_t rc;
+
+	exch = async_exchange_begin(test->sess);
+	req = async_send_0(exch, IPC_TEST_SHARE_IN_RO, &answer);
+
+	dst = NULL;
+	rc = async_share_in_start_0_0(exch, size, &dst);
+	if (rc != EOK || dst == AS_MAP_FAILED) {
+		async_exchange_end(exch);
+		async_forget(req);
+		return ENOMEM;
+	}
+
+	async_exchange_end(exch);
+	async_wait_for(req, NULL);
+	*rptr = dst;
+	return EOK;
+}
+
+/** Test share-in of read-write area.
+ *
+ * @param test IPC test service
+ * @param size Size of the shared area
+ * @param rptr Place to store pointer to the shared-in area
+ * @return EOK on success or an error code
+ */
+errno_t ipc_test_share_in_rw(ipc_test_t *test, size_t size, void **rptr)
+{
+	async_exch_t *exch;
+	ipc_call_t answer;
+	aid_t req;
+	void *dst;
+	errno_t rc;
+
+	exch = async_exchange_begin(test->sess);
+	req = async_send_0(exch, IPC_TEST_SHARE_IN_RW, &answer);
+
+	rc = async_share_in_start_0_0(exch, size, &dst);
+	if (rc != EOK || dst == AS_MAP_FAILED) {
+		async_exchange_end(exch);
+		async_forget(req);
+		return ENOMEM;
+	}
+
+	async_exchange_end(exch);
+	async_wait_for(req, NULL);
+	*rptr = dst;
+	return EOK;
+}
+
 /** @}
  */
Index: uspace/lib/c/include/as.h
===================================================================
--- uspace/lib/c/include/as.h	(revision 1edd6d0c4201fd549dcce1ac7154c0ee7d6ab4c9)
+++ uspace/lib/c/include/as.h	(revision 3b3fcf369f7972634c32240f6c2c7e342deadefe)
@@ -59,4 +59,5 @@
 extern errno_t as_area_resize(void *, size_t, unsigned int);
 extern errno_t as_area_change_flags(void *, unsigned int);
+extern errno_t as_area_get_info(void *, as_area_info_t *);
 extern errno_t as_area_destroy(void *);
 extern void *set_maxheapsize(size_t);
Index: uspace/lib/c/include/ipc/ipc_test.h
===================================================================
--- uspace/lib/c/include/ipc/ipc_test.h	(revision 1edd6d0c4201fd549dcce1ac7154c0ee7d6ab4c9)
+++ uspace/lib/c/include/ipc/ipc_test.h	(revision 3b3fcf369f7972634c32240f6c2c7e342deadefe)
@@ -39,5 +39,9 @@
 
 typedef enum {
-	IPC_TEST_PING = IPC_FIRST_USER_METHOD
+	IPC_TEST_PING = IPC_FIRST_USER_METHOD,
+	IPC_TEST_GET_RO_AREA_SIZE,
+	IPC_TEST_GET_RW_AREA_SIZE,
+	IPC_TEST_SHARE_IN_RO,
+	IPC_TEST_SHARE_IN_RW
 } ipc_test_request_t;
 
Index: uspace/lib/c/include/ipc_test.h
===================================================================
--- uspace/lib/c/include/ipc_test.h	(revision 1edd6d0c4201fd549dcce1ac7154c0ee7d6ab4c9)
+++ uspace/lib/c/include/ipc_test.h	(revision 3b3fcf369f7972634c32240f6c2c7e342deadefe)
@@ -46,4 +46,8 @@
 extern void ipc_test_destroy(ipc_test_t *);
 extern errno_t ipc_test_ping(ipc_test_t *);
+extern errno_t ipc_test_get_ro_area_size(ipc_test_t *, size_t *);
+extern errno_t ipc_test_get_rw_area_size(ipc_test_t *, size_t *);
+extern errno_t ipc_test_share_in_ro(ipc_test_t *, size_t, const void **);
+extern errno_t ipc_test_share_in_rw(ipc_test_t *, size_t, void **);
 
 #endif
