diff --git a/uid.c b/uid.c
index 376d059..1f8c365 100644
--- a/uid.c
+++ b/uid.c
@@ -7,15 +7,17 @@
 # define SIZEIFY_(x,size)	SIZEIFY__(x,size)
 # define SIZEIFY__(x,size)	x ## size
 
-# define sys_getuid	SIZEIFY(sys_getuid)
-# define sys_setfsuid	SIZEIFY(sys_setfsuid)
-# define sys_setuid	SIZEIFY(sys_setuid)
-# define sys_getresuid	SIZEIFY(sys_getresuid)
-# define sys_setreuid	SIZEIFY(sys_setreuid)
-# define sys_setresuid	SIZEIFY(sys_setresuid)
+# define printuid	SIZEIFY(printuid)
 # define sys_chown	SIZEIFY(sys_chown)
 # define sys_fchown	SIZEIFY(sys_fchown)
-# define printuid	SIZEIFY(printuid)
+# define sys_getgroups	SIZEIFY(sys_getgroups)
+# define sys_getresuid	SIZEIFY(sys_getresuid)
+# define sys_getuid	SIZEIFY(sys_getuid)
+# define sys_setfsuid	SIZEIFY(sys_setfsuid)
+# define sys_setgroups	SIZEIFY(sys_setgroups)
+# define sys_setresuid	SIZEIFY(sys_setresuid)
+# define sys_setreuid	SIZEIFY(sys_setreuid)
+# define sys_setuid	SIZEIFY(sys_setuid)
 #endif /* STRACE_UID_SIZE */
 
 #include "defs.h"
@@ -141,4 +143,117 @@
 		tprintf("%s%u", text, uid);
 }
 
+int
+sys_setgroups(struct tcb *tcp)
+{
+	if (entering(tcp)) {
+		unsigned long len, size, start, cur, end, abbrev_end;
+		uid_t gid;
+		int failed = 0;
+
+		len = tcp->u_arg[0];
+		tprintf("%lu, ", len);
+		if (len == 0) {
+			tprints("[]");
+			return 0;
+		}
+		start = tcp->u_arg[1];
+		if (start == 0) {
+			tprints("NULL");
+			return 0;
+		}
+		size = len * sizeof(gid);
+		end = start + size;
+		if (!verbose(tcp) || size / sizeof(gid) != len || end < start) {
+			tprintf("%#lx", start);
+			return 0;
+		}
+		if (abbrev(tcp)) {
+			abbrev_end = start + max_strlen * sizeof(gid);
+			if (abbrev_end < start)
+				abbrev_end = end;
+		} else {
+			abbrev_end = end;
+		}
+		tprints("[");
+		for (cur = start; cur < end; cur += sizeof(gid)) {
+			if (cur > start)
+				tprints(", ");
+			if (cur >= abbrev_end) {
+				tprints("...");
+				break;
+			}
+			if (umoven(tcp, cur, sizeof(gid), (char *) &gid) < 0) {
+				tprints("?");
+				failed = 1;
+				break;
+			}
+			tprintf("%u", (unsigned int) gid);
+		}
+		tprints("]");
+		if (failed)
+			tprintf(" %#lx", tcp->u_arg[1]);
+	}
+	return 0;
+}
+
+int
+sys_getgroups(struct tcb *tcp)
+{
+	unsigned long len;
+
+	if (entering(tcp)) {
+		len = tcp->u_arg[0];
+		tprintf("%lu, ", len);
+	} else {
+		unsigned long size, start, cur, end, abbrev_end;
+		uid_t gid;
+		int failed = 0;
+
+		start = tcp->u_arg[1];
+		if (start == 0) {
+			tprints("NULL");
+			return 0;
+		}
+		len = tcp->u_rval;
+		if (len == 0) {
+			tprints("[]");
+			return 0;
+		}
+		size = len * sizeof(gid);
+		end = start + size;
+		if (!verbose(tcp) || tcp->u_arg[0] == 0 ||
+		    size / sizeof(gid) != len || end < start) {
+			tprintf("%#lx", start);
+			return 0;
+		}
+		if (abbrev(tcp)) {
+			abbrev_end = start + max_strlen * sizeof(gid);
+			if (abbrev_end < start)
+				abbrev_end = end;
+		} else {
+			abbrev_end = end;
+		}
+		tprints("[");
+		for (cur = start; cur < end; cur += sizeof(gid)) {
+			if (cur > start)
+				tprints(", ");
+			if (cur >= abbrev_end) {
+				tprints("...");
+				break;
+			}
+			if (umoven(tcp, cur, sizeof(gid), (char *) &gid) < 0) {
+				tprints("?");
+				failed = 1;
+				break;
+			}
+			tprintf("%u", (unsigned int) gid);
+		}
+		tprints("]");
+		if (failed)
+			tprintf(" %#lx", tcp->u_arg[1]);
+	}
+	return 0;
+}
+
 #endif /* STRACE_UID_SIZE */
