Page MenuHomeFreeBSD

D6763.diff
No OneTemporary

D6763.diff

Index: sys/arm/linux/linux_locore.s
===================================================================
--- /dev/null
+++ sys/arm/linux/linux_locore.s
@@ -0,0 +1,122 @@
+/* $FreeBSD$ */
+
+#include "linux_assym.h" /* system definitions */
+#include <machine/asmacros.h> /* miscellaneous asm macros */
+
+#include <arm/linux/linux_syscall.h> /* system call numbers */
+
+#include "assym.s"
+
+/*
+ r0 = signo
+ r1 = sighandler
+*/
+ASENTRY_NP(linux_sigcode)
+ blx r1
+.startsigcode:
+ mov r0, sp /* struct linux_sigreturn_args * = &l_sigframe */
+ mov r7, $LINUX_SYS_linux_sigreturn /* linux_sigreturn() */
+ swi 0
+.endsigcode:
+0: b 0b
+
+ASENTRY_NP(linux_rt_sigcode)
+ blx r1
+.startrtsigcode:
+ add r0, sp, #LINUX_RT_SIGF_SC
+ add r0, r0, #LINUX_RT_SIGF_UC /* struct linux_rt_sigreturn_args * = &l_rt_sigframe.sf_sc.uc_mcontext */
+ mov r7, #LINUX_SYS_linux_rt_sigreturn /* linux_rt_sigreturn() */
+ swi 0
+.endrtsigcode:
+0: b 0b
+
+ASENTRY_NP(linux_vsyscall)
+.startvsyscall:
+ swi 0
+ mov pc, lr
+.endvsyscall:
+
+#define do_cfa_expr(offset) \
+ .byte 0x0f; /* DW_CFA_def_cfa_expression */ \
+ .uleb128 11f-10f; /* length */ \
+10: .byte 0x74; /* DW_OP_breg4 */ \
+ .sleb128 offset; /* offset */ \
+ .byte 0x06; /* DW_OP_deref */ \
+11:
+
+
+ /* CIE */
+ .section .eh_frame
+ /*.section .eh_frame,"a",@progbits*/
+.LSTARTFRAMEDLSI1:
+ .long .LENDCIEDLSI1-.LSTARTCIEDLSI1
+.LSTARTCIEDLSI1:
+ .long 0 /* CIE ID */
+ .byte 1 /* Version number */
+ .string "zRS" /* NULL-terminated
+ * augmentation string
+ */
+ .uleb128 1 /* Code alignment factor */
+ .sleb128 -4 /* Data alignment factor */
+ .byte 8 /* Return address
+ * register column
+ */
+ .uleb128 1 /* Augmentation value length */
+ .byte 0x1b /* DW_EH_PE_pcrel|DW_EH_PE_sdata4. */
+ .byte 0 /* DW_CFA_nop */
+ .align 4
+.LENDCIEDLSI1:
+
+ /* FDE */
+ .long .LENDFDEDLSI1-.LSTARTFDEDLSI1 /* Length FDE */
+.LSTARTFDEDLSI1:
+ .long .LSTARTFDEDLSI1-.LSTARTFRAMEDLSI1 /* CIE pointer */
+ .long .startsigcode-. /* PC-relative start address */
+ .long .endsigcode-.startsigcode
+ .uleb128 0 /* Augmentation */
+ do_cfa_expr(LINUX_SIGF_SC-8)
+ .align 4
+.LENDFDEDLSI1:
+
+ .long .LENDFDEDLSI2-.LSTARTFDEDLSI2 /* Length FDE */
+.LSTARTFDEDLSI2:
+ .long .LSTARTFDEDLSI2-.LSTARTFRAMEDLSI1 /* CIE pointer */
+ .long .startrtsigcode-. /* PC-relative start address */
+ .long .endrtsigcode-.startrtsigcode
+ .uleb128 0 /* Augmentation */
+ do_cfa_expr(LINUX_RT_SIGF_SC-4+LINUX_SC_ESP)
+ .align 4
+.LENDFDEDLSI2:
+ .previous
+
+ .section .eh_frame
+ /*.section .eh_frame,"a",@progbits*/
+.LSTARTFRAMEDLSI2:
+ .long .LENDCIEDLSI2-.LSTARTCIEDLSI2
+.LSTARTCIEDLSI2:
+ .long 0 /* CIE ID */
+ .byte 1 /* Version number */
+ .string "zR" /* NULL-terminated
+ * augmentation string
+ */
+ .uleb128 1 /* Code alignment factor */
+ .sleb128 -4 /* Data alignment factor */
+ .byte 8 /* Return address register column */
+ .uleb128 1 /* Augmentation value length */
+ .byte 0x1b /* DW_EH_PE_pcrel|DW_EH_PE_sdata4. */
+ .byte 0x0c /* DW_CFA_def_cfa */
+ .uleb128 4
+ .uleb128 4
+ .byte 0x88 /* DW_CFA_offset, column 0x8 */
+ .uleb128 1
+ .align 4
+.LENDCIEDLSI2:
+ .long .LENDFDEDLSI3-.LSTARTFDEDLSI3 /* Length FDE */
+.LSTARTFDEDLSI3:
+ .long .LSTARTFDEDLSI3-.LSTARTFRAMEDLSI2 /* CIE pointer */
+ .long .startvsyscall-. /* PC-relative start address */
+ .long .endvsyscall-.startvsyscall
+ .uleb128 0
+ .align 4
+.LENDFDEDLSI3:
+ .previous

File Metadata

Mime Type
text/plain
Expires
Mon, Nov 18, 3:46 AM (22 h, 4 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
14689328
Default Alt Text
D6763.diff (3 KB)

Event Timeline