mirror of
https://github.com/genodelabs/genode.git
synced 2025-04-07 19:34:56 +00:00
cxx: make 'operator delete(void *)' a weak symbol
The 'delete (void *)' operator gets referenced by compiler generated code, so it must be publicly defined in the 'cxx' library. These compiler generated calls seem to get executed only subsequently to explicit 'delete (void *)' calls in application code, which are not supported by the 'cxx' library, so the 'delete (void *)' implementation in the 'cxx' library does not have to do anything. Applications should use the 'delete (void *)' implementation of the 'stdcxx' library instead. To make this possible, the 'delete (void *)' implementation in the 'cxx' library must be 'weak'. Fixes #419.
This commit is contained in:
parent
ae8c464495
commit
17dc60eb66
@ -42,3 +42,19 @@ void operator delete (void *ptr, Genode::Allocator *alloc)
|
||||
PERR("C++ runtime: delete called with unsafe allocator, leaking memory");
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* The 'delete (void *)' operator gets referenced by compiler generated code,
|
||||
* so it must be publicly defined in the 'cxx' library. These compiler
|
||||
* generated calls seem to get executed only subsequently to explicit
|
||||
* 'delete (void *)' calls in application code, which are not supported by the
|
||||
* 'cxx' library, so the 'delete (void *)' implementation in the 'cxx' library
|
||||
* does not have to do anything. Applications should use the 'delete (void *)'
|
||||
* implementation of the 'stdcxx' library instead. To make this possible, the
|
||||
* 'delete (void *)' implementation in the 'cxx' library must be 'weak'.
|
||||
*/
|
||||
__attribute__((weak)) void operator delete (void *)
|
||||
{
|
||||
PERR("cxx: operator delete (void *) called - not implemented. "
|
||||
"A working implementation is available in the 'stdcxx' library.");
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user