diff --git a/.clang-format b/.clang-format
new file mode 100644
index 0000000..016cbec
--- /dev/null
+++ b/.clang-format
@@ -0,0 +1,9 @@
+BasedOnStyle: Google
+IndentWidth: 8
+ContinuationIndentWidth: 8
+UseTab: Always
+BreakBeforeBraces: Linux
+AllowShortFunctionsOnASingleLine: None
+AllowShortIfStatementsOnASingleLine: false
+AllowShortLoopsOnASingleLine: false
+IndentCaseLabels: false
diff --git a/Makefile b/Makefile
index 99b2a17..5419741 100644
--- a/Makefile
+++ b/Makefile
@@ -157,4 +157,8 @@
 clean:
 	rm -rf $(ROOT_DIR)out
 
+format:
+	find $(ROOT_DIR)src/ -name *.c -o -name *.h | xargs clang-format -style file -i
+	find $(ROOT_DIR)inc/ -name *.c -o -name *.h | xargs clang-format -style file -i
+
 -include $(patsubst %,%.d,$(GLOBAL_OBJS),$(GLOBAL_OFFSETS))
diff --git a/inc/alloc.h b/inc/alloc.h
index 4277495..4570b1a 100644
--- a/inc/alloc.h
+++ b/inc/alloc.h
@@ -9,4 +9,4 @@
 void *halloc_aligned(size_t size, size_t align);
 void *halloc_aligned_nosync(size_t size, size_t align);
 
-#endif  /* _ALLOC_H */
+#endif /* _ALLOC_H */
diff --git a/inc/api.h b/inc/api.h
index edc9797..edcd9e5 100644
--- a/inc/api.h
+++ b/inc/api.h
@@ -14,4 +14,4 @@
 int32_t api_vcpu_run(uint32_t vm_idx, uint32_t vcpu_idx, struct vcpu **next);
 struct vcpu *api_wait_for_interrupt(void);
 
-#endif  /* _API_H */
+#endif /* _API_H */
diff --git a/inc/arch.h b/inc/arch.h
index 84624fb..195d149 100644
--- a/inc/arch.h
+++ b/inc/arch.h
@@ -5,4 +5,4 @@
 
 void arch_putchar(char c);
 
-#endif  /* _ARCH_H */
+#endif /* _ARCH_H */
diff --git a/inc/cpio.h b/inc/cpio.h
index cc244ce..a563ae6 100644
--- a/inc/cpio.h
+++ b/inc/cpio.h
@@ -16,7 +16,7 @@
 
 void cpio_init(struct cpio *c, const void *buf, size_t size);
 void cpio_init_iter(struct cpio *c, struct cpio_iter *iter);
-bool cpio_next(struct cpio_iter *iter, const char **name,
-	       const void **contents, size_t *size);
+bool cpio_next(struct cpio_iter *iter, const char **name, const void **contents,
+	       size_t *size);
 
-#endif  /* _CPIO_H */
+#endif /* _CPIO_H */
diff --git a/inc/cpu.h b/inc/cpu.h
index 43bd356..0dc561b 100644
--- a/inc/cpu.h
+++ b/inc/cpu.h
@@ -50,4 +50,4 @@
 void vcpu_on(struct vcpu *v);
 void vcpu_off(struct vcpu *v);
 
-#endif  /* _CPU_H */
+#endif /* _CPU_H */
diff --git a/inc/decl_offsets.h b/inc/decl_offsets.h
index e0da1e8..fbcff34 100644
--- a/inc/decl_offsets.h
+++ b/inc/decl_offsets.h
@@ -2,9 +2,8 @@
 #define _DECL_OFFSETS_H
 
 #define DECL(name, type, field) \
-    const size_t DEFINE_OFFSET__##name = offsetof(type, field)
+	const size_t DEFINE_OFFSET__##name = offsetof(type, field)
 
-#define DECL_SIZE(name, type) \
-    const size_t DEFINE_OFFSET__name = sizeof(type)
+#define DECL_SIZE(name, type) const size_t DEFINE_OFFSET__name = sizeof(type)
 
-#endif  /* _DECL_OFFSETS_H */
+#endif /* _DECL_OFFSETS_H */
diff --git a/inc/dlog.h b/inc/dlog.h
index d4c08c0..fca8103 100644
--- a/inc/dlog.h
+++ b/inc/dlog.h
@@ -9,4 +9,4 @@
 
 void dlog_init(void (*pchar)(char));
 
-#endif  /* _DLOG_H */
+#endif /* _DLOG_H */
diff --git a/inc/fdt.h b/inc/fdt.h
index fcc1716..44d629e 100644
--- a/inc/fdt.h
+++ b/inc/fdt.h
@@ -23,7 +23,7 @@
 bool fdt_read_property(const struct fdt_node *node, const char *name,
 		       const char **buf, uint32_t *size);
 
-void fdt_add_mem_reservation(struct fdt_header *hdr,
-			     uint64_t addr, uint64_t len);
+void fdt_add_mem_reservation(struct fdt_header *hdr, uint64_t addr,
+			     uint64_t len);
 
