ELF Binary Comparison
Overview
Binaries ↩
old: ../../tests/x86_64/libelf_diff_test2_debug_old.a (debug)
new: ../../tests/x86_64/libelf_diff_test2_debug_new.a (debug)
Statistics ↩
Symbol Classes
|
Symbol Selection
|
Symbols ↩
Persisting Symbols ↩
Symbol | Type | Old Size/bytes | New Size/bytes | Delta/bytes |
|---|---|---|---|---|
| implementationChanged(int) ⓘ | T | 98 | 106 | 8 |
| g() ⓘ | T | 11 | 11 | 0 |
| fIStay(double) ⓘ | T | 30 | 30 | 0 |
| cIStayButDiffer | r | 4 | 4 | 0 |
| cIStay | r | 4 | 4 | 0 |
| Test::smvIStayButDiffer | D | 4 | 4 | 0 |
| Test::smvIStay | D | 4 | 4 | 0 |
| g()::lsvIStayButDiffer | d | 4 | 4 | 0 |
| g()::lsvIStay | d | 4 | 4 | 0 |
| vIStay | D | 4 | 4 | 0 |
| vIStayButDiffer | D | 4 | 4 | 0 |
Columns
| Symbol | The symbol name (possibly mangled) |
| Type | The symbol type (see the documentation of binutils tool nm for more information) |
| Old Size | The old symbol size either in RAM or program memory |
| New Size | The new symbol size either in RAM or program memory |
| Delta | The change to symbol size |
Disappeared Symbols ↩
Symbol | Type | Size/bytes |
|---|---|---|
| fIStayButDiffer(float) ⓘ | T | 20 |
| fIAmGone(int) ⓘ | T | 16 |
| cIAmGone | r | 4 |
| Test::smvIAmGone | D | 4 |
| g()::lsvIAmGone | d | 4 |
| vIAmGone | D | 4 |
Columns
| Symbol | The symbol name (possibly demangled) |
| Type | The symbol type (see the documentation of binutils tool nm for more information) |
| Size | The symbol size either in RAM or program memory |
New Symbols ↩
Symbol | Type | Size/bytes |
|---|---|---|
| fIAmNew(short) ⓘ | T | 20 |
| fIStayButDiffer(char) ⓘ | T | 19 |
| cIAmNew | r | 4 |
| Test::smvIAmNew | D | 4 |
| g()::lsvIAmNew | d | 4 |
| vIAmNew | D | 4 |
Columns
| Symbol | The symbol name (possibly demangled) |
| Type | The symbol type (see the documentation of binutils tool nm for more information) |
| Size | The symbol size either in RAM or program memory |
Similar Symbols ↩
Id | Symbols | Types | Sizes/bytes | Deltas/bytes | Sig. Sim./% | Instr. Sim./% |
|---|---|---|---|---|---|---|
| 0 ⓘ |
fIStayButDiffer(float)
fIStayButDiffer(char) |
T
T |
20
19 |
-1 | 95.0 | 84.3 |
| 1 |
fIStayButDiffer(float)
cIStayButDiffer |
T
r |
20
4 |
-16 | 90.0 | 0.0 |
| 2 |
Test::smvIAmGone
Test::smvIAmNew |
D
D |
4
4 |
0 | 80.0 | 100.0 |
| 3 |
fIStayButDiffer(float)
vIStayButDiffer |
T
D |
20
4 |
-16 | 80.0 | 0.0 |
| 4 |
g()::lsvIAmGone
g()::lsvIAmNew |
d
d |
4
4 |
0 | 77.8 | 100.0 |
| 5 |
fIStayButDiffer(float)
g()::lsvIStayButDiffer |
T
d |
20
4 |
-16 | 73.9 | 0.0 |
| 6 |
fIStayButDiffer(float)
Test::smvIStayButDiffer |
T
D |
20
4 |
-16 | 70.8 | 0.0 |
| 7 |
cIAmGone
cIAmNew |
r
r |
4
4 |
0 | 69.6 | 100.0 |
| 8 |
Test::smvIAmGone
Test::smvIStay |
D
D |
4
4 |
0 | 66.7 | 100.0 |
| 9 |
vIAmGone
vIAmNew |
D
D |
4
4 |
0 | 66.7 | 100.0 |
| 10 |
g()::lsvIAmGone
g()::lsvIStay |
d
d |
4
4 |
0 | 62.9 | 100.0 |
| 11 |
Test::smvIAmGone
Test::smvIStayButDiffer |
D
D |
4
4 |
0 | 61.2 | 100.0 |
| 12 ⓘ |
fIAmGone(int)
fIAmNew(short) |
T
T |
16
20 |
4 | 60.9 | 89.7 |
| 13 |
g()::lsvIAmGone
g()::lsvIStayButDiffer |
d
d |
4
4 |
0 | 57.8 | 100.0 |
| 14 |
cIAmGone
fIAmNew(short) |
r
T |
4
20 |
16 | 52.2 | 0.0 |
| 15 |
fIAmGone(int)
cIAmNew |
T
r |
16
4 |
-12 | 52.2 | 0.0 |
Columns
| ID | Integer id assigned to each symbol pair |
| Symbols | The two similar symbol names (possibly mangled) |
| Types | The symbol types (see the documentation of binutils tool nm for more information) |
| Sizes | The sizes of the symbols either in RAM or program memory |
| Deltas | The difference in symbol size |
| Sig. Sim. | Lexicographic symbol signature similarity |
| Instr. Sim. | Instruction similarity of the symbols' assembly code |
Migrated Symbols ↩
Symbol | Old Source Location | New Source Location |
|---|---|---|
| g() ⓘ | old/test2.cpp:32(/home/flo/Documents/elf_diff/tests/src/old/test2.cpp) | new/test2.cpp:32(/home/flo/Documents/elf_diff/tests/src/new/test2.cpp) |
| fIStay(double) ⓘ | old/test2.cpp:21(/home/flo/Documents/elf_diff/tests/src/old/test2.cpp) | new/test2.cpp:20(/home/flo/Documents/elf_diff/tests/src/new/test2.cpp) |
| cIStayButDiffer | old/test2.cpp:30(/home/flo/Documents/elf_diff/tests/src/old/test2.cpp) | new/test2.cpp:29(/home/flo/Documents/elf_diff/tests/src/new/test2.cpp) |
| cIStay | old/test2.cpp:29(/home/flo/Documents/elf_diff/tests/src/old/test2.cpp) | new/test2.cpp:28(/home/flo/Documents/elf_diff/tests/src/new/test2.cpp) |
| Test::smvIStayButDiffer | old/test2.cpp:62(/home/flo/Documents/elf_diff/tests/src/old/test2.cpp) | new/test2.cpp:61(/home/flo/Documents/elf_diff/tests/src/new/test2.cpp) |
| Test::smvIStay | old/test2.cpp:61(/home/flo/Documents/elf_diff/tests/src/old/test2.cpp) | new/test2.cpp:60(/home/flo/Documents/elf_diff/tests/src/new/test2.cpp) |
| g()::lsvIStayButDiffer | old/test2.cpp:35(/home/flo/Documents/elf_diff/tests/src/old/test2.cpp) | new/test2.cpp:34(/home/flo/Documents/elf_diff/tests/src/new/test2.cpp) |
| g()::lsvIStay | old/test2.cpp:34(/home/flo/Documents/elf_diff/tests/src/old/test2.cpp) | new/test2.cpp:33(/home/flo/Documents/elf_diff/tests/src/new/test2.cpp) |
| vIStay | old/test2.cpp:25(/home/flo/Documents/elf_diff/tests/src/old/test2.cpp) | new/test2.cpp:24(/home/flo/Documents/elf_diff/tests/src/new/test2.cpp) |
| vIStayButDiffer | old/test2.cpp:26(/home/flo/Documents/elf_diff/tests/src/old/test2.cpp) | new/test2.cpp:25(/home/flo/Documents/elf_diff/tests/src/new/test2.cpp) |
| implementationChanged(int) ⓘ | old/test2.cpp:68(/home/flo/Documents/elf_diff/tests/src/old/test2.cpp) | new/test2.cpp:68(/home/flo/Documents/elf_diff/tests/src/new/test2.cpp) |
Please Note: Use the settings source_prefix, old_source_prefix or new_source_prefix to eliminate false positives by removing path prefix from source file paths.
Columns
| Symbol | The symbol name (possibly mangled) |
| Old Source Location | The old source file location [file:line] |
| New Source Location | The new source file location [file:line] |
Symbol Details ↩
Persisting Symbols ↩
Persisting symbol g() : old size: 11 bytes, new size: 11 bytes, delta: 0 bytes
Old source: old/test2.cpp:32(/home/flo/Documents/elf_diff/tests/src/old/test2.cpp)
New source: new/test2.cpp:32(/home/flo/Documents/elf_diff/tests/src/new/test2.cpp)
Persisting symbol implementationChanged(int) : old size: 98 bytes, new size: 106 bytes, delta: 8 bytes
Old source: old/test2.cpp:68(/home/flo/Documents/elf_diff/tests/src/old/test2.cpp)
New source: new/test2.cpp:68(/home/flo/Documents/elf_diff/tests/src/new/test2.cpp)
| Old | New | ||||
|---|---|---|---|---|---|
| f | 1 | endbr64 | f | 1 | endbr64 |
| 2 | push %rbp | 2 | push %rbp | ||
| 3 | mov %rsp,%rbp | 3 | mov %rsp,%rbp | ||
| 4 | mov %edi,-0x14(%rbp) | 4 | mov %edi,-0x14(%rbp) | ||
| 5 | mov -0x14(%rbp),%eax | 5 | mov -0x14(%rbp),%eax | ||
| n | n | 6 | lea 0x1(%rax),%edx | ||
| 7 | mov %edx,%eax | ||||
| 6 | add %eax,%eax | 8 | add %eax,%eax | ||
| n | 7 | add $0x3,%eax | n | 9 | add %edx,%eax |
| 8 | mov %eax,-0x8(%rbp) | 10 | mov %eax,-0x8(%rbp) | ||
| 9 | movl $0x0,-0x4(%rbp) | 11 | movl $0x0,-0x4(%rbp) | ||
| 10 | mov -0x4(%rbp),%eax | 12 | mov -0x4(%rbp),%eax | ||
| 11 | cmp -0x14(%rbp),%eax | 13 | cmp -0x14(%rbp),%eax | ||
| n | 12 | jge aa <_Z21implementationChangedi+0x5d> | n | 14 | jge b1 <_Z21implementationChangedi+0x61> |
| 13 | mov -0x8(%rbp),%edx | 15 | mov -0x8(%rbp),%eax | ||
| 14 | mov -0x4(%rbp),%eax | 16 | sub -0x4(%rbp),%eax | ||
| 15 | add %edx,%eax | ||||
| 16 | movslq %eax,%rdx | 17 | movslq %eax,%rdx | ||
| n | 17 | imul $0x78787879,%rdx,%rdx | n | 18 | imul $0xffffffff88888889,%rdx,%rdx |
| 18 | shr $0x20,%rdx | 19 | shr $0x20,%rdx | ||
| n | n | 20 | add %eax,%edx | ||
| 19 | sar $0x3,%edx | 21 | sar $0x3,%edx | ||
| 20 | mov %eax,%ecx | 22 | mov %eax,%ecx | ||
| 21 | sar $0x1f,%ecx | 23 | sar $0x1f,%ecx | ||
| 22 | sub %ecx,%edx | 24 | sub %ecx,%edx | ||
| 23 | mov %edx,-0x8(%rbp) | 25 | mov %edx,-0x8(%rbp) | ||
| 24 | mov -0x8(%rbp),%ecx | 26 | mov -0x8(%rbp),%ecx | ||
| 25 | mov %ecx,%edx | 27 | mov %ecx,%edx | ||
| 26 | shl $0x4,%edx | 28 | shl $0x4,%edx | ||
| n | 27 | add %ecx,%edx | n | 29 | sub %ecx,%edx |
| 28 | sub %edx,%eax | 30 | sub %edx,%eax | ||
| 29 | mov %eax,-0x8(%rbp) | 31 | mov %eax,-0x8(%rbp) | ||
| 30 | addl $0x1,-0x4(%rbp) | 32 | addl $0x1,-0x4(%rbp) | ||
| t | 31 | jmp 6a <_Z21implementationChangedi+0x1d> | t | 33 | jmp 71 <_Z21implementationChangedi+0x21> |
| 34 | addl $0x1,-0x8(%rbp) | ||||
| 32 | mov -0x8(%rbp),%eax | 35 | mov -0x8(%rbp),%eax | ||
| 33 | pop %rbp | 36 | pop %rbp | ||
| 34 | ret | 37 | ret | ||
| 35 | 38 | ||||
Persisting symbol fIStay(double) : old size: 30 bytes, new size: 30 bytes, delta: 0 bytes
Old source: old/test2.cpp:21(/home/flo/Documents/elf_diff/tests/src/old/test2.cpp)
New source: new/test2.cpp:20(/home/flo/Documents/elf_diff/tests/src/new/test2.cpp)
Disappeared Symbols ↩
Disappeared symbol fIStayButDiffer(float) : size: 20 bytes
Source: old/test2.cpp:22(/home/flo/Documents/elf_diff/tests/src/old/test2.cpp)
endbr64 push %rbp mov %rsp,%rbp movss %xmm0,-0x4(%rbp) movss -0x4(%rbp),%xmm0 pop %rbp ret
Disappeared symbol fIAmGone(int) : size: 16 bytes
Source: old/test2.cpp:20(/home/flo/Documents/elf_diff/tests/src/old/test2.cpp)
endbr64 push %rbp mov %rsp,%rbp mov %edi,-0x4(%rbp) mov -0x4(%rbp),%eax pop %rbp ret
New Symbols ↩
Appeared symbol fIStayButDiffer(char) : size: 19 bytes
Source: new/test2.cpp:21(/home/flo/Documents/elf_diff/tests/src/new/test2.cpp)
endbr64 push %rbp mov %rsp,%rbp mov %edi,%eax mov %al,-0x4(%rbp) movzbl -0x4(%rbp),%eax pop %rbp ret
Appeared symbol fIAmNew(short) : size: 20 bytes
Source: new/test2.cpp:22(/home/flo/Documents/elf_diff/tests/src/new/test2.cpp)
endbr64 push %rbp mov %rsp,%rbp mov %edi,%eax mov %ax,-0x4(%rbp) movzwl -0x4(%rbp),%eax pop %rbp ret
Similar Symbols ↩
Similar pair 0 : old size: 20 bytes, new size: 19 bytes, delta: -1 bytes, sig. sim.: 95.0 %, instr. sim.: 84.3 %
Old: fIStayButDiffer(float) [old/test2.cpp:22(/home/flo/Documents/elf_diff/tests/src/old/test2.cpp)]
New: fIStayButDiffer(char) [new/test2.cpp:21(/home/flo/Documents/elf_diff/tests/src/new/test2.cpp)]
| Old | New | ||||
|---|---|---|---|---|---|
| f | 1 | endbr64 | f | 1 | endbr64 |
| 2 | push %rbp | 2 | push %rbp | ||
| 3 | mov %rsp,%rbp | 3 | mov %rsp,%rbp | ||
| t | t | 4 | mov %edi,%eax | ||
| 4 | movss %xmm0,-0x4(%rbp) | 5 | mov %al,-0x4(%rbp) | ||
| 5 | movss -0x4(%rbp),%xmm0 | 6 | movzbl -0x4(%rbp),%eax | ||
| 6 | pop %rbp | 7 | pop %rbp | ||
| 7 | ret | 8 | ret | ||
| 8 | 9 | ||||
Similar pair 12 : old size: 16 bytes, new size: 20 bytes, delta: 4 bytes, sig. sim.: 60.9 %, instr. sim.: 89.7 %
Old: fIAmGone(int) [old/test2.cpp:20(/home/flo/Documents/elf_diff/tests/src/old/test2.cpp)]
New: fIAmNew(short) [new/test2.cpp:22(/home/flo/Documents/elf_diff/tests/src/new/test2.cpp)]
| Old | New | ||||
|---|---|---|---|---|---|
| f | 1 | endbr64 | f | 1 | endbr64 |
| 2 | push %rbp | 2 | push %rbp | ||
| 3 | mov %rsp,%rbp | 3 | mov %rsp,%rbp | ||
| t | t | 4 | mov %edi,%eax | ||
| 4 | mov %edi,-0x4(%rbp) | 5 | mov %ax,-0x4(%rbp) | ||
| 5 | mov -0x4(%rbp),%eax | 6 | movzwl -0x4(%rbp),%eax | ||
| 6 | pop %rbp | 7 | pop %rbp | ||
| 7 | ret | 8 | ret | ||
| 8 | 9 | ||||
Migrated Symbols ↩
Migrated symbol g() : old size: 11 bytes, new size: 11 bytes, delta: 0 bytes
Old source: old/test2.cpp:32(/home/flo/Documents/elf_diff/tests/src/old/test2.cpp)
New source: new/test2.cpp:32(/home/flo/Documents/elf_diff/tests/src/new/test2.cpp)
Migrated symbol implementationChanged(int) : old size: 98 bytes, new size: 106 bytes, delta: 8 bytes
Old source: old/test2.cpp:68(/home/flo/Documents/elf_diff/tests/src/old/test2.cpp)
New source: new/test2.cpp:68(/home/flo/Documents/elf_diff/tests/src/new/test2.cpp)
Migrated symbol fIStay(double) : old size: 30 bytes, new size: 30 bytes, delta: 0 bytes
Old source: old/test2.cpp:21(/home/flo/Documents/elf_diff/tests/src/old/test2.cpp)
New source: new/test2.cpp:20(/home/flo/Documents/elf_diff/tests/src/new/test2.cpp)