[LLVMdev] static functions and optimization

reed kotler rkotler at mips.com
Wed Jul 24 15:45:05 PDT 2013


I have some stub functions that are essentially static, but they cannot 
be removed.

What linkage type should I use in that case. Internal linkage appears to 
get the functions discarded if they are not referenced under certain 
optimizations.

This is part of the gcc mips16 hack for floating point.

For example, a function like floor from the math library will be called 
with an external reference to function floor.

At that time, the compiler does not know whether floor was compiled as 
mips16 or mips32.

It generates the call to floor as if it is a mips16 compiled function.

It also generates a stub that the linker can use if during link time it 
is discovered that "floor" is a mips32 function.

The stubs, which are mips32 code, will move the first argument register 
into a floating point register, call floor, and upon return will move 
the integer return value into a floating point register.

If I designate this function as having internal linkage, then in some 
cases, the optimizer will throw it away.

In that case, at link time it will call floor, and if floor is compiled 
as mips32, this will break a mips16 compiled program.

The linker does not know there is an issue because only functions with 
certain kinds of signatures need a helper function for the call.






More information about the llvm-dev mailing list