-#endif  /* _FDT_H */
+#endif /* _FDT_H */
diff --git a/inc/mm.h b/inc/mm.h
index 1af7496..82066cd 100644
--- a/inc/mm.h
+++ b/inc/mm.h
@@ -40,4 +40,4 @@
 bool mm_ptable_unmap(struct mm_ptable *t, vaddr_t begin, vaddr_t end, int mode);
 void mm_ptable_defrag(struct mm_ptable *t);
 
-#endif  /* _MM_H */
+#endif /* _MM_H */
diff --git a/inc/spinlock.h b/inc/spinlock.h
index 7761980..dca3efb 100644
--- a/inc/spinlock.h
+++ b/inc/spinlock.h
@@ -7,7 +7,10 @@
 	atomic_flag v;
 };
 
-#define SPINLOCK_INIT {.v = ATOMIC_FLAG_INIT}
+#define SPINLOCK_INIT                 \
+	{                             \
+		.v = ATOMIC_FLAG_INIT \
+	}
 
 static inline void sl_init(struct spinlock *l)
 {
@@ -16,7 +19,8 @@
 
 static inline void sl_lock(struct spinlock *l)
 {
-	while (atomic_flag_test_and_set_explicit(&l->v, memory_order_acquire));
+	while (atomic_flag_test_and_set_explicit(&l->v, memory_order_acquire))
+		;
 }
 
 static inline void sl_unlock(struct spinlock *l)
@@ -24,4 +28,4 @@
 	atomic_flag_clear_explicit(&l->v, memory_order_release);
 }
 
-#endif  /* _SPINLOCK_H */
+#endif /* _SPINLOCK_H */
diff --git a/inc/std.h b/inc/std.h
index 7c10200..d7cc124 100644
--- a/inc/std.h
+++ b/inc/std.h
@@ -48,10 +48,11 @@
 #define htole32(v) __builtin_bswap32(v)
 #define htole64(v) __builtin_bswap64(v)
 
-#else /* __BYTE_ORDER__ != __ORDER_LITTLE_ENDIAN__ && __BYTE_ORDER__ != __ORDER_BIG_ENDIAN__ */
+#else /* __BYTE_ORDER__ != __ORDER_LITTLE_ENDIAN__ && \
+	 __BYTE_ORDER__ != __ORDER_BIG_ENDIAN__ */
 
 #error "Unsupported byte order"
 
 #endif
 
-#endif  /* STD_H */
+#endif /* STD_H */
diff --git a/inc/vm.h b/inc/vm.h
index 88ae8ac..eb6a386 100644
--- a/inc/vm.h
+++ b/inc/vm.h
@@ -13,4 +13,4 @@
 void vm_start_vcpu(struct vm *vm, size_t index, size_t entry, size_t arg,
 		   bool is_primary);
 
-#endif  /* _VM_H */
+#endif /* _VM_H */
diff --git a/src/arch/aarch64/handler.c b/src/arch/aarch64/handler.c
index 27ceacf..7fe2ead 100644
--- a/src/arch/aarch64/handler.c
+++ b/src/arch/aarch64/handler.c
@@ -14,27 +14,34 @@
 void irq_current(void)
 {
 	dlog("IRQ from current\n");
-	for (;;);
+	for (;;)
+		;
 }
 
 void sync_current_exception(uint64_t esr, uint64_t elr)
 {
 	switch (esr >> 26) {
 	case 0x25: /* EC = 100101, Data abort. */
-		dlog("Data abort: pc=0x%x, esr=0x%x, ec=0x%x", elr, esr, esr >> 26);
+		dlog("Data abort: pc=0x%x, esr=0x%x, ec=0x%x", elr, esr,
+		     esr >> 26);
 		if (!(esr & (1u << 10))) /* Check FnV bit. */
-			dlog(", far=0x%x, hpfar=0x%x", read_msr(far_el2), read_msr(hpfar_el2) << 8);
+			dlog(", far=0x%x, hpfar=0x%x", read_msr(far_el2),
+			     read_msr(hpfar_el2) << 8);
 		else
 			dlog(", far=invalid");
 
 		dlog("\n");
-		for (;;);
+		for (;;)
+			;
 
 	default:
-		dlog("Unknown sync exception pc=0x%x, esr=0x%x, ec=0x%x\n", elr, esr, esr >> 26);
-		for (;;);
+		dlog("Unknown sync exception pc=0x%x, esr=0x%x, ec=0x%x\n", elr,
+		     esr, esr >> 26);
+		for (;;)
+			;
 	}
-	for (;;);
+	for (;;)
+		;
 }
 
 struct hvc_handler_return hvc_handler(size_t arg0, size_t arg1, size_t arg2,
@@ -95,18 +102,23 @@
 		return api_wait_for_interrupt();
 
 	case 0x24: /* EC = 100100, Data abort. */
-		dlog("Data abort: pc=0x%x, esr=0x%x, ec=0x%x", vcpu->regs.pc, esr, esr >> 26);
+		dlog("Data abort: pc=0x%x, esr=0x%x, ec=0x%x", vcpu->regs.pc,
+		     esr, esr >> 26);
 		if (!(esr & (1u << 10))) /* Check FnV bit. */
-			dlog(", far=0x%x, hpfar=0x%x", read_msr(far_el2), read_msr(hpfar_el2) << 8);
+			dlog(", far=0x%x, hpfar=0x%x", read_msr(far_el2),
+			     read_msr(hpfar_el2) << 8);
 		else
 			dlog(", far=invalid");
 
 		dlog("\n");
-		for (;;);
+		for (;;)
+			;
 
 	default:
-		dlog("Unknown sync exception pc=0x%x, esr=0x%x, ec=0x%x\n", vcpu->regs.pc, esr, esr >> 26);
-		for (;;);
+		dlog("Unknown sync exception pc=0x%x, esr=0x%x, ec=0x%x\n",
+		     vcpu->regs.pc, esr, esr >> 26);
+		for (;;)
+			;
 	}
 
 	return NULL;
