Thread (18 messages) 18 messages, 7 authors, 2020-11-20

Re: violating function pointer signature

From: Segher Boessenkool <hidden>
Date: 2020-11-18 19:05:26
Also in: bpf, linux-toolchains, lkml

Possibly related (same subject, not in this thread)

On Wed, Nov 18, 2020 at 07:31:50PM +0100, Florian Weimer wrote:
* Segher Boessenkool:
quoted
On Wed, Nov 18, 2020 at 12:17:30PM -0500, Steven Rostedt wrote:
quoted
I could change the stub from (void) to () if that would be better.
Don't?  In a function definition they mean exactly the same thing (and
the kernel uses (void) everywhere else, which many people find clearer).
And I think () functions expected a caller-provided parameter save
area on powerpc64le, while (void) functions do not.
Like I said (but you cut off, didn't realise it matters I guess):
quoted
In a function declaration that is not part of a definition it means no
information about the arguments is specified, a quite different thing.
Since the caller does not know if the callee will need a save area, it
has to assume it does.  Similar is true for many ABIs.
It does not
matter for an empty function, but GCC prefers to use the parameter
save area instead of setting up a stack frame if it is present.  So
you get stack corruption if you call a () function as a (void)
function.  (The other way round is fine.)
If you have no prototype for a function, you have to assume worst case,
yes.  Calling things "a () function" can mean two things (a declaration
that is or isn't a definition, two very different things), so it helps
to be explicit about it.

Just use (void) and do not worry :-)


Segher
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help