From cd9207569fabd1edbf2318b59cea2e9ebb860385 Mon Sep 17 00:00:00 2001 From: Mitchell Horne Date: Sun, 31 May 2020 14:43:04 +0000 Subject: [PATCH] Remove remnant of arm's ELF trampoline The trampoline code used for loading gzipped a.out kernels on arm was removed in r350436. A portion of this code allowed for DDB to find the symbol tables when booting without loader(8), and some of this was untouched in the removal. Remove it now. Differential Revision: https://reviews.freebsd.org/D24950 --- sys/arm/arm/machdep_boot.c | 20 ++------------------ sys/arm/include/elf.h | 6 ------ sys/arm64/arm64/machdep_boot.c | 22 +--------------------- sys/riscv/riscv/machdep.c | 22 +--------------------- 4 files changed, 4 insertions(+), 66 deletions(-) diff --git a/sys/arm/arm/machdep_boot.c b/sys/arm/arm/machdep_boot.c index 12f147c3fd70..02ae321b623d 100644 --- a/sys/arm/arm/machdep_boot.c +++ b/sys/arm/arm/machdep_boot.c @@ -352,13 +352,12 @@ vm_offset_t fake_preload_metadata(struct arm_boot_params *abp __unused, void *dtb_ptr, size_t dtb_size) { -#ifdef DDB - vm_offset_t zstart = 0, zend = 0; -#endif vm_offset_t lastaddr; int i = 0; static uint32_t fake_preload[35]; + lastaddr = (vm_offset_t)&end; + fake_preload[i++] = MODINFO_NAME; fake_preload[i++] = strlen("kernel") + 1; strcpy((char*)&fake_preload[i++], "kernel"); @@ -373,21 +372,6 @@ fake_preload_metadata(struct arm_boot_params *abp __unused, void *dtb_ptr, fake_preload[i++] = MODINFO_SIZE; fake_preload[i++] = sizeof(uint32_t); fake_preload[i++] = (uint32_t)&end - KERNVIRTADDR; -#ifdef DDB - if (*(uint32_t *)KERNVIRTADDR == MAGIC_TRAMP_NUMBER) { - fake_preload[i++] = MODINFO_METADATA|MODINFOMD_SSYM; - fake_preload[i++] = sizeof(vm_offset_t); - fake_preload[i++] = *(uint32_t *)(KERNVIRTADDR + 4); - fake_preload[i++] = MODINFO_METADATA|MODINFOMD_ESYM; - fake_preload[i++] = sizeof(vm_offset_t); - fake_preload[i++] = *(uint32_t *)(KERNVIRTADDR + 8); - lastaddr = *(uint32_t *)(KERNVIRTADDR + 8); - zend = lastaddr; - zstart = *(uint32_t *)(KERNVIRTADDR + 4); - db_fetch_ksymtab(zstart, zend); - } else -#endif - lastaddr = (vm_offset_t)&end; if (dtb_ptr != NULL) { /* Copy DTB to KVA space and insert it into module chain. */ lastaddr = roundup(lastaddr, sizeof(int)); diff --git a/sys/arm/include/elf.h b/sys/arm/include/elf.h index 28fc14e3dae3..7bcd7b44bbe1 100644 --- a/sys/arm/include/elf.h +++ b/sys/arm/include/elf.h @@ -78,12 +78,6 @@ __ElfType(Auxinfo); #define EF_ARM_EABI_VERSION_UNKNOWN 0 #define EF_ARM_EABI_FREEBSD_MIN 4 -/* - * Magic number for the elf trampoline, chosen wisely to be an immediate - * value. - */ -#define MAGIC_TRAMP_NUMBER 0x5c000003 - #define ET_DYN_LOAD_ADDR 0x500000 /* Flags passed in AT_HWCAP. */ diff --git a/sys/arm64/arm64/machdep_boot.c b/sys/arm64/arm64/machdep_boot.c index e6eaa0e93c72..1f3fdd92e63d 100644 --- a/sys/arm64/arm64/machdep_boot.c +++ b/sys/arm64/arm64/machdep_boot.c @@ -84,14 +84,12 @@ static char linux_command_line[LBABI_MAX_COMMAND_LINE + 1]; static vm_offset_t fake_preload_metadata(void *dtb_ptr, size_t dtb_size) { -#ifdef DDB - vm_offset_t zstart = 0, zend = 0; -#endif vm_offset_t lastaddr; static char fake_preload[256]; caddr_t preload_ptr; size_t size; + lastaddr = (vm_offset_t)&end; preload_ptr = (caddr_t)&fake_preload[0]; size = 0; @@ -108,25 +106,7 @@ fake_preload_metadata(void *dtb_ptr, size_t dtb_size) PRELOAD_PUSH_VALUE(uint32_t, MODINFO_SIZE); PRELOAD_PUSH_VALUE(uint32_t, sizeof(size_t)); PRELOAD_PUSH_VALUE(uint64_t, (size_t)(&end - VM_MIN_KERNEL_ADDRESS)); -#ifdef DDB - if (*(uint64_t *)VM_MIN_KERNEL_ADDRESS == MAGIC_TRAMP_NUMBER) { - PRELOAD_PUSH_VALUE(uint32_t, MODINFO_METADATA|MODINFOMD_SSYM); - PRELOAD_PUSH_VALUE(uint32_t, sizeof(vm_offset_t)); - PRELOAD_PUSH_VALUE(uint64_t, - *(uint64_t *)(VM_MIN_KERNEL_ADDRESS + 4)); - PRELOAD_PUSH_VALUE(uint32_t, MODINFO_METADATA | MODINFOMD_ESYM); - PRELOAD_PUSH_VALUE(uint32_t, sizeof(vm_offset_t)); - PRELOAD_PUSH_VALUE(uint64_t, - *(uint64_t *)(VM_MIN_KERNEL_ADDRESS + 8)); - - lastaddr = *(uint64_t *)(VM_MIN_KERNEL_ADDRESS + 8); - zend = lastaddr; - zstart = *(uint64_t *)(VM_MIN_KERNEL_ADDRESS + 4); - db_fetch_ksymtab(zstart, zend); - } else -#endif - lastaddr = (vm_offset_t)&end; if (dtb_ptr != NULL) { /* Copy DTB to KVA space and insert it into module chain. */ lastaddr = roundup(lastaddr, sizeof(int)); diff --git a/sys/riscv/riscv/machdep.c b/sys/riscv/riscv/machdep.c index 32220ed5d899..5e3847423ddf 100644 --- a/sys/riscv/riscv/machdep.c +++ b/sys/riscv/riscv/machdep.c @@ -729,9 +729,6 @@ vm_offset_t fake_preload_metadata(struct riscv_bootparams *rvbp) { static uint32_t fake_preload[35]; -#ifdef DDB - vm_offset_t zstart = 0, zend = 0; -#endif vm_offset_t lastaddr; size_t fake_size, dtb_size; @@ -750,6 +747,7 @@ fake_preload_metadata(struct riscv_bootparams *rvbp) } while (0) fake_size = 0; + lastaddr = (vm_offset_t)&end; PRELOAD_PUSH_VALUE(uint32_t, MODINFO_NAME); PRELOAD_PUSH_STRING("kernel"); @@ -763,24 +761,6 @@ fake_preload_metadata(struct riscv_bootparams *rvbp) PRELOAD_PUSH_VALUE(uint32_t, MODINFO_SIZE); PRELOAD_PUSH_VALUE(uint32_t, sizeof(size_t)); PRELOAD_PUSH_VALUE(uint64_t, (size_t)((vm_offset_t)&end - KERNBASE)); -#ifdef DDB -#if 0 - /* RISCVTODO */ - if (*(uint32_t *)KERNVIRTADDR == MAGIC_TRAMP_NUMBER) { - fake_preload[i++] = MODINFO_METADATA|MODINFOMD_SSYM; - fake_preload[i++] = sizeof(vm_offset_t); - fake_preload[i++] = *(uint32_t *)(KERNVIRTADDR + 4); - fake_preload[i++] = MODINFO_METADATA|MODINFOMD_ESYM; - fake_preload[i++] = sizeof(vm_offset_t); - fake_preload[i++] = *(uint32_t *)(KERNVIRTADDR + 8); - lastaddr = *(uint32_t *)(KERNVIRTADDR + 8); - zend = lastaddr; - zstart = *(uint32_t *)(KERNVIRTADDR + 4); - db_fetch_ksymtab(zstart, zend); - } else -#endif -#endif - lastaddr = (vm_offset_t)&end; /* Copy the DTB to KVA space. */ lastaddr = roundup(lastaddr, sizeof(int));