Re: Rename symbol at link time

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

 




Václav Zeman wrote:
> 
> 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
> 
> 

I my case I'd like to replace a call to a function that doesn't exist by a
call to an existing function. This is to be applied to a project where a
function is called with a name (e.g. fct1_wrongname in my example), but is
implemented with another name (e.g. fct9). Since I cannot modify source
code, I'd like to make this with the help of a linker script.
It looks strange but in the final project, a part of the code calling
fct1_wrongname is generated automatically, so I cannot modify it.

I'm afraid I cannot use alias as you mentioned because it makes me modify
source code. 
In my example, I need to "rename" function. Eventually I'll need to "rename"
variables as well.

Damien
-- 
View this message in context: http://old.nabble.com/Rename-symbol-at-link-time-tp33968382p33969222.html
Sent from the gcc - Help mailing list archive at Nabble.com.




[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