diff --git a/src/arch/aarch64/inc/arch_api.h b/src/arch/aarch64/inc/arch_api.h
index 733d818..82b1429 100644
--- a/src/arch/aarch64/inc/arch_api.h
+++ b/src/arch/aarch64/inc/arch_api.h
@@ -1,6 +1,9 @@
 #ifndef _ARCH_API_H
 #define _ARCH_API_H
 
+/* Keep macro alignment */
+/* clang-format off */
+
 /* Return values for vcpu_run() hypervisor call. */
 #define HF_VCPU_YIELD              0x00
 #define HF_VCPU_WAIT_FOR_INTERRUPT 0x01
@@ -11,4 +14,6 @@
 #define HF_VM_GET_COUNT   0xff01
 #define HF_VCPU_GET_COUNT 0xff02
 
-#endif  /* _ARCH_API_H */
+/* clang-format on */
+
+#endif /* _ARCH_API_H */
diff --git a/src/arch/aarch64/inc/arch_barriers.h b/src/arch/aarch64/inc/arch_barriers.h
index 4d4cf08..1cf5224 100644
--- a/src/arch/aarch64/inc/arch_barriers.h
+++ b/src/arch/aarch64/inc/arch_barriers.h
@@ -16,4 +16,4 @@
 	__asm__ volatile("isb");
 }
 
-#endif  /* _ARCH_BARRIERS_H */
+#endif /* _ARCH_BARRIERS_H */
diff --git a/src/arch/aarch64/inc/arch_cpu.h b/src/arch/aarch64/inc/arch_cpu.h
index 9612078..e199b0d 100644
--- a/src/arch/aarch64/inc/arch_cpu.h
+++ b/src/arch/aarch64/inc/arch_cpu.h
@@ -63,21 +63,21 @@
 	__asm volatile("msr DAIFClr, #0xf");
 }
 
-static inline
-void arch_regs_init(struct arch_regs *r, size_t pc, size_t arg, bool is_primary)
+static inline void arch_regs_init(struct arch_regs *r, size_t pc, size_t arg,
+				  bool is_primary)
 {
 	/* TODO: Use constant here. */
-	r->spsr = 5 |         /* M bits, set to EL1h. */
+	r->spsr = 5 |	 /* M bits, set to EL1h. */
 		  (0xf << 6); /* DAIF bits set; disable interrupts. */
 	r->pc = pc;
 	r->r[0] = arg;
-	r->lazy.hcr_el2 = (1u << 31) |  /* RW bit. */
-			  (1u << 2) |   /* PTW, Protected Table Walk. */
-			  (1u << 0);    /* VM: enable stage-2 translation. */
+	r->lazy.hcr_el2 = (1u << 31) | /* RW bit. */
+			  (1u << 2) |  /* PTW, Protected Table Walk. */
+			  (1u << 0);   /* VM: enable stage-2 translation. */
 
 	if (!is_primary)
-		r->lazy.hcr_el2 |= (7u << 3) |   /* AMO, IMO, FMO bits. */
-				   (3u << 13);   /* TWI, TWE bits. */
+		r->lazy.hcr_el2 |= (7u << 3) | /* AMO, IMO, FMO bits. */
+				   (3u << 13); /* TWI, TWE bits. */
 }
 
 static inline void arch_regs_set_retval(struct arch_regs *r, size_t v)
@@ -124,9 +124,9 @@
 
 static inline void arch_set_vm_mm(struct arch_page_table *table)
 {
-	__asm volatile("msr vttbr_el2, %0" : : "r" ((size_t)table));
+	__asm volatile("msr vttbr_el2, %0" : : "r"((size_t)table));
 }
 
 void arch_vptable_init(struct arch_page_table *table);
 
-#endif  /* _ARCH_CPU_H */
+#endif /* _ARCH_CPU_H */
diff --git a/src/arch/aarch64/inc/arch_mm.h b/src/arch/aarch64/inc/arch_mm.h
index c65c488..4ea627d 100644
--- a/src/arch/aarch64/inc/arch_mm.h
+++ b/src/arch/aarch64/inc/arch_mm.h
@@ -180,12 +180,13 @@
 	for (it = begin; it < end; it += (1ull << (PAGE_BITS - 12)))
 		__asm__("tlbi ipas2e1, %0" : : "r"(it));
 
-	__asm__ volatile("dsb ish\n"
-			 "tlbi vmalle1is\n"
-			 "dsb ish\n");
+	__asm__ volatile(
+		"dsb ish\n"
+		"tlbi vmalle1is\n"
+		"dsb ish\n");
 }
 
 uint64_t arch_mm_mode_to_attrs(int mode);
 void arch_mm_init(paddr_t table);
 
-#endif  /* _ARCH_MM_H */
+#endif /* _ARCH_MM_H */
diff --git a/src/arch/aarch64/inc/io.h b/src/arch/aarch64/inc/io.h
index 16f3112..45b2924 100644
--- a/src/arch/aarch64/inc/io.h
+++ b/src/arch/aarch64/inc/io.h
@@ -31,4 +31,4 @@
 	io_write(addr, v);
 }
 
-#endif  /* _IO_H */
+#endif /* _IO_H */
diff --git a/src/arch/aarch64/mm.c b/src/arch/aarch64/mm.c
index 225f1ae..1331cbf 100644
--- a/src/arch/aarch64/mm.c
+++ b/src/arch/aarch64/mm.c
@@ -1,7 +1,10 @@
-#include "arch_cpu.h"
 #include "mm.h"
+#include "arch_cpu.h"
 #include "msr.h"
 
+/* Keep macro alignment */
+/* clang-format off */
+
 #define NON_SHAREABLE   0ull
 #define OUTER_SHAREABLE 2ull
 #define INNER_SHAREABLE 3ull
@@ -51,23 +54,25 @@
 #define STAGE2_ACCESS_READ  1ull
 #define STAGE2_ACCESS_WRITE 2ull
 
