Index: sys/arm/broadcom/bcm2835/bcm2835_firmware.c =================================================================== --- sys/arm/broadcom/bcm2835/bcm2835_firmware.c +++ sys/arm/broadcom/bcm2835/bcm2835_firmware.c @@ -55,8 +55,6 @@ {NULL, 0} }; -static bool bcm2835_firmware_get_revision(device_t, uint32_t *); - static int sysctl_bcm2835_firmware_get_revision(SYSCTL_HANDLER_ARGS); static int @@ -79,12 +77,16 @@ struct sysctl_ctx_list *ctx; struct sysctl_oid *tree_node; struct sysctl_oid_list *tree; + phandle_t node; sc = device_get_softc(dev); sc->sc_dev = dev; /* TODO: Use the mboxes property to find the mbox */ + node = ofw_bus_get_node(dev); + OF_device_register_xref(OF_xref_from_node(node), dev); + ctx = device_get_sysctl_ctx(sc->sc_dev); tree_node = device_get_sysctl_tree(sc->sc_dev); tree = SYSCTL_CHILDREN(tree_node); Index: sys/cddl/dev/dtrace/aarch64/dtrace_subr.c =================================================================== --- sys/cddl/dev/dtrace/aarch64/dtrace_subr.c +++ sys/cddl/dev/dtrace/aarch64/dtrace_subr.c @@ -231,6 +231,31 @@ (uintptr_t)which, (uintptr_t)fault, (uintptr_t)fltoffs); } +static void +dtrace_load64(uint64_t *addr, struct trapframe *frame, u_int reg) +{ + + KASSERT(reg <= 31, ("dtrace_load64: Invalid register %u", reg)); + if (reg < nitems(frame->tf_x)) + frame->tf_x[reg] = *addr; + else if (reg == 30) /* lr */ + frame->tf_lr = *addr; + /* Nothing to do for load to xzr */ +} + +static void +dtrace_store64(uint64_t *addr, struct trapframe *frame, u_int reg) +{ + + KASSERT(reg <= 31, ("dtrace_store64: Invalid register %u", reg)); + if (reg < nitems(frame->tf_x)) + *addr = frame->tf_x[reg]; + else if (reg == 30) /* lr */ + *addr = frame->tf_lr; + else if (reg == 31) /* xzr */ + *addr = 0; +} + static int dtrace_invop_start(struct trapframe *frame) { @@ -258,12 +283,12 @@ sp -= (~offs & OFFSET_MASK) + 1; else sp += (offs); - *(sp + 0) = frame->tf_x[arg1]; - *(sp + 1) = frame->tf_x[arg2]; + dtrace_store64(sp + 0, frame, arg1); + dtrace_store64(sp + 1, frame, arg2); break; case LDP_64: - frame->tf_x[arg1] = *(sp + 0); - frame->tf_x[arg2] = *(sp + 1); + dtrace_load64(sp, frame, arg1); + dtrace_load64(sp + 1, frame, arg2); if (offs >> (OFFSET_SIZE - 1)) sp -= (~offs & OFFSET_MASK) + 1; else