Does the LD --wrap feature work for library internal references?
Sebastian Huber
sebastian.huber@embedded-brains.de
Fri Jan 4 07:03:00 GMT 2019
Hello Nick,
On 03/01/2019 16:49, Nick Clifton wrote:
> Hi Sebastian,
>
>> For another it doesn't work:
>>
>> /build/rtems/5/bin/powerpc-rtems5-gcc -Wl,--wrap=_bsd_ether_output -qrtems -B/build/rtems/5/powerpc-
>> It links, I would have expected an undefined reference to __wrap__bsd_ether_output. In the executable I find this:
>>
>> nm media01.exe | grep ether_output
>> 0001b640 T _bsd_ether_output
>>
>> It is not clear to me why it works with one function and not with another.
> Is it possible that the _bsd_ether_output function has been inlined into
> all the places where it is used ?
>
> The wrap feature of the linker works by replacing symbols, but this is
> only effective if there are undefined references to the symbols being
> replaced. If all of the references have already been resolved (or just
> don't exist, eg because of inlining) then wrapping will have no effect.
It is not unlined, but its only reference is done via a function pointer
assignment here:
https://git.rtems.org/rtems-libbsd/tree/freebsd/sys/net/if_ethersubr.c#n950
[...]|
/*||
* Perform common duties while attaching to interface list ||||
*/ |
|void ether_ifattach(struct ifnet *ifp, const u_int8_t *lla) { int i;
struct ifaddr *ifa; struct sockaddr_dl *sdl; ifp->if_addrlen =
ETHER_ADDR_LEN; ifp->if_hdrlen = ETHER_HDR_LEN; if_attach(ifp);
ifp->if_mtu = ETHERMTU; ifp->if_output = ether_output; ifp->if_input =
ether_input; |[...]
Does the wrap feature work for function pointer assignments?
--
Sebastian Huber, embedded brains GmbH
Address : Dornierstr. 4, D-82178 Puchheim, Germany
Phone : +49 89 189 47 41-16
Fax : +49 89 189 47 41-09
E-Mail : sebastian.huber@embedded-brains.de
PGP : Public key available on request.
Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.
More information about the Binutils
mailing list