[PowerPC64LE] Set up powerpc.powerpc64le architecture
This is the initial set up for PowerPC64LE. The current plan is for this arch to remain experimental for FreeBSD 13. This started as a weekend learning project for me and kinda snowballed from there. (More to follow momentarily.) Reviewed by: imp (earlier version), emaste Sponsored by: Tag1 Consulting, Inc. Differential Revision: https://reviews.freebsd.org/D26399
This commit is contained in:
parent
2be2e7e549
commit
b75abea4d0
2
Makefile
2
Makefile
@ -500,7 +500,7 @@ worlds: .PHONY
|
|||||||
EXTRA_ARCHES_mips= mipsel mipshf mipselhf mips64el mips64hf mips64elhf
|
EXTRA_ARCHES_mips= mipsel mipshf mipselhf mips64el mips64hf mips64elhf
|
||||||
EXTRA_ARCHES_mips+= mipsn32
|
EXTRA_ARCHES_mips+= mipsn32
|
||||||
# powerpcspe excluded from main list until clang fixed
|
# powerpcspe excluded from main list until clang fixed
|
||||||
EXTRA_ARCHES_powerpc= powerpcspe
|
EXTRA_ARCHES_powerpc= powerpcspe powerpc64le
|
||||||
.endif
|
.endif
|
||||||
TARGETS?=amd64 arm arm64 i386 mips powerpc riscv
|
TARGETS?=amd64 arm arm64 i386 mips powerpc riscv
|
||||||
_UNIVERSE_TARGETS= ${TARGETS}
|
_UNIVERSE_TARGETS= ${TARGETS}
|
||||||
|
@ -152,6 +152,7 @@ KNOWN_ARCHES?= aarch64/arm64 \
|
|||||||
mips64hf/mips \
|
mips64hf/mips \
|
||||||
powerpc \
|
powerpc \
|
||||||
powerpc64/powerpc \
|
powerpc64/powerpc \
|
||||||
|
powerpc64le/powerpc \
|
||||||
powerpcspe/powerpc \
|
powerpcspe/powerpc \
|
||||||
riscv64/riscv \
|
riscv64/riscv \
|
||||||
riscv64sf/riscv
|
riscv64sf/riscv
|
||||||
|
@ -128,7 +128,7 @@ _CPUCFLAGS = -Wa,-me500 -msoft-float
|
|||||||
. else
|
. else
|
||||||
_CPUCFLAGS = -mcpu=${CPUTYPE} -mno-powerpc64
|
_CPUCFLAGS = -mcpu=${CPUTYPE} -mno-powerpc64
|
||||||
. endif
|
. endif
|
||||||
. elif ${MACHINE_ARCH} == "powerpc64"
|
. elif ${MACHINE_ARCH:Mpowerpc64*} != ""
|
||||||
_CPUCFLAGS = -mcpu=${CPUTYPE}
|
_CPUCFLAGS = -mcpu=${CPUTYPE}
|
||||||
. elif ${MACHINE_CPUARCH} == "mips"
|
. elif ${MACHINE_CPUARCH} == "mips"
|
||||||
# mips[1234], mips32, mips64, and all later releases need to have mips
|
# mips[1234], mips32, mips64, and all later releases need to have mips
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
${MACHINE_ARCH} == "amd64" || \
|
${MACHINE_ARCH} == "amd64" || \
|
||||||
${MACHINE_ARCH} == "i386" || \
|
${MACHINE_ARCH} == "i386" || \
|
||||||
(${MACHINE} == "arm" && ${MACHINE_ARCH:Marm*eb*} == "") || \
|
(${MACHINE} == "arm" && ${MACHINE_ARCH:Marm*eb*} == "") || \
|
||||||
|
${MACHINE_ARCH} == "powerpc64le" || \
|
||||||
${MACHINE_CPUARCH} == "riscv" || \
|
${MACHINE_CPUARCH} == "riscv" || \
|
||||||
${MACHINE_ARCH:Mmips*el*} != ""
|
${MACHINE_ARCH:Mmips*el*} != ""
|
||||||
TARGET_ENDIANNESS= 1234
|
TARGET_ENDIANNESS= 1234
|
||||||
|
@ -17,7 +17,7 @@ MK_INSTALL_AS_USER= yes
|
|||||||
TARGET_ARCHES_arm?= arm armv6 armv7
|
TARGET_ARCHES_arm?= arm armv6 armv7
|
||||||
TARGET_ARCHES_arm64?= aarch64
|
TARGET_ARCHES_arm64?= aarch64
|
||||||
TARGET_ARCHES_mips?= mipsel mips mips64el mips64 mipsn32 mipsn32el
|
TARGET_ARCHES_mips?= mipsel mips mips64el mips64 mipsn32 mipsn32el
|
||||||
TARGET_ARCHES_powerpc?= powerpc powerpc64 powerpcspe
|
TARGET_ARCHES_powerpc?= powerpc powerpc64 powerpc64le powerpcspe
|
||||||
TARGET_ARCHES_riscv?= riscv64 riscv64sf
|
TARGET_ARCHES_riscv?= riscv64 riscv64sf
|
||||||
|
|
||||||
# some corner cases
|
# some corner cases
|
||||||
|
@ -354,14 +354,14 @@ BROKEN_OPTIONS+=MLX5TOOL
|
|||||||
BROKEN_OPTIONS+=HYPERV
|
BROKEN_OPTIONS+=HYPERV
|
||||||
.endif
|
.endif
|
||||||
|
|
||||||
# NVME is only aarch64, x86 and powerpc64
|
# NVME is only aarch64, x86 and powerpc64*
|
||||||
.if ${__T} != "aarch64" && ${__T} != "amd64" && ${__T} != "i386" && \
|
.if ${__T} != "aarch64" && ${__T} != "amd64" && ${__T} != "i386" && \
|
||||||
${__T} != "powerpc64"
|
${__T:Mpowerpc64*} == ""
|
||||||
BROKEN_OPTIONS+=NVME
|
BROKEN_OPTIONS+=NVME
|
||||||
.endif
|
.endif
|
||||||
|
|
||||||
.if ${__T} == "aarch64" || ${__T} == "amd64" || ${__T} == "i386" || \
|
.if ${__T} == "aarch64" || ${__T} == "amd64" || ${__T} == "i386" || \
|
||||||
${__T} == "powerpc64"
|
${__T:Mpowerpc64*} != ""
|
||||||
__DEFAULT_YES_OPTIONS+=OPENMP
|
__DEFAULT_YES_OPTIONS+=OPENMP
|
||||||
.else
|
.else
|
||||||
__DEFAULT_NO_OPTIONS+=OPENMP
|
__DEFAULT_NO_OPTIONS+=OPENMP
|
||||||
|
@ -13,7 +13,7 @@ unix ?= We run FreeBSD, not UNIX.
|
|||||||
# and/or endian. This is called MACHINE_CPU in NetBSD, but that's used
|
# and/or endian. This is called MACHINE_CPU in NetBSD, but that's used
|
||||||
# for something different in FreeBSD.
|
# for something different in FreeBSD.
|
||||||
#
|
#
|
||||||
__TO_CPUARCH=C/mips(n32|64)?(el)?(hf)?/mips/:C/arm(v[67])?(eb)?/arm/:C/powerpc(64|spe)/powerpc/:C/riscv64(sf)?/riscv/
|
__TO_CPUARCH=C/mips(n32|64)?(el)?(hf)?/mips/:C/arm(v[67])?(eb)?/arm/:C/powerpc(64|64le|spe)/powerpc/:C/riscv64(sf)?/riscv/
|
||||||
MACHINE_CPUARCH=${MACHINE_ARCH:${__TO_CPUARCH}}
|
MACHINE_CPUARCH=${MACHINE_ARCH:${__TO_CPUARCH}}
|
||||||
.endif
|
.endif
|
||||||
|
|
||||||
|
@ -105,10 +105,10 @@ CFLAGS+= -DLOADER_DISK_SUPPORT
|
|||||||
|
|
||||||
# Machine specific flags for all builds here
|
# Machine specific flags for all builds here
|
||||||
|
|
||||||
# All PowerPC builds are 32 bit. We have no 64-bit loaders on powerpc
|
# Ensure PowerPC64 and PowerPC64LE boot loaders are compiled as 32 bit
|
||||||
# or powerpc64.
|
# and in big endian.
|
||||||
.if ${MACHINE_ARCH} == "powerpc64"
|
.if ${MACHINE_ARCH:Mpowerpc64*} != ""
|
||||||
CFLAGS+= -m32 -mcpu=powerpc
|
CFLAGS+= -m32 -mcpu=powerpc -mbig-endian
|
||||||
.endif
|
.endif
|
||||||
|
|
||||||
# For amd64, there's a bit of mixed bag. Some of the tree (i386, lib*32) is
|
# For amd64, there's a bit of mixed bag. Some of the tree (i386, lib*32) is
|
||||||
|
@ -93,7 +93,7 @@ dev/ofw/ofw_standard.c optional aim powerpc
|
|||||||
dev/ofw/ofw_subr.c standard
|
dev/ofw/ofw_subr.c standard
|
||||||
dev/powermac_nvram/powermac_nvram.c optional powermac_nvram powermac
|
dev/powermac_nvram/powermac_nvram.c optional powermac_nvram powermac
|
||||||
dev/quicc/quicc_bfe_fdt.c optional quicc mpc85xx
|
dev/quicc/quicc_bfe_fdt.c optional quicc mpc85xx
|
||||||
dev/random/darn.c optional powerpc64 !random_loadable
|
dev/random/darn.c optional powerpc64 !random_loadable | powerpc64le !random_loadable
|
||||||
dev/scc/scc_bfe_macio.c optional scc powermac
|
dev/scc/scc_bfe_macio.c optional scc powermac
|
||||||
dev/sdhci/fsl_sdhci.c optional mpc85xx sdhci
|
dev/sdhci/fsl_sdhci.c optional mpc85xx sdhci
|
||||||
dev/sec/sec.c optional sec mpc85xx
|
dev/sec/sec.c optional sec mpc85xx
|
||||||
@ -136,10 +136,10 @@ powerpc/aim/locore.S optional aim no-obj
|
|||||||
powerpc/aim/aim_machdep.c optional aim
|
powerpc/aim/aim_machdep.c optional aim
|
||||||
powerpc/aim/mmu_oea.c optional aim powerpc
|
powerpc/aim/mmu_oea.c optional aim powerpc
|
||||||
powerpc/aim/mmu_oea64.c optional aim
|
powerpc/aim/mmu_oea64.c optional aim
|
||||||
powerpc/aim/mmu_radix.c optional aim powerpc64
|
powerpc/aim/mmu_radix.c optional aim powerpc64 | aim powerpc64le
|
||||||
powerpc/aim/moea64_native.c optional aim
|
powerpc/aim/moea64_native.c optional aim
|
||||||
powerpc/aim/mp_cpudep.c optional aim
|
powerpc/aim/mp_cpudep.c optional aim
|
||||||
powerpc/aim/slb.c optional aim powerpc64
|
powerpc/aim/slb.c optional aim powerpc64 | aim powerpc64le
|
||||||
powerpc/amigaone/platform_amigaone.c optional amigaone
|
powerpc/amigaone/platform_amigaone.c optional amigaone
|
||||||
powerpc/amigaone/cpld_a1222.c optional powerpc amigaone | powerpcspe amigaone
|
powerpc/amigaone/cpld_a1222.c optional powerpc amigaone | powerpcspe amigaone
|
||||||
powerpc/amigaone/cpld_x5000.c optional powerpc amigaone | powerpc64 amigaone
|
powerpc/amigaone/cpld_x5000.c optional powerpc amigaone | powerpc64 amigaone
|
||||||
@ -153,7 +153,7 @@ powerpc/booke/spe.c optional powerpcspe
|
|||||||
powerpc/cpufreq/dfs.c optional cpufreq
|
powerpc/cpufreq/dfs.c optional cpufreq
|
||||||
powerpc/cpufreq/mpc85xx_jog.c optional cpufreq mpc85xx
|
powerpc/cpufreq/mpc85xx_jog.c optional cpufreq mpc85xx
|
||||||
powerpc/cpufreq/pcr.c optional cpufreq aim
|
powerpc/cpufreq/pcr.c optional cpufreq aim
|
||||||
powerpc/cpufreq/pmcr.c optional cpufreq aim powerpc64
|
powerpc/cpufreq/pmcr.c optional cpufreq aim powerpc64 | cpufreq aim powerpc64le
|
||||||
powerpc/cpufreq/pmufreq.c optional cpufreq aim pmu
|
powerpc/cpufreq/pmufreq.c optional cpufreq aim pmu
|
||||||
powerpc/fpu/fpu_add.c optional fpu_emu | powerpcspe
|
powerpc/fpu/fpu_add.c optional fpu_emu | powerpcspe
|
||||||
powerpc/fpu/fpu_compare.c optional fpu_emu | powerpcspe
|
powerpc/fpu/fpu_compare.c optional fpu_emu | powerpcspe
|
||||||
@ -192,10 +192,10 @@ powerpc/ofw/ofw_pcib_pci.c optional pci
|
|||||||
powerpc/ofw/ofw_real.c optional aim
|
powerpc/ofw/ofw_real.c optional aim
|
||||||
powerpc/ofw/ofw_syscons.c optional sc aim
|
powerpc/ofw/ofw_syscons.c optional sc aim
|
||||||
powerpc/ofw/ofwcall32.S optional aim powerpc
|
powerpc/ofw/ofwcall32.S optional aim powerpc
|
||||||
powerpc/ofw/ofwcall64.S optional aim powerpc64
|
powerpc/ofw/ofwcall64.S optional aim powerpc64 | aim powerpc64le
|
||||||
powerpc/ofw/openpic_ofw.c standard
|
powerpc/ofw/openpic_ofw.c standard
|
||||||
powerpc/ofw/rtas.c optional aim
|
powerpc/ofw/rtas.c optional aim
|
||||||
powerpc/ofw/ofw_initrd.c optional md_root_mem powerpc64
|
powerpc/ofw/ofw_initrd.c optional md_root_mem powerpc64 | md_root_mem powerpc64le
|
||||||
powerpc/powermac/ata_kauai.c optional powermac ata | powermac atamacio
|
powerpc/powermac/ata_kauai.c optional powermac ata | powermac atamacio
|
||||||
powerpc/powermac/ata_macio.c optional powermac ata | powermac atamacio
|
powerpc/powermac/ata_macio.c optional powermac ata | powermac atamacio
|
||||||
powerpc/powermac/ata_dbdma.c optional powermac ata | powermac atamacio
|
powerpc/powermac/ata_dbdma.c optional powermac ata | powermac atamacio
|
||||||
@ -236,21 +236,21 @@ powerpc/powernv/platform_powernv.c optional powernv
|
|||||||
powerpc/powernv/powernv_centaur.c optional powernv
|
powerpc/powernv/powernv_centaur.c optional powernv
|
||||||
powerpc/powernv/powernv_xscom.c optional powernv
|
powerpc/powernv/powernv_xscom.c optional powernv
|
||||||
powerpc/powernv/xive.c optional powernv
|
powerpc/powernv/xive.c optional powernv
|
||||||
powerpc/powerpc/altivec.c optional powerpc | powerpc64
|
powerpc/powerpc/altivec.c optional !powerpcspe
|
||||||
powerpc/powerpc/autoconf.c standard
|
powerpc/powerpc/autoconf.c standard
|
||||||
powerpc/powerpc/bus_machdep.c standard
|
powerpc/powerpc/bus_machdep.c standard
|
||||||
powerpc/powerpc/busdma_machdep.c standard
|
powerpc/powerpc/busdma_machdep.c standard
|
||||||
powerpc/powerpc/clock.c standard
|
powerpc/powerpc/clock.c standard
|
||||||
powerpc/powerpc/copyinout.c optional aim
|
powerpc/powerpc/copyinout.c optional aim
|
||||||
powerpc/powerpc/cpu.c standard
|
powerpc/powerpc/cpu.c standard
|
||||||
powerpc/powerpc/cpu_subr64.S optional powerpc64
|
powerpc/powerpc/cpu_subr64.S optional powerpc64 | powerpc64le
|
||||||
powerpc/powerpc/db_disasm.c optional ddb
|
powerpc/powerpc/db_disasm.c optional ddb
|
||||||
powerpc/powerpc/db_hwwatch.c optional ddb
|
powerpc/powerpc/db_hwwatch.c optional ddb
|
||||||
powerpc/powerpc/db_interface.c optional ddb
|
powerpc/powerpc/db_interface.c optional ddb
|
||||||
powerpc/powerpc/db_trace.c optional ddb
|
powerpc/powerpc/db_trace.c optional ddb
|
||||||
powerpc/powerpc/dump_machdep.c standard
|
powerpc/powerpc/dump_machdep.c standard
|
||||||
powerpc/powerpc/elf32_machdep.c optional powerpc | powerpcspe | compat_freebsd32
|
powerpc/powerpc/elf32_machdep.c optional powerpc | powerpcspe | compat_freebsd32
|
||||||
powerpc/powerpc/elf64_machdep.c optional powerpc64
|
powerpc/powerpc/elf64_machdep.c optional powerpc64 | powerpc64le
|
||||||
powerpc/powerpc/exec_machdep.c standard
|
powerpc/powerpc/exec_machdep.c standard
|
||||||
powerpc/powerpc/fpu.c standard
|
powerpc/powerpc/fpu.c standard
|
||||||
powerpc/powerpc/gdb_machdep.c optional gdb
|
powerpc/powerpc/gdb_machdep.c optional gdb
|
||||||
@ -260,7 +260,7 @@ powerpc/powerpc/intr_machdep.c standard
|
|||||||
powerpc/powerpc/iommu_if.m standard
|
powerpc/powerpc/iommu_if.m standard
|
||||||
powerpc/powerpc/machdep.c standard
|
powerpc/powerpc/machdep.c standard
|
||||||
powerpc/powerpc/mem.c optional mem
|
powerpc/powerpc/mem.c optional mem
|
||||||
powerpc/powerpc/minidump_machdep.c optional powerpc64
|
powerpc/powerpc/minidump_machdep.c optional powerpc64 | powerpc64le
|
||||||
powerpc/powerpc/mp_machdep.c optional smp
|
powerpc/powerpc/mp_machdep.c optional smp
|
||||||
powerpc/powerpc/nexus.c standard
|
powerpc/powerpc/nexus.c standard
|
||||||
powerpc/powerpc/openpic.c standard
|
powerpc/powerpc/openpic.c standard
|
||||||
@ -272,11 +272,11 @@ powerpc/powerpc/ptrace_machdep.c standard
|
|||||||
powerpc/powerpc/sc_machdep.c optional sc
|
powerpc/powerpc/sc_machdep.c optional sc
|
||||||
powerpc/powerpc/setjmp.S standard
|
powerpc/powerpc/setjmp.S standard
|
||||||
powerpc/powerpc/sigcode32.S optional powerpc | powerpcspe | compat_freebsd32
|
powerpc/powerpc/sigcode32.S optional powerpc | powerpcspe | compat_freebsd32
|
||||||
powerpc/powerpc/sigcode64.S optional powerpc64
|
powerpc/powerpc/sigcode64.S optional powerpc64 | powerpc64le
|
||||||
powerpc/powerpc/swtch32.S optional powerpc | powerpcspe
|
powerpc/powerpc/swtch32.S optional powerpc | powerpcspe
|
||||||
powerpc/powerpc/swtch64.S optional powerpc64
|
powerpc/powerpc/swtch64.S optional powerpc64 | powerpc64le
|
||||||
powerpc/powerpc/stack_machdep.c optional ddb | stack
|
powerpc/powerpc/stack_machdep.c optional ddb | stack
|
||||||
powerpc/powerpc/support.S optional powerpc64 | booke
|
powerpc/powerpc/support.S optional powerpc64 | powerpc64le | booke
|
||||||
powerpc/powerpc/syncicache.c standard
|
powerpc/powerpc/syncicache.c standard
|
||||||
powerpc/powerpc/sys_machdep.c standard
|
powerpc/powerpc/sys_machdep.c standard
|
||||||
powerpc/powerpc/trap.c standard
|
powerpc/powerpc/trap.c standard
|
||||||
@ -294,19 +294,19 @@ powerpc/ps3/ps3disk.c optional ps3
|
|||||||
powerpc/ps3/ps3pic.c optional ps3
|
powerpc/ps3/ps3pic.c optional ps3
|
||||||
powerpc/ps3/ps3_syscons.c optional ps3 vt
|
powerpc/ps3/ps3_syscons.c optional ps3 vt
|
||||||
powerpc/ps3/ps3-hvcall.S optional ps3
|
powerpc/ps3/ps3-hvcall.S optional ps3
|
||||||
powerpc/pseries/phyp-hvcall.S optional pseries powerpc64
|
powerpc/pseries/phyp-hvcall.S optional pseries powerpc64 | pseries powerpc64le
|
||||||
powerpc/pseries/mmu_phyp.c optional pseries powerpc64
|
powerpc/pseries/mmu_phyp.c optional pseries powerpc64 | pseries powerpc64le
|
||||||
powerpc/pseries/phyp_console.c optional pseries powerpc64 uart
|
powerpc/pseries/phyp_console.c optional pseries powerpc64 uart | pseries powerpc64le uart
|
||||||
powerpc/pseries/phyp_dbg.c optional pseries powerpc64 gdb
|
powerpc/pseries/phyp_dbg.c optional pseries powerpc64 gdb | pseries powerpc64le gdb
|
||||||
powerpc/pseries/phyp_llan.c optional llan
|
powerpc/pseries/phyp_llan.c optional llan
|
||||||
powerpc/pseries/phyp_vscsi.c optional pseries powerpc64 scbus
|
powerpc/pseries/phyp_vscsi.c optional pseries powerpc64 scbus | pseries powerpc64le scbus
|
||||||
powerpc/pseries/platform_chrp.c optional pseries
|
powerpc/pseries/platform_chrp.c optional pseries
|
||||||
powerpc/pseries/plpar_iommu.c optional pseries powerpc64
|
powerpc/pseries/plpar_iommu.c optional pseries powerpc64 | pseries powerpc64le
|
||||||
powerpc/pseries/plpar_pcibus.c optional pseries powerpc64 pci
|
powerpc/pseries/plpar_pcibus.c optional pseries powerpc64 pci | pseries powerpc64le pci
|
||||||
powerpc/pseries/rtas_dev.c optional pseries
|
powerpc/pseries/rtas_dev.c optional pseries
|
||||||
powerpc/pseries/rtas_pci.c optional pseries pci
|
powerpc/pseries/rtas_pci.c optional pseries pci
|
||||||
powerpc/pseries/vdevice.c optional pseries powerpc64
|
powerpc/pseries/vdevice.c optional pseries powerpc64 | pseries powerpc64le
|
||||||
powerpc/pseries/xics.c optional pseries powerpc64
|
powerpc/pseries/xics.c optional pseries powerpc64 | pseries powerpc64le
|
||||||
powerpc/psim/iobus.c optional psim
|
powerpc/psim/iobus.c optional psim
|
||||||
powerpc/psim/ata_iobus.c optional ata psim
|
powerpc/psim/ata_iobus.c optional ata psim
|
||||||
powerpc/psim/openpic_iobus.c optional psim
|
powerpc/psim/openpic_iobus.c optional psim
|
||||||
|
@ -185,7 +185,7 @@ CFLAGS.gcc+= -mno-spe
|
|||||||
# Use dot symbols (or, better, the V2 ELF ABI) on powerpc64 to make
|
# Use dot symbols (or, better, the V2 ELF ABI) on powerpc64 to make
|
||||||
# DDB happy. ELFv2, if available, has some other efficiency benefits.
|
# DDB happy. ELFv2, if available, has some other efficiency benefits.
|
||||||
#
|
#
|
||||||
.if ${MACHINE_ARCH} == "powerpc64"
|
.if ${MACHINE_ARCH:Mpowerpc64*} != ""
|
||||||
CFLAGS+= -mabi=elfv2
|
CFLAGS+= -mabi=elfv2
|
||||||
.endif
|
.endif
|
||||||
|
|
||||||
@ -307,6 +307,7 @@ LD_EMULATION_mipsn32el= elf32btsmipn32_fbsd # I don't think this is a thing th
|
|||||||
LD_EMULATION_powerpc= elf32ppc_fbsd
|
LD_EMULATION_powerpc= elf32ppc_fbsd
|
||||||
LD_EMULATION_powerpcspe= elf32ppc_fbsd
|
LD_EMULATION_powerpcspe= elf32ppc_fbsd
|
||||||
LD_EMULATION_powerpc64= elf64ppc_fbsd
|
LD_EMULATION_powerpc64= elf64ppc_fbsd
|
||||||
|
LD_EMULATION_powerpc64le= elf64lppc_fbsd
|
||||||
LD_EMULATION_riscv64= elf64lriscv
|
LD_EMULATION_riscv64= elf64lriscv
|
||||||
LD_EMULATION_riscv64sf= elf64lriscv
|
LD_EMULATION_riscv64sf= elf64lriscv
|
||||||
LD_EMULATION=${LD_EMULATION_${MACHINE_ARCH}}
|
LD_EMULATION=${LD_EMULATION_${MACHINE_ARCH}}
|
||||||
|
180
sys/conf/ldscript.powerpc64le
Normal file
180
sys/conf/ldscript.powerpc64le
Normal file
@ -0,0 +1,180 @@
|
|||||||
|
/* $FreeBSD$ */
|
||||||
|
|
||||||
|
OUTPUT_FORMAT("elf64-powerpcle-freebsd", "elf64-powerpcle-freebsd",
|
||||||
|
"elf64-powerpcle-freebsd")
|
||||||
|
OUTPUT_ARCH(powerpc:common64)
|
||||||
|
ENTRY(__start)
|
||||||
|
SEARCH_DIR(/usr/lib);
|
||||||
|
PROVIDE (__stack = 0);
|
||||||
|
PHDRS
|
||||||
|
{
|
||||||
|
text PT_LOAD ;
|
||||||
|
dynamic PT_DYNAMIC ;
|
||||||
|
}
|
||||||
|
SECTIONS
|
||||||
|
{
|
||||||
|
|
||||||
|
/* Low-address wrapper for bootloaders (kexec/kboot) that can't parse ELF */
|
||||||
|
. = kernbase - 0x100;
|
||||||
|
.kboot : { *(.text.kboot) } :text
|
||||||
|
|
||||||
|
/* Read-only sections, merged into text segment: */
|
||||||
|
. = kernbase;
|
||||||
|
PROVIDE (begin = .);
|
||||||
|
|
||||||
|
.text :
|
||||||
|
{
|
||||||
|
*(.glink)
|
||||||
|
*(.text)
|
||||||
|
*(.stub)
|
||||||
|
/* .gnu.warning sections are handled specially by elf32.em. */
|
||||||
|
*(.gnu.warning)
|
||||||
|
*(.gnu.linkonce.t*)
|
||||||
|
} =0
|
||||||
|
_etext = .;
|
||||||
|
PROVIDE (etext = .);
|
||||||
|
|
||||||
|
/* Do not emit PT_INTERP section, which confuses some loaders (kexec-lite) */
|
||||||
|
/DISCARD/ : { *(.interp) }
|
||||||
|
|
||||||
|
/* Also delete notes */
|
||||||
|
/DISCARD/ : { *(.note.*) }
|
||||||
|
|
||||||
|
.hash : { *(.hash) }
|
||||||
|
.dynsym : { *(.dynsym) }
|
||||||
|
.dynstr : { *(.dynstr) }
|
||||||
|
.gnu.version : { *(.gnu.version) }
|
||||||
|
.gnu.version_d : { *(.gnu.version_d) }
|
||||||
|
.gnu.version_r : { *(.gnu.version_r) }
|
||||||
|
.note.gnu.build-id : {
|
||||||
|
PROVIDE (__build_id_start = .);
|
||||||
|
*(.note.gnu.build-id)
|
||||||
|
PROVIDE (__build_id_end = .);
|
||||||
|
}
|
||||||
|
.rela.text :
|
||||||
|
{ *(.rela.text) *(.rela.gnu.linkonce.t*) }
|
||||||
|
.rela.data :
|
||||||
|
{ *(.rela.data) *(.rela.gnu.linkonce.d*) }
|
||||||
|
.rela.rodata :
|
||||||
|
{ *(.rela.rodata) *(.rela.gnu.linkonce.r*) }
|
||||||
|
.rela.got : { *(.rela.got) }
|
||||||
|
.rela.got1 : { *(.rela.got1) }
|
||||||
|
.rela.got2 : { *(.rela.got2) }
|
||||||
|
.rela.ctors : { *(.rela.ctors) }
|
||||||
|
.rela.dtors : { *(.rela.dtors) }
|
||||||
|
.rela.init : { *(.rela.init) }
|
||||||
|
.rela.fini : { *(.rela.fini) }
|
||||||
|
.rela.bss : { *(.rela.bss) }
|
||||||
|
.rela.plt : { *(.rela.plt) }
|
||||||
|
.rela.sdata : { *(.rela.sdata) }
|
||||||
|
.rela.sbss : { *(.rela.sbss) }
|
||||||
|
.rela.sdata2 : { *(.rela.sdata2) }
|
||||||
|
.rela.sbss2 : { *(.rela.sbss2) }
|
||||||
|
|
||||||
|
.init : { *(.init) } =0
|
||||||
|
.fini : { *(.fini) } =0
|
||||||
|
.rodata : { *(.rodata) *(.gnu.linkonce.r*) }
|
||||||
|
.rodata1 : { *(.rodata1) }
|
||||||
|
.sdata2 : { *(.sdata2) }
|
||||||
|
.sbss2 : { *(.sbss2) }
|
||||||
|
/* Adjust the address for the data segment to the next page up. */
|
||||||
|
. = ALIGN(4096);
|
||||||
|
.data.read_frequently :
|
||||||
|
{
|
||||||
|
*(SORT_BY_ALIGNMENT(.data.read_frequently))
|
||||||
|
}
|
||||||
|
.data.read_mostly :
|
||||||
|
{
|
||||||
|
*(.data.read_mostly)
|
||||||
|
}
|
||||||
|
. = ALIGN(128);
|
||||||
|
.data.exclusive_cache_line :
|
||||||
|
{
|
||||||
|
*(.data.exclusive_cache_line)
|
||||||
|
}
|
||||||
|
. = ALIGN(128);
|
||||||
|
.data :
|
||||||
|
{
|
||||||
|
*(.data)
|
||||||
|
*(.gnu.linkonce.d*)
|
||||||
|
}
|
||||||
|
.data1 : { *(.data1) }
|
||||||
|
.toc1 : ALIGN(8) { *(.toc1) }
|
||||||
|
.opd : ALIGN(8) { KEEP (*(.opd)) }
|
||||||
|
.branch_lt : ALIGN(8) { *(.branch_lt) }
|
||||||
|
. = ALIGN(4096);
|
||||||
|
.got : ALIGN(8) { __tocbase = .; *(.got) }
|
||||||
|
.toc : ALIGN(8) { *(.toc) }
|
||||||
|
|
||||||
|
.dynamic : { *(.dynamic) } :text :dynamic
|
||||||
|
/* Put .ctors and .dtors next to the .got2 section, so that the pointers
|
||||||
|
get relocated with -mrelocatable. Also put in the .fixup pointers.
|
||||||
|
The current compiler no longer needs this, but keep it around for 2.7.2 */
|
||||||
|
PROVIDE (_GOT2_START_ = .);
|
||||||
|
.got2 : { *(.got2) }
|
||||||
|
PROVIDE (__CTOR_LIST__ = .);
|
||||||
|
.ctors : { *(.ctors) }
|
||||||
|
PROVIDE (__CTOR_END__ = .);
|
||||||
|
PROVIDE (__DTOR_LIST__ = .);
|
||||||
|
.dtors : { *(.dtors) }
|
||||||
|
PROVIDE (__DTOR_END__ = .);
|
||||||
|
PROVIDE (_FIXUP_START_ = .);
|
||||||
|
.fixup : { *(.fixup) }
|
||||||
|
PROVIDE (_FIXUP_END_ = .);
|
||||||
|
PROVIDE (_GOT2_END_ = .);
|
||||||
|
/* We want the small data sections together, so single-instruction offsets
|
||||||
|
can access them all, and initialized data all before uninitialized, so
|
||||||
|
we can shorten the on-disk segment size. */
|
||||||
|
.sdata : { *(.sdata) }
|
||||||
|
_edata = .;
|
||||||
|
PROVIDE (edata = .);
|
||||||
|
.sbss :
|
||||||
|
{
|
||||||
|
PROVIDE (__sbss_start = .);
|
||||||
|
*(.sbss)
|
||||||
|
*(.scommon)
|
||||||
|
*(.dynsbss)
|
||||||
|
PROVIDE (__sbss_end = .);
|
||||||
|
}
|
||||||
|
.plt : { *(.plt) }
|
||||||
|
.iplt : { *(.iplt) }
|
||||||
|
.bss :
|
||||||
|
{
|
||||||
|
PROVIDE (__bss_start = .);
|
||||||
|
*(.dynbss)
|
||||||
|
*(.bss)
|
||||||
|
*(COMMON)
|
||||||
|
}
|
||||||
|
_end = . ;
|
||||||
|
PROVIDE (end = .);
|
||||||
|
/* Stabs debugging sections. */
|
||||||
|
.stab 0 : { *(.stab) }
|
||||||
|
.stabstr 0 : { *(.stabstr) }
|
||||||
|
/* DWARF debug sections.
|
||||||
|
Symbols in the DWARF debugging sections are relative to the beginning
|
||||||
|
of the section so we begin them at 0. */
|
||||||
|
/* DWARF 1 */
|
||||||
|
.debug 0 : { *(.debug) }
|
||||||
|
.line 0 : { *(.line) }
|
||||||
|
/* GNU DWARF 1 extensions */
|
||||||
|
.debug_srcinfo 0 : { *(.debug_srcinfo) }
|
||||||
|
.debug_sfnames 0 : { *(.debug_sfnames) }
|
||||||
|
/* DWARF 1.1 and DWARF 2 */
|
||||||
|
.debug_aranges 0 : { *(.debug_aranges) }
|
||||||
|
.debug_pubnames 0 : { *(.debug_pubnames) }
|
||||||
|
/* DWARF 2 */
|
||||||
|
.debug_info 0 : { *(.debug_info) }
|
||||||
|
.debug_abbrev 0 : { *(.debug_abbrev) }
|
||||||
|
.debug_line 0 : { *(.debug_line) }
|
||||||
|
.debug_frame 0 : { *(.debug_frame) }
|
||||||
|
.debug_str 0 : { *(.debug_str) }
|
||||||
|
.debug_loc 0 : { *(.debug_loc) }
|
||||||
|
.debug_macinfo 0 : { *(.debug_macinfo) }
|
||||||
|
/* SGI/MIPS DWARF 2 extensions */
|
||||||
|
.debug_weaknames 0 : { *(.debug_weaknames) }
|
||||||
|
.debug_funcnames 0 : { *(.debug_funcnames) }
|
||||||
|
.debug_typenames 0 : { *(.debug_typenames) }
|
||||||
|
.debug_varnames 0 : { *(.debug_varnames) }
|
||||||
|
/* These must appear regardless of . */
|
||||||
|
}
|
||||||
|
|
@ -8,6 +8,7 @@ CELL
|
|||||||
|
|
||||||
POWERPC
|
POWERPC
|
||||||
POWERPC64
|
POWERPC64
|
||||||
|
POWERPC64LE
|
||||||
POWERPCSPE
|
POWERPCSPE
|
||||||
|
|
||||||
FPU_EMU
|
FPU_EMU
|
||||||
|
@ -779,7 +779,7 @@ _wi= wi
|
|||||||
_virtio= virtio
|
_virtio= virtio
|
||||||
.endif
|
.endif
|
||||||
|
|
||||||
.if ${MACHINE_ARCH} == "powerpc64"
|
.if ${MACHINE_ARCH:Mpowerpc64*} != ""
|
||||||
_ipmi= ipmi
|
_ipmi= ipmi
|
||||||
_ixl= ixl
|
_ixl= ixl
|
||||||
_nvram= opal_nvram
|
_nvram= opal_nvram
|
||||||
|
@ -57,7 +57,11 @@
|
|||||||
#endif
|
#endif
|
||||||
#ifndef MACHINE_ARCH
|
#ifndef MACHINE_ARCH
|
||||||
#ifdef __powerpc64__
|
#ifdef __powerpc64__
|
||||||
|
#if defined(__LITTLE_ENDIAN__)
|
||||||
|
#define MACHINE_ARCH "powerpc64le"
|
||||||
|
#else
|
||||||
#define MACHINE_ARCH "powerpc64"
|
#define MACHINE_ARCH "powerpc64"
|
||||||
|
#endif
|
||||||
#else
|
#else
|
||||||
#ifdef __SPE__
|
#ifdef __SPE__
|
||||||
#define MACHINE_ARCH "powerpcspe"
|
#define MACHINE_ARCH "powerpcspe"
|
||||||
|
Loading…
Reference in New Issue
Block a user