; assembly | /* r2dec pseudo code output */ | /* ball_attributecontext.t/none @ 0x4060f0 */ | #include | ; (fcn) sym.workerThread1 () | int64_t workerThread1 (void) { | int64_t var_8h; | int64_t var_20h; | uint32_t var_28h; | int64_t var_30h; | uint32_t var_38h; | int64_t var_40h; | int64_t var_48h; | char * var_50h; | int64_t var_58h; | char * var_60h; | int64_t var_68h; | int64_t var_70h; | int64_t var_78h; | int64_t var_80h; | int64_t var_90h; | int64_t var_98h; | int64_t var_a0h; | int64_t var_a8h; | int64_t var_b0h; | int64_t var_b8h; | int64_t var_c0h; | uint32_t var_e0h; | int64_t var_e8h; | uint32_t var_f0h; 0x004060f0 push r14 | 0x004060f2 push rbx | 0x004060f3 sub rsp, 0x108 | 0x004060fa mov qword [rsp + 0x70], 0x448ba0 | *((rsp + 0x70)) = vtable.AttributeSet.0; 0x00406103 mov rax, qword [rip + 0x262676] | rax = BloombergLP::bslma::Default::s_defaultAllocator; 0x0040610a test rax, rax | | if (rax == 0) { 0x0040610d jne 0x406114 | 0x0040610f call 0x41f6c0 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); | } 0x00406114 mov qword [rsp + 0x78], rax | *((rsp + 0x78)) = rax; 0x00406119 xorps xmm0, xmm0 | __asm ("xorps xmm0, xmm0"); 0x0040611c movups xmmword [rsp + 0x80], xmm0 | __asm ("movups xmmword [rsp + 0x80], xmm0"); 0x00406124 mov dword [rsp + 0x90], 1 | *((rsp + 0x90)) = 1; 0x0040612f lea rax, [rsp + 0x98] | rax = rsp + 0x98; 0x00406137 mov dword [rsp + 0xb0], 0 | *((rsp + 0xb0)) = 0; 0x00406142 mov qword [rsp + 0xa8], rax | *((rsp + 0xa8)) = rax; 0x0040614a mov qword [rsp + 0xa0], 0 | *((rsp + 0xa0)) = 0; 0x00406156 mov rax, qword [rip + 0x262623] | rax = BloombergLP::bslma::Default::s_defaultAllocator; 0x0040615d test rax, rax | | if (rax == 0) { 0x00406160 jne 0x406167 | 0x00406162 call 0x41f6c0 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); | } 0x00406167 mov qword [rsp], 0x448ed0 | *(rsp) = "uuid"; 0x0040616f mov dword [rsp + 0x38], 0 | *((rsp + 0x38)) = 0; 0x00406177 test rax, rax | | if (rax == 0) { 0x0040617a jne 0x40618c | 0x0040617c mov rax, qword [rip + 0x2625fd] | rax = BloombergLP::bslma::Default::s_defaultAllocator; 0x00406183 test rax, rax | | if (rax == 0) { 0x00406186 je 0x4063aa | goto label_2; | } | } 0x0040618c lea rbx, [rsp + 8] | rbx = rsp + 8; 0x00406191 mov qword [rsp + 0x40], rax | *((rsp + 0x40)) = rax; 0x00406196 mov eax, 0xffffffff | eax = 0xffffffff; 0x0040619b mov qword [rsp + 0x48], rax | *((rsp + 0x48)) = rax; | do { | label_1: 0x004061a0 mov dword [rbx], 0x3db6a9 | *(rbx) = 0x3db6a9; 0x004061a6 mov dword [rsp + 0x38], 1 | *((rsp + 0x38)) = 1; | label_0: 0x004061ae mov qword [rsp + 0x50], 0x448f01 | *((rsp + 0x50)) = "Gang Chen"; 0x004061b7 mov qword [rsp + 0x58], 9 | *((rsp + 0x58)) = 9; 0x004061c0 mov rax, qword [rip + 0x2625b9] | rax = BloombergLP::bslma::Default::s_defaultAllocator; 0x004061c7 test rax, rax | | if (rax == 0) { 0x004061ca jne 0x4061d1 | 0x004061cc call 0x41f6c0 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); | } 0x004061d1 mov qword [rsp + 0x68], rax | *((rsp + 0x68)) = rax; 0x004061d6 lea rdi, [rsp + 0xb8] | 0x004061de lea rdx, [rsp + 0x50] | 0x004061e3 lea rcx, [rsp + 0x68] | 0x004061e8 mov esi, 0x448efc | 0x004061ed call 0x4103b0 | BloombergLP::ball::Attribute::Attribute(char const*,std::_1::basic_string_view>const&,bsl::allocatorconst&) (rsp + 0xb8, "name", rsp + 0x50, rsp + 0x68); 0x004061f2 lea r14, [rsp + 0x78] | r14 = rsp + 0x78; 0x004061f7 mov rsi, rsp | 0x004061fa mov rdi, r14 | 0x004061fd call 0x40fe00 | bsl::set>::insert(BloombergLP::ball::Attributeconst&) (r14, rsp); 0x00406202 lea rsi, [rsp + 0xb8] | 0x0040620a mov rdi, r14 | 0x0040620d call 0x40fe00 | bsl::set>::insert(BloombergLP::ball::Attributeconst&) (r14, rsp + 0xb8); 0x00406212 mov edi, 0x668030 | 0x00406217 call 0x4206d0 | BloombergLP::bslmt::Barrier::wait() (obj.BALL_ATTRIBUTECONTEXT_USAGE_EXAMPLE_1::barrier); 0x0040621c call 0x412420 | rax = BloombergLP::ball::AttributeContext::getContext() (); 0x00406221 mov rbx, rax | rbx = rax; 0x00406224 xor edi, edi | edi = 0; 0x00406226 test rax, rax | 0x00406229 sete dil | dil = (rax == 0) ? 1 : 0; 0x0040622d mov esi, 0x448f0b | esi = "context"; 0x00406232 mov edx, 0x20a | edx = 0x20a; 0x00406237 call 0x405630 | symaSsErT(int (); 0x0040623c call 0x4125c0 | rax = BloombergLP::ball::AttributeContext::lookupContext() (); 0x00406241 xor edi, edi | edi = 0; 0x00406243 cmp rbx, rax | 0x00406246 setne dil | dil = (rbx != rax) ? 1 : 0; 0x0040624a mov esi, 0x448f13 | esi = "context == ball::AttributeContext::lookupContext()"; 0x0040624f mov edx, 0x20b | edx = 0x20b; 0x00406254 call 0x405630 | symaSsErT(int (); 0x00406259 mov qword [rbx + 0x20], 0 | *((rbx + 0x20)) = 0; 0x00406261 mov qword [rbx + 0x28], 0xffffffffffffffff | *((rbx + 0x28)) = 0xffffffffffffffff; 0x00406269 lea rdi, [rsp + 0x50] | 0x0040626e lea rdx, [rsp + 0x70] | 0x00406273 mov rsi, rbx | 0x00406276 call 0x411d90 | BloombergLP::ball::AttributeContainerList::pushFront(BloombergLP::ball::AttributeContainerconst*) (rsp + 0x50, rbx, rsp + 0x70); 0x0040627b mov rsi, rsp | 0x0040627e mov rdi, rbx | 0x00406281 call 0x411e90 | al = BloombergLP::ball::AttributeContainerList::hasValue(BloombergLP::ball::Attributeconst&)const (rbx, rsp); 0x00406286 xor al, 1 | al ^= 1; 0x00406288 movzx edi, al | edi = (int32_t) al; 0x0040628b mov esi, 0x448f4f | esi = 0x448f4f; 0x00406290 mov edx, 0x213 | edx = 0x213; 0x00406295 call 0x405630 | symaSsErT(int (); 0x0040629a lea rsi, [rsp + 0xb8] | 0x004062a2 mov rdi, rbx | 0x004062a5 call 0x411e90 | al = BloombergLP::ball::AttributeContainerList::hasValue(BloombergLP::ball::Attributeconst&)const (rbx, rsp + 0xb8); 0x004062aa xor al, 1 | al ^= 1; 0x004062ac movzx edi, al | edi = (int32_t) al; 0x004062af mov esi, 0x448f72 | esi = 0x448f72; 0x004062b4 mov edx, 0x214 | edx = 0x214; 0x004062b9 call 0x405630 | symaSsErT(int (); 0x004062be mov edi, 0x668030 | 0x004062c3 call 0x4206d0 | BloombergLP::bslmt::Barrier::wait() (obj.BALL_ATTRIBUTECONTEXT_USAGE_EXAMPLE_1::barrier); 0x004062c8 mov rax, qword [rsp + 0x50] | rax = *((rsp + 0x50)); 0x004062cd mov qword [rsp + 0x60], rax | *((rsp + 0x60)) = rax; 0x004062d2 mov qword [rbx + 0x20], 0 | *((rbx + 0x20)) = 0; 0x004062da mov qword [rbx + 0x28], 0xffffffffffffffff | *((rbx + 0x28)) = 0xffffffffffffffff; 0x004062e2 lea rsi, [rsp + 0x60] | 0x004062e7 mov rdi, rbx | 0x004062ea call 0x411e00 | BloombergLP::ball::AttributeContainerList::remove(BloombergLP::ball::AttributeContainerListIteratorconst&) (rbx, rsp + 0x60); 0x004062ef mov rsi, rsp | 0x004062f2 mov rdi, rbx | 0x004062f5 call 0x411e90 | al = BloombergLP::ball::AttributeContainerList::hasValue(BloombergLP::ball::Attributeconst&)const (rbx, rsp); 0x004062fa movzx edi, al | edi = (int32_t) al; 0x004062fd mov esi, 0x448f46 | esi = "false == context->hasAttribute(a1)"; 0x00406302 mov edx, 0x21c | edx = 0x21c; 0x00406307 call 0x405630 | symaSsErT(int (); 0x0040630c lea rsi, [rsp + 0xb8] | 0x00406314 mov rdi, rbx | 0x00406317 call 0x411e90 | al = BloombergLP::ball::AttributeContainerList::hasValue(BloombergLP::ball::Attributeconst&)const (rbx, rsp + 0xb8); 0x0040631c movzx edi, al | edi = (int32_t) al; 0x0040631f mov esi, 0x448f69 | esi = "false == context->hasAttribute(a2)"; 0x00406324 mov edx, 0x21d | edx = 0x21d; 0x00406329 call 0x405630 | symaSsErT(int (); 0x0040632e mov edi, 0x668030 | 0x00406333 call 0x4206d0 | BloombergLP::bslmt::Barrier::wait() (obj.BALL_ATTRIBUTECONTEXT_USAGE_EXAMPLE_1::barrier); 0x00406338 cmp dword [rsp + 0xf0], 3 | | if (*((rsp + 0xf0)) == 3) { 0x00406340 jne 0x406363 | 0x00406342 cmp qword [rsp + 0xe0], 0x17 | | if (*((rsp + 0xe0)) == 0x17) { 0x0040634b je 0x406363 | goto label_3; | } 0x0040634d mov rsi, qword [rsp + 0xc0] | rsi = *((rsp + 0xc0)); 0x00406355 mov rdi, qword [rsp + 0xe8] | rdi = *((rsp + 0xe8)); 0x0040635d mov rax, qword [rdi] | rax = *(rdi); 0x00406360 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); | } | label_3: 0x00406363 cmp dword [rsp + 0x38], 3 | | if (*((rsp + 0x38)) == 3) { 0x00406368 jne 0x406382 | 0x0040636a cmp qword [rsp + 0x28], 0x17 | | if (*((rsp + 0x28)) == 0x17) { 0x00406370 je 0x406382 | goto label_4; | } 0x00406372 mov rsi, qword [rsp + 8] | rsi = *((rsp + 8)); 0x00406377 mov rdi, qword [rsp + 0x30] | rdi = *((rsp + 0x30)); 0x0040637c mov rax, qword [rdi] | rax = *(rdi); 0x0040637f call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); | } | label_4: 0x00406382 mov qword [rsp + 0x70], 0x448ba0 | *((rsp + 0x70)) = vtable.AttributeSet.0; 0x0040638b mov rdi, r14 | 0x0040638e call 0x40fd00 | bsl::set>::~set() (r14); 0x00406393 lea rdi, [rsp + 0x70] | rdi = rsp + 0x70; 0x00406398 call 0x411b90 | eax = BloombergLP::ball::AttributeContainer::~AttributeContainer() (); 0x0040639d xor eax, eax | eax = 0; 0x0040639f add rsp, 0x108 | 0x004063a6 pop rbx | 0x004063a7 pop r14 | 0x004063a9 ret | return rax; | label_2: 0x004063aa call 0x41f6c0 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); 0x004063af mov ecx, dword [rsp + 0x38] | ecx = *((rsp + 0x38)); 0x004063b3 lea rbx, [rsp + 8] | rbx = rsp + 8; 0x004063b8 mov qword [rsp + 0x40], rax | *((rsp + 0x40)) = rax; 0x004063bd mov eax, 0xffffffff | eax = 0xffffffff; 0x004063c2 mov qword [rsp + 0x48], rax | *((rsp + 0x48)) = rax; 0x004063c7 cmp ecx, 3 | | if (ecx == 3) { 0x004063ca je 0x4063e2 | goto label_5; | } 0x004063cc cmp ecx, 1 | 0x004063cf jne 0x4061a0 | | } while (ecx != 1); 0x004063d5 mov dword [rsp + 8], 0x3db6a9 | *((rsp + 8)) = 0x3db6a9; 0x004063dd jmp 0x4061ae | goto label_0; | label_5: 0x004063e2 cmp qword [rsp + 0x28], 0x17 | | if (*((rsp + 0x28)) != 0x17) { 0x004063e8 je 0x4063fa | 0x004063ea mov rsi, qword [rsp + 8] | rsi = *((rsp + 8)); 0x004063ef mov rdi, qword [rsp + 0x30] | rdi = *((rsp + 0x30)); 0x004063f4 mov rax, qword [rdi] | rax = *(rdi); 0x004063f7 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); | } 0x004063fa mov qword [rsp + 0x20], 0xffffffffffffffff | *((rsp + 0x20)) = 0xffffffffffffffff; 0x00406403 jmp 0x4061a0 | goto label_1; | }