diff --git a/src/layout.c b/src/layout.c
new file mode 100644
index 0000000..68b645e
--- /dev/null
+++ b/src/layout.c
@@ -0,0 +1,92 @@
+/*
+ * Copyright 2018 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "hf/layout.h"
+
+/**
+ * Get the address the .text section begins at.
+ */
+paddr_t layout_text_begin(void)
+{
+	extern uint8_t text_begin[];
+	return pa_init((uintpaddr_t)text_begin);
+}
+
+/**
+ * Get the address the .text section ends at.
+ */
+paddr_t layout_text_end(void)
+{
+	extern uint8_t text_end[];
+	return pa_init((uintpaddr_t)text_end);
+}
+
+/**
+ * Get the address the .rodata section begins at.
+ */
+paddr_t layout_rodata_begin(void)
+{
+	extern uint8_t rodata_begin[];
+	return pa_init((uintpaddr_t)rodata_begin);
+}
+
+/**
+ * Get the address the .rodata section ends at.
+ */
+paddr_t layout_rodata_end(void)
+{
+	extern uint8_t rodata_end[];
+	return pa_init((uintpaddr_t)rodata_end);
+}
+
+/**
+ * Get the address the .data section begins at.
+ */
+paddr_t layout_data_begin(void)
+{
+	extern uint8_t data_begin[];
+	return pa_init((uintpaddr_t)data_begin);
+}
+
+/**
+ * Get the address the .data section ends at.
+ */
+paddr_t layout_data_end(void)
+{
+	extern uint8_t data_end[];
+	return pa_init((uintpaddr_t)data_end);
+}
+
+/**
+ * Get the address the loaded image ends at.
+ */
+paddr_t layout_bin_end(void)
+{
+	extern uint8_t bin_end[];
+	return pa_init((uintpaddr_t)bin_end);
+}
+
+/**
+ * Get the address to load the primary VM at.
+ *
+ * This is placed just after the image.
+ */
+paddr_t layout_primary_begin(void)
+{
+	/* TODO: This is a hack. We must read the alignment from the binary. */
+	paddr_t bin_end = layout_bin_end();
+	return pa_init((pa_addr(bin_end) + 0x80000 - 1) & ~(0x80000 - 1));
+}
