== This week ==
* More ARM testing of binutils support for STT_GNU_IFUNC.
* Implemented the GLIBC support for STT_GNU_IFUNC. Simple ARM testcases seem to run correctly.
* Ran the GLIBC testsuite -- which includes some ifunc coverage -- but haven't analysed the results yet.
* Started looking at Thumb for STT_GNU_IFUNC. The problem is that BFD internally represents Thumb symbols with an even value and a special st_type (STT_ARM_TFUNC); this is also the old, pre-EABI external representation. We need something different for STT_GNU_IFUNC.
* Tried making BFD represent Thumb symbols as odd-value functions internally. I got it to "work", but I wasn't really happy with the results.
* Looked at alternatives, and in the end decided that it would be better to have extra internal-only information in Elf_Internal_Sym. This "works" too, and seems cleaner to me. Sent an RFC upstream:
http://sourceware.org/ml/binutils/2010-11/msg00475.html
* Started writing some Thumb tests for STT_GNU_IFUNC.
* Investigated #618684. Turned out to be something that Bernd had already fixed upstream. Tested a backport.
== Next week ==
* More IFUNC tests (ARM and Thumb, EGLIBC and binutils).
Richard
On Fri, Nov 26, 2010 at 05:57:57PM +0000, Richard Sandiford wrote:
More ARM testing of binutils support for STT_GNU_IFUNC.
Implemented the GLIBC support for STT_GNU_IFUNC. Simple ARM testcases seem to run correctly.
Coincidentally I was reading about this exact feature at
http://www.airs.com/blog/page/4
In the interest of self-education, could you tell me a little bit about what GLIBC support for ifunc entails -- is it basically infrastructure to allow libc functions to be defined as ifuncs, now that the assembler supports it?
Christian Robottom Reis kiko@linaro.org writes:
On Fri, Nov 26, 2010 at 05:57:57PM +0000, Richard Sandiford wrote:
More ARM testing of binutils support for STT_GNU_IFUNC.
Implemented the GLIBC support for STT_GNU_IFUNC. Simple ARM testcases seem to run correctly.
Coincidentally I was reading about this exact feature at
http://www.airs.com/blog/page/4
In the interest of self-education, could you tell me a little bit about what GLIBC support for ifunc entails -- is it basically infrastructure to allow libc functions to be defined as ifuncs, now that the assembler supports it?
Fortunately, that infrastructure was part of the initial x86/x86_64 effort, and it was a once-only thing. You can now use the appropriate GCC or GAS syntax to define IFUNCs for any target.
However, IFUNC support requires each target to define a new relocation (R_*_IRELATIVE). Each target's dynamic linker code needs to handle that new relocation and also the STT_GNU_IFUNC symbol type.
It's basically boiler-plate, to be honest. The interesting target-dependent work is in BFD.
Richard
linaro-toolchain@lists.linaro.org