mirror of
https://github.com/RGBCube/serenity
synced 2026-01-13 19:21:00 +00:00
Optimizations: - Make sure `DT_SYMTAB` is a string view literal, instead of string. - DynamicObject::HashSection::lookup_sysv_symbol should be using raw_name() from symbol comparison to avoid needlessly calling `strlen`, when the StrinView::operator= walks the cstring without calling `strlen` first. - DynamicObject::HashSection::lookup_gnu_symbol shouldn't create a symbol unless we know the hashes match first. In order to test these changes I enabled Undefined behavior sanitizer which creates a huge amount of relocations, and then ran the browser with the help argument 100 times. The browser is a fairly big app with a few different libraries being loaded, so it seemed liked a good target. Command: `time -n 100 br --help` Before: ``` Timing report: ============== Command: br --help Average time: 3897.679931 ms Excluding first: 3901.242431 ms ``` After: ``` Timing report: ============== Command: br --help Average time: 3612.860107 ms Excluding first: 3613.54541 ms ``` |
||
|---|---|---|
| .. | ||
| Arch | ||
| AuxiliaryVector.h | ||
| CMakeLists.txt | ||
| Core.h | ||
| DynamicLinker.cpp | ||
| DynamicLinker.h | ||
| DynamicLoader.cpp | ||
| DynamicLoader.h | ||
| DynamicObject.cpp | ||
| DynamicObject.h | ||
| Hashes.h | ||
| Image.cpp | ||
| Image.h | ||
| Relocation.cpp | ||
| Relocation.h | ||
| Validation.cpp | ||
| Validation.h | ||