Is there a way to detect a null reference function pointer during assembly or linking ?

William Tambe tambewilliam@gmail.com
Sat Nov 30 13:59:00 GMT 2019


To supplement my previous question, a null reference function pointer
can occur when using a weak function for which there is no definition;
ie:

extern void func (void) __attribute__((weak));

int main () {
        if (func)
                func();
}

In the above example, func will be null if there is no default implementation.

The issue I am running into is that  the value of a null reference
function pointer is not null when the executable is not loaded at the
address specified in the ELF header, because that value is computed by
offsetting a constant value from the
start of the section .text.

I would like to be able to detect a null reference function pointer,
and generate an instruction that load a null immediate value instead
of computing the null reference function pointer value by offsetting a
constant value.

Any pointers would be much appreciated.

On Fri, Nov 29, 2019 at 9:23 PM William Tambe <tambewilliam@gmail.com> wrote:
>
> Is there a way to detect a null reference function pointer during
> assembly or linking ?
>
> In fact, the target to which I ported Binutils always generate
> position-independent-code; so it is not always loaded at the address
> specified in the ELF header, and that is where I run into issues; the
> value of a null reference function pointer is not null when the
> executable is not loaded at the address specified in the ELF header,
> because that value is computed by offsetting a constant value from the
> start of the section .text.
>
> I would like to be able to detect a null reference function pointer,
> and generate an instruction that load a null immediate value instead
> of computing the null reference function pointer value by offsetting a
> constant value.
>
> Any pointers would be much appreciated.



More information about the Binutils mailing list