Add support for RIP relative addresses on x86_64.
Visual studio uses rip-relative addressing (rra) extensively in 64 bit binaries. ParseRel32RelocsFromSection does not find these addresses, which causes courgette to miss a lot of rva pointers, and thus missing a lot of compresssion opportunities. This patch makes the ParseRel32RelocsFromSection find rip relative call/jmp/lea. It also finds mov's that load from memory using rra's. Based on CL by niels.werensteijn.teamspeak@gmail.com in crrev.com/212563003 This change gives a noticeable improvement on 64-bit binaries. Against test binaries (64-bit chrome.dll 40.0.2214.115->43.0.2317.0) the patch sizes were: Uncompressed: before: 10,948,152 after: 9,948,442 (9.1% reduction) Compressed (7z ultra): before: 6,084,670 after: 5,581,502 (8.3% reduction) BUG=459064 TEST=courgette_unittests Review URL: https://codereview.chromium.org/878043002 Cr-Commit-Position: refs/heads/master@{#321524}
Showing
Please register or sign in to comment