Index: libspe2/spebase/elf_loader.c
===================================================================
--- libspe2/spebase/elf_loader.c	(revision 136)
+++ libspe2/spebase/elf_loader.c	(working copy)
@@ -33,6 +33,10 @@
 #include "elf_loader.h"
 #include "spebase.h"
 
+#ifndef PF_OVERLAY
+#define PF_OVERLAY (1 << 27)
+#endif
+
 #ifdef DEBUG
 static void display_debug_output(Elf32_Ehdr *elf_start, Elf32_Shdr *sh);
 #endif /*DEBUG*/
@@ -153,20 +157,6 @@ _base_spe_parse_isolated_elf(spe_program
 	return 0;
 }
 
-static int
-overlay(Elf32_Phdr *ph, Elf32_Phdr *prev_ph)
-{
-	/*
-	 * If our ph segment virtual address fits within that of the
-	 * previous ph, this is an overlay.
-	 */
-	if (prev_ph && (ph->p_vaddr >= prev_ph->p_vaddr) &&
-	    (ph->p_vaddr < (prev_ph->p_vaddr + prev_ph->p_memsz)))
-		return 1;
-	else
-		return 0;
-}
-
 static void
 copy_to_ld_buffer(spe_program_handle_t *handle, void *buffer, Elf32_Phdr
 		  *ph, Elf32_Off toe_addr, long toe_size)
@@ -242,7 +232,7 @@ _base_spe_load_spe_elf (spe_program_hand
 {
 	Elf32_Ehdr *ehdr;
 	Elf32_Phdr *phdr;
-	Elf32_Phdr *ph, *prev_ph;
+	Elf32_Phdr *ph;
 
 	Elf32_Shdr *shdr;
 	Elf32_Shdr *sh;
@@ -303,10 +293,10 @@ _base_spe_load_spe_elf (spe_program_hand
 	 * Load all PT_LOAD segments onto the SPE local store buffer.
 	 */
 	DEBUG_PRINTF("Segments: 0x%x\n", ehdr->e_phnum);
-	for (ph = phdr, prev_ph = NULL; ph < &phdr[ehdr->e_phnum]; ++ph) {
+	for (ph = phdr; ph < &phdr[ehdr->e_phnum]; ++ph) {
 		switch (ph->p_type) {
 		case PT_LOAD:
-			if (!overlay(ph, prev_ph)) {
+			if (!(ph->p_flags & PF_OVERLAY)) {
 				if (ph->p_filesz < ph->p_memsz) {
 					DEBUG_PRINTF("padding loaded image with zeros:\n");
 					DEBUG_PRINTF("start: 0x%04x\n", ph->p_vaddr + ph->p_filesz);