+/* clang-format on */
+
 void arch_vptable_init(struct arch_page_table *table)
 {
 	uint64_t i;
 
 	/* TODO: Check each bit. */
 	for (i = 0; i < 512; i++) {
-		table->entry0[i] = 1 |
-			(i << 30) | /* Address */
-			(1 << 10) | /* Access flag. */
-			(0 << 8) | /* sh: non-shareable. this preserves EL1. */
-			(3 << 6) | /* rw */
+		table->entry0[i] =
+			1 | (i << 30) | /* Address */
+			(1 << 10) |     /* Access flag. */
+			(0 << 8) |  /* sh: non-shareable. this preserves EL1. */
+			(3 << 6) |  /* rw */
 			(0xf << 2); /* normal mem; preserves EL0/1. */
-		table->entry1[i] = 1 |
-			((i+512) << 30) | /* Address */
-			(1 << 10) | /* Access flag. */
-			(0 << 8) | /* sh: non-shareable. this preserves EL1. */
-			(3 << 6) | /* rw */
+		table->entry1[i] =
+			1 | ((i + 512) << 30) | /* Address */
+			(1 << 10) |		/* Access flag. */
+			(0 << 8) |  /* sh: non-shareable. this preserves EL1. */
+			(3 << 6) |  /* rw */
 			(0xf << 2); /* normal mem; preserves EL0/1. */
 		table->first[i] = 0;
 	}
@@ -131,15 +136,14 @@
 
 void arch_mm_init(paddr_t table)
 {
-	uint64_t v =
-		(1u << 31) | /* RES1. */
-		(4 << 16) | /* PS: 44 bits. */
-		(0 << 14) | /* TG0: 4 KB granule. */
-		(3 << 12) | /* SH0: inner shareable. */
-		(1 << 10) | /* ORGN0: normal, cacheable ... */
-		(1 << 8) | /* IRGN0: normal, cacheable ... */
-		(2 << 6) | /* SL0: Start at level 0. */
-		(20 << 0); /* T0SZ: 44-bit input address size. */
+	uint64_t v = (1u << 31) | /* RES1. */
+		     (4 << 16) |  /* PS: 44 bits. */
+		     (0 << 14) |  /* TG0: 4 KB granule. */
+		     (3 << 12) |  /* SH0: inner shareable. */
+		     (1 << 10) |  /* ORGN0: normal, cacheable ... */
+		     (1 << 8) |   /* IRGN0: normal, cacheable ... */
+		     (2 << 6) |   /* SL0: Start at level 0. */
+		     (20 << 0);   /* T0SZ: 44-bit input address size. */
 	write_msr(vtcr_el2, v);
 
 	/*
@@ -147,40 +151,37 @@
 	 * 0xff -> Normal memory, Inner/Outer Write-Back Non-transient,
 	 *         Write-Alloc, Read-Alloc.
 	 */
-	write_msr(mair_el2,
-		  (0 << (8 * STAGE1_DEVICEINDX)) |
-		  (0xff << (8 * STAGE1_NORMALINDX)));
+	write_msr(mair_el2, (0 << (8 * STAGE1_DEVICEINDX)) |
+				    (0xff << (8 * STAGE1_NORMALINDX)));
 
 	write_msr(ttbr0_el2, table);
 
 	/*
 	 * Configure tcr_el2.
 	 */
-	v =
-		(1 << 20) | /* TBI, top byte ignored. */
-		(2 << 16) | /* PS, Physical Address Size, 40 bits, 1TB. */
-		(0 << 14) | /* TG0, granule size, 4KB. */
-		(3 << 12) | /* SH0, inner shareable. */
-		(1 << 10) | /* ORGN0, normal mem, WB RA WA Cacheable. */
-		(1 << 8) |  /* IRGN0, normal mem, WB RA WA Cacheable. */
-		(25 << 0) | /* T0SZ, input address is 2^39 bytes. */
-		0;
+	v = (1 << 20) | /* TBI, top byte ignored. */
+	    (2 << 16) | /* PS, Physical Address Size, 40 bits, 1TB. */
+	    (0 << 14) | /* TG0, granule size, 4KB. */
+	    (3 << 12) | /* SH0, inner shareable. */
+	    (1 << 10) | /* ORGN0, normal mem, WB RA WA Cacheable. */
+	    (1 << 8) |  /* IRGN0, normal mem, WB RA WA Cacheable. */
+	    (25 << 0) | /* T0SZ, input address is 2^39 bytes. */
+	    0;
 	write_msr(tcr_el2, v);
 
-	v =
-		(1 << 0) | /* M, enable stage 1 EL2 MMU. */
-		(1 << 1) | /* A, enable alignment check faults. */
-		(1 << 2) | /* C, data cache enable. */
-		(1 << 3) | /* SA, enable stack alignment check. */
-		(3 << 4) | /* RES1 bits. */
-		(1 << 11) | /* RES1 bit. */
-		(1 << 12) | /* I, instruction cache enable. */
-		(1 << 16) | /* RES1 bit. */
-		(1 << 18) | /* RES1 bit. */
-		(1 << 19) | /* WXN bit, writable execute never . */
-		(3 << 22) | /* RES1 bits. */
-		(3 << 28) | /* RES1 bits. */
-		0;
+	v = (1 << 0) |  /* M, enable stage 1 EL2 MMU. */
+	    (1 << 1) |  /* A, enable alignment check faults. */
+	    (1 << 2) |  /* C, data cache enable. */
+	    (1 << 3) |  /* SA, enable stack alignment check. */
+	    (3 << 4) |  /* RES1 bits. */
+	    (1 << 11) | /* RES1 bit. */
+	    (1 << 12) | /* I, instruction cache enable. */
+	    (1 << 16) | /* RES1 bit. */
+	    (1 << 18) | /* RES1 bit. */
+	    (1 << 19) | /* WXN bit, writable execute never . */
+	    (3 << 22) | /* RES1 bits. */
+	    (3 << 28) | /* RES1 bits. */
+	    0;
 
 	__asm volatile("dsb sy");
 	__asm volatile("isb");
diff --git a/src/arch/aarch64/msr.h b/src/arch/aarch64/msr.h
index e242cc2..30916db 100644
--- a/src/arch/aarch64/msr.h
+++ b/src/arch/aarch64/msr.h
@@ -3,17 +3,16 @@
 
 #include <stddef.h>
 
-#define read_msr(name) \
-	__extension__({ \
-		size_t __v; \
-		__asm volatile("mrs %0, " #name : "=r" (__v)); \
-		__v; \
+#define read_msr(name)                                        \
+	__extension__({                                       \
+		size_t __v;                                   \
+		__asm volatile("mrs %0, " #name : "=r"(__v)); \
+		__v;                                          \
 	})
 
-#define write_msr(name, value) \
-	do { \
-		__asm volatile("msr " #name ", %x0" \
-			       : : "rZ" ((size_t)value)); \
+#define write_msr(name, value)                                                \
+	do {                                                                  \
+		__asm volatile("msr " #name ", %x0" : : "rZ"((size_t)value)); \
 	} while (0)
 
-#endif  /* _MSR_H */
+#endif /* _MSR_H */
diff --git a/src/arch/aarch64/pl011.c b/src/arch/aarch64/pl011.c
index 02df2eb..24a3460 100644
--- a/src/arch/aarch64/pl011.c
+++ b/src/arch/aarch64/pl011.c
@@ -20,7 +20,8 @@
 		arch_putchar('\r');
 
 	/* Wait until there is room in the tx buffer. */
-	while (io_read(PL011_BASE + UARTFR) & UARTFR_TXFF);
+	while (io_read(PL011_BASE + UARTFR) & UARTFR_TXFF)
+		;
 
 	dmb();
 
@@ -30,5 +31,6 @@
 	dmb();
 
 	/* Wait until the UART is no longer busy. */
-	while (io_read_mb(PL011_BASE + UARTFR) & UARTFR_BUSY);
+	while (io_read_mb(PL011_BASE + UARTFR) & UARTFR_BUSY)
+		;
 }
diff --git a/src/cpio.c b/src/cpio.c
index c4add22..e8e95ec 100644
--- a/src/cpio.c
+++ b/src/cpio.c
@@ -32,8 +32,8 @@
 	iter->size_left = c->total_size;
 }
 
-bool cpio_next(struct cpio_iter *iter, const char **name,
-	       const void **contents, size_t *size)
+bool cpio_next(struct cpio_iter *iter, const char **name, const void **contents,
+	       size_t *size)
 {
 	const struct cpio_header *h = iter->cur;
 	size_t size_left;
@@ -70,7 +70,8 @@
 	*size = filelen;
 
 	iter->cur = (struct cpio_header *)((char *)*contents + filelen);
-	iter->cur = (struct cpio_header *)(char *)(((size_t)iter->cur + 1) & ~1);
+	iter->cur =
+		(struct cpio_header *)(char *)(((size_t)iter->cur + 1) & ~1);
 	iter->size_left = size_left;
 
 	return true;
diff --git a/src/dlog.c b/src/dlog.c
index c4d49ce..0af7eb5 100644
--- a/src/dlog.c
+++ b/src/dlog.c
@@ -1,13 +1,16 @@
 #include "dlog.h"
 
+#include <stdarg.h>
 #include <stdbool.h>
 #include <stddef.h>
-#include <stdarg.h>
 
 #include "arch.h"
 #include "spinlock.h"
 #include "std.h"
 
+/* Keep macro alignment */
+/* clang-format off */
+
 #define FLAG_SPACE 0x01
 #define FLAG_ZERO  0x02
 #define FLAG_MINUS 0x04
@@ -16,6 +19,8 @@
 #define FLAG_UPPER 0x20
 #define FLAG_NEG   0x40
 
+/* clang-format on */
+
 /*
  * Prints a raw string to the debug log and returns its length.
  */
@@ -200,27 +205,23 @@
 
 			/* Handle the format specifier. */
 			switch (p[1]) {
-			case 's':
-				{
-					char *str = va_arg(args, char *);
-					print_string(str, str, w, flags, ' ');
-				}
+			case 's': {
+				char *str = va_arg(args, char *);
+				print_string(str, str, w, flags, ' ');
 				p++;
-				break;
+			} break;
 
 			case 'd':
-			case 'i':
-				{
-					int v = va_arg(args, int);
-					if (v < 0) {
-						flags |= FLAG_NEG;
-						v = -v;
-					}
-
-					print_num((size_t)v, 10, w, flags);
+			case 'i': {
+				int v = va_arg(args, int);
+				if (v < 0) {
+					flags |= FLAG_NEG;
+					v = -v;
 				}
+
+				print_num((size_t)v, 10, w, flags);
 				p++;
-				break;
+			} break;
 
 			case 'X':
 				flags |= FLAG_UPPER;
diff --git a/src/fdt.c b/src/fdt.c
index d20b82e..162b606 100644
--- a/src/fdt.c
+++ b/src/fdt.c
@@ -78,8 +78,8 @@
 	return false;
 }
 
-static bool fdt_tokenizer_bytes(struct fdt_tokenizer *t,
-				const char **res, size_t size)
+static bool fdt_tokenizer_bytes(struct fdt_tokenizer *t, const char **res,
+				size_t size)
 {
 	const char *next = t->cur + size;
 	if (next > t->end)
@@ -197,7 +197,8 @@
 	const char *name;
 	const char *buf;
 	uint32_t size;
-	while (fdt_next_property(t, &name, &buf, &size));
+	while (fdt_next_property(t, &name, &buf, &size))
+		;
 }
 
 static bool fdt_skip_node(struct fdt_tokenizer *t)
@@ -320,9 +321,11 @@
 			depth++;
 			while (fdt_next_property(&t, &name, &buf, &size)) {
 				size_t i;
-				dlog("%*sproperty: \"%s\" (", 2 * depth, "", name);
+				dlog("%*sproperty: \"%s\" (", 2 * depth, "",
+				     name);
 				for (i = 0; i < size; i++)
-					dlog("%s%02x", i == 0 ? "" : " ", buf[i]);
+					dlog("%s%02x", i == 0 ? "" : " ",
+					     buf[i]);
 				dlog(")\n");
 			}
 		}
@@ -338,9 +341,12 @@
 
 	dlog("fdt: off_mem_rsvmap=%u\n", be32toh(hdr->off_mem_rsvmap));
 	{
-		struct fdt_reserve_entry *e = (struct fdt_reserve_entry *)((size_t)hdr + be32toh(hdr->off_mem_rsvmap));
+		struct fdt_reserve_entry *e =
+			(struct fdt_reserve_entry
+				 *)((size_t)hdr + be32toh(hdr->off_mem_rsvmap));
 		while (e->address || e->size) {
-			dlog("Entry: %p (0x%x bytes)\n", be64toh(e->address), be64toh(e->size));
+			dlog("Entry: %p (0x%x bytes)\n", be64toh(e->address),
+			     be64toh(e->size));
 			e++;
 		}
 	}
@@ -351,10 +357,14 @@
 	/* TODO: Clean this up. */
 	char *begin = (char *)hdr + be32toh(hdr->off_mem_rsvmap);
 	struct fdt_reserve_entry *e = (struct fdt_reserve_entry *)begin;
-	hdr->totalsize = htobe32(be32toh(hdr->totalsize) + sizeof(struct fdt_reserve_entry));
-	hdr->off_dt_struct = htobe32(be32toh(hdr->off_dt_struct) + sizeof(struct fdt_reserve_entry));
-	hdr->off_dt_strings = htobe32(be32toh(hdr->off_dt_strings) + sizeof(struct fdt_reserve_entry));
-	memmove(begin + sizeof(struct fdt_reserve_entry), begin, be32toh(hdr->totalsize) - be32toh(hdr->off_mem_rsvmap));
+	hdr->totalsize = htobe32(be32toh(hdr->totalsize) +
+				 sizeof(struct fdt_reserve_entry));
+	hdr->off_dt_struct = htobe32(be32toh(hdr->off_dt_struct) +
+				     sizeof(struct fdt_reserve_entry));
+	hdr->off_dt_strings = htobe32(be32toh(hdr->off_dt_strings) +
+				      sizeof(struct fdt_reserve_entry));
+	memmove(begin + sizeof(struct fdt_reserve_entry), begin,
+		be32toh(hdr->totalsize) - be32toh(hdr->off_mem_rsvmap));
 	e->address = htobe64(addr);
 	e->size = htobe64(len);
 }
diff --git a/src/main.c b/src/main.c
index 0c18d79..e7639f5 100644
--- a/src/main.c
+++ b/src/main.c
@@ -45,7 +45,7 @@
 }
 
 static bool fdt_read_number(const struct fdt_node *node, const char *name,
-		     uint64_t *value)
+			    uint64_t *value)
 {
 	const char *data;
 	uint32_t size;
@@ -161,8 +161,8 @@
 		/* Traverse all memory ranges within this node. */
 		while (size >= entry_size) {
 			uint64_t addr = convert_number(data, address_size);
-			uint64_t len = convert_number(data + address_size,
-						      size_size);
+			uint64_t len =
+				convert_number(data + address_size, size_size);
 
 			if (len > *block_size) {
 				/* Remember the largest range we've found. */
@@ -321,8 +321,8 @@
 	return false;
 }
 
-static bool load_secondary(struct cpio *c,
-			   uint64_t mem_start, uint64_t *mem_size)
+static bool load_secondary(struct cpio *c, uint64_t mem_start,
+			   uint64_t *mem_size)
 {
 	struct memiter it;
 	struct memiter str;
@@ -335,10 +335,10 @@
 		return false;
 	}
 
-	for (count = 0; memiter_parse_uint(&it, &mem) &&
-	     memiter_parse_uint(&it, &cpu) &&
-	     memiter_parse_str(&it, &str) &&
-	     count < MAX_VMS; count++) {
+	for (count = 0;
+	     memiter_parse_uint(&it, &mem) && memiter_parse_uint(&it, &cpu) &&
+	     memiter_parse_str(&it, &str) && count < MAX_VMS;
+	     count++) {
 		struct memiter kernel;
 
 		if (!memiter_find_file(c, &str, &kernel)) {
@@ -353,7 +353,9 @@
 		}
 
 		if (mem < kernel.limit - kernel.next) {
-			dlog("Kernel is larger than available memory for vm %u\n", count);
+			dlog("Kernel is larger than available memory for vm "
+			     "%u\n",
+			     count);
 			continue;
 		}
 
@@ -367,8 +369,8 @@
 		dlog("Loaded VM%u with %u vcpus, entry at 0x%x\n", count, cpu,
 		     mem_start + *mem_size);
 		vm_init(secondary_vm + count, cpu);
-		vm_start_vcpu(secondary_vm + count, 0,
-			      mem_start + *mem_size, 0, false);
+		vm_start_vcpu(secondary_vm + count, 0, mem_start + *mem_size, 0,
+			      false);
 	}
 
 	secondary_vm_count = count;
@@ -439,28 +441,29 @@
 
 	if (!mm_ptable_init(&ptable, MM_MODE_NOSYNC | MM_MODE_STAGE1)) {
 		dlog("Unable to allocate memory for page table.\n");
-		for (;;);
+		for (;;)
+			;
 	}
 
 	dlog("text: 0x%x - 0x%x\n", text_begin, text_end);
 	dlog("rodata: 0x%x - 0x%x\n", rodata_begin, rodata_end);
 	dlog("data: 0x%x - 0x%x\n", data_begin, data_end);
 
-        /* Map page for uart. */
-        mm_ptable_map_page(&ptable, PL011_BASE, PL011_BASE,
+	/* Map page for uart. */
+	mm_ptable_map_page(&ptable, PL011_BASE, PL011_BASE,
 			   MM_MODE_R | MM_MODE_W | MM_MODE_D | MM_MODE_NOSYNC |
-			   MM_MODE_STAGE1);
+				   MM_MODE_STAGE1);
 
-        /* Map each section. */
-        mm_ptable_map(&ptable, (vaddr_t)text_begin, (vaddr_t)text_end,
+	/* Map each section. */
+	mm_ptable_map(&ptable, (vaddr_t)text_begin, (vaddr_t)text_end,
 		      (paddr_t)text_begin,
 		      MM_MODE_X | MM_MODE_NOSYNC | MM_MODE_STAGE1);
 
-        mm_ptable_map(&ptable, (vaddr_t)rodata_begin, (vaddr_t)rodata_end,
+	mm_ptable_map(&ptable, (vaddr_t)rodata_begin, (vaddr_t)rodata_end,
 		      (paddr_t)rodata_begin,
 		      MM_MODE_R | MM_MODE_NOSYNC | MM_MODE_STAGE1);
 
-        mm_ptable_map(&ptable, (vaddr_t)data_begin, (vaddr_t)data_end,
+	mm_ptable_map(&ptable, (vaddr_t)data_begin, (vaddr_t)data_end,
 		      (paddr_t)data_begin,
 		      MM_MODE_R | MM_MODE_W | MM_MODE_NOSYNC | MM_MODE_STAGE1);
 
@@ -476,8 +479,7 @@
 		/* Map in the fdt header. */
 		if (!mm_ptable_map(&ptable, (vaddr_t)fdt,
 				   (vaddr_t)fdt + fdt_header_size(),
-				   (paddr_t)fdt,
-				   MM_MODE_R | MM_MODE_STAGE1)) {
+				   (paddr_t)fdt, MM_MODE_R | MM_MODE_STAGE1)) {
 			dlog("Unable to map FDT header.\n");
 			break;
 		}
@@ -488,8 +490,7 @@
 		 */
 		if (!mm_ptable_map(&ptable, (vaddr_t)fdt,
 				   (vaddr_t)fdt + fdt_total_size(fdt),
-				   (paddr_t)fdt,
-				   MM_MODE_R | MM_MODE_STAGE1)) {
+				   (paddr_t)fdt, MM_MODE_R | MM_MODE_STAGE1)) {
 			dlog("Unable to map FDT.\n");
 			break;
 		}
@@ -515,11 +516,11 @@
 		cpio_init(&c, (void *)begin, end - begin);
 
 		/* Map the fdt in r/w mode in preparation for extending it. */
-		if (!mm_ptable_map(&ptable, (vaddr_t)fdt,
-				   (vaddr_t)fdt + fdt_total_size(fdt) +
-				   PAGE_SIZE,
-				   (paddr_t)fdt,
-				   MM_MODE_R | MM_MODE_W | MM_MODE_STAGE1)) {
+		if (!mm_ptable_map(
+			    &ptable, (vaddr_t)fdt,
+			    (vaddr_t)fdt + fdt_total_size(fdt) + PAGE_SIZE,
+			    (paddr_t)fdt,
+			    MM_MODE_R | MM_MODE_W | MM_MODE_STAGE1)) {
 			dlog("Unable to map FDT in r/w mode.\n");
 			break;
 		}
@@ -532,9 +533,10 @@
 					mem_size - new_mem_size);
 
 		/* Unmap FDT. */
-		if (!mm_ptable_unmap(&ptable, (vaddr_t)fdt,
-				     (vaddr_t)fdt + fdt_total_size(fdt) +
-				     PAGE_SIZE, MM_MODE_STAGE1)) {
+		if (!mm_ptable_unmap(
+			    &ptable, (vaddr_t)fdt,
+			    (vaddr_t)fdt + fdt_total_size(fdt) + PAGE_SIZE,
+			    MM_MODE_STAGE1)) {
 			dlog("Unable to unmap the FDT.\n");
 			break;
 		}
diff --git a/src/mm.c b/src/mm.c
index 4a72d56..8bfd6f4 100644
--- a/src/mm.c
+++ b/src/mm.c
@@ -6,9 +6,14 @@
 #include "alloc.h"
 #include "dlog.h"
 
+/* Keep macro alignment */
+/* clang-format off */
+
 #define MAP_FLAG_SYNC   0x01
 #define MAP_FLAG_COMMIT 0x02
 
+/* clang-format on */
+
 /**
  * Calculates the size of the address space represented by a page table entry at
  * the given level.
@@ -58,7 +63,7 @@
 
 	/* Allocate a new table. */
 	ntable = (sync_alloc ? halloc_aligned : halloc_aligned_nosync)(
-			PAGE_SIZE, PAGE_SIZE);
+		PAGE_SIZE, PAGE_SIZE);
 	if (!ntable) {
 		dlog("Failed to allocate memory for page table\n");
 		return NULL;
@@ -142,12 +147,12 @@
 				mm_free_page_pte(pte, level, sync);
 			}
 		} else {
-			pte_t *nt = mm_populate_table_pte(table + i, level,
-							  sync);
+			pte_t *nt =
+				mm_populate_table_pte(table + i, level, sync);
 			if (!nt)
 				return false;
 
-			if (!mm_map_level(va, va_end, pa, attrs, nt, level-1,
+			if (!mm_map_level(va, va_end, pa, attrs, nt, level - 1,
 					  flags))
 				return false;
 		}
