Re: Rename symbol at link time

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 6 June 2012 10:12, DamienDaG wrote:
>
>
>
> Václav Zeman wrote:
>>
>> On 6 June 2012 09:27, DamienDaG wrote:
>>>
>>> Hi
>>>
>>> I'm trying to build a very simple project composed of one source file and
>>> a
>>> linker script :
>>>
>>> file f1.c :
>>> #include <stdio.h>
>>>
>>> extern void fct1_wrongname();
>>>
>>> void fct9()
>>> {
>>>        printf("I'm fct9\n");
>>> }
>>>
>>> int main( int argc, char** argv)
>>> {
>>>        fct1_wrongname();
>>>        return 0;
>>> }
>>> end of file f1.c
>>>
>>> This file is compiled with command :
>>> gcc -O0 -xc -g -Wall -c f1.c -of1.o
>>> then build with :
>>> ld -T'Link.cmd' -O0 -Map out.map -o rename.exe f1.o
>>>
>>> file Link.cmd contains :
>>>
>>> fct1_wrongname = fct9 ;
>>>
>>> end of file Link.cmd
>>>
>>>
>>> Function fct1_wrongname doesn't exist, and I want to replace the call of
>>> this function by a call of fct9.
>>>
>>> I always get this error message :
>>> Link.cmd:4: undefined symbol `fct9' referenced in expression
>>>
>>> I need to use a linker script (here Link.cmd) to apply this to a larger
>>> project, and I can't use symbol definition (i.e. -D"fct1_wrongname=fct9")
>>> because there are to many symbols.
>>> I've been looking for a solution for a long time, but I couldn't find
>>> anything.
>> Is it possible that the linker script should contain leading
>> underscores for the symbols? E.g., _fct1_wrongname=_fct9? Take a look
>> at nm -AB output for the f1.o file.
>>
>> --
>> VZ
>>
>>
>
> I tried many combinations with/without leanding underscores :
> with
> _fct1_wrongname = fct9 ;
> I get
> Link.cmd:4: undefined symbol `fct9' referenced in expression
>
> with
> _fct1_wrongname = _fct9 ;
> and
> fct1_wrongname = _fct9 ;
> I get
> ld: BFD 2.13 assertion fail ../../src/bfd/stabs.c:783
>
> nm -AB f1.o outputs :
> $ nm -AB f1.o
> f1.o:00000000 b .bss
> f1.o:00000000 d .data
> f1.o:00000000 N .stab
> f1.o:00000000 N .stabstr
> f1.o:00000000 t .text
> f1.o:         U ___main
> f1.o:         U __alloca
> f1.o:         U _fct1_wrongname
> f1.o:         U _fct2
> f1.o:00000012 T _fct9
> f1.o:0000002a T _main
> f1.o:         U _printf
I think I do not entirely understand your use case but wouldn't using
the alias attribute (see
http://gcc.gnu.org/onlinedocs/gcc-4.7.0/gcc/Function-Attributes.html#Function-Attributes)
do what you want?

-- 
VZ



[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux