瀏覽代碼

haiku: added cpu specific signal handler register contexts

git-svn-id: trunk@40827 -
Károly Balogh 6 年之前
父節點
當前提交
9c2b113497
共有 3 個文件被更改,包括 278 次插入0 次删除
  1. 2 0
      .gitattributes
  2. 157 0
      rtl/haiku/i386/sig_cpu.inc
  3. 119 0
      rtl/haiku/x86_64/sig_cpu.inc

+ 2 - 0
.gitattributes

@@ -9412,6 +9412,7 @@ rtl/haiku/i386/dllprt.as svneol=native#text/plain
 rtl/haiku/i386/dllprt.cpp svneol=native#text/plain
 rtl/haiku/i386/func.as svneol=native#text/plain
 rtl/haiku/i386/prt0.as svneol=native#text/plain
+rtl/haiku/i386/sig_cpu.inc svneol=native#text/plain
 rtl/haiku/i386/sighnd.inc svneol=native#text/plain
 rtl/haiku/osdefs.inc svneol=native#text/plain
 rtl/haiku/osmacro.inc svneol=native#text/plain
@@ -9432,6 +9433,7 @@ rtl/haiku/termios.inc svneol=native#text/plain
 rtl/haiku/termiosproc.inc svneol=native#text/plain
 rtl/haiku/unxconst.inc svneol=native#text/plain
 rtl/haiku/unxfunc.inc svneol=native#text/plain
+rtl/haiku/x86_64/sig_cpu.inc svneol=native#text/plain
 rtl/haiku/x86_64/sighnd.inc svneol=native#text/plain
 rtl/i386/cpu.pp svneol=native#text/plain
 rtl/i386/cpuh.inc svneol=native#text/plain

+ 157 - 0
rtl/haiku/i386/sig_cpu.inc

@@ -0,0 +1,157 @@
+{
+    This file is part of the Free Pascal run time library.
+    Copyright (c) 2019 the Free Pascal development team.
+
+    i386 specific signal handler structure
+
+    See the file COPYING.FPC, included in this distribution,
+    for details about the copyright.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ **********************************************************************}
+
+{*
+ * Architecture-specific structure passed to signal handlers
+ *}
+
+{$PACKRECORDS C}
+type
+  packed_fp_stack = record
+    st0 : array[0..9] of byte;
+    st1 : array[0..9] of byte;
+    st2 : array[0..9] of byte;
+    st3 : array[0..9] of byte;
+    st4 : array[0..9] of byte;
+    st5 : array[0..9] of byte;
+    st6 : array[0..9] of byte;
+    st7 : array[0..9] of byte;
+  end;
+
+  packed_mmx_regs = record
+    mm0 : array[0..9] of byte;
+    mm1 : array[0..9] of byte;
+    mm2 : array[0..9] of byte;
+    mm3 : array[0..9] of byte;
+    mm4 : array[0..9] of byte;
+    mm5 : array[0..9] of byte;
+    mm6 : array[0..9] of byte;
+    mm7 : array[0..9] of byte;
+  end;
+
+  old_extended_regs = record
+    fp_control: word;
+    _reserved1: word;
+    fp_status: word;
+    _reserved2: word;
+    fp_tag: word;
+    _reserved3: word;
+    fp_eip: cardinal;
+    fp_cs: word;
+    fp_opcode: word;
+    fp_datap: dword;
+    fp_ds: word;
+    _reserved4: word;
+    fp_mmx : record
+      case fp_mmx : byte of
+        0 : (fp: packed_fp_stack);
+        1 : (mmx: packed_mmx_regs);
+    end;
+  end;
+
+  fp_stack = record
+    st0 : array[0..9] of byte;
+    _reserved_42_47 : array[0..5] of byte;
+    st1 : array[0..9] of byte;
+    _reserved_58_63 : array[0..5] of byte;
+    st2 : array[0..9] of byte;
+    _reserved_74_79 : array[0..5] of byte;
+    st3 : array[0..9] of byte;
+    _reserved_90_95 : array[0..5] of byte;
+    st4 : array[0..9] of byte;
+    _reserved_106_111 : array[0..5] of byte;
+    st5 : array[0..9] of byte;
+    _reserved_122_127 : array[0..5] of byte;
+    st6 : array[0..9] of byte;    
+    _reserved_138_143 : array[0..5] of byte;
+    st7 : array[0..9] of byte;        
+    _reserved_154_159 : array[0..5] of byte;
+  end;
+
+  mmx_regs = record
+    mm0 : array[0..9] of byte;
+    _reserved_42_47 : array[0..5] of byte;
+    mm1 : array[0..9] of byte;
+    _reserved_58_63 : array[0..5] of byte;
+    mm2 : array[0..9] of byte;
+    _reserved_74_79 : array[0..5] of byte;
+    mm3 : array[0..9] of byte;
+    _reserved_90_95 : array[0..5] of byte;
+    mm4 : array[0..9] of byte;
+    _reserved_106_111 : array[0..5] of byte;
+    mm5 : array[0..9] of byte;
+    _reserved_122_127 : array[0..5] of byte;
+    mm6 : array[0..9] of byte;
+    _reserved_138_143 : array[0..5] of byte;
+    mm7 : array[0..9] of byte;
+    _reserved_154_159 : array[0..5] of byte;
+  end;
+
+  xmmx_regs = record
+    xmm0 : array [0..15] of byte;
+    xmm1 : array [0..15] of byte;
+    xmm2 : array [0..15] of byte;
+    xmm3 : array [0..15] of byte;
+    xmm4 : array [0..15] of byte;
+    xmm5 : array [0..15] of byte;
+    xmm6 : array [0..15] of byte;
+    xmm7 : array [0..15] of byte;
+  end;
+
+  new_extended_regs = record
+    fp_control: word;
+    fp_status: word;
+    fp_tag: word;
+    fp_opcode: word;
+    fp_eip: dword;
+    fp_cs: word;
+    res_14_15: word;
+    fp_datap: dword;
+    fp_ds: word;
+    _reserved_22_23: word;
+    mxcsr: dword;
+    _reserved_28_31: dword;
+    fp_mmx : record
+      case byte of
+        0 : (fp : fp_stack);
+        1 : (mmx : mmx_regs);
+    end;
+    xmmx: xmmx_regs;
+    _reserved_288_511 : array[0..223] of byte;
+  end;
+
+  extended_regs = record
+    state : record
+      case byte of
+        0 : (old_format : old_extended_regs);
+        1 : (new_format : new_extended_regs);
+      end;
+    format: dword;
+  end;
+
+  vregs = record
+    eip: dword;
+    eflags: dword;
+    eax: dword;
+    ecx: dword;
+    edx: dword;
+    esp: dword;
+    ebp: dword;
+    _reserved_1: dword;
+    xregs: extended_regs;
+    edi: dword;
+    esi: dword;
+    ebx: dword;
+  end;

