#!-(or x86 x86-64)
(let ((new-lra (make-lisp-obj (+ (sap-int dst-start)
sb!vm:other-pointer-lowtag))))
- #!-(or gencgc ppc)
- (progn
- ;; Set the offset from the LRA to the enclosing component.
- ;; This does not need to be done on GENCGC targets, as the
- ;; pointer validation done in MAKE-LISP-OBJ requires that it
- ;; already have been set before we get here. It does not
- ;; need to be done on CHENEYGC PPC as it's easier to use the
- ;; same fun_end_breakpoint_guts on both, including the LRA
- ;; header.
- (set-header-data
- new-lra
- (logandc2 (+ sb!vm:code-constants-offset bogus-lra-constants 1)
- 1))
- (sb!vm:sanctify-for-execution code-object))
+ ;; We used to set the header value of the LRA here to the
+ ;; offset from the enclosing component to the LRA header, but
+ ;; MAKE-LISP-OBJ actually checks the value before we get a
+ ;; chance to set it, so it's now done in arch-assem.S.
(values new-lra code-object (sap- trap-loc src-start))))))
\f
;;;; miscellaneous
* fun-end breakpoint magic.
*/
+/*
+ * For an explanation of the magic involved in function-end
+ * breakpoints, see the implementation in ppc-assem.S.
+ */
+
.text
.align 2
.set noreorder
.globl fun_end_breakpoint_guts
fun_end_breakpoint_guts:
- .long RETURN_PC_HEADER_WIDETAG
+ .long RETURN_PC_HEADER_WIDETAG + 0x800
br zero, fun_end_breakpoint_trap
nop
mov reg_CSP, reg_OCFP
there's a break 0,0 in the new version here!!!
*/
+/*
+ * For an explanation of the magic involved in function-end
+ * breakpoints, see the implementation in ppc-assem.S.
+ */
+
.align 8
.export fun_end_breakpoint_guts
fun_end_breakpoint_guts:
- .word RETURN_PC_HEADER_WIDETAG
+ .word RETURN_PC_HEADER_WIDETAG + 0x800
/* multiple value return point -- just jump to trap. */
b,n fun_end_breakpoint_trap
/* single value return point -- convert to multiple w/ n=1 */
* copied and has to be relocatable. It also needs a properly aligned
* header tag after the fun_end_breakpoint_guts symbol.
*/
+
+/*
+ * For an explanation of the magic involved in function-end
+ * breakpoints, see the implementation in ppc-assem.S.
+ */
+
.align 3 /* minimum alignment for a lisp object */
LEAF(fun_end_breakpoint_guts)
.set noreorder
- .word RETURN_PC_HEADER_WIDETAG
+ .word RETURN_PC_HEADER_WIDETAG + 0x800
b multiple_value_return
nop
.set reorder
.globl CSYMBOL(fun_end_breakpoint_trap)
.globl CSYMBOL(fun_end_breakpoint_end)
- /* Due to pointer verification in MAKE-LISP-OBJ on GENCGC
- targets, which includes PPC, this must include its header data
- (the offset from the start of the code-object to the LRA).
- The code-object header is five words, there are two words of
- constants, and the instruction space is doubleword-aligned,
- making an offset of eight. This is header data for a widetag,
- so shift left eight bits and add. */
+ /* Due to pointer verification in MAKE-LISP-OBJ, this must
+ include its header data (the offset from the start of the
+ code-object to the LRA). The code-object header is five
+ words, there are two words of constants, and the instruction
+ space is doubleword-aligned, making an offset of eight.
+ This is header data for a widetag, so shift left eight bits
+ and add. */
.long RETURN_PC_HEADER_WIDETAG + 0x800
/* We are receiving unknown multiple values, thus must deal
* Function-end breakpoint magic.
*/
+/*
+ * For an explanation of the magic involved in function-end
+ * breakpoints, see the implementation in ppc-assem.S.
+ */
+
.text
.align 8
.global fun_end_breakpoint_guts
fun_end_breakpoint_guts:
- .word RETURN_PC_HEADER_WIDETAG
+ .word RETURN_PC_HEADER_WIDETAG + 0x800
b 1f
nop
mov reg_CSP, reg_OCFP
/*
* fun-end breakpoint magic
*/
+
+/*
+ * For an explanation of the magic involved in function-end
+ * breakpoints, see the implementation in ppc-assem.S.
+ */
+
.text
.globl GNAME(fun_end_breakpoint_guts)
.align align_16byte
/*
* fun-end breakpoint magic
*/
+
+/*
+ * For an explanation of the magic involved in function-end
+ * breakpoints, see the implementation in ppc-assem.S.
+ */
+
.text
.globl GNAME(fun_end_breakpoint_guts)
.align align_16byte