Changeset 12649


Ignore:
Timestamp:
Aug 23, 2009, 12:16:46 PM (10 years ago)
Author:
gb
Message:

DWARF metainfo for DarwinPPC64 ffcall exception-handling is there,
but wrong (we segfault in some internal function when unwinding
the stack, which at least means that the cxx exception stuff is
finding our metatinfo ...)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/lisp-kernel/ppc-spentry.s

    r12638 r12649  
    1 /* Copyright (C) 1994-2001 Digitool, Inc */
     1 /* Copyright (C) 1994-2001 Digitool, Inc */
    22/* This file is part of OpenMCL.   */
    33
     
    16311631          __(b LocalLabelPrefix[]ffcall_call_end)
    16321632LocalLabelPrefix[]ffcall_end:   
     1633
     1634                .section __DATA,__gcc_except_tab
     1635GCC_except_table0:
     1636          .align 3
     1637LLSDA1:
     1638          .byte 0xff    /* @LPStart format (omit) */
     1639          .byte 0x0     /* @TType format (absolute) */
     1640          .byte 0x4d    /* uleb128 0x4d; @TType base offset */
     1641          .byte 0x3     /* call-site format (udata4) */
     1642          .byte 0x41    /* uleb128 0x41; Call-site table length */
     1643       
     1644          .long Lffcall_setup-Lffcall   /* region 0 start */
     1645          .long Lffcall_setup_end-Lffcall_setup /* length */
     1646          .long 0x0     /* landing pad */
     1647          .byte 0x0     /* uleb128 0x0; action */
     1648       
     1649          .long Lffcall_call-Lffcall    /* region 1 start */
     1650          .long Lffcall_call_end-Lffcall_call   /* length */
     1651          .long LffcallLandingPad-Lffcall       /* landing pad */
     1652          .byte 0x1     /* uleb128 0x1; action */
     1653       
     1654          .long LffcallUnwindResume-Lffcall     /* region 2 start */
     1655          .long LffcallUnwindResume_end-LffcallUnwindResume     /* length */
     1656          .long 0x0     /* landing pad */
     1657          .byte 0x0     /* uleb128 0x0; action */
     1658       
     1659          .long LffcallBeginCatch-Lffcall       /* region 3 start */
     1660          .long LffcallBeginCatch_end-LffcallBeginCatch /* length */
     1661          .long 0       /* landing pad */
     1662          .byte 0x0     /* uleb128 0x0; action */
     1663       
     1664          .long LffcallEndCatch-Lffcall
     1665          .long LffcallEndCatch_end-LffcallEndCatch     /* length */
     1666          .long 0x0     /* landing pad */
     1667          .byte 0x0     /* uleb128 0x0; action */
     1668       
     1669          .byte 0x1     /* Action record table */
     1670          .byte 0x0
     1671          .align 3
     1672          .quad 0       /* _OBJC_EHTYPE_$_NSException */
     1673          .text
    16331674         __endif
    16341675        __endif
     
    16391680   r9 and r10 - at least - are overloaded as dedicated lisp registers */
    16401681_spentry(poweropen_ffcall_return_registers)
     1682LocalLabelPrefix[]ffcall_return_registers:               
    16411683        __(mflr loc_pc)
    16421684        __(vpush_saveregs())            /* Now we can use save0-save7 to point to stacks  */
     
    16751717         __(li rcontext,0)
    16761718        __endif
     1719LocalLabelPrefix[]ffcall_return_registers_setup:
    16771720        __(mtctr nargs)
    16781721        __(ldr(r3,c_frame.param0(sp)))
     
    16871730        /* to the function on entry.  */
    16881731        __(mr r12,nargs)
     1732LocalLabelPrefix[]ffcall_return_registers_setup_end:
     1733LocalLabelPrefix[]ffcall_return_registers_call:
    16891734        __(bctrl)
     1735LocalLabelPrefix[]ffcall_return_registers_call_end:
    16901736        __(str(r3,0*node_size(save7)))       
    16911737        __(str(r4,1*node_size(save7)))       
     
    17541800        __(mtxer rzero)
    17551801        __(mtctr rzero)
    1756         __(blr)
    1757 
     1802        __ifdef([DARWIN])
     1803         __ifdef([PPC64])
     1804          __(li imm3,1<<TCR_FLAG_BIT_FOREIGN_EXCEPTION)
     1805          __(ld imm4,tcr.flags(rcontext))
     1806          __(and. imm3,imm3,imm4)
     1807          __(bne 0f)
     1808         __endif
     1809        __endif
     1810        __(blr)
     1811
     1812        __ifdef([DARWIN])
     1813         __ifdef([PPC64])
     18140:        /* Got here because TCR_FLAG_BIT_FOREIGN_EXCEPTION */
     1815          /* was set in tcr.flags.  Clear that bit. */
     1816          __(andc imm4,imm4,imm3)
     1817          __(std imm4,tcr.flags(rcontext))
     1818          /* Unboxed foreign exception (likely an NSException) in %imm0. */
     1819          /* Box it, then signal a lisp error. */
     1820          __(Misc_Alloc_Fixed(arg_z,imm1,macptr.size))
     1821          __(std imm0,macptr.address(arg_z))
     1822          __(li arg_y,XFOREIGNEXCEPTION)
     1823          __(set_nargs(2))
     1824          __(b _SPksignalerr)
     1825        /* Handle exceptions, for ObjC 2.0 */
     1826LocalLabelPrefix[]ffcall_return_registersLandingPad:     
     1827          __(mr save1,r3)
     1828          __(cmpdi r4,1)
     1829          __(beq 1f)
     1830LocalLabelPrefix[]ffcall_return_registersUnwindResume:
     1831          __(ref_global(r12,unwind_resume))
     1832          __(mtctr r12)
     1833          __(bctrl)
     1834LocalLabelPrefix[]ffcall_return_registersUnwindResume_end:         
     18351:        __(mr r3,save1)
     1836LocalLabelPrefix[]ffcall_return_registersBeginCatch:
     1837          __(ref_global(r12,objc2_begin_catch))
     1838          __(mtctr r12)
     1839          __(bctrl)
     1840LocalLabelPrefix[]ffcall_return_registersBeginCatch_end:         
     1841          __(ld save1,0(r3)) /* indirection is necessary because we don't provide type info in lsda */
     1842LocalLabelPrefix[]ffcall_return_registersEndCatch: 
     1843          __(ref_global(r12,objc2_end_catch))
     1844          __(mtctr r12)
     1845          __(bctrl)             
     1846LocalLabelPrefix[]ffcall_return_registersEndCatch_end:     
     1847          __(ref_global(r12,get_tcr))
     1848          __(mtctr r12)
     1849          __(li imm0,1)       
     1850          __(bctrl)
     1851          __(ld imm2,tcr.flags(imm0))
     1852          __(ori imm2,imm2,1<<TCR_FLAG_BIT_FOREIGN_EXCEPTION)
     1853          __(std imm2,tcr.flags(imm0))
     1854          __(mr imm0,save1)
     1855          __(b LocalLabelPrefix[]ffcall_return_registers_call_end)
     1856LocalLabelPrefix[]ffcall_return_registers_end:   
     1857          .section __DATA,__gcc_except_tab
     1858GCC_except_table1:
     1859          .align 3
     1860LLSDA2:
     1861          .byte 0xff    /* @LPStart format (omit) */
     1862          .byte 0x0     /* @TType format (absolute) */
     1863          .byte 0x4d    /* uleb128 0x4d; @TType base offset */
     1864          .byte 0x3     /* call-site format (udata4) */
     1865          .byte 0x41    /* uleb128 0x41; Call-site table length */
     1866       
     1867          .long Lffcall_return_registers_setup-Lffcall_return_registers /* region 0 start */
     1868          .long Lffcall_return_registers_setup_end-Lffcall_return_registers_setup       /* length */
     1869          .long 0x0     /* landing pad */
     1870          .byte 0x0     /* uleb128 0x0; action */
     1871       
     1872          .long Lffcall_return_registers_call-Lffcall_return_registers  /* region 1 start */
     1873          .long Lffcall_return_registers_call_end-Lffcall_return_registers_call /* length */
     1874          .long Lffcall_return_registersLandingPad-Lffcall_return_registers     /* landing pad */
     1875          .byte 0x1     /* uleb128 0x1; action */
     1876       
     1877          .long Lffcall_return_registersUnwindResume-Lffcall_return_registers   /* region 2 start */
     1878          .long Lffcall_return_registersUnwindResume_end-Lffcall_return_registersUnwindResume   /* length */
     1879          .long 0x0     /* landing pad */
     1880          .byte 0x0     /* uleb128 0x0; action */
     1881       
     1882          .long Lffcall_return_registersBeginCatch-Lffcall_return_registers     /* region 3 start */
     1883          .long Lffcall_return_registersBeginCatch_end-Lffcall_return_registersBeginCatch       /* length */
     1884          .long 0       /* landing pad */
     1885          .byte 0x0     /* uleb128 0x0; action */
     1886       
     1887          .long Lffcall_return_registersEndCatch-Lffcall_return_registers
     1888          .long Lffcall_return_registersEndCatch_end-Lffcall_return_registersEndCatch   /* length */
     1889          .long 0x0     /* landing pad */
     1890          .byte 0x0     /* uleb128 0x0; action */
     1891          .byte 0x1     /* Action record table */
     1892          .byte 0x0
     1893          .align 3
     1894          .quad 0       /* _OBJC_EHTYPE_$_NSException */
     1895          .text
     1896         __endif
     1897        __endif
     1898                     
    17581899
    17591900               
     
    68326973
    68336974       
     6975        __ifdef([DARWIN])
     6976         __ifdef([PPC64])
     6977       
     6978        .section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support
     6979EH_frame1:
     6980        .set L$set$12,LECIE1-LSCIE1
     6981        .long L$set$12  /* Length of Common Information Entry */
     6982LSCIE1:
     6983        .long   0x0     /* CIE Identifier Tag */
     6984        .byte   0x1     /* CIE Version */
     6985        .ascii "zPLR\0" /* CIE Augmentation */
     6986        .byte   0x1     /* uleb128 0x1; CIE Code Alignment Factor */
     6987        .byte   0x78    /* sleb128 -8; CIE Data Alignment Factor */
     6988        .byte   0x10    /* CIE RA Column */
     6989        .byte   0x7
     6990        .byte   0x8c
     6991        .quad   lisp_globals.objc_2_personality
     6992        .byte   0x10    /* LSDA Encoding (pcrel) */
     6993        .byte   0x10    /* FDE Encoding (pcrel) */
     6994        .byte   0xc
     6995        .byte   0x1
     6996        .byte   0x0
     6997        .byte   0xc     /* DW_CFA_def_cfa */
     6998        .byte   0x7     /* uleb128 0x7 */
     6999        .byte   0x8     /* uleb128 0x8 */
     7000        .byte   0x90    /* DW_CFA_offset, column 0x10 */
     7001        .byte   0x1     /* uleb128 0x1 */
     7002        .align 3
     7003LECIE1:
     7004        .globl _SPffcall.eh
     7005_SPffcall.eh:
     7006        .long LEFDEffcall-LSFDEffcall
     7007LSFDEffcall:     
     7008        .long LSFDEffcall-EH_frame1 /* FDE CIE offset */
     7009        .quad Lffcall-. /* FDE Initial Location */
     7010        .quad Lffcall_end-Lffcall /* FDE address range */
     7011        .byte 8 /* uleb128 0x8; Augmentation size */
     7012        .quad LLSDA1-.           /* Language Specific Data Area */
     7013        .byte   0x4     /* DW_CFA_advance_loc4 */
     7014        .long Lffcall_setup-Lffcall
     7015        .byte   0xe     /* DW_CFA_def_cfa_offset */
     7016        .byte   0x10    /* uleb128 0x10 */
     7017        .byte   0x86    /* DW_CFA_offset, column 0x6 */
     7018        .byte   0x2     /* uleb128 0x2 */
     7019        .byte   0x4     /* DW_CFA_advance_loc4 */
     7020        .long Lffcall_setup_end-Lffcall_setup
     7021        .byte   0xd     /* DW_CFA_def_cfa_register */
     7022        .byte   0x6     /* uleb128 0x6 */
     7023        .byte   0x4     /* DW_CFA_advance_loc4 */
     7024        .long Lffcall_call_end-Lffcall_call
     7025        .byte   0x83    /* DW_CFA_offset, column 0x3 */
     7026        .byte   0x3     /* uleb128 0x3 */
     7027        .align 3
     7028LEFDEffcall:
     7029        .globl _SPffcall_return_registers.eh
     7030_SPffcall_return_registers.eh:
     7031        .set Lfmh,LEFDEffcall_return_registers-LSFDEffcall_return_registers
     7032        .long Lfmh
     7033LSFDEffcall_return_registers:     
     7034        .long LSFDEffcall_return_registers-EH_frame1 /* FDE CIE offset */
     7035        .quad Lffcall_return_registers-. /* FDE Initial Location */
     7036        .quad Lffcall_return_registers_end-Lffcall_return_registers /* FDE address range */
     7037        .byte 8 /* uleb128 0x8; Augmentation size */
     7038        .quad LLSDA2-.           /* Language Specific Data Area */
     7039        .byte   0x4     /* DW_CFA_advance_loc4 */
     7040        .long Lffcall_return_registers_setup-Lffcall_return_registers
     7041        .byte   0xe     /* DW_CFA_def_cfa_offset */
     7042        .byte   0x10    /* uleb128 0x10 */
     7043        .byte   0x86    /* DW_CFA_offset, column 0x6 */
     7044        .byte   0x2     /* uleb128 0x2 */
     7045        .byte   0x4     /* DW_CFA_advance_loc4 */
     7046        .long Lffcall_return_registers_setup_end-Lffcall_return_registers_setup
     7047        .byte   0xd     /* DW_CFA_def_cfa_register */
     7048        .byte   0x6     /* uleb128 0x6 */
     7049        .byte   0x4     /* DW_CFA_advance_loc4 */
     7050        .long Lffcall_return_registers_call_end-Lffcall_return_registers_call
     7051        .byte   0x83    /* DW_CFA_offset, column 0x3 */
     7052        .byte   0x3     /* uleb128 0x3 */
     7053        .align 3
     7054LEFDEffcall_return_registers:
     7055        .text
     7056         __endif
     7057        __endif
    68347058
    68357059
Note: See TracChangeset for help on using the changeset viewer.