; Trampoline for hppa CPU ; Copyright 1995-1997 Bruno Haible, ; ; This is free software distributed under the GNU General Public Licence ; described in the file COPYING. Contact the author if you don't have this ; or can't live with it. There is ABSOLUTELY NO WARRANTY, explicit or implied, ; on this software. ; Available registers: %r19, %r20, %r21, %r22. .SPACE $PRIVATE$ .SUBSPA $DATA$,QUAD=1,ALIGN=8,ACCESS=31 .SUBSPA $BSS$,QUAD=1,ALIGN=8,ACCESS=31,ZERO,SORT=82 .SPACE $TEXT$ .SUBSPA $LIT$,QUAD=0,ALIGN=8,ACCESS=44 .SUBSPA $CODE$,QUAD=0,ALIGN=8,ACCESS=44,CODE_ONLY .SPACE $TEXT$ .SUBSPA $CODE$ .align 4 .EXPORT tramp tramp .PROC .CALLINFO .ENTRY ; Move into ldil L'0x73554711,%r29 ldo R'0x73554711(%r29),%r29 ; Get ldil L'0xbabebec0,%r21 ldo R'0xbabebec0(%r21),%r21 ; Jump to %r21, just like the gcc-2.6.3 trampoline does it: bb,>=,n %r21,30,tramp2 ; check bit 1 of %r21 depi 0,31,2,%r21 ; if set, clear bits 1..0 ldw 4(0,%r21),%r19 ; ... dereference the function struct ldw 0(0,%r21),%r21 ; ... to get the actual code address tramp2 ldsid (0,%r21),%r1 mtsp %r1,%sr0 ; set segment register be,n 0(%sr0,%r21) ; now do an inter-module jump nop .EXIT .PROCEND