diff options
author | Ulrich Drepper <drepper@redhat.com> | 2009-06-01 11:49:05 -0700 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2009-06-01 11:49:05 -0700 |
commit | fd96f062085be71f4e2c07c98a3002bd55793b6e (patch) | |
tree | 9dd63d31fbd1b922fa612a591b4124b27b417c83 /sysdeps/i386/dl-machine.h | |
parent | 21e66bc528edcbe18d434eb33a601e0f796904c9 (diff) | |
download | glibc-fd96f062085be71f4e2c07c98a3002bd55793b6e.tar.gz glibc-fd96f062085be71f4e2c07c98a3002bd55793b6e.tar.xz glibc-fd96f062085be71f4e2c07c98a3002bd55793b6e.zip |
Small optimization of STT_GNU_IFUNC handling.
The test to call the indirect function now includes a subtest to checked whether the symbol is defined. When coming to that point this is almost always the case. The test for STT_GNU_IFUNC on the other hand rarely is true. Move it to the front means we don't have to perform the second test unless really necessary.
Diffstat (limited to 'sysdeps/i386/dl-machine.h')
-rw-r--r-- | sysdeps/i386/dl-machine.h | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/sysdeps/i386/dl-machine.h b/sysdeps/i386/dl-machine.h index efa929e57f..a093d2b151 100644 --- a/sysdeps/i386/dl-machine.h +++ b/sysdeps/i386/dl-machine.h @@ -345,9 +345,9 @@ elf_machine_rel (struct link_map *map, const Elf32_Rel *reloc, Elf32_Addr value = sym_map == NULL ? 0 : sym_map->l_addr + sym->st_value; if (sym != NULL - && __builtin_expect (sym->st_shndx != SHN_UNDEF, 1) && __builtin_expect (ELFW(ST_TYPE) (sym->st_info) == STT_GNU_IFUNC, - 0)) + 0) + && __builtin_expect (sym->st_shndx != SHN_UNDEF, 1)) value = ((Elf32_Addr (*) (void)) value) (); switch (r_type) |