+ 119 - 0
rtl/haiku/x86_64/sig_cpu.inc

@@ -0,0 +1,119 @@
+{
+    This file is part of the Free Pascal run time library.
+    Copyright (c) 2019 the Free Pascal development team.
+
+    x86_64 specific signal handler structure
+
+    See the file COPYING.FPC, included in this distribution,
+    for details about the copyright.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ **********************************************************************}
+
+{*
+ * Architecture-specific structure passed to signal handlers
+ *}
+
+{$PACKRECORDS C}
+type
+  fp_stack = record
+    st0: array[0..9] of byte;
+    _reserved_42_47: array[0..5] of byte;
+    st1: array[0..9] of byte;
+    _reserved_58_63: array[0..5] of byte;
+    st2: array[0..9] of byte;
+    _reserved_74_79: array[0..5] of byte;
+    st3: array[0..9] of byte;
+    _reserved_90_95: array[0..5] of byte;
+    st4: array[0..9] of byte;
+    _reserved_106_111: array[0..5] of byte;
+    st5: array[0..9] of byte;
+    _reserved_122_127: array[0..5] of byte;
+    st6: array[0..9] of byte;
+    _reserved_138_143: array[0..5] of byte;
+    st7: array[0..9] of byte;
+    _reserved_154_159: array[0..5] of byte;
+  end;
+
+  mmx_regs = record
+    mm0: array[0..9] of byte;
+    _reserved_42_47: array[0..5] of byte;
+    mm1: array[0..9] of byte;
+    _reserved_58_63: array[0..5] of byte;
+    mm2: array[0..9] of byte;
+    _reserved_74_79: array[0..5] of byte;
+    mm3: array[0..9] of byte;
+    _reserved_90_95: array[0..5] of byte;
+    mm4: array[0..9] of byte;
+    _reserved_106_111: array[0..5] of byte;
+    mm5: array[0..9] of byte;
+    _reserved_122_127: array[0..5] of byte;
+    mm6: array[0..9] of byte;
+    _reserved_138_143: array[0..5] of byte;
+    mm7: array[0..9] of byte;
+    _reserved_154_159: array[0..5] of byte;
+  end;
+
+  xmm_regs = record
+    xmm0: array[0..15] of byte;
+    xmm1: array[0..15] of byte;
+    xmm2: array[0..15] of byte;
+    xmm3: array[0..15] of byte;
+    xmm4: array[0..15] of byte;
+    xmm5: array[0..15] of byte;
+    xmm6: array[0..15] of byte;
+    xmm7: array[0..15] of byte;
+    xmm8: array[0..15] of byte;
+    xmm9: array[0..15] of byte;
+    xmm10: array[0..15] of byte;
+    xmm11: array[0..15] of byte;
+    xmm12: array[0..15] of byte;
+    xmm13: array[0..15] of byte;
+    xmm14: array[0..15] of byte;
+    xmm15: array[0..15] of byte;
+  end;
+
+  fpu_state = record
+    control: word;
+    status: word;
+    tag: word;
+    opcode: word;
+    rip: qword;
+    rdp: qword;
+    mxcsr: dword;
+    mscsr_mask: dword;
+    fp_mmx : record
+      case byte of
+        0: (fp: fp_stack);
+        1: (mmx: mmx_regs);
+    end;
+    xmm: xmm_regs;
+    _reserved_416_511: array[0..95] of byte;
+  end;
+
+  vregs = record
+    rax: qword;
+    rbx: qword;
+    rcx: qword;
+    rdx: qword;
+    rdi: qword;
+    rsi: qword;
+    rbp: qword;
+    r8: qword;
+    r9: qword;
+    r10: qword;
+    r11: qword;
+    r12: qword;
+    r13: qword;
+    r14: qword;
+    r15: qword;
+
+    rsp: qword;
+    rip: qword;
+    rflags: qword;
+
+    fpu: fpu_state;
+  end;