Skip to content

Instantly share code, notes, and snippets.

@schmir
Created April 14, 2013 20:16
Show Gist options
  • Save schmir/5384037 to your computer and use it in GitHub Desktop.
Save schmir/5384037 to your computer and use it in GitHub Desktop.
.file "greenlet.c"
.text
.p2align 4,,15
.type green_is_gc, @function
green_is_gc:
.LFB148:
.cfi_startproc
cmpq $-1, 24(%rdi)
je .L3
xorl %eax, %eax
cmpq $0, 16(%rdi)
sete %al
ret
.p2align 4,,10
.p2align 3
.L3:
movl $1, %eax
ret
.cfi_endproc
.LFE148:
.size green_is_gc, .-green_is_gc
.p2align 4,,15
.type green_clear, @function
green_clear:
.LFB149:
.cfi_startproc
pushq %rbx
.cfi_def_cfa_offset 16
.cfi_offset 3, -16
movq %rdi, %rbx
movq 56(%rdi), %rdi
testq %rdi, %rdi
je .L7
movq $0, 56(%rbx)
subq $1, (%rdi)
je .L25
.L7:
movq 64(%rbx), %rdi
testq %rdi, %rdi
je .L10
movq $0, 64(%rbx)
subq $1, (%rdi)
je .L26
.L10:
movq 96(%rbx), %rdi
testq %rdi, %rdi
je .L13
movq $0, 96(%rbx)
subq $1, (%rdi)
je .L27
.L13:
movq 104(%rbx), %rdi
testq %rdi, %rdi
je .L16
movq $0, 104(%rbx)
subq $1, (%rdi)
je .L28
.L16:
movq 112(%rbx), %rdi
testq %rdi, %rdi
je .L19
movq $0, 112(%rbx)
subq $1, (%rdi)
je .L29
.L19:
movq 120(%rbx), %rdi
testq %rdi, %rdi
je .L22
movq $0, 120(%rbx)
subq $1, (%rdi)
jne .L22
movq 8(%rdi), %rax
call *48(%rax)
.L22:
xorl %eax, %eax
popq %rbx
.cfi_remember_state
.cfi_def_cfa_offset 8
ret
.p2align 4,,10
.p2align 3
.L29:
.cfi_restore_state
movq 8(%rdi), %rax
call *48(%rax)
.p2align 4,,4
jmp .L19
.p2align 4,,10
.p2align 3
.L28:
movq 8(%rdi), %rax
call *48(%rax)
.p2align 4,,6
jmp .L16
.p2align 4,,10
.p2align 3
.L27:
movq 8(%rdi), %rax
call *48(%rax)
.p2align 4,,6
jmp .L13
.p2align 4,,10
.p2align 3
.L26:
movq 8(%rdi), %rax
call *48(%rax)
.p2align 4,,6
jmp .L10
.p2align 4,,10
.p2align 3
.L25:
movq 8(%rdi), %rax
call *48(%rax)
.p2align 4,,6
jmp .L7
.cfi_endproc
.LFE149:
.size green_clear, .-green_clear
.p2align 4,,15
.type single_result, @function
single_result:
.LFB151:
.cfi_startproc
testq %rdi, %rdi
je .L32
movq 8(%rdi), %rdx
movq %rdi, %rax
testb $4, 171(%rdx)
je .L39
cmpq $1, 16(%rdi)
je .L40
.L39:
ret
.p2align 4,,10
.p2align 3
.L40:
movq 24(%rdi), %rcx
addq $1, (%rcx)
movq %rcx, %rax
movq (%rdi), %rsi
subq $1, %rsi
testq %rsi, %rsi
movq %rsi, (%rdi)
jne .L39
subq $24, %rsp
.cfi_def_cfa_offset 32
movq %rcx, 8(%rsp)
call *48(%rdx)
movq 8(%rsp), %rax
addq $24, %rsp
.cfi_def_cfa_offset 8
ret
.p2align 4,,10
.p2align 3
.L32:
xorl %eax, %eax
ret
.cfi_endproc
.LFE151:
.size single_result, .-single_result
.p2align 4,,15
.type green_bool, @function
green_bool:
.LFB155:
.cfi_startproc
xorl %eax, %eax
cmpq $0, 16(%rdi)
setne %al
ret
.cfi_endproc
.LFE155:
.size green_bool, .-green_bool
.p2align 4,,15
.type green_getdead, @function
green_getdead:
.LFB158:
.cfi_startproc
cmpq $0, 16(%rdi)
je .L43
.L45:
movq _Py_ZeroStruct@GOTPCREL(%rip), %rax
addq $1, (%rax)
ret
.p2align 4,,10
.p2align 3
.L43:
cmpq $0, 24(%rdi)
je .L45
movq _Py_TrueStruct@GOTPCREL(%rip), %rax
addq $1, (%rax)
ret
.cfi_endproc
.LFE158:
.size green_getdead, .-green_getdead
.p2align 4,,15
.type green_getparent, @function
green_getparent:
.LFB161:
.cfi_startproc
movq 56(%rdi), %rax
testq %rax, %rax
je .L48
addq $1, (%rax)
ret
.p2align 4,,10
.p2align 3
.L48:
movq _Py_NoneStruct@GOTPCREL(%rip), %rax
addq $1, (%rax)
ret
.cfi_endproc
.LFE161:
.size green_getparent, .-green_getparent
.p2align 4,,15
.type green_getframe, @function
green_getframe:
.LFB163:
.cfi_startproc
movq 72(%rdi), %rax
testq %rax, %rax
je .L51
addq $1, (%rax)
ret
.p2align 4,,10
.p2align 3
.L51:
movq _Py_NoneStruct@GOTPCREL(%rip), %rax
addq $1, (%rax)
ret
.cfi_endproc
.LFE163:
.size green_getframe, .-green_getframe
.section .rodata.str1.1,"aMS",@progbits,1
.LC0:
.string "can't delete attribute"
.LC1:
.string "parent must be a greenlet"
.LC2:
.string "cyclic parent chain"
.section .rodata.str1.8,"aMS",@progbits,1
.align 8
.LC3:
.string "parent must not be garbage collected"
.align 8
.LC4:
.string "parent cannot be on a different thread"
.text
.p2align 4,,15
.type green_setparent, @function
green_setparent:
.LFB162:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsi, %rbp
pushq %rbx
.cfi_def_cfa_offset 24
.cfi_offset 3, -24
subq $8, %rsp
.cfi_def_cfa_offset 32
testq %rsi, %rsi
je .L69
movq %rdi, %rbx
movq 8(%rsi), %rdi
movq PyGreenlet_Type@GOTPCREL(%rip), %rsi
cmpq %rsi, %rdi
je .L55
call PyType_IsSubtype@PLT
testl %eax, %eax
je .L70
.L55:
cmpq %rbx, %rbp
movq %rbp, %rax
jne .L58
.p2align 4,,3
jmp .L56
.p2align 4,,10
.p2align 3
.L72:
movq 64(%rax), %rdx
movq 56(%rax), %rax
testq %rax, %rax
je .L71
.L60:
cmpq %rax, %rbx
je .L56
.L58:
cmpq $0, 16(%rax)
jne .L72
movq 56(%rax), %rax
xorl %edx, %edx
testq %rax, %rax
jne .L60
.p2align 4,,10
.p2align 3
.L71:
testq %rdx, %rdx
je .L73
cmpq $0, 24(%rbx)
je .L62
cmpq 64(%rbx), %rdx
jne .L74
.L62:
movq 56(%rbx), %rdi
movq %rbp, 56(%rbx)
addq $1, 0(%rbp)
testq %rdi, %rdi
je .L68
subq $1, (%rdi)
je .L75
.L68:
xorl %eax, %eax
.L54:
addq $8, %rsp
.cfi_remember_state
.cfi_def_cfa_offset 24
popq %rbx
.cfi_def_cfa_offset 16
popq %rbp
.cfi_def_cfa_offset 8
ret
.p2align 4,,10
.p2align 3
.L56:
.cfi_restore_state
movq PyExc_ValueError@GOTPCREL(%rip), %rax
leaq .LC2(%rip), %rsi
movq (%rax), %rdi
call PyErr_SetString@PLT
addq $8, %rsp
.cfi_remember_state
.cfi_def_cfa_offset 24
movl $-1, %eax
popq %rbx
.cfi_def_cfa_offset 16
popq %rbp
.cfi_def_cfa_offset 8
ret
.p2align 4,,10
.p2align 3
.L75:
.cfi_restore_state
movq 8(%rdi), %rax
call *48(%rax)
jmp .L68
.L74:
movq PyExc_ValueError@GOTPCREL(%rip), %rax
leaq .LC4(%rip), %rsi
movq (%rax), %rdi
call PyErr_SetString@PLT
movl $-1, %eax
jmp .L54
.L70:
movq PyExc_TypeError@GOTPCREL(%rip), %rax
leaq .LC1(%rip), %rsi
movq (%rax), %rdi
call PyErr_SetString@PLT
movl $-1, %eax
jmp .L54
.L69:
movq PyExc_AttributeError@GOTPCREL(%rip), %rax
leaq .LC0(%rip), %rsi
movq (%rax), %rdi
call PyErr_SetString@PLT
movl $-1, %eax
jmp .L54
.L73:
movq PyExc_ValueError@GOTPCREL(%rip), %rax
leaq .LC3(%rip), %rsi
movq (%rax), %rdi
call PyErr_SetString@PLT
movl $-1, %eax
jmp .L54
.cfi_endproc
.LFE162:
.size green_setparent, .-green_setparent
.p2align 4,,15
.type green_getdict, @function
green_getdict:
.LFB156:
.cfi_startproc
movq 120(%rdi), %rax
testq %rax, %rax
je .L84
addq $1, (%rax)
ret
.p2align 4,,10
.p2align 3
.L84:
subq $24, %rsp
.cfi_def_cfa_offset 32
movq %rdi, 8(%rsp)
call PyDict_New@PLT
movq 8(%rsp), %rdi
testq %rax, %rax
movq %rax, 120(%rdi)
je .L78
addq $1, (%rax)
.L78:
addq $24, %rsp
.cfi_def_cfa_offset 8
ret
.cfi_endproc
.LFE156:
.size green_getdict, .-green_getdict
.section .rodata.str1.1
.LC5:
.string "cannot serialize '%s' object"
.text
.p2align 4,,15
.type green_getstate, @function
green_getstate:
.LFB164:
.cfi_startproc
subq $8, %rsp
.cfi_def_cfa_offset 16
movq 8(%rdi), %rax
leaq .LC5(%rip), %rsi
movq 24(%rax), %rdx
movq PyExc_TypeError@GOTPCREL(%rip), %rax
movq (%rax), %rdi
xorl %eax, %eax
call PyErr_Format@PLT
xorl %eax, %eax
addq $8, %rsp
.cfi_def_cfa_offset 8
ret
.cfi_endproc
.LFE164:
.size green_getstate, .-green_getstate
.p2align 4,,15
.type g_handle_exit, @function
g_handle_exit:
.LFB142:
.cfi_startproc
pushq %rbx
.cfi_def_cfa_offset 16
.cfi_offset 3, -16
movq %rdi, %rbx
subq $48, %rsp
.cfi_def_cfa_offset 64
testq %rdi, %rdi
je .L100
.L88:
movl $1, %edi
call PyTuple_New@PLT
testq %rax, %rax
je .L96
movq %rbx, 24(%rax)
.L90:
addq $48, %rsp
.cfi_remember_state
.cfi_def_cfa_offset 16
popq %rbx
.cfi_def_cfa_offset 8
ret
.p2align 4,,10
.p2align 3
.L96:
.cfi_restore_state
movq (%rbx), %rcx
leaq -1(%rcx), %rdx
testq %rdx, %rdx
movq %rdx, (%rbx)
je .L101
.L97:
addq $48, %rsp
.cfi_remember_state
.cfi_def_cfa_offset 16
xorl %eax, %eax
popq %rbx
.cfi_def_cfa_offset 8
ret
.p2align 4,,10
.p2align 3
.L101:
.cfi_restore_state
movq 8(%rbx), %rdx
movq %rax, 8(%rsp)
movq %rbx, %rdi
call *48(%rdx)
movq 8(%rsp), %rax
jmp .L90
.p2align 4,,10
.p2align 3
.L100:
movq PyExc_GreenletExit(%rip), %rdi
call PyErr_ExceptionMatches@PLT
testl %eax, %eax
je .L97
leaq 40(%rsp), %rdx
leaq 32(%rsp), %rsi
leaq 24(%rsp), %rdi
call PyErr_Fetch@PLT
movq 32(%rsp), %rbx
testq %rbx, %rbx
je .L102
.L91:
movq 24(%rsp), %rdi
subq $1, (%rdi)
je .L103
.L92:
movq 40(%rsp), %rdi
testq %rdi, %rdi
je .L88
subq $1, (%rdi)
jne .L88
movq 8(%rdi), %rax
call *48(%rax)
.p2align 4,,2
jmp .L88
.L103:
movq 8(%rdi), %rax
call *48(%rax)
.p2align 4,,6
jmp .L92
.L102:
movq _Py_NoneStruct@GOTPCREL(%rip), %rbx
addq $1, (%rbx)
movq %rbx, 32(%rsp)
jmp .L91
.cfi_endproc
.LFE142:
.size g_handle_exit, .-g_handle_exit
.p2align 4,,15
.type slp_restore_state, @function
slp_restore_state:
.LFB136:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
pushq %rbx
.cfi_def_cfa_offset 24
.cfi_offset 3, -24
subq $8, %rsp
.cfi_def_cfa_offset 32
movq ts_target(%rip), %rbp
movq ts_current(%rip), %rbx
movq 40(%rbp), %rdx
testq %rdx, %rdx
jne .L120
cmpq $0, 16(%rbx)
je .L121
.L106:
movq 24(%rbp), %rax
jmp .L119
.p2align 4,,10
.p2align 3
.L122:
movq 48(%rbx), %rbx
testq %rbx, %rbx
je .L107
.L119:
cmpq %rax, 24(%rbx)
jbe .L122
.L107:
movq %rbx, 48(%rbp)
addq $8, %rsp
.cfi_remember_state
.cfi_def_cfa_offset 24
popq %rbx
.cfi_def_cfa_offset 16
popq %rbp
.cfi_def_cfa_offset 8
ret
.p2align 4,,10
.p2align 3
.L120:
.cfi_restore_state
movq 16(%rbp), %rdi
movq 32(%rbp), %rsi
call memcpy@PLT
movq 32(%rbp), %rdi
call PyMem_Free@PLT
cmpq $0, 16(%rbx)
movq $0, 32(%rbp)
movq $0, 40(%rbp)
jne .L106
.L121:
movq 48(%rbx), %rbx
testq %rbx, %rbx
jne .L106
jmp .L107
.cfi_endproc
.LFE136:
.size slp_restore_state, .-slp_restore_state
.section .rodata.str1.1
.LC6:
.string "O(OO)"
.text
.p2align 4,,15
.type g_calltrace, @function
g_calltrace:
.LFB140:
.cfi_startproc
pushq %r14
.cfi_def_cfa_offset 16
.cfi_offset 14, -16
movq %rcx, %r14
pushq %r13
.cfi_def_cfa_offset 24
.cfi_offset 13, -24
movq %rdx, %r13
pushq %r12
.cfi_def_cfa_offset 32
.cfi_offset 12, -32
movq %rsi, %r12
pushq %rbp
.cfi_def_cfa_offset 40
.cfi_offset 6, -40
movq %rdi, %rbp
pushq %rbx
.cfi_def_cfa_offset 48
.cfi_offset 3, -48
subq $32, %rsp
.cfi_def_cfa_offset 80
leaq 24(%rsp), %rdx
leaq 16(%rsp), %rsi
leaq 8(%rsp), %rdi
call PyErr_Fetch@PLT
movq _PyThreadState_Current@GOTPCREL(%rip), %rax
leaq .LC6(%rip), %rsi
movq %r13, %rcx
movq %r12, %rdx
movq %r14, %r8
movq %rbp, %rdi
movq (%rax), %rbx
xorl %eax, %eax
addl $1, 28(%rbx)
movl $0, 32(%rbx)
call PyObject_CallFunction@PLT
movl 28(%rbx), %ecx
leal -1(%rcx), %edx
xorl %ecx, %ecx
testl %edx, %edx
movl %edx, 28(%rbx)
jle .L145
.L124:
testq %rax, %rax
movl %ecx, 32(%rbx)
je .L146
movq (%rax), %rsi
leaq -1(%rsi), %rdx
testq %rdx, %rdx
movq %rdx, (%rax)
je .L147
.L138:
movq 24(%rsp), %rdx
movq 16(%rsp), %rsi
movq 8(%rsp), %rdi
call PyErr_Restore@PLT
xorl %eax, %eax
.L136:
addq $32, %rsp
.cfi_remember_state
.cfi_def_cfa_offset 48
popq %rbx
.cfi_def_cfa_offset 40
popq %rbp
.cfi_def_cfa_offset 32
popq %r12
.cfi_def_cfa_offset 24
popq %r13
.cfi_def_cfa_offset 16
popq %r14
.cfi_def_cfa_offset 8
ret
.p2align 4,,10
.p2align 3
.L147:
.cfi_restore_state
movq 8(%rax), %rdx
movq %rax, %rdi
call *48(%rdx)
jmp .L138
.p2align 4,,10
.p2align 3
.L145:
cmpq $0, 48(%rbx)
je .L125
.L126:
movl $1, %ecx
jmp .L124
.p2align 4,,10
.p2align 3
.L146:
movq 120(%rbx), %rdi
movq ts_tracekey(%rip), %rsi
call PyDict_GetItem@PLT
testq %rax, %rax
je .L128
movq 120(%rbx), %rdi
movq ts_tracekey(%rip), %rsi
call PyDict_DelItem@PLT
.L128:
movq 8(%rsp), %rdi
testq %rdi, %rdi
je .L130
subq $1, (%rdi)
je .L148
.L130:
movq 16(%rsp), %rdi
testq %rdi, %rdi
je .L133
subq $1, (%rdi)
je .L149
.L133:
movq 24(%rsp), %rdi
testq %rdi, %rdi
je .L144
subq $1, (%rdi)
je .L150
.L144:
movl $-1, %eax
jmp .L136
.p2align 4,,10
.p2align 3
.L150:
movq 8(%rdi), %rax
call *48(%rax)
jmp .L144
.p2align 4,,10
.p2align 3
.L149:
movq 8(%rdi), %rax
call *48(%rax)
.p2align 4,,6
jmp .L133
.p2align 4,,10
.p2align 3
.L148:
movq 8(%rdi), %rax
call *48(%rax)
.p2align 4,,6
jmp .L130
.p2align 4,,10
.p2align 3
.L125:
cmpq $0, 40(%rbx)
jne .L126
.p2align 4,,6
jmp .L124
.cfi_endproc
.LFE140:
.size g_calltrace, .-g_calltrace
.p2align 4,,15
.type green_traverse, @function
green_traverse:
.LFB147:
.cfi_startproc
pushq %r12
.cfi_def_cfa_offset 16
.cfi_offset 12, -16
movq %rdx, %r12
pushq %rbp
.cfi_def_cfa_offset 24
.cfi_offset 6, -24
movq %rsi, %rbp
pushq %rbx
.cfi_def_cfa_offset 32
.cfi_offset 3, -32
movq %rdi, %rbx
movq 56(%rdi), %rdi
testq %rdi, %rdi
je .L156
movq %rdx, %rsi
call *%rbp
testl %eax, %eax
jne .L155
.L156:
movq 64(%rbx), %rdi
testq %rdi, %rdi
je .L154
movq %r12, %rsi
call *%rbp
testl %eax, %eax
jne .L155
.L154:
movq 96(%rbx), %rdi
testq %rdi, %rdi
je .L158
movq %r12, %rsi
call *%rbp
testl %eax, %eax
jne .L155
.L158:
movq 104(%rbx), %rdi
testq %rdi, %rdi
je .L160
movq %r12, %rsi
call *%rbp
testl %eax, %eax
jne .L155
.L160:
movq 112(%rbx), %rdi
testq %rdi, %rdi
je .L162
movq %r12, %rsi
call *%rbp
testl %eax, %eax
jne .L155
.L162:
movq 120(%rbx), %rdi
xorl %eax, %eax
testq %rdi, %rdi
je .L155
popq %rbx
.cfi_remember_state
.cfi_def_cfa_offset 24
movq %rbp, %rax
movq %r12, %rsi
popq %rbp
.cfi_def_cfa_offset 16
popq %r12
.cfi_def_cfa_offset 8
jmp *%rax
.p2align 4,,10
.p2align 3
.L155:
.cfi_restore_state
popq %rbx
.cfi_def_cfa_offset 24
popq %rbp
.cfi_def_cfa_offset 16
popq %r12
.cfi_def_cfa_offset 8
ret
.cfi_endproc
.LFE147:
.size green_traverse, .-green_traverse
.p2align 4,,15
.type green_create_main, @function
green_create_main:
.LFB132:
.cfi_startproc
pushq %rbx
.cfi_def_cfa_offset 16
.cfi_offset 3, -16
call PyThreadState_GetDict@PLT
testq %rax, %rax
movq %rax, %rbx
je .L177
movq PyGreenlet_Type@GOTPCREL(%rip), %rdi
xorl %esi, %esi
call PyType_GenericAlloc@PLT
testq %rax, %rax
je .L175
movq %rbx, 64(%rax)
movq $1, 16(%rax)
movq $-1, 24(%rax)
addq $1, (%rbx)
movq %rax, %rbx
.L173:
movq %rbx, %rax
popq %rbx
.cfi_remember_state
.cfi_def_cfa_offset 8
ret
.p2align 4,,10
.p2align 3
.L177:
.cfi_restore_state
call PyErr_Occurred@PLT
testq %rax, %rax
jne .L173
.p2align 4,,5
call PyErr_NoMemory@PLT
.p2align 4,,5
jmp .L173
.p2align 4,,10
.p2align 3
.L175:
xorl %ebx, %ebx
jmp .L173
.cfi_endproc
.LFE132:
.size green_create_main, .-green_create_main
.section .rodata.str1.1
.LC7:
.string "greenlet.c"
.section .rodata.str1.8
.align 8
.LC8:
.string "current->run_info == tstate->dict"
.text
.p2align 4,,15
.type green_updatecurrent, @function
green_updatecurrent:
.LFB133:
.cfi_startproc
pushq %r15
.cfi_def_cfa_offset 16
.cfi_offset 15, -16
pushq %r14
.cfi_def_cfa_offset 24
.cfi_offset 14, -24
pushq %r13
.cfi_def_cfa_offset 32
.cfi_offset 13, -32
pushq %r12
.cfi_def_cfa_offset 40
.cfi_offset 12, -40
pushq %rbp
.cfi_def_cfa_offset 48
.cfi_offset 6, -48
pushq %rbx
.cfi_def_cfa_offset 56
.cfi_offset 3, -56
subq $56, %rsp
.cfi_def_cfa_offset 112
leaq 24(%rsp), %rax
leaq 40(%rsp), %r15
leaq 32(%rsp), %r14
movq %rax, 8(%rsp)
.L179:
.L206:
movq 8(%rsp), %rdi
movq %r15, %rdx
movq %r14, %rsi
call PyErr_Fetch@PLT
movq _PyThreadState_Current@GOTPCREL(%rip), %rax
movq (%rax), %rbp
movq 120(%rbp), %rdi
testq %rdi, %rdi
je .L180
movq ts_curkey(%rip), %rsi
call PyDict_GetItem@PLT
testq %rax, %rax
movq %rax, %rbx
je .L180
addq $1, (%rax)
movq 120(%rbp), %rdi
movq ts_curkey(%rip), %rsi
call PyDict_DelItem@PLT
.L181:
movq 120(%rbp), %rax
cmpq %rax, 64(%rbx)
je .L204
jmp .L236
.p2align 4,,10
.p2align 3
.L201:
movq 120(%rbp), %rdi
movq ts_delkey(%rip), %rsi
call PyDict_GetItem@PLT
testq %rax, %rax
je .L202
xorl %ecx, %ecx
movl $2147483647, %edx
xorl %esi, %esi
movq %rax, %rdi
call PyList_SetSlice@PLT
.L202:
movq ts_current(%rip), %rax
cmpq %rbx, %rax
je .L203
movq 120(%rbp), %rdi
movq ts_curkey(%rip), %rsi
call PyDict_DelItem@PLT
.L204:
movq ts_current(%rip), %r13
addq $1, (%rbx)
movq ts_curkey(%rip), %rsi
movq %rbx, ts_current(%rip)
movq 64(%r13), %rdi
movq %r13, %rdx
call PyDict_SetItem@PLT
movl %eax, %r12d
movq 0(%r13), %rax
subq $1, %rax
testl %r12d, %r12d
movq %rax, 0(%r13)
jne .L229
testq %rax, %rax
jne .L201
movq 8(%r13), %rax
movq %r13, %rdi
call *48(%rax)
jmp .L201
.p2align 4,,10
.p2align 3
.L229:
testq %rax, %rax
je .L230
.L193:
subq $1, (%rbx)
.p2align 4,,4
je .L231
.L194:
movq 24(%rsp), %rdi
testq %rdi, %rdi
je .L196
subq $1, (%rdi)
je .L232
.L196:
movq 32(%rsp), %rdi
testq %rdi, %rdi
je .L199
subq $1, (%rdi)
je .L233
.L199:
movq 40(%rsp), %rdi
testq %rdi, %rdi
je .L220
subq $1, (%rdi)
je .L234
.L220:
movl $-1, %r12d
.L189:
addq $56, %rsp
.cfi_remember_state
.cfi_def_cfa_offset 56
movl %r12d, %eax
popq %rbx
.cfi_def_cfa_offset 48
popq %rbp
.cfi_def_cfa_offset 40
popq %r12
.cfi_def_cfa_offset 32
popq %r13
.cfi_def_cfa_offset 24
popq %r14
.cfi_def_cfa_offset 16
popq %r15
.cfi_def_cfa_offset 8
ret
.p2align 4,,10
.p2align 3
.L203:
.cfi_restore_state
subq $1, (%rbx)
je .L235
.L205:
movq 40(%rsp), %rdx
movq 32(%rsp), %rsi
movq 24(%rsp), %rdi
call PyErr_Restore@PLT
movq ts_current(%rip), %rax
movq 120(%rbp), %rcx
cmpq %rcx, 64(%rax)
jne .L206
jmp .L189
.p2align 4,,10
.p2align 3
.L180:
call green_create_main
testq %rax, %rax
movq %rax, %rbx
.p2align 4,,2
jne .L181
.p2align 4,,2
jmp .L194
.p2align 4,,10
.p2align 3
.L234:
movq 8(%rdi), %rax
call *48(%rax)
.p2align 4,,6
jmp .L220
.p2align 4,,10
.p2align 3
.L231:
movq 8(%rbx), %rax
movq %rbx, %rdi
call *48(%rax)
.p2align 4,,3
jmp .L194
.p2align 4,,10
.p2align 3
.L230:
movq 8(%r13), %rax
movq %r13, %rdi
call *48(%rax)
.p2align 4,,3
jmp .L193
.p2align 4,,10
.p2align 3
.L235:
movq 8(%rbx), %rax
movq %rbx, %rdi
call *48(%rax)
.p2align 4,,3
jmp .L205
.p2align 4,,10
.p2align 3
.L233:
movq 8(%rdi), %rax
call *48(%rax)
.p2align 4,,6
jmp .L199
.p2align 4,,10
.p2align 3
.L232:
movq 8(%rdi), %rax
call *48(%rax)
.p2align 4,,6
jmp .L196
.L236:
leaq __PRETTY_FUNCTION__.10850(%rip), %rcx
leaq .LC7(%rip), %rsi
leaq .LC8(%rip), %rdi
movl $219, %edx
call __assert_fail@PLT
.cfi_endproc
.LFE133:
.size green_updatecurrent, .-green_updatecurrent
.p2align 4,,15
.type green_new, @function
green_new:
.LFB144:
.cfi_startproc
movq _PyThreadState_Current@GOTPCREL(%rip), %rax
pushq %rbx
.cfi_def_cfa_offset 16
.cfi_offset 3, -16
movq %rdi, %rbx
movq ts_current(%rip), %rdx
movq (%rax), %rax
movq 120(%rax), %rax
cmpq %rax, 64(%rdx)
je .L241
call green_updatecurrent
testl %eax, %eax
jne .L244
.L241:
xorl %esi, %esi
movq %rbx, %rdi
call *304(%rbx)
testq %rax, %rax
je .L240
movq ts_current(%rip), %rdx
addq $1, (%rdx)
movq ts_current(%rip), %rdx
movq %rdx, 56(%rax)
.L240:
popq %rbx
.cfi_remember_state
.cfi_def_cfa_offset 8
ret
.p2align 4,,10
.p2align 3
.L244:
.cfi_restore_state
xorl %eax, %eax
popq %rbx
.cfi_def_cfa_offset 8
ret
.cfi_endproc
.LFE144:
.size green_new, .-green_new
.p2align 4,,15
.type PyGreenlet_GetCurrent, @function
PyGreenlet_GetCurrent:
.LFB165:
.cfi_startproc
subq $8, %rsp
.cfi_def_cfa_offset 16
movq _PyThreadState_Current@GOTPCREL(%rip), %rax
movq ts_current(%rip), %rdx
movq (%rax), %rax
movq 120(%rax), %rax
cmpq %rax, 64(%rdx)
je .L248
call green_updatecurrent
testl %eax, %eax
jne .L253
.L248:
movq ts_current(%rip), %rax
addq $1, (%rax)
movq ts_current(%rip), %rax
.L247:
addq $8, %rsp
.cfi_remember_state
.cfi_def_cfa_offset 8
ret
.p2align 4,,10
.p2align 3
.L253:
.cfi_restore_state
xorl %eax, %eax
jmp .L247
.cfi_endproc
.LFE165:
.size PyGreenlet_GetCurrent, .-PyGreenlet_GetCurrent
.p2align 4,,15
.type mod_gettrace, @function
mod_gettrace:
.LFB172:
.cfi_startproc
subq $8, %rsp
.cfi_def_cfa_offset 16
movq _PyThreadState_Current@GOTPCREL(%rip), %rax
movq ts_current(%rip), %rdx
movq (%rax), %rax
movq 120(%rax), %rax
cmpq %rax, 64(%rdx)
je .L258
call green_updatecurrent
testl %eax, %eax
jne .L262
.L258:
movq ts_current(%rip), %rax
movq ts_tracekey(%rip), %rsi
movq 64(%rax), %rdi
call PyDict_GetItem@PLT
testq %rax, %rax
je .L263
.L256:
addq $1, (%rax)
.L257:
addq $8, %rsp
.cfi_remember_state
.cfi_def_cfa_offset 8
ret
.p2align 4,,10
.p2align 3
.L263:
.cfi_restore_state
movq _Py_NoneStruct@GOTPCREL(%rip), %rax
jmp .L256
.p2align 4,,10
.p2align 3
.L262:
xorl %eax, %eax
jmp .L257
.cfi_endproc
.LFE172:
.size mod_gettrace, .-mod_gettrace
.p2align 4,,15
.type mod_getcurrent, @function
mod_getcurrent:
.LFB170:
.cfi_startproc
subq $8, %rsp
.cfi_def_cfa_offset 16
movq _PyThreadState_Current@GOTPCREL(%rip), %rax
movq ts_current(%rip), %rdx
movq (%rax), %rax
movq 120(%rax), %rax
cmpq %rax, 64(%rdx)
je .L267
call green_updatecurrent
testl %eax, %eax
jne .L272
.L267:
movq ts_current(%rip), %rax
addq $1, (%rax)
movq ts_current(%rip), %rax
.L266:
addq $8, %rsp
.cfi_remember_state
.cfi_def_cfa_offset 8
ret
.p2align 4,,10
.p2align 3
.L272:
.cfi_restore_state
xorl %eax, %eax
jmp .L266
.cfi_endproc
.LFE170:
.size mod_getcurrent, .-mod_getcurrent
.section .rodata.str1.1
.LC9:
.string "O"
.text
.p2align 4,,15
.type mod_settrace, @function
mod_settrace:
.LFB171:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsi, %rdi
leaq .LC9(%rip), %rsi
xorl %eax, %eax
pushq %rbx
.cfi_def_cfa_offset 24
.cfi_offset 3, -24
subq $24, %rsp
.cfi_def_cfa_offset 48
leaq 8(%rsp), %rdx
call PyArg_ParseTuple@PLT
testl %eax, %eax
je .L288
movq _PyThreadState_Current@GOTPCREL(%rip), %rax
movq ts_current(%rip), %rdx
movq (%rax), %rax
movq 120(%rax), %rax
cmpq %rax, 64(%rdx)
je .L280
call green_updatecurrent
testl %eax, %eax
jne .L288
.L280:
movq ts_current(%rip), %rbp
movq ts_tracekey(%rip), %rsi
movq 64(%rbp), %rdi
call PyDict_GetItem@PLT
testq %rax, %rax
movq %rax, %rbx
je .L289
addq $1, (%rax)
movq 8(%rsp), %rdx
movq _Py_NoneStruct@GOTPCREL(%rip), %rax
cmpq %rax, %rdx
je .L290
.L281:
movq 64(%rbp), %rdi
movq ts_tracekey(%rip), %rsi
call PyDict_SetItem@PLT
.L283:
testl %eax, %eax
js .L284
movq %rbx, %rax
jmp .L285
.p2align 4,,10
.p2align 3
.L284:
subq $1, (%rbx)
jne .L288
movq 8(%rbx), %rax
movq %rbx, %rdi
call *48(%rax)
.p2align 4,,10
.p2align 3
.L288:
xorl %eax, %eax
.L285:
addq $24, %rsp
.cfi_remember_state
.cfi_def_cfa_offset 24
popq %rbx
.cfi_def_cfa_offset 16
popq %rbp
.cfi_def_cfa_offset 8
ret
.p2align 4,,10
.p2align 3
.L290:
.cfi_restore_state
cmpq %rdx, %rbx
je .L285
movq 64(%rbp), %rdi
movq ts_tracekey(%rip), %rsi
call PyDict_DelItem@PLT
jmp .L283
.L289:
movq _Py_NoneStruct@GOTPCREL(%rip), %rax
movq 8(%rsp), %rdx
addq $1, (%rax)
cmpq %rax, %rdx
je .L285
movq %rax, %rbx
jmp .L281
.cfi_endproc
.LFE171:
.size mod_settrace, .-mod_settrace
.section .rodata.str1.8
.align 8
.LC10:
.string "run cannot be set after the start of the greenlet"
.text
.p2align 4,,15
.type green_setrun, @function
green_setrun:
.LFB160:
.cfi_startproc
subq $8, %rsp
.cfi_def_cfa_offset 16
cmpq $0, 24(%rdi)
jne .L302
testq %rsi, %rsi
movq 64(%rdi), %rax
movq %rsi, 64(%rdi)
je .L294
addq $1, (%rsi)
.L294:
testq %rax, %rax
je .L301
movq (%rax), %rcx
leaq -1(%rcx), %rdx
testq %rdx, %rdx
movq %rdx, (%rax)
je .L303
.L301:
xorl %eax, %eax
.L293:
addq $8, %rsp
.cfi_remember_state
.cfi_def_cfa_offset 8
ret
.p2align 4,,10
.p2align 3
.L303:
.cfi_restore_state
movq 8(%rax), %rdx
movq %rax, %rdi
call *48(%rdx)
jmp .L301
.p2align 4,,10
.p2align 3
.L302:
movq PyExc_AttributeError@GOTPCREL(%rip), %rax
leaq .LC10(%rip), %rsi
movq (%rax), %rdi
call PyErr_SetString@PLT
movl $-1, %eax
jmp .L293
.cfi_endproc
.LFE160:
.size green_setrun, .-green_setrun
.section .rodata.str1.1
.LC11:
.string "|OO:green"
.text
.p2align 4,,15
.type green_init, @function
green_init:
.LFB145:
.cfi_startproc
pushq %rbx
.cfi_def_cfa_offset 16
.cfi_offset 3, -16
leaq kwlist.10993(%rip), %rcx
movq %rdi, %rbx
movq %rsi, %rdi
movq %rdx, %rsi
leaq .LC11(%rip), %rdx
subq $16, %rsp
.cfi_def_cfa_offset 32
xorl %eax, %eax
leaq 8(%rsp), %r9
movq %rsp, %r8
movq $0, (%rsp)
movq $0, 8(%rsp)
call PyArg_ParseTupleAndKeywords@PLT
testl %eax, %eax
je .L309
movq (%rsp), %rsi
testq %rsi, %rsi
je .L310
xorl %edx, %edx
movq %rbx, %rdi
call green_setrun
testl %eax, %eax
jne .L309
.L310:
movq 8(%rsp), %rsi
xorl %eax, %eax
testq %rsi, %rsi
je .L306
cmpq _Py_NoneStruct@GOTPCREL(%rip), %rsi
je .L306
xorl %edx, %edx
movq %rbx, %rdi
call green_setparent
.L306:
addq $16, %rsp
.cfi_remember_state
.cfi_def_cfa_offset 16
popq %rbx
.cfi_def_cfa_offset 8
ret
.p2align 4,,10
.p2align 3
.L309:
.cfi_restore_state
movl $-1, %eax
jmp .L306
.cfi_endproc
.LFE145:
.size green_init, .-green_init
.section .rodata.str1.1
.LC12:
.string "run"
.text
.p2align 4,,15
.type green_getrun, @function
green_getrun:
.LFB159:
.cfi_startproc
subq $8, %rsp
.cfi_def_cfa_offset 16
cmpq $0, 24(%rdi)
jne .L314
movq 64(%rdi), %rax
testq %rax, %rax
je .L314
addq $1, (%rax)
addq $8, %rsp
.cfi_remember_state
.cfi_def_cfa_offset 8
ret
.p2align 4,,10
.p2align 3
.L314:
.cfi_restore_state
movq PyExc_AttributeError@GOTPCREL(%rip), %rax
leaq .LC12(%rip), %rsi
movq (%rax), %rdi
call PyErr_SetString@PLT
xorl %eax, %eax
addq $8, %rsp
.cfi_def_cfa_offset 8
ret
.cfi_endproc
.LFE159:
.size green_getrun, .-green_getrun
.section .rodata.str1.1
.LC13:
.string "__dict__ may not be deleted"
.LC14:
.string "__dict__ must be a dictionary"
.text
.p2align 4,,15
.type green_setdict, @function
green_setdict:
.LFB157:
.cfi_startproc
subq $8, %rsp
.cfi_def_cfa_offset 16
testq %rsi, %rsi
je .L326
movq 8(%rsi), %rax
testb $32, 171(%rax)
je .L327
movq 120(%rdi), %rax
addq $1, (%rsi)
movq %rsi, 120(%rdi)
testq %rax, %rax
je .L325
movq (%rax), %rcx
leaq -1(%rcx), %rdx
testq %rdx, %rdx
movq %rdx, (%rax)
je .L328
.L325:
xorl %eax, %eax
.L320:
addq $8, %rsp
.cfi_remember_state
.cfi_def_cfa_offset 8
ret
.p2align 4,,10
.p2align 3
.L328:
.cfi_restore_state
movq 8(%rax), %rdx
movq %rax, %rdi
call *48(%rdx)
jmp .L325
.p2align 4,,10
.p2align 3
.L327:
movq PyExc_TypeError@GOTPCREL(%rip), %rax
leaq .LC14(%rip), %rsi
movq (%rax), %rdi
call PyErr_SetString@PLT
movl $-1, %eax
jmp .L320
.L326:
movq PyExc_TypeError@GOTPCREL(%rip), %rax
leaq .LC13(%rip), %rsi
movq (%rax), %rdi
call PyErr_SetString@PLT
movl $-1, %eax
jmp .L320
.cfi_endproc
.LFE157:
.size green_setdict, .-green_setdict
.p2align 4,,15
.type PyGreenlet_SetParent, @function
PyGreenlet_SetParent:
.LFB166:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsi, %rbp
pushq %rbx
.cfi_def_cfa_offset 24
.cfi_offset 3, -24
movq %rdi, %rbx
subq $8, %rsp
.cfi_def_cfa_offset 32
movq 8(%rdi), %rdi
movq PyGreenlet_Type@GOTPCREL(%rip), %rsi
cmpq %rsi, %rdi
je .L330
call PyType_IsSubtype@PLT
testl %eax, %eax
je .L333
.L330:
addq $8, %rsp
.cfi_remember_state
.cfi_def_cfa_offset 24
movq %rbx, %rdi
movq %rbp, %rsi
popq %rbx
.cfi_def_cfa_offset 16
popq %rbp
.cfi_def_cfa_offset 8
xorl %edx, %edx
jmp green_setparent
.p2align 4,,10
.p2align 3
.L333:
.cfi_restore_state
movq PyExc_TypeError@GOTPCREL(%rip), %rax
leaq .LC1(%rip), %rsi
movq (%rax), %rdi
call PyErr_SetString@PLT
addq $8, %rsp
.cfi_def_cfa_offset 24
movl $-1, %eax
popq %rbx
.cfi_def_cfa_offset 16
popq %rbp
.cfi_def_cfa_offset 8
ret
.cfi_endproc
.LFE166:
.size PyGreenlet_SetParent, .-PyGreenlet_SetParent
.p2align 4,,15
.type PyGreenlet_New, @function
PyGreenlet_New:
.LFB167:
.cfi_startproc
pushq %r12
.cfi_def_cfa_offset 16
.cfi_offset 12, -16
movq %rsi, %r12
xorl %esi, %esi
pushq %rbp
.cfi_def_cfa_offset 24
.cfi_offset 6, -24
movq %rdi, %rbp
movq PyGreenlet_Type@GOTPCREL(%rip), %rdi
pushq %rbx
.cfi_def_cfa_offset 32
.cfi_offset 3, -32
call PyType_GenericAlloc@PLT
testq %rax, %rax
movq %rax, %rbx
je .L339
testq %rbp, %rbp
je .L337
addq $1, 0(%rbp)
movq %rbp, 64(%rax)
.L337:
testq %r12, %r12
je .L344
.L338:
movq %r12, %rsi
movq %rbx, %rdi
call PyGreenlet_SetParent
movq %rbx, %rax
.L336:
popq %rbx
.cfi_remember_state
.cfi_def_cfa_offset 24
popq %rbp
.cfi_def_cfa_offset 16
popq %r12
.cfi_def_cfa_offset 8
ret
.p2align 4,,10
.p2align 3
.L344:
.cfi_restore_state
call PyGreenlet_GetCurrent
movq %rax, %r12
jmp .L338
.p2align 4,,10
.p2align 3
.L339:
xorl %eax, %eax
jmp .L336
.cfi_endproc
.LFE167:
.size PyGreenlet_New, .-PyGreenlet_New
.section .rodata.str1.1
.LC15:
.string "g->stack_start != ((void *)0)"
.text
.p2align 4,,15
.type g_save, @function
g_save:
.LFB135:
.cfi_startproc
pushq %r14
.cfi_def_cfa_offset 16
.cfi_offset 14, -16
pushq %r13
.cfi_def_cfa_offset 24
.cfi_offset 13, -24
pushq %r12
.cfi_def_cfa_offset 32
.cfi_offset 12, -32
pushq %rbp
.cfi_def_cfa_offset 40
.cfi_offset 6, -40
movq %rdi, %rbp
pushq %rbx
.cfi_def_cfa_offset 48
.cfi_offset 3, -48
movq 16(%rdi), %rax
movq %rsi, %rbx
movq 40(%rdi), %r12
subq %rax, %rbx
testq %rax, %rax
je .L351
xorl %r13d, %r13d
cmpq %rbx, %r12
jl .L352
.L347:
popq %rbx
.cfi_remember_state
.cfi_def_cfa_offset 40
popq %rbp
.cfi_def_cfa_offset 32
popq %r12
.cfi_def_cfa_offset 24
movl %r13d, %eax
popq %r13
.cfi_def_cfa_offset 16
popq %r14
.cfi_def_cfa_offset 8
ret
.p2align 4,,10
.p2align 3
.L352:
.cfi_restore_state
movq 32(%rdi), %rdi
movq %rbx, %rsi
call PyMem_Realloc@PLT
testq %rax, %rax
movq %rax, %r14
je .L353
movq %r12, %rsi
addq 16(%rbp), %rsi
leaq (%rax,%r12), %rdi
movq %rbx, %rdx
subq %r12, %rdx
call memcpy@PLT
movq %r14, 32(%rbp)
movq %rbx, 40(%rbp)
movl %r13d, %eax
popq %rbx
.cfi_remember_state
.cfi_def_cfa_offset 40
popq %rbp
.cfi_def_cfa_offset 32
popq %r12
.cfi_def_cfa_offset 24
popq %r13
.cfi_def_cfa_offset 16
popq %r14
.cfi_def_cfa_offset 8
ret
.L353:
.cfi_restore_state
call PyErr_NoMemory@PLT
movl $-1, %r13d
jmp .L347
.L351:
leaq __PRETTY_FUNCTION__.10872(%rip), %rcx
leaq .LC7(%rip), %rsi
leaq .LC15(%rip), %rdi
movl $341, %edx
call __assert_fail@PLT
.cfi_endproc
.LFE135:
.size g_save, .-g_save
.section .rodata.str1.1
.LC16:
.string "owner->stack_saved == 0"
.text
.p2align 4,,15
.type slp_save_state, @function
slp_save_state:
.LFB137:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
pushq %rbx
.cfi_def_cfa_offset 24
.cfi_offset 3, -24
subq $8, %rsp
.cfi_def_cfa_offset 32
movq ts_target(%rip), %rax
movq ts_current(%rip), %rbx
cmpq $0, 40(%rbx)
movq 24(%rax), %rbp
jne .L366
cmpq $0, 16(%rbx)
je .L365
movq %rdi, 16(%rbx)
jmp .L364
.p2align 4,,10
.p2align 3
.L360:
movq %rbx, %rdi
call g_save
testl %eax, %eax
jne .L361
.L365:
movq 48(%rbx), %rbx
.L364:
movq 24(%rbx), %rsi
cmpq %rsi, %rbp
ja .L360
movq ts_target(%rip), %rdx
xorl %eax, %eax
cmpq %rdx, %rbx
je .L359
movq %rbp, %rsi
movq %rbx, %rdi
call g_save
testl %eax, %eax
setne %al
movzbl %al, %eax
negl %eax
.L359:
addq $8, %rsp
.cfi_remember_state
.cfi_def_cfa_offset 24
popq %rbx
.cfi_def_cfa_offset 16
popq %rbp
.cfi_def_cfa_offset 8
ret
.p2align 4,,10
.p2align 3
.L361:
.cfi_restore_state
addq $8, %rsp
.cfi_remember_state
.cfi_def_cfa_offset 24
movl $-1, %eax
popq %rbx
.cfi_def_cfa_offset 16
popq %rbp
.cfi_def_cfa_offset 8
ret
.L366:
.cfi_restore_state
leaq __PRETTY_FUNCTION__.10887(%rip), %rcx
leaq .LC7(%rip), %rsi
leaq .LC16(%rip), %rdi
movl $379, %edx
call __assert_fail@PLT
.cfi_endproc
.LFE137:
.size slp_save_state, .-slp_save_state
.p2align 4,,15
.type slp_switch, @function
slp_switch:
.LFB138:
.cfi_startproc
pushq %r15
.cfi_def_cfa_offset 16
.cfi_offset 15, -16
pushq %r14
.cfi_def_cfa_offset 24
.cfi_offset 14, -24
pushq %r13
.cfi_def_cfa_offset 32
.cfi_offset 13, -32
pushq %r12
.cfi_def_cfa_offset 40
.cfi_offset 12, -40
pushq %rbp
.cfi_def_cfa_offset 48
.cfi_offset 6, -48
pushq %rbx
.cfi_def_cfa_offset 56
.cfi_offset 3, -56
subq $40, %rsp
.cfi_def_cfa_offset 96
#APP
# 46 "platform/switch_amd64_unix.h" 1
fstcw 10(%rsp)
# 0 "" 2
# 47 "platform/switch_amd64_unix.h" 1
stmxcsr 12(%rsp)
# 0 "" 2
# 48 "platform/switch_amd64_unix.h" 1
movq %rbp, 16(%rsp)
# 0 "" 2
# 49 "platform/switch_amd64_unix.h" 1
movq %rbx, 24(%rsp)
# 0 "" 2
# 50 "platform/switch_amd64_unix.h" 1
movq %rsp, %rbp
# 0 "" 2
#NO_APP
movq %rbp, %rdi
call slp_save_state
testl %eax, %eax
movl %eax, %ebx
jne .L369
movq ts_target(%rip), %rax
cmpq $0, 16(%rax)
je .L370
movq ts_target(%rip), %rax
movq 16(%rax), %rax
subq %rbp, %rax
#APP
# 53 "platform/switch_amd64_unix.h" 1
addq %rax, %rsp
addq %rax, %rbp
# 0 "" 2
#NO_APP
call slp_restore_state
#APP
# 61 "platform/switch_amd64_unix.h" 1
movq 24(%rsp), %rbx
# 0 "" 2
# 62 "platform/switch_amd64_unix.h" 1
movq 16(%rsp), %rbp
# 0 "" 2
# 63 "platform/switch_amd64_unix.h" 1
ldmxcsr 12(%rsp)
# 0 "" 2
# 64 "platform/switch_amd64_unix.h" 1
fldcw 10(%rsp)
# 0 "" 2
#NO_APP
.L368:
addq $40, %rsp
.cfi_remember_state
.cfi_def_cfa_offset 56
movl %ebx, %eax
popq %rbx
.cfi_def_cfa_offset 48
popq %rbp
.cfi_def_cfa_offset 40
popq %r12
.cfi_def_cfa_offset 32
popq %r13
.cfi_def_cfa_offset 24
popq %r14
.cfi_def_cfa_offset 16
popq %r15
.cfi_def_cfa_offset 8
ret
.p2align 4,,10
.p2align 3
.L370:
.cfi_restore_state
movl $1, %ebx
jmp .L368
.p2align 4,,10
.p2align 3
.L369:
movl $-1, %ebx
jmp .L368
.cfi_endproc
.LFE138:
.size slp_switch, .-slp_switch
.section .rodata.str1.1
.LC17:
.string "ts_origin == ((void *)0)"
.text
.p2align 4,,15
.type g_switchstack, @function
g_switchstack:
.LFB139:
.cfi_startproc
pushq %rbx
.cfi_def_cfa_offset 16
.cfi_offset 3, -16
movq _PyThreadState_Current@GOTPCREL(%rip), %rbx
movq ts_current(%rip), %rax
movq (%rbx), %rdx
movl 24(%rdx), %ecx
movl %ecx, 80(%rax)
movq 16(%rdx), %rcx
movq %rcx, 72(%rax)
movq 96(%rdx), %rcx
movq %rcx, 96(%rax)
movq 104(%rdx), %rcx
movq 112(%rdx), %rdx
movq %rcx, 104(%rax)
movq %rdx, 112(%rax)
call slp_switch
testl %eax, %eax
js .L379
movq ts_target(%rip), %rdx
movq (%rbx), %rcx
movq ts_current(%rip), %rdi
movl 80(%rdx), %esi
movl %esi, 24(%rcx)
movq 72(%rdx), %rsi
movq %rsi, 16(%rcx)
movq 96(%rdx), %rsi
movq $0, 72(%rdx)
movq %rsi, 96(%rcx)
movq 104(%rdx), %rsi
movq $0, 96(%rdx)
movq %rsi, 104(%rcx)
movq 112(%rdx), %rsi
movq $0, 104(%rdx)
movq %rsi, 112(%rcx)
movq ts_origin(%rip), %rcx
movq $0, 112(%rdx)
testq %rcx, %rcx
jne .L380
addq $1, (%rdx)
movq %rdx, ts_current(%rip)
movq %rdi, ts_origin(%rip)
.L378:
movq $0, ts_target(%rip)
popq %rbx
.cfi_remember_state
.cfi_def_cfa_offset 8
ret
.p2align 4,,10
.p2align 3
.L379:
.cfi_restore_state
movq ts_current(%rip), %rdx
movq $0, 72(%rdx)
movq $0, 96(%rdx)
movq $0, 104(%rdx)
movq $0, 112(%rdx)
movq ts_origin(%rip), %rdx
testq %rdx, %rdx
je .L378
leaq __PRETTY_FUNCTION__.10907(%rip), %rcx
leaq .LC7(%rip), %rsi
leaq .LC17(%rip), %rdi
movl $481, %edx
call __assert_fail@PLT
.L380:
leaq __PRETTY_FUNCTION__.10907(%rip), %rcx
leaq .LC7(%rip), %rsi
leaq .LC17(%rip), %rdi
movl $498, %edx
call __assert_fail@PLT
.cfi_endproc
.LFE139:
.size g_switchstack, .-g_switchstack
.section .rodata.str1.8
.align 8
.LC18:
.string "cannot switch to a different thread"
.align 8
.LC19:
.string "cannot switch to a garbage collected greenlet"
.text
.p2align 4,,15
.type g_switch, @function
g_switch:
.LFB141:
.cfi_startproc
pushq %r14
.cfi_def_cfa_offset 16
.cfi_offset 14, -16
pushq %r13
.cfi_def_cfa_offset 24
.cfi_offset 13, -24
pushq %r12
.cfi_def_cfa_offset 32
.cfi_offset 12, -32
movq %rsi, %r12
pushq %rbp
.cfi_def_cfa_offset 40
.cfi_offset 6, -40
movq %rdx, %rbp
pushq %rbx
.cfi_def_cfa_offset 48
.cfi_offset 3, -48
movq %rdi, %rbx
subq $32, %rsp
.cfi_def_cfa_offset 80
movq _PyThreadState_Current@GOTPCREL(%rip), %rax
movq ts_current(%rip), %rdx
movq (%rax), %rax
movq 120(%rax), %rax
cmpq %rax, 64(%rdx)
je .L382
call green_updatecurrent
testl %eax, %eax
je .L382
testq %r12, %r12
.p2align 4,,3
je .L384
subq $1, (%r12)
je .L453
.L384:
testq %rbp, %rbp
je .L414
subq $1, 0(%rbp)
je .L454
.L414:
xorl %eax, %eax
.L444:
addq $32, %rsp
.cfi_remember_state
.cfi_def_cfa_offset 48
popq %rbx
.cfi_def_cfa_offset 40
popq %rbp
.cfi_def_cfa_offset 32
popq %r12
.cfi_def_cfa_offset 24
popq %r13
.cfi_def_cfa_offset 16
popq %r14
.cfi_def_cfa_offset 8
ret
.p2align 4,,10
.p2align 3
.L382:
.cfi_restore_state
movq %rbx, %rax
jmp .L389
.p2align 4,,10
.p2align 3
.L391:
movq 56(%rax), %rax
testq %rax, %rax
je .L429
.L389:
cmpq $0, 24(%rax)
je .L391
movq 64(%rax), %r13
testq %r13, %r13
je .L390
movq ts_current(%rip), %rax
cmpq %r13, 64(%rax)
jne .L390
testq %rbx, %rbx
movq %r12, ts_passaround_args(%rip)
movq %rbp, ts_passaround_kwargs(%rip)
je .L400
cmpq $0, 16(%rbx)
leaq 24(%rsp), %rbp
je .L403
jmp .L401
.p2align 4,,10
.p2align 3
.L405:
movq 56(%rbx), %rbx
testq %rbx, %rbx
je .L400
.L407:
cmpq $0, 16(%rbx)
jne .L401
.L403:
cmpq $0, 24(%rbx)
jne .L405
movq %rbp, %rdi
movq %rbx, ts_target(%rip)
call g_initialstub
cmpl $1, %eax
je .L407
.L404:
testl %eax, %eax
movq ts_passaround_args(%rip), %rbp
movq $0, ts_passaround_args(%rip)
movq ts_passaround_kwargs(%rip), %rbx
movq $0, ts_passaround_kwargs(%rip)
jns .L408
movq ts_origin(%rip), %rax
testq %rax, %rax
jne .L455
testq %rbx, %rbx
je .L411
subq $1, (%rbx)
je .L456
.L411:
testq %rbp, %rbp
je .L414
subq $1, 0(%rbp)
jne .L414
movq 8(%rbp), %rax
movq %rbp, %rdi
call *48(%rax)
jmp .L414
.p2align 4,,10
.p2align 3
.L400:
movq ts_passaround_args(%rip), %rbp
movq $0, ts_passaround_args(%rip)
movq ts_passaround_kwargs(%rip), %rbx
movq $0, ts_passaround_kwargs(%rip)
.L408:
movq ts_origin(%rip), %r13
movq $0, ts_origin(%rip)
movq ts_current(%rip), %r14
movq ts_tracekey(%rip), %rsi
movq 64(%r14), %rdi
call PyDict_GetItem@PLT
testq %rax, %rax
movq %rax, %r12
je .L415
addq $1, (%rax)
testq %rbp, %rbp
je .L416
movq ts_event_switch(%rip), %rsi
.L417:
movq %r14, %rcx
movq %r13, %rdx
movq %r12, %rdi
call g_calltrace
testl %eax, %eax
js .L457
.L418:
subq $1, (%r12)
jne .L415
movq 8(%r12), %rax
movq %r12, %rdi
call *48(%rax)
.L415:
subq $1, 0(%r13)
je .L458
.L424:
testq %rbx, %rbx
je .L431
movq %rbx, %rdi
call PyDict_Size@PLT
testq %rax, %rax
jne .L425
movq (%rbx), %rax
leaq -1(%rax), %rdx
movq %rbp, %rax
testq %rdx, %rdx
movq %rdx, (%rbx)
jne .L444
movq 8(%rbx), %rdx
movq %rbp, 8(%rsp)
movq %rbx, %rdi
call *48(%rdx)
movq 8(%rsp), %rax
jmp .L444
.p2align 4,,10
.p2align 3
.L429:
xorl %r13d, %r13d
.L390:
testq %r12, %r12
je .L394
subq $1, (%r12)
je .L459
.L394:
testq %rbp, %rbp
je .L397
subq $1, 0(%rbp)
je .L460
.L397:
leaq .LC19(%rip), %rax
leaq .LC18(%rip), %rsi
movq PyExc_GreenletError(%rip), %rdi
testq %r13, %r13
cmove %rax, %rsi
call PyErr_SetString@PLT
addq $32, %rsp
.cfi_remember_state
.cfi_def_cfa_offset 48
xorl %eax, %eax
popq %rbx
.cfi_def_cfa_offset 40
popq %rbp
.cfi_def_cfa_offset 32
popq %r12
.cfi_def_cfa_offset 24
popq %r13
.cfi_def_cfa_offset 16
popq %r14
.cfi_def_cfa_offset 8
ret
.p2align 4,,10
.p2align 3
.L454:
.cfi_restore_state
movq 8(%rbp), %rax
movq %rbp, %rdi
call *48(%rax)
xorl %eax, %eax
jmp .L444
.L459:
movq 8(%r12), %rax
movq %r12, %rdi
call *48(%rax)
jmp .L394
.L460:
movq 8(%rbp), %rax
movq %rbp, %rdi
call *48(%rax)
.p2align 4,,3
jmp .L397
.L458:
movq 8(%r13), %rax
movq %r13, %rdi
call *48(%rax)
.p2align 4,,3
jmp .L424
.p2align 4,,10
.p2align 3
.L401:
movq %rbx, ts_target(%rip)
call g_switchstack
jmp .L404
.p2align 4,,10
.p2align 3
.L425:
movq %rbp, %rdi
call PySequence_Size@PLT
testq %rax, %rax
.p2align 4,,2
jne .L426
movq 0(%rbp), %rax
leaq -1(%rax), %rdx
movq %rbx, %rax
testq %rdx, %rdx
movq %rdx, 0(%rbp)
jne .L444
movq 8(%rbp), %rdx
movq %rbx, 8(%rsp)
movq %rbp, %rdi
call *48(%rdx)
movq 8(%rsp), %rax
jmp .L444
.p2align 4,,10
.p2align 3
.L453:
movq 8(%r12), %rax
movq %r12, %rdi
call *48(%rax)
jmp .L384
.L457:
testq %rbx, %rbx
je .L420
subq $1, (%rbx)
.p2align 4,,4
je .L461
.L420:
testq %rbp, %rbp
je .L452
subq $1, 0(%rbp)
je .L462
.L452:
xorl %ebx, %ebx
xorl %ebp, %ebp
jmp .L418
.L456:
movq 8(%rbx), %rax
movq %rbx, %rdi
call *48(%rax)
jmp .L411
.L416:
movq ts_event_throw(%rip), %rsi
jmp .L417
.L426:
movl $2, %edi
call PyTuple_New@PLT
testq %rax, %rax
je .L463
movq %rbp, 24(%rax)
movq %rbx, 32(%rax)
jmp .L444
.L461:
movq 8(%rbx), %rax
movq %rbx, %rdi
call *48(%rax)
jmp .L420
.L462:
movq 8(%rbp), %rax
movq %rbp, %rdi
call *48(%rax)
.p2align 4,,3
jmp .L452
.L463:
subq $1, 0(%rbp)
jne .L428
movq 8(%rbp), %rax
movq %rbp, %rdi
call *48(%rax)
.L428:
subq $1, (%rbx)
jne .L414
movq 8(%rbx), %rax
movq %rbx, %rdi
call *48(%rax)
xorl %eax, %eax
jmp .L444
.L455:
leaq __PRETTY_FUNCTION__.10933(%rip), %rcx
leaq .LC7(%rip), %rsi
leaq .LC17(%rip), %rdi
movl $595, %edx
call __assert_fail@PLT
.L431:
movq %rbp, %rax
jmp .L444
.cfi_endproc
.LFE141:
.size g_switch, .-g_switch
.section .rodata.str1.1
.LC20:
.string "greenlets cannot continue"
.LC21:
.string "result == ((void *)0)"
.text
.p2align 4,,15
.type g_initialstub, @function
g_initialstub:
.LFB143:
.cfi_startproc
pushq %r15
.cfi_def_cfa_offset 16
.cfi_offset 15, -16
pushq %r14
.cfi_def_cfa_offset 24
.cfi_offset 14, -24
movq %rdi, %r14
pushq %r13
.cfi_def_cfa_offset 32
.cfi_offset 13, -32
pushq %r12
.cfi_def_cfa_offset 40
.cfi_offset 12, -40
pushq %rbp
.cfi_def_cfa_offset 48
.cfi_offset 6, -48
pushq %rbx
.cfi_def_cfa_offset 56
.cfi_offset 3, -56
subq $56, %rsp
.cfi_def_cfa_offset 112
movq ts_target(%rip), %rbx
movq ts_passaround_args(%rip), %rbp
leaq 40(%rsp), %rdx
leaq 32(%rsp), %rsi
leaq 24(%rsp), %rdi
movq ts_passaround_kwargs(%rip), %r13
call PyErr_Fetch@PLT
leaq .LC12(%rip), %rsi
movq %rbx, %rdi
call PyObject_GetAttrString@PLT
testq %rax, %rax
movq %rax, %r15
je .L536
movq 40(%rsp), %rdx
movq 32(%rsp), %rsi
movq 24(%rsp), %rdi
call PyErr_Restore@PLT
movq _PyThreadState_Current@GOTPCREL(%rip), %r12
movq ts_current(%rip), %rdx
movq (%r12), %rax
movq 120(%rax), %rax
cmpq %rax, 64(%rdx)
je .L475
call green_updatecurrent
testl %eax, %eax
je .L475
subq $1, (%r15)
.p2align 4,,2
je .L537
.L535:
addq $56, %rsp
.cfi_remember_state
.cfi_def_cfa_offset 56
movl $-1, %eax
popq %rbx
.cfi_def_cfa_offset 48
popq %rbp
.cfi_def_cfa_offset 40
popq %r12
.cfi_def_cfa_offset 32
popq %r13
.cfi_def_cfa_offset 24
popq %r14
.cfi_def_cfa_offset 16
popq %r15
.cfi_def_cfa_offset 8
ret
.p2align 4,,10
.p2align 3
.L475:
.cfi_restore_state
movq %rbx, %r8
jmp .L476
.p2align 4,,10
.p2align 3
.L478:
movq 56(%r8), %r8
testq %r8, %r8
je .L508
.L476:
cmpq $0, 24(%r8)
je .L478
movq 64(%r8), %rax
testq %rax, %rax
je .L477
movq ts_current(%rip), %rdx
cmpq %rax, 64(%rdx)
jne .L477
cmpq $0, 24(%rbx)
je .L482
subq $1, (%r15)
je .L538
.L483:
movq %rbp, ts_passaround_args(%rip)
movl $1, %eax
movq %r13, ts_passaround_kwargs(%rip)
.L473:
addq $56, %rsp
.cfi_remember_state
.cfi_def_cfa_offset 56
popq %rbx
.cfi_def_cfa_offset 48
popq %rbp
.cfi_def_cfa_offset 40
popq %r12
.cfi_def_cfa_offset 32
popq %r13
.cfi_def_cfa_offset 24
popq %r14
.cfi_def_cfa_offset 16
popq %r15
.cfi_def_cfa_offset 8
ret
.p2align 4,,10
.p2align 3
.L536:
.cfi_restore_state
movq 24(%rsp), %rdi
testq %rdi, %rdi
je .L467
subq $1, (%rdi)
je .L539
.L467:
movq 32(%rsp), %rdi
testq %rdi, %rdi
je .L470
subq $1, (%rdi)
je .L540
.L470:
movq 40(%rsp), %rdi
testq %rdi, %rdi
je .L535
subq $1, (%rdi)
jne .L535
movq 8(%rdi), %rax
call *48(%rax)
.p2align 4,,2
jmp .L535
.p2align 4,,10
.p2align 3
.L508:
xorl %eax, %eax
.L477:
movq (%r15), %rcx
leaq -1(%rcx), %rdx
testq %rdx, %rdx
movq %rdx, (%r15)
je .L541
.L480:
testq %rax, %rax
leaq .LC18(%rip), %rsi
leaq .LC19(%rip), %rax
movq PyExc_GreenletError(%rip), %rdi
cmove %rax, %rsi
call PyErr_SetString@PLT
movl $-1, %eax
jmp .L473
.p2align 4,,10
.p2align 3
.L538:
movq 8(%r15), %rax
movq %r15, %rdi
call *48(%rax)
jmp .L483
.p2align 4,,10
.p2align 3
.L540:
movq 8(%rdi), %rax
call *48(%rax)
.p2align 4,,6
jmp .L470
.p2align 4,,10
.p2align 3
.L539:
movq 8(%rdi), %rax
call *48(%rax)
.p2align 4,,6
jmp .L467
.p2align 4,,10
.p2align 3
.L537:
movq 8(%r15), %rax
movq %r15, %rdi
call *48(%rax)
movl $-1, %eax
jmp .L473
.p2align 4,,10
.p2align 3
.L482:
movq ts_current(%rip), %rax
movq $0, 16(%rbx)
movq %r14, 24(%rbx)
cmpq $0, 16(%rax)
movq ts_current(%rip), %rax
je .L542
movq %rax, 48(%rbx)
.L485:
movq (%r12), %rax
movq $0, 72(%rbx)
movq $0, 96(%rbx)
movq $0, 104(%rbx)
movq $0, 112(%rbx)
movq %rbx, ts_target(%rip)
movl 24(%rax), %eax
movq %rbp, ts_passaround_args(%rip)
movq %r13, ts_passaround_kwargs(%rip)
movl %eax, 80(%rbx)
call g_switchstack
cmpl $1, %eax
je .L543
testl %eax, %eax
jns .L473
movq $0, 16(%rbx)
movq $0, 24(%rbx)
movq $0, 48(%rbx)
jmp .L473
.L541:
movq 8(%r15), %rdx
movq %rax, 8(%rsp)
movq %r15, %rdi
call *48(%rdx)
movq 8(%rsp), %rax
jmp .L480
.L542:
movq 48(%rax), %rax
movq %rax, 48(%rbx)
jmp .L485
.L543:
movq ts_origin(%rip), %r12
movq $1, 16(%rbx)
movq $0, ts_origin(%rip)
movq 64(%rbx), %rdx
movq 56(%rbx), %rax
jmp .L487
.p2align 4,,10
.p2align 3
.L489:
movq 56(%rax), %rax
testq %rax, %rax
je .L510
.L487:
cmpq $0, 24(%rax)
je .L489
movq 64(%rax), %rdi
.L488:
movq %rdi, 64(%rbx)
addq $1, (%rdi)
testq %rdx, %rdx
je .L490
subq $1, (%rdx)
je .L544
.L490:
movq ts_tracekey(%rip), %rsi
call PyDict_GetItem@PLT
testq %rax, %rax
movq %rax, %r14
je .L491
addq $1, (%rax)
testq %rbp, %rbp
je .L492
movq ts_event_switch(%rip), %rsi
.L493:
movq %rbx, %rcx
movq %r12, %rdx
movq %r14, %rdi
call g_calltrace
testl %eax, %eax
js .L545
.L494:
subq $1, (%r14)
je .L546
.L491:
subq $1, (%r12)
je .L547
.L500:
xorl %r12d, %r12d
testq %rbp, %rbp
je .L501
movq %r13, %rdx
movq %rbp, %rsi
movq %r15, %rdi
call PyEval_CallObjectWithKeywords@PLT
subq $1, 0(%rbp)
movq %rax, %r12
je .L548
.L502:
testq %r13, %r13
je .L501
subq $1, 0(%r13)
je .L549
.L501:
movq (%r15), %rax
leaq -1(%rax), %rdx
testq %rdx, %rdx
movq %rdx, (%r15)
je .L550
.L503:
movq %r12, %rdi
call g_handle_exit
movq 56(%rbx), %rbp
movq $0, 16(%rbx)
testq %rbp, %rbp
je .L506
.p2align 4,,10
.p2align 3
.L525:
xorl %edx, %edx
movq %rax, %rsi
movq %rbp, %rdi
call g_switch
testq %rax, %rax
jne .L551
movq 56(%rbp), %rbp
testq %rbp, %rbp
jne .L525
.L506:
movq %rbx, %rdi
call PyErr_WriteUnraisable@PLT
leaq .LC20(%rip), %rdi
call Py_FatalError@PLT
movl $1, %eax
jmp .L473
.L510:
xorl %edi, %edi
jmp .L488
.L550:
movq 8(%r15), %rax
movq %r15, %rdi
call *48(%rax)
jmp .L503
.L547:
movq 8(%r12), %rax
movq %r12, %rdi
call *48(%rax)
.p2align 4,,2
jmp .L500
.L546:
movq 8(%r14), %rax
movq %r14, %rdi
call *48(%rax)
.p2align 4,,3
jmp .L491
.L544:
movq 8(%rdx), %rax
movq %rdx, %rdi
call *48(%rax)
movq 64(%rbx), %rdi
jmp .L490
.L545:
testq %r13, %r13
je .L496
subq $1, 0(%r13)
jne .L496
movq 8(%r13), %rax
movq %r13, %rdi
call *48(%rax)
.L496:
testq %rbp, %rbp
je .L534
subq $1, 0(%rbp)
jne .L534
movq 8(%rbp), %rax
movq %rbp, %rdi
call *48(%rax)
.L534:
xorl %r13d, %r13d
xorl %ebp, %ebp
jmp .L494
.L548:
movq 8(%rbp), %rax
movq %rbp, %rdi
call *48(%rax)
jmp .L502
.L549:
movq 8(%r13), %rax
movq %r13, %rdi
call *48(%rax)
.p2align 4,,3
jmp .L501
.L492:
movq ts_event_throw(%rip), %rsi
jmp .L493
.L551:
leaq __PRETTY_FUNCTION__.10968(%rip), %rcx
leaq .LC7(%rip), %rsi
leaq .LC21(%rip), %rdi
movl $820, %edx
call __assert_fail@PLT
.cfi_endproc
.LFE143:
.size g_initialstub, .-g_initialstub
.p2align 4,,15
.type throw_greenlet, @function
throw_greenlet:
.LFB152:
.cfi_startproc
pushq %rbx
.cfi_def_cfa_offset 16
.cfi_offset 3, -16
movq %rdi, %rbx
movq %rsi, %rdi
movq %rdx, %rsi
movq %rcx, %rdx
call PyErr_Restore@PLT
xorl %esi, %esi
cmpq $0, 24(%rbx)
je .L553
cmpq $0, 16(%rbx)
je .L557
.L553:
movq %rbx, %rdi
xorl %edx, %edx
call g_switch
popq %rbx
.cfi_remember_state
.cfi_def_cfa_offset 8
movq %rax, %rdi
jmp single_result
.p2align 4,,10
.p2align 3
.L557:
.cfi_restore_state
xorl %edi, %edi
call g_handle_exit
movq %rax, %rsi
jmp .L553
.cfi_endproc
.LFE152:
.size throw_greenlet, .-throw_greenlet
.section .rodata.str1.1
.LC22:
.string "|OOO:throw"
.section .rodata.str1.8
.align 8
.LC23:
.string "throw() third argument must be a traceback object"
.align 8
.LC24:
.string "instance exception may not have a separate value"
.align 8
.LC25:
.string "exceptions must be classes, or instances, not %s"
.text
.p2align 4,,15
.type green_throw, @function
green_throw:
.LFB154:
.cfi_startproc
pushq %r13
.cfi_def_cfa_offset 16
.cfi_offset 13, -16
movq %rdi, %r13
movq %rsi, %rdi
leaq .LC22(%rip), %rsi
pushq %r12
.cfi_def_cfa_offset 24
.cfi_offset 12, -24
pushq %rbp
.cfi_def_cfa_offset 32
.cfi_offset 6, -32
pushq %rbx
.cfi_def_cfa_offset 40
.cfi_offset 3, -40
subq $40, %rsp
.cfi_def_cfa_offset 80
movq PyExc_GreenletExit(%rip), %rax
leaq 24(%rsp), %r12
leaq 16(%rsp), %rbp
leaq 8(%rsp), %rbx
movq $0, 16(%rsp)
movq $0, 24(%rsp)
movq %rax, 8(%rsp)
movq %r12, %r8
xorl %eax, %eax
movq %rbp, %rcx
movq %rbx, %rdx
call PyArg_ParseTuple@PLT
testl %eax, %eax
je .L600
movq 24(%rsp), %rax
movq _Py_NoneStruct@GOTPCREL(%rip), %rcx
cmpq %rcx, %rax
je .L601
testq %rax, %rax
je .L579
movq PyTraceBack_Type@GOTPCREL(%rip), %rdx
cmpq %rdx, 8(%rax)
jne .L602
.L562:
movq 8(%rsp), %rdx
movq 16(%rsp), %r9
addq $1, (%rdx)
testq %r9, %r9
je .L563
addq $1, (%r9)
.L563:
testq %rax, %rax
je .L564
addq $1, (%rax)
.L564:
movq 8(%rdx), %rsi
cmpq PyClass_Type@GOTPCREL(%rip), %rsi
je .L565
movq 168(%rsi), %rdi
testl $2147483648, %edi
je .L566
testb $64, 171(%rdx)
je .L566
.L565:
movq %r12, %rdx
movq %rbp, %rsi
movq %rbx, %rdi
call PyErr_NormalizeException@PLT
movq 16(%rsp), %rdx
movq 8(%rsp), %rsi
movq 24(%rsp), %rax
.L567:
movq %r13, %rdi
movq %rax, %rcx
call throw_greenlet
addq $40, %rsp
.cfi_remember_state
.cfi_def_cfa_offset 40
popq %rbx
.cfi_def_cfa_offset 32
popq %rbp
.cfi_def_cfa_offset 24
popq %r12
.cfi_def_cfa_offset 16
popq %r13
.cfi_def_cfa_offset 8
ret
.p2align 4,,10
.p2align 3
.L566:
.cfi_restore_state
cmpq PyInstance_Type@GOTPCREL(%rip), %rsi
je .L568
testl $1073741824, %edi
je .L569
.L568:
testq %r9, %r9
je .L570
cmpq %rcx, %r9
je .L571
.L572:
movq PyExc_TypeError@GOTPCREL(%rip), %rax
leaq .LC24(%rip), %rsi
movq (%rax), %rdi
call PyErr_SetString@PLT
movq 8(%rsp), %rdi
subq $1, (%rdi)
je .L603
.L574:
movq 16(%rsp), %rdi
testq %rdi, %rdi
je .L576
subq $1, (%rdi)
je .L604
.L576:
movq 24(%rsp), %rdi
testq %rdi, %rdi
je .L600
subq $1, (%rdi)
je .L605
.L600:
addq $40, %rsp
.cfi_remember_state
.cfi_def_cfa_offset 40
xorl %eax, %eax
popq %rbx
.cfi_def_cfa_offset 32
popq %rbp
.cfi_def_cfa_offset 24
popq %r12
.cfi_def_cfa_offset 16
popq %r13
.cfi_def_cfa_offset 8
ret
.p2align 4,,10
.p2align 3
.L605:
.cfi_restore_state
movq 8(%rdi), %rax
call *48(%rax)
jmp .L600
.p2align 4,,10
.p2align 3
.L571:
movq (%r9), %rbx
leaq -1(%rbx), %rcx
testq %rcx, %rcx
movq %rcx, (%r9)
jne .L570
movq 8(%r9), %rax
movq %r9, %rdi
call *48(%rax)
movq 8(%rsp), %rdx
movq 24(%rsp), %rax
movq 8(%rdx), %rsi
.L570:
cmpq PyInstance_Type@GOTPCREL(%rip), %rsi
movq %rdx, 16(%rsp)
je .L606
.L573:
movq %rsi, 8(%rsp)
addq $1, (%rsi)
jmp .L567
.p2align 4,,10
.p2align 3
.L601:
movq $0, 24(%rsp)
xorl %eax, %eax
jmp .L562
.p2align 4,,10
.p2align 3
.L602:
movq PyExc_TypeError@GOTPCREL(%rip), %rax
leaq .LC23(%rip), %rsi
movq (%rax), %rdi
call PyErr_SetString@PLT
addq $40, %rsp
.cfi_remember_state
.cfi_def_cfa_offset 40
xorl %eax, %eax
popq %rbx
.cfi_def_cfa_offset 32
popq %rbp
.cfi_def_cfa_offset 24
popq %r12
.cfi_def_cfa_offset 16
popq %r13
.cfi_def_cfa_offset 8
ret
.p2align 4,,10
.p2align 3
.L569:
.cfi_restore_state
movq PyExc_TypeError@GOTPCREL(%rip), %rax
movq 24(%rsi), %rdx
leaq .LC25(%rip), %rsi
movq (%rax), %rdi
xorl %eax, %eax
call PyErr_Format@PLT
movq 8(%rsp), %rdi
subq $1, (%rdi)
jne .L574
.L603:
movq 8(%rdi), %rax
call *48(%rax)
jmp .L574
.p2align 4,,10
.p2align 3
.L579:
xorl %eax, %eax
jmp .L562
.p2align 4,,10
.p2align 3
.L604:
movq 8(%rdi), %rax
call *48(%rax)
.p2align 4,,4
jmp .L576
.p2align 4,,10
.p2align 3
.L606:
movq 16(%rdx), %rsi
jmp .L573
.cfi_endproc
.LFE154:
.size green_throw, .-green_throw
.p2align 4,,15
.type PyGreenlet_Throw, @function
PyGreenlet_Throw:
.LFB169:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rdi, %rbp
pushq %rbx
.cfi_def_cfa_offset 24
.cfi_offset 3, -24
movq %rsi, %rbx
subq $24, %rsp
.cfi_def_cfa_offset 48
movq 8(%rdi), %rdi
movq PyGreenlet_Type@GOTPCREL(%rip), %rsi
cmpq %rsi, %rdi
je .L608
movq %rcx, 8(%rsp)
movq %rdx, (%rsp)
call PyType_IsSubtype@PLT
testl %eax, %eax
movq (%rsp), %rdx
movq 8(%rsp), %rcx
je .L619
.L608:
addq $1, (%rbx)
testq %rdx, %rdx
je .L610
addq $1, (%rdx)
.L610:
testq %rcx, %rcx
je .L611
addq $1, (%rcx)
.L611:
addq $24, %rsp
.cfi_remember_state
.cfi_def_cfa_offset 24
movq %rbx, %rsi
movq %rbp, %rdi
popq %rbx
.cfi_def_cfa_offset 16
popq %rbp
.cfi_def_cfa_offset 8
jmp throw_greenlet
.p2align 4,,10
.p2align 3
.L619:
.cfi_restore_state
call PyErr_BadArgument@PLT
addq $24, %rsp
.cfi_def_cfa_offset 24
xorl %eax, %eax
popq %rbx
.cfi_def_cfa_offset 16
popq %rbp
.cfi_def_cfa_offset 8
ret
.cfi_endproc
.LFE169:
.size PyGreenlet_Throw, .-PyGreenlet_Throw
.p2align 4,,15
.type green_switch, @function
green_switch:
.LFB153:
.cfi_startproc
subq $8, %rsp
.cfi_def_cfa_offset 16
addq $1, (%rsi)
testq %rdx, %rdx
je .L622
addq $1, (%rdx)
.L622:
call g_switch
addq $8, %rsp
.cfi_def_cfa_offset 8
movq %rax, %rdi
jmp single_result
.cfi_endproc
.LFE153:
.size green_switch, .-green_switch
.section .rodata.str1.8
.align 8
.LC26:
.string "(((PyObject*)(self))->ob_refcnt) == 0"
.section .rodata.str1.1
.LC27:
.string "stderr"
.LC28:
.string "GreenletExit did not kill "
.LC29:
.string "\n"
.section .rodata.str1.8
.align 8
.LC30:
.string "(((PyObject*)(self))->ob_refcnt) > 0"
.text
.p2align 4,,15
.type green_dealloc, @function
green_dealloc:
.LFB150:
.cfi_startproc
pushq %r13
.cfi_def_cfa_offset 16
.cfi_offset 13, -16
pushq %r12
.cfi_def_cfa_offset 24
.cfi_offset 12, -24
pushq %rbp
.cfi_def_cfa_offset 32
.cfi_offset 6, -32
pushq %rbx
.cfi_def_cfa_offset 40
.cfi_offset 3, -40
movq %rdi, %rbx
subq $56, %rsp
.cfi_def_cfa_offset 96
call PyObject_GC_UnTrack@PLT
movq _PyTrash_delete_nesting@GOTPCREL(%rip), %rbp
movl 0(%rbp), %eax
cmpl $49, %eax
jg .L628
addl $1, %eax
cmpq $0, 16(%rbx)
movl %eax, 0(%rbp)
je .L629
cmpq $0, 64(%rbx)
je .L629
cmpq $-1, 24(%rbx)
je .L629
cmpq $0, (%rbx)
jne .L684
leaq 24(%rsp), %rdi
leaq 40(%rsp), %rdx
leaq 32(%rsp), %rsi
movq $1, (%rbx)
call PyErr_Fetch@PLT
movq _PyThreadState_Current@GOTPCREL(%rip), %r12
movq 64(%rbx), %rdi
movq (%r12), %rax
cmpq 120(%rax), %rdi
je .L685
movq ts_delkey(%rip), %rsi
call PyDict_GetItem@PLT
testq %rax, %rax
movq %rax, %r13
je .L686
.L640:
movq %rbx, %rsi
movq %r13, %rdi
call PyList_Append@PLT
testl %eax, %eax
js .L635
movq ts_current(%rip), %rdx
movq (%r12), %rax
movq 120(%rax), %rax
cmpq %rax, 64(%rdx)
je .L666
call green_updatecurrent
testl %eax, %eax
jne .L635
.L666:
cmpq $1, (%rbx)
.p2align 4,,2
je .L687
.L642:
movq 40(%rsp), %rdx
movq 32(%rsp), %rsi
movq 24(%rsp), %rdi
call PyErr_Restore@PLT
movq (%rbx), %rax
testq %rax, %rax
jle .L688
subq $1, %rax
testq %rax, %rax
movq %rax, (%rbx)
jne .L689
.L629:
cmpq $0, 88(%rbx)
je .L646
movq %rbx, %rdi
call PyObject_ClearWeakRefs@PLT
.L646:
movq 56(%rbx), %rdi
testq %rdi, %rdi
je .L648
movq $0, 56(%rbx)
subq $1, (%rdi)
je .L690
.L648:
movq 64(%rbx), %rdi
testq %rdi, %rdi
je .L651
.L697:
movq $0, 64(%rbx)
subq $1, (%rdi)
je .L691
.L651:
movq 96(%rbx), %rdi
testq %rdi, %rdi
je .L654
.L698:
movq $0, 96(%rbx)
subq $1, (%rdi)
je .L692
.L654:
movq 104(%rbx), %rdi
testq %rdi, %rdi
je .L657
.L699:
movq $0, 104(%rbx)
subq $1, (%rdi)
je .L693
.L657:
movq 112(%rbx), %rdi
testq %rdi, %rdi
je .L660
.L700:
movq $0, 112(%rbx)
subq $1, (%rdi)
je .L694
.L660:
movq 120(%rbx), %rdi
testq %rdi, %rdi
je .L663
.L701:
movq $0, 120(%rbx)
subq $1, (%rdi)
je .L695
.L663:
movq 8(%rbx), %rax
movq %rbx, %rdi
call *320(%rax)
.L645:
movl 0(%rbp), %eax
movq _PyTrash_delete_later@GOTPCREL(%rip), %rdx
subl $1, %eax
cmpq $0, (%rdx)
movl %eax, 0(%rbp)
je .L627
testl %eax, %eax
jle .L696
.L627:
addq $56, %rsp
.cfi_remember_state
.cfi_def_cfa_offset 40
popq %rbx
.cfi_def_cfa_offset 32
popq %rbp
.cfi_def_cfa_offset 24
popq %r12
.cfi_def_cfa_offset 16
popq %r13
.cfi_def_cfa_offset 8
ret
.p2align 4,,10
.p2align 3
.L628:
.cfi_restore_state
movq %rbx, %rdi
call _PyTrash_deposit_object@PLT
addq $56, %rsp
.cfi_remember_state
.cfi_def_cfa_offset 40
popq %rbx
.cfi_def_cfa_offset 32
popq %rbp
.cfi_def_cfa_offset 24
popq %r12
.cfi_def_cfa_offset 16
popq %r13
.cfi_def_cfa_offset 8
ret
.p2align 4,,10
.p2align 3
.L690:
.cfi_restore_state
movq 8(%rdi), %rax
call *48(%rax)
movq 64(%rbx), %rdi
testq %rdi, %rdi
jne .L697
jmp .L651
.p2align 4,,10
.p2align 3
.L691:
movq 8(%rdi), %rax
call *48(%rax)
movq 96(%rbx), %rdi
testq %rdi, %rdi
jne .L698
jmp .L654
.p2align 4,,10
.p2align 3
.L692:
movq 8(%rdi), %rax
call *48(%rax)
movq 104(%rbx), %rdi
testq %rdi, %rdi
jne .L699
jmp .L657
.p2align 4,,10
.p2align 3
.L693:
movq 8(%rdi), %rax
call *48(%rax)
movq 112(%rbx), %rdi
testq %rdi, %rdi
jne .L700
jmp .L660
.p2align 4,,10
.p2align 3
.L694:
movq 8(%rdi), %rax
call *48(%rax)
movq 120(%rbx), %rdi
testq %rdi, %rdi
jne .L701
jmp .L663
.p2align 4,,10
.p2align 3
.L695:
movq 8(%rdi), %rax
call *48(%rax)
.p2align 4,,6
jmp .L663
.p2align 4,,10
.p2align 3
.L689:
movq %rbx, %rdi
call PyObject_GC_Track@PLT
.p2align 4,,5
jmp .L645
.p2align 4,,10
.p2align 3
.L685:
movq ts_current(%rip), %rax
cmpq 64(%rax), %rdi
je .L636
call green_updatecurrent
testl %eax, %eax
jne .L635
.L636:
movq ts_current(%rip), %rax
movq 56(%rbx), %r12
movq PyExc_GreenletExit(%rip), %rdi
movq %rax, 56(%rbx)
addq $1, (%rax)
call PyErr_SetNone@PLT
xorl %edx, %edx
xorl %esi, %esi
movq %rbx, %rdi
call g_switch
movq 56(%rbx), %rdi
movq %r12, 56(%rbx)
testq %rdi, %rdi
je .L637
movq (%rdi), %rcx
leaq -1(%rcx), %rdx
testq %rdx, %rdx
movq %rdx, (%rdi)
je .L702
.L637:
testq %rax, %rax
je .L635
movq (%rax), %rcx
leaq -1(%rcx), %rdx
testq %rdx, %rdx
movq %rdx, (%rax)
jne .L666
movq 8(%rax), %rdx
movq %rax, %rdi
call *48(%rdx)
jmp .L666
.p2align 4,,10
.p2align 3
.L687:
cmpq $0, 16(%rbx)
je .L642
leaq .LC27(%rip), %rdi
call PySys_GetObject@PLT
addq $1, (%rbx)
testq %rax, %rax
movq %rax, %r12
je .L642
leaq .LC28(%rip), %rdi
movq %rax, %rsi
call PyFile_WriteString@PLT
movq %r12, %rsi
movq %rbx, %rdi
xorl %edx, %edx
call PyFile_WriteObject@PLT
leaq .LC29(%rip), %rdi
movq %r12, %rsi
call PyFile_WriteString@PLT
jmp .L642
.p2align 4,,10
.p2align 3
.L696:
call _PyTrash_destroy_chain@PLT
.p2align 4,,8
jmp .L627
.p2align 4,,10
.p2align 3
.L686:
xorl %edi, %edi
call PyList_New@PLT
testq %rax, %rax
movq %rax, %r13
je .L635
movq 64(%rbx), %rdi
movq ts_delkey(%rip), %rsi
movq %rax, %rdx
call PyDict_SetItem@PLT
testl %eax, %eax
jns .L640
.p2align 4,,10
.p2align 3
.L635:
movq %rbx, %rdi
call PyErr_WriteUnraisable@PLT
.p2align 4,,3
jmp .L666
.p2align 4,,10
.p2align 3
.L702:
movq 8(%rdi), %rdx
movq %rax, 8(%rsp)
call *48(%rdx)
movq 8(%rsp), %rax
jmp .L637
.L684:
leaq __PRETTY_FUNCTION__.11030(%rip), %rcx
leaq .LC7(%rip), %rsi
leaq .LC26(%rip), %rdi
movl $977, %edx
call __assert_fail@PLT
.L688:
leaq __PRETTY_FUNCTION__.11030(%rip), %rcx
leaq .LC7(%rip), %rsi
leaq .LC30(%rip), %rdi
movl $1006, %edx
call __assert_fail@PLT
.cfi_endproc
.LFE150:
.size green_dealloc, .-green_dealloc
.section .rodata.str1.1
.LC31:
.string "()"
.text
.p2align 4,,15
.type PyGreenlet_Switch, @function
PyGreenlet_Switch:
.LFB168:
.cfi_startproc
pushq %r12
.cfi_def_cfa_offset 16
.cfi_offset 12, -16
movq %rdi, %r12
pushq %rbp
.cfi_def_cfa_offset 24
.cfi_offset 6, -24
movq %rsi, %rbp
movq PyGreenlet_Type@GOTPCREL(%rip), %rsi
pushq %rbx
.cfi_def_cfa_offset 32
.cfi_offset 3, -32
movq 8(%rdi), %rdi
movq %rdx, %rbx
cmpq %rsi, %rdi
je .L704
call PyType_IsSubtype@PLT
testl %eax, %eax
je .L714
.L704:
testq %rbp, %rbp
.p2align 4,,3
je .L716
addq $1, 0(%rbp)
.L707:
testq %rbx, %rbx
je .L708
movq 8(%rbx), %rax
testb $32, 171(%rax)
je .L709
addq $1, (%rbx)
.L708:
movq %r12, %rdi
movq %rbx, %rdx
movq %rbp, %rsi
call g_switch
popq %rbx
.cfi_remember_state
.cfi_def_cfa_offset 24
popq %rbp
.cfi_def_cfa_offset 16
popq %r12
.cfi_def_cfa_offset 8
movq %rax, %rdi
jmp single_result
.p2align 4,,10
.p2align 3
.L709:
.cfi_restore_state
xorl %ebx, %ebx
jmp .L708
.p2align 4,,10
.p2align 3
.L716:
leaq .LC31(%rip), %rdi
xorl %eax, %eax
call Py_BuildValue@PLT
movq %rax, %rbp
jmp .L707
.p2align 4,,10
.p2align 3
.L714:
call PyErr_BadArgument@PLT
popq %rbx
.cfi_def_cfa_offset 24
popq %rbp
.cfi_def_cfa_offset 16
xorl %eax, %eax
popq %r12
.cfi_def_cfa_offset 8
ret
.cfi_endproc
.LFE168:
.size PyGreenlet_Switch, .-PyGreenlet_Switch
.section .rodata.str1.1
.LC32:
.string "greenlet"
.LC33:
.string "0.4.0"
.LC34:
.string "__version__"
.LC35:
.string "__greenlet_ts_curkey"
.LC36:
.string "__greenlet_ts_delkey"
.LC37:
.string "__greenlet_ts_tracekey"
.LC38:
.string "switch"
.LC39:
.string "throw"
.LC40:
.string "greenlet.error"
.LC41:
.string "greenlet.GreenletExit"
.LC42:
.string "error"
.LC43:
.string "GreenletExit"
.LC44:
.string "GREENLET_USE_GC"
.LC45:
.string "GREENLET_USE_TRACING"
.LC46:
.string "greenlet._C_API"
.LC47:
.string "_C_API"
.text
.p2align 4,,15
.globl initgreenlet
.type initgreenlet, @function
initgreenlet:
.LFB173:
.cfi_startproc
pushq %r13
.cfi_def_cfa_offset 16
.cfi_offset 13, -16
leaq GreenMethods(%rip), %rsi
leaq .LC32(%rip), %rdi
xorl %ecx, %ecx
xorl %edx, %edx
movl $1013, %r8d
pushq %r12
.cfi_def_cfa_offset 24
.cfi_offset 12, -24
pushq %rbp
.cfi_def_cfa_offset 32
.cfi_offset 6, -32
pushq %rbx
.cfi_def_cfa_offset 40
.cfi_offset 3, -40
subq $8, %rsp
.cfi_def_cfa_offset 48
call Py_InitModule4_64@PLT
testq %rax, %rax
movq %rax, %rbp
je .L717
leaq .LC33(%rip), %rdx
leaq .LC34(%rip), %rsi
movq %rax, %rdi
call PyModule_AddStringConstant@PLT
testl %eax, %eax
js .L717
leaq .LC35(%rip), %rdi
call PyString_InternFromString@PLT
leaq .LC36(%rip), %rdi
movq %rax, ts_curkey(%rip)
call PyString_InternFromString@PLT
leaq .LC37(%rip), %rdi
movq %rax, ts_delkey(%rip)
call PyString_InternFromString@PLT
leaq .LC38(%rip), %rdi
movq %rax, ts_tracekey(%rip)
call PyString_InternFromString@PLT
leaq .LC39(%rip), %rdi
movq %rax, ts_event_switch(%rip)
call PyString_InternFromString@PLT
cmpq $0, ts_curkey(%rip)
movq %rax, ts_event_throw(%rip)
je .L717
cmpq $0, ts_delkey(%rip)
je .L717
movq PyGreenlet_Type@GOTPCREL(%rip), %r13
movq %r13, %rdi
call PyType_Ready@PLT
testl %eax, %eax
js .L717
leaq .LC40(%rip), %rdi
xorl %edx, %edx
xorl %esi, %esi
call PyErr_NewException@PLT
testq %rax, %rax
movq %rax, PyExc_GreenletError(%rip)
je .L717
movq PyExc_BaseException@GOTPCREL(%rip), %rax
leaq .LC41(%rip), %rdi
xorl %edx, %edx
movq (%rax), %rsi
call PyErr_NewException@PLT
testq %rax, %rax
movq %rax, PyExc_GreenletExit(%rip)
je .L717
call green_create_main
movq %rax, ts_current(%rip)
movq ts_current(%rip), %rax
testq %rax, %rax
je .L717
addq $1, 0(%r13)
leaq .LC32(%rip), %rsi
movq %r13, %rdx
movq %rbp, %rdi
leaq copy_on_greentype(%rip), %r12
call PyModule_AddObject@PLT
movq PyExc_GreenletError(%rip), %rdx
leaq .LC42(%rip), %rsi
movq %rbp, %rdi
addq $1, (%rdx)
call PyModule_AddObject@PLT
movq PyExc_GreenletExit(%rip), %rdx
leaq .LC43(%rip), %rsi
movq %rbp, %rdi
addq $1, (%rdx)
call PyModule_AddObject@PLT
movl $1, %edi
call PyBool_FromLong@PLT
leaq .LC44(%rip), %rsi
movq %rax, %rdx
movq %rbp, %rdi
call PyModule_AddObject@PLT
movl $1, %edi
call PyBool_FromLong@PLT
leaq .LC45(%rip), %rsi
movq %rax, %rdx
movq %rbp, %rdi
call PyModule_AddObject@PLT
movq copy_on_greentype(%rip), %rsi
testq %rsi, %rsi
jne .L736
jmp .L726
.p2align 4,,10
.p2align 3
.L724:
addq $8, %r12
movq (%r12), %rsi
testq %rsi, %rsi
je .L726
.L736:
movq %rbp, %rdi
call PyObject_GetAttrString@PLT
testq %rax, %rax
movq %rax, %rbx
je .L724
movq 264(%r13), %rdi
movq (%r12), %rsi
movq %rax, %rdx
call PyDict_SetItemString@PLT
subq $1, (%rbx)
jne .L724
movq 8(%rbx), %rax
movq %rbx, %rdi
call *48(%rax)
jmp .L724
.p2align 4,,10
.p2align 3
.L717:
addq $8, %rsp
.cfi_remember_state
.cfi_def_cfa_offset 40
popq %rbx
.cfi_def_cfa_offset 32
popq %rbp
.cfi_def_cfa_offset 24
popq %r12
.cfi_def_cfa_offset 16
popq %r13
.cfi_def_cfa_offset 8
ret
.p2align 4,,10
.p2align 3
.L726:
.cfi_restore_state
movq PyExc_GreenletError(%rip), %rax
leaq .LC46(%rip), %rsi
leaq _PyGreenlet_API.11169(%rip), %rdi
xorl %edx, %edx
movq %r13, _PyGreenlet_API.11169(%rip)
movq %rax, 8+_PyGreenlet_API.11169(%rip)
movq PyExc_GreenletExit(%rip), %rax
movq %rax, 16+_PyGreenlet_API.11169(%rip)
leaq PyGreenlet_New(%rip), %rax
movq %rax, 24+_PyGreenlet_API.11169(%rip)
leaq PyGreenlet_GetCurrent(%rip), %rax
movq %rax, 32+_PyGreenlet_API.11169(%rip)
leaq PyGreenlet_Throw(%rip), %rax
movq %rax, 40+_PyGreenlet_API.11169(%rip)
leaq PyGreenlet_Switch(%rip), %rax
movq %rax, 48+_PyGreenlet_API.11169(%rip)
leaq PyGreenlet_SetParent(%rip), %rax
movq %rax, 56+_PyGreenlet_API.11169(%rip)
call PyCapsule_New@PLT
testq %rax, %rax
je .L717
addq $8, %rsp
.cfi_def_cfa_offset 40
movq %rbp, %rdi
leaq .LC47(%rip), %rsi
popq %rbx
.cfi_def_cfa_offset 32
popq %rbp
.cfi_def_cfa_offset 24
popq %r12
.cfi_def_cfa_offset 16
popq %r13
.cfi_def_cfa_offset 8
movq %rax, %rdx
jmp PyModule_AddObject@PLT
.cfi_endproc
.LFE173:
.size initgreenlet, .-initgreenlet
.local _PyGreenlet_API.11169
.comm _PyGreenlet_API.11169,64,32
.section .rodata
.type __PRETTY_FUNCTION__.11030, @object
.size __PRETTY_FUNCTION__.11030, 14
__PRETTY_FUNCTION__.11030:
.string "green_dealloc"
.type __PRETTY_FUNCTION__.10968, @object
.size __PRETTY_FUNCTION__.10968, 14
__PRETTY_FUNCTION__.10968:
.string "g_initialstub"
.type __PRETTY_FUNCTION__.10872, @object
.size __PRETTY_FUNCTION__.10872, 7
__PRETTY_FUNCTION__.10872:
.string "g_save"
.type __PRETTY_FUNCTION__.10887, @object
.size __PRETTY_FUNCTION__.10887, 15
__PRETTY_FUNCTION__.10887:
.string "slp_save_state"
.type __PRETTY_FUNCTION__.10907, @object
.size __PRETTY_FUNCTION__.10907, 14
__PRETTY_FUNCTION__.10907:
.string "g_switchstack"
.type __PRETTY_FUNCTION__.10933, @object
.size __PRETTY_FUNCTION__.10933, 9
__PRETTY_FUNCTION__.10933:
.string "g_switch"
.section .rodata.str1.1
.LC48:
.string "parent"
.section .data.rel.local,"aw",@progbits
.align 16
.type kwlist.10993, @object
.size kwlist.10993, 24
kwlist.10993:
.quad .LC12
.quad .LC48
.quad 0
.section .rodata
.align 16
.type __PRETTY_FUNCTION__.10850, @object
.size __PRETTY_FUNCTION__.10850, 20
__PRETTY_FUNCTION__.10850:
.string "green_updatecurrent"
.section .rodata.str1.1
.LC49:
.string "getcurrent"
.LC50:
.string "settrace"
.LC51:
.string "gettrace"
.section .data.rel.local
.align 32
.type copy_on_greentype, @object
.size copy_on_greentype, 48
copy_on_greentype:
.quad .LC49
.quad .LC42
.quad .LC43
.quad .LC50
.quad .LC51
.quad 0
.align 32
.type GreenMethods, @object
.size GreenMethods, 128
GreenMethods:
.quad .LC49
.quad mod_getcurrent
.long 4
.zero 4
.quad 0
.quad .LC50
.quad mod_settrace
.long 1
.zero 4
.quad 0
.quad .LC51
.quad mod_gettrace
.long 4
.zero 4
.quad 0
.quad 0
.quad 0
.zero 16
.globl PyGreenlet_Type
.section .rodata.str1.1
.LC52:
.string "greenlet.greenlet"
.section .rodata.str1.8
.align 8
.LC53:
.string "greenlet(run=None, parent=None) -> greenlet\n\nCreates a new greenlet object (without running it).\n\n - *run* -- The callable to invoke.\n - *parent* -- The parent greenlet. The default is the current greenlet."
.section .data.rel,"aw",@progbits
.align 32
.type PyGreenlet_Type, @object
.size PyGreenlet_Type, 392
PyGreenlet_Type:
.quad 1
.quad 0
.quad 0
.quad .LC52
.quad 128
.quad 0
.quad green_dealloc
.quad 0
.quad 0
.quad 0
.quad 0
.quad 0
.quad green_as_number
.quad 0
.quad 0
.quad 0
.quad 0
.quad 0
.quad 0
.quad 0
.quad 0
.quad 148971
.quad .LC53
.quad green_traverse
.quad green_clear
.quad 0
.quad 88
.quad 0
.quad 0
.quad green_methods
.quad 0
.quad green_getsets
.quad 0
.quad 0
.quad 0
.quad 0
.quad 120
.quad green_init
.quad PyType_GenericAlloc
.quad green_new
.quad PyObject_GC_Del
.quad green_is_gc
.zero 56
.section .data.rel.local
.align 32
.type green_as_number, @object
.size green_as_number, 312
green_as_number:
.quad 0
.quad 0
.quad 0
.quad 0
.quad 0
.quad 0
.quad 0
.quad 0
.quad 0
.quad 0
.quad green_bool
.zero 224
.section .rodata.str1.1
.LC54:
.string "__dict__"
.LC55:
.string "gr_frame"
.LC56:
.string "dead"
.section .data.rel.local
.align 32
.type green_getsets, @object
.size green_getsets, 240
green_getsets:
.quad .LC54
.quad green_getdict
.quad green_setdict
.quad 0
.zero 8
.quad .LC12
.quad green_getrun
.quad green_setrun
.quad 0
.zero 8
.quad .LC48
.quad green_getparent
.quad green_setparent
.quad 0
.zero 8
.quad .LC55
.quad green_getframe
.quad 0
.quad 0
.zero 8
.quad .LC56
.quad green_getdead
.quad 0
.quad 0
.zero 8
.quad 0
.zero 32
.section .rodata.str1.1
.LC57:
.string "__getstate__"
.section .data.rel.local
.align 32
.type green_methods, @object
.size green_methods, 128
green_methods:
.quad .LC38
.quad green_switch
.long 3
.zero 4
.quad green_switch_doc
.quad .LC39
.quad green_throw
.long 1
.zero 4
.quad green_throw_doc
.quad .LC57
.quad green_getstate
.long 4
.zero 4
.quad 0
.quad 0
.quad 0
.zero 16
.data
.align 32
.type green_throw_doc, @object
.size green_throw_doc, 563
green_throw_doc:
.ascii "Switches execution to the greenlet ``g``, but immediately ra"
.ascii "ises the\ngiven exception in ``g``. If no argument is provi"
.ascii "ded, the exception\ndefaults to ``greenlet.GreenletExit``. "
.ascii "The normal exception\npropagation rules apply, as described "
.ascii "above. Note that calling this\nmethod is almost equivalent "
.ascii "to the fol"
.string "lowing::\n\n def raiser():\n raise typ, val, tb\n g_raiser = greenlet(raiser, parent=g)\n g_raiser.switch()\n\nexcept that this trick does not work for the\n``greenlet.GreenletExit`` exception, which would not propagate\nfrom ``g_raiser`` to ``g``.\n"
.align 32
.type green_switch_doc, @object
.size green_switch_doc, 651
green_switch_doc:
.ascii "switch(*args, **kwargs)\n\nSwitch execution to this greenlet"
.ascii ".\n\nIf this greenlet has never been run, then this greenlet"
.ascii "\nwill be switched to using the body of self.run(*args, **kw"
.ascii "args).\n\nIf the greenlet is active (has been run, but was s"
.ascii "witch()'ed\nout before leaving its run function), then this "
.ascii "greenlet will\nbe resumed and the return value to its switch"
.ascii " call will be\nNone if no arguments are give"
.string "n, the given argument if one\nargument is given, or the args tuple and keyword args dict if\nmultiple arguments are given.\n\nIf the greenlet is dead, or is the current greenlet then this\nfunction will simply return the arguments using the same rules as\nabove."
.local PyExc_GreenletExit
.comm PyExc_GreenletExit,8,8
.local PyExc_GreenletError
.comm PyExc_GreenletError,8,8
.local ts_event_throw
.comm ts_event_throw,8,8
.local ts_event_switch
.comm ts_event_switch,8,8
.local ts_tracekey
.comm ts_tracekey,8,8
.local ts_delkey
.comm ts_delkey,8,8
.local ts_curkey
.comm ts_curkey,8,8
.local ts_passaround_kwargs
.comm ts_passaround_kwargs,8,8
.local ts_passaround_args
.comm ts_passaround_args,8,8
.local ts_current
.comm ts_current,8,8
.local ts_origin
.comm ts_origin,8,8
.local ts_target
.comm ts_target,8,8
.ident "GCC: (Gentoo 4.8.0 p1.1, pie-0.5.5) 4.8.0"
.section .note.GNU-stack,"",@progbits
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment