Index: stand/common/load_elf.c =================================================================== --- stand/common/load_elf.c +++ stand/common/load_elf.c @@ -51,6 +51,16 @@ #define ELF_TARG_MACH EM_X86_64 #endif +#if defined(CROSS_ENDIAN_LOADER) +#if ELF_TARG_DATA == ELFDATA2MSB +#undef ELF_TARG_DATA +#define ELF_TARG_DATA ELFDATA2LSB +#else +#undef ELF_TARG_DATA +#define ELF_TARG_DATA ELFDATA2MSB +#endif +#endif + typedef struct elf_file { Elf_Phdr *ph; Elf_Ehdr *ehdr; Index: stand/defs.mk =================================================================== --- stand/defs.mk +++ stand/defs.mk @@ -111,6 +111,11 @@ CFLAGS+= -m32 -mcpu=powerpc -mbig-endian .endif +# For powerpc64le pseries, we want a cross-endian loader. +.if ${MACHINE_ARCH} == "powerpc64le" +CFLAGS+= -DCROSS_ENDIAN_LOADER +.endif + # For amd64, there's a bit of mixed bag. Some of the tree (i386, lib*32) is # build 32-bit and some 64-bit (lib*, efi). Centralize all the 32-bit magic here # and activate it when DO32 is explicitly defined to be 1. Index: stand/powerpc/ofw/Makefile =================================================================== --- stand/powerpc/ofw/Makefile +++ stand/powerpc/ofw/Makefile @@ -25,7 +25,7 @@ SRCS+= ofwfdt.c .endif -.if ${MACHINE_ARCH} == "powerpc64" +.if ${MACHINE_ARCH:Mpowerpc64*} != "" SRCS+= cas.c CFLAGS+= -DCAS .endif