./not.so: file format elf64-x86-64 architecture: i386:x86-64, flags 0x00000150: HAS_SYMS, DYNAMIC, D_PAGED start address 0x0000000000000b30 Disassembly of section .init: 0000000000000a70 <_init>: _init(): a70: 48 83 ec 08 sub $0x8,%rsp a74: 48 8b 05 65 15 20 00 mov 0x201565(%rip),%rax # 201fe0 <__gmon_start__> a7b: 48 85 c0 test %rax,%rax a7e: 74 02 je a82 <_init+0x12> a80: ff d0 callq *%rax a82: 48 83 c4 08 add $0x8,%rsp a86: c3 retq Disassembly of section .plt: 0000000000000a90 <.plt>: a90: ff 35 72 15 20 00 pushq 0x201572(%rip) # 202008 <_GLOBAL_OFFSET_TABLE_+0x8> a96: ff 25 74 15 20 00 jmpq *0x201574(%rip) # 202010 <_GLOBAL_OFFSET_TABLE_+0x10> a9c: 0f 1f 40 00 nopl 0x0(%rax) 0000000000000aa0 : aa0: ff 25 72 15 20 00 jmpq *0x201572(%rip) # 202018 aa6: 68 00 00 00 00 pushq $0x0 aab: e9 e0 ff ff ff jmpq a90 <.plt> 0000000000000ab0 : ab0: ff 25 6a 15 20 00 jmpq *0x20156a(%rip) # 202020 ab6: 68 01 00 00 00 pushq $0x1 abb: e9 d0 ff ff ff jmpq a90 <.plt> 0000000000000ac0 : ac0: ff 25 62 15 20 00 jmpq *0x201562(%rip) # 202028 ac6: 68 02 00 00 00 pushq $0x2 acb: e9 c0 ff ff ff jmpq a90 <.plt> 0000000000000ad0 : ad0: ff 25 5a 15 20 00 jmpq *0x20155a(%rip) # 202030 ad6: 68 03 00 00 00 pushq $0x3 adb: e9 b0 ff ff ff jmpq a90 <.plt> 0000000000000ae0 : ae0: ff 25 52 15 20 00 jmpq *0x201552(%rip) # 202038 ae6: 68 04 00 00 00 pushq $0x4 aeb: e9 a0 ff ff ff jmpq a90 <.plt> 0000000000000af0 : af0: ff 25 4a 15 20 00 jmpq *0x20154a(%rip) # 202040 af6: 68 05 00 00 00 pushq $0x5 afb: e9 90 ff ff ff jmpq a90 <.plt> 0000000000000b00 : b00: ff 25 42 15 20 00 jmpq *0x201542(%rip) # 202048 b06: 68 06 00 00 00 pushq $0x6 b0b: e9 80 ff ff ff jmpq a90 <.plt> 0000000000000b10 : b10: ff 25 3a 15 20 00 jmpq *0x20153a(%rip) # 202050 b16: 68 07 00 00 00 pushq $0x7 b1b: e9 70 ff ff ff jmpq a90 <.plt> Disassembly of section .plt.got: 0000000000000b20 <.plt.got>: b20: ff 25 d2 14 20 00 jmpq *0x2014d2(%rip) # 201ff8 <__cxa_finalize@GLIBC_2.2.5> b26: 66 90 xchg %ax,%ax Disassembly of section .text: 0000000000000b30 : deregister_tm_clones(): b30: 48 8d 3d 29 15 20 00 lea 0x201529(%rip),%rdi # 202060 b37: 48 8d 05 29 15 20 00 lea 0x201529(%rip),%rax # 202067 b3e: 55 push %rbp b3f: 48 29 f8 sub %rdi,%rax b42: 48 89 e5 mov %rsp,%rbp b45: 48 83 f8 0e cmp $0xe,%rax b49: 76 15 jbe b60 b4b: 48 8b 05 86 14 20 00 mov 0x201486(%rip),%rax # 201fd8 <_ITM_deregisterTMCloneTable> b52: 48 85 c0 test %rax,%rax b55: 74 09 je b60 b57: 5d pop %rbp b58: ff e0 jmpq *%rax b5a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) b60: 5d pop %rbp b61: c3 retq b62: 0f 1f 40 00 nopl 0x0(%rax) b66: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1) b6d: 00 00 00 0000000000000b70 : register_tm_clones(): b70: 48 8d 3d e9 14 20 00 lea 0x2014e9(%rip),%rdi # 202060 b77: 48 8d 35 e2 14 20 00 lea 0x2014e2(%rip),%rsi # 202060 b7e: 55 push %rbp b7f: 48 29 fe sub %rdi,%rsi b82: 48 89 e5 mov %rsp,%rbp b85: 48 c1 fe 03 sar $0x3,%rsi b89: 48 89 f0 mov %rsi,%rax b8c: 48 c1 e8 3f shr $0x3f,%rax b90: 48 01 c6 add %rax,%rsi b93: 48 d1 fe sar %rsi b96: 74 18 je bb0 b98: 48 8b 05 51 14 20 00 mov 0x201451(%rip),%rax # 201ff0 <_ITM_registerTMCloneTable> b9f: 48 85 c0 test %rax,%rax ba2: 74 0c je bb0 ba4: 5d pop %rbp ba5: ff e0 jmpq *%rax ba7: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) bae: 00 00 bb0: 5d pop %rbp bb1: c3 retq bb2: 0f 1f 40 00 nopl 0x0(%rax) bb6: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1) bbd: 00 00 00 0000000000000bc0 <__do_global_dtors_aux>: __do_global_dtors_aux(): bc0: 80 3d b9 16 20 00 00 cmpb $0x0,0x2016b9(%rip) # 202280 <_edata> bc7: 75 27 jne bf0 <__do_global_dtors_aux+0x30> bc9: 48 83 3d 27 14 20 00 cmpq $0x0,0x201427(%rip) # 201ff8 <__cxa_finalize@GLIBC_2.2.5> bd0: 00 bd1: 55 push %rbp bd2: 48 89 e5 mov %rsp,%rbp bd5: 74 0c je be3 <__do_global_dtors_aux+0x23> bd7: 48 8b 3d 7a 14 20 00 mov 0x20147a(%rip),%rdi # 202058 <__dso_handle> bde: e8 3d ff ff ff callq b20 <.plt.got> be3: e8 48 ff ff ff callq b30 be8: 5d pop %rbp be9: c6 05 90 16 20 00 01 movb $0x1,0x201690(%rip) # 202280 <_edata> bf0: f3 c3 repz retq bf2: 0f 1f 40 00 nopl 0x0(%rax) bf6: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1) bfd: 00 00 00 0000000000000c00 : frame_dummy(): c00: 48 8d 3d e9 11 20 00 lea 0x2011e9(%rip),%rdi # 201df0 <__JCR_END__> c07: 48 83 3f 00 cmpq $0x0,(%rdi) c0b: 75 0b jne c18 c0d: e9 5e ff ff ff jmpq b70 c12: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) c18: 48 8b 05 c9 13 20 00 mov 0x2013c9(%rip),%rax # 201fe8 <_Jv_RegisterClasses> c1f: 48 85 c0 test %rax,%rax c22: 74 e9 je c0d c24: 55 push %rbp c25: 48 89 e5 mov %rsp,%rbp c28: ff d0 callq *%rax c2a: 5d pop %rbp c2b: e9 40 ff ff ff jmpq b70 0000000000000c30 <_>: _(): /home/rmurphy/linuxcnc-dev/src/hal/components/not.comp:7 pin in bit in; pin out bit out; function _ nofp; license "GPL"; ;; FUNCTION(_) { out = ! in; } c30: 48 8b 47 08 mov 0x8(%rdi),%rax c34: 48 8b 57 10 mov 0x10(%rdi),%rdx c38: 8a 00 mov (%rax),%al c3a: 83 f0 01 xor $0x1,%eax c3d: 88 02 mov %al,(%rdx) c3f: c3 retq 0000000000000c40 : export(): /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:41 #undef true #define true (1) #undef false #define false (0) static int export(char *prefix, long extra_arg) { c40: 41 54 push %r12 c42: 55 push %rbp c43: 48 89 fd mov %rdi,%rbp c46: 53 push %rbx /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:45 char buf[HAL_NAME_LEN + 1]; int r = 0; int sz = sizeof(struct __comp_state) + __comp_get_data_size(); struct __comp_state *inst = hal_malloc(sz); c47: bf 18 00 00 00 mov $0x18,%edi /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:41 static int export(char *prefix, long extra_arg) { c4c: 48 83 ec 30 sub $0x30,%rsp /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:45 struct __comp_state *inst = hal_malloc(sz); c50: e8 5b fe ff ff callq ab0 c55: 48 89 c3 mov %rax,%rbx /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:46 memset(inst, 0, sz); c58: b9 06 00 00 00 mov $0x6,%ecx c5d: 31 c0 xor %eax,%eax c5f: 48 89 df mov %rbx,%rdi /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:47 r = hal_pin_bit_newf(HAL_IN, &(inst->in), comp_id, c62: 8b 15 cc 16 20 00 mov 0x2016cc(%rip),%edx # 202334 c68: 48 8d 73 08 lea 0x8(%rbx),%rsi /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:46 memset(inst, 0, sz); c6c: f3 ab rep stos %eax,%es:(%rdi) /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:47 r = hal_pin_bit_newf(HAL_IN, &(inst->in), comp_id, c6e: 48 8d 0d c4 01 00 00 lea 0x1c4(%rip),%rcx # e39 <_fini+0x9> c75: 49 89 e8 mov %rbp,%r8 c78: bf 10 00 00 00 mov $0x10,%edi c7d: e8 4e fe ff ff callq ad0 /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:49 "%s.in", prefix); if(r != 0) return r; c82: 85 c0 test %eax,%eax c84: 0f 85 80 00 00 00 jne d0a /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:50 r = hal_pin_bit_newf(HAL_OUT, &(inst->out), comp_id, c8a: 8b 15 a4 16 20 00 mov 0x2016a4(%rip),%edx # 202334 c90: 48 8d 73 10 lea 0x10(%rbx),%rsi c94: 48 8d 0d a4 01 00 00 lea 0x1a4(%rip),%rcx # e3f <_fini+0xf> c9b: 49 89 e8 mov %rbp,%r8 c9e: bf 20 00 00 00 mov $0x20,%edi ca3: e8 28 fe ff ff callq ad0 /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:52 "%s.out", prefix); if(r != 0) return r; ca8: 85 c0 test %eax,%eax caa: 75 5e jne d0a /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:53 rtapi_snprintf(buf, sizeof(buf), "%s", prefix); cac: 48 8d 15 93 01 00 00 lea 0x193(%rip),%rdx # e46 <_fini+0x16> cb3: 48 89 e9 mov %rbp,%rcx cb6: be 30 00 00 00 mov $0x30,%esi cbb: 48 89 e7 mov %rsp,%rdi cbe: e8 1d fe ff ff callq ae0 /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:54 r = hal_export_funct(buf, (void(*)(void *inst, long))_, inst, 0, 0, comp_id); cc3: 44 8b 0d 6a 16 20 00 mov 0x20166a(%rip),%r9d # 202334 cca: 48 8d 35 5f ff ff ff lea -0xa1(%rip),%rsi # c30 <_> cd1: 45 31 c0 xor %r8d,%r8d cd4: 31 c9 xor %ecx,%ecx cd6: 48 89 da mov %rbx,%rdx cd9: 48 89 e7 mov %rsp,%rdi cdc: e8 0f fe ff ff callq af0 /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:55 if(r != 0) return r; ce1: 85 c0 test %eax,%eax ce3: 75 25 jne d0a /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:56 if(__comp_last_inst) __comp_last_inst->_next = inst; ce5: 48 8d 15 34 16 20 00 lea 0x201634(%rip),%rdx # 202320 <__comp_last_inst> cec: 48 8b 0a mov (%rdx),%rcx cef: 48 85 c9 test %rcx,%rcx cf2: 74 03 je cf7 cf4: 48 89 19 mov %rbx,(%rcx) /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:57 __comp_last_inst = inst; cf7: 48 89 1a mov %rbx,(%rdx) /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:58 if(!__comp_first_inst) __comp_first_inst = inst; cfa: 48 8d 15 27 16 20 00 lea 0x201627(%rip),%rdx # 202328 <__comp_first_inst> d01: 48 83 3a 00 cmpq $0x0,(%rdx) d05: 75 03 jne d0a d07: 48 89 1a mov %rbx,(%rdx) /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:60 return 0; } d0a: 48 83 c4 30 add $0x30,%rsp d0e: 5b pop %rbx d0f: 5d pop %rbp d10: 41 5c pop %r12 d12: c3 retq 0000000000000d13 : rtapi_app_main(): /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:65 static int default_count=1, count=0; char *names[16] = {0,}; RTAPI_MP_INT(count, "number of not"); RTAPI_MP_ARRAY_STRING(names, 16, "names of not"); int rtapi_app_main(void) { d13: 41 54 push %r12 d15: 55 push %rbp /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:68 int r = 0; int i; comp_id = hal_init("not"); d16: 48 8d 3d 99 01 00 00 lea 0x199(%rip),%rdi # eb6 <_fini+0x86> /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:65 int rtapi_app_main(void) { d1d: 53 push %rbx d1e: 48 83 ec 30 sub $0x30,%rsp /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:68 comp_id = hal_init("not"); d22: e8 99 fd ff ff callq ac0 /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:69 if(comp_id < 0) return comp_id; d27: 85 c0 test %eax,%eax /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:68 comp_id = hal_init("not"); d29: 89 c3 mov %eax,%ebx d2b: 89 05 03 16 20 00 mov %eax,0x201603(%rip) # 202334 /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:69 if(comp_id < 0) return comp_id; d31: 0f 88 e1 00 00 00 js e18 /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:70 if(count && names[0]) { d37: 83 3d f2 15 20 00 00 cmpl $0x0,0x2015f2(%rip) # 202330 d3e: 4c 8d 25 5b 15 20 00 lea 0x20155b(%rip),%r12 # 2022a0 d45: 74 24 je d6b /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:70 (discriminator 1) d47: 49 83 3c 24 00 cmpq $0x0,(%r12) d4c: 74 2e je d7c /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:71 rtapi_print_msg(RTAPI_MSG_ERR,"count= and names= are mutually exclusive\n"); d4e: 48 8d 35 f4 00 00 00 lea 0xf4(%rip),%rsi # e49 <_fini+0x19> d55: bf 01 00 00 00 mov $0x1,%edi d5a: 31 c0 xor %eax,%eax /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:72 return -EINVAL; d5c: bb ea ff ff ff mov $0xffffffea,%ebx /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:71 rtapi_print_msg(RTAPI_MSG_ERR,"count= and names= are mutually exclusive\n"); d61: e8 aa fd ff ff callq b10 /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:72 return -EINVAL; d66: e9 ad 00 00 00 jmpq e18 /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:74 (discriminator 1) } if(!count && !names[0]) count = default_count; d6b: 49 83 3c 24 00 cmpq $0x0,(%r12) d70: 75 0a jne d7c /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:74 (discriminator 2) d72: c7 05 b4 15 20 00 01 movl $0x1,0x2015b4(%rip) # 202330 d79: 00 00 00 /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:75 if(count) { d7c: 83 3d ad 15 20 00 00 cmpl $0x0,0x2015ad(%rip) # 202330 d83: 74 37 je dbc d85: 31 ed xor %ebp,%ebp /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:78 (discriminator 1) for(i=0; i d90: 7d 79 jge e0b /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:78 rtapi_snprintf(buf, sizeof(buf), "not.%d", i); d92: 48 8d 15 da 00 00 00 lea 0xda(%rip),%rdx # e73 <_fini+0x43> d99: 89 e9 mov %ebp,%ecx d9b: be 30 00 00 00 mov $0x30,%esi da0: 4c 89 e7 mov %r12,%rdi da3: 31 c0 xor %eax,%eax da5: e8 36 fd ff ff callq ae0 /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:79 r = export(buf, i); daa: 4c 89 e7 mov %r12,%rdi dad: e8 8e fe ff ff callq c40 /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:80 if(r != 0) break; db2: 85 c0 test %eax,%eax /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:79 r = export(buf, i); db4: 89 c3 mov %eax,%ebx /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:80 if(r != 0) break; db6: 75 46 jne dfe /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:76 for(i=0; i dbc: 31 ed xor %ebp,%ebp /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:84 (discriminator 3) } } else { int max_names = sizeof(names)/sizeof(names[0]); for(i=0; (i < max_names) && names[i]; i++) { dbe: 49 8b 3c ec mov (%r12,%rbp,8),%rdi dc2: 48 85 ff test %rdi,%rdi dc5: 74 44 je e0b /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:85 if (strlen(names[i]) < 1) { dc7: 80 3f 00 cmpb $0x0,(%rdi) dca: 75 1c jne de8 /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:86 rtapi_print_msg(RTAPI_MSG_ERR, "names[%d] is invalid (empty string)\n", i); dcc: 48 8d 35 a7 00 00 00 lea 0xa7(%rip),%rsi # e7a <_fini+0x4a> dd3: 89 ea mov %ebp,%edx dd5: bf 01 00 00 00 mov $0x1,%edi dda: 31 c0 xor %eax,%eax /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:87 r = -EINVAL; ddc: bb ea ff ff ff mov $0xffffffea,%ebx /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:86 rtapi_print_msg(RTAPI_MSG_ERR, "names[%d] is invalid (empty string)\n", i); de1: e8 2a fd ff ff callq b10 /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:88 break; de6: eb 16 jmp dfe /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:90 } r = export(names[i], i); de8: e8 53 fe ff ff callq c40 /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:91 if(r != 0) break; ded: 85 c0 test %eax,%eax /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:90 r = export(names[i], i); def: 89 c3 mov %eax,%ebx /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:91 if(r != 0) break; df1: 75 0b jne dfe df3: 48 ff c5 inc %rbp /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:84 (discriminator 2) for(i=0; (i < max_names) && names[i]; i++) { df6: 48 83 fd 10 cmp $0x10,%rbp dfa: 75 c2 jne dbe dfc: eb 0d jmp e0b /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:95 } } if(r) { hal_exit(comp_id); dfe: 8b 3d 30 15 20 00 mov 0x201530(%rip),%edi # 202334 e04: e8 97 fc ff ff callq aa0 e09: eb 0d jmp e18 /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:97 } else { hal_ready(comp_id); e0b: 8b 3d 23 15 20 00 mov 0x201523(%rip),%edi # 202334 e11: 31 db xor %ebx,%ebx e13: e8 e8 fc ff ff callq b00 /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:100 } return r; } e18: 48 83 c4 30 add $0x30,%rsp e1c: 89 d8 mov %ebx,%eax e1e: 5b pop %rbx e1f: 5d pop %rbp e20: 41 5c pop %r12 e22: c3 retq 0000000000000e23 : rtapi_app_exit(): /home/rmurphy/linuxcnc-dev/src/objects/hal/components/not.c:103 void rtapi_app_exit(void) { hal_exit(comp_id); e23: 8b 3d 0b 15 20 00 mov 0x20150b(%rip),%edi # 202334 e29: e9 72 fc ff ff jmpq aa0 Disassembly of section .fini: 0000000000000e30 <_fini>: _fini(): e30: 48 83 ec 08 sub $0x8,%rsp e34: 48 83 c4 08 add $0x8,%rsp e38: c3 retq