From: Thomas Preudhomme <thomas.preudhomme@foss.arm.com>
To: newlib@sourceware.org
Subject: Re: [PATCH, newlib] Allow locking routine to be retargeted
Date: Thu, 12 Jan 2017 16:55:00 -0000 [thread overview]
Message-ID: <62aaa2d2-f8f7-4c00-7954-f62b47a798b4@foss.arm.com> (raw)
In-Reply-To: <1484238035.1122.3.camel@op.pl>
Hi Freddie,
On 12/01/17 16:20, Freddie Chopin wrote:
> On Thu, 2017-01-12 at 10:51 +0000, Thomas Preudhomme wrote:
>> My bad. I've rebased it on latest master branch. Please find the
>> patch attached.
>
> Thanks! Now it builds fine (;
>
> In my very limited testing it seems to work very nicely and the idea of
> using "struct _lock;" is very clever, as it allows me to do the
> retargeting in a very clean way:
>
> --- >8 --- >8 --- >8 --- >8 --- >8 --- >8 --- >8 --- >8 ---
>
> struct _lock : public distortos::Mutex
> {
> using Mutex::Mutex;
> };
>
> _lock _lock___sinit_lock {distortos::Mutex::Type::recursive, distortos::Mutex::Protocol::priorityInheritance};
> _lock _lock___sfp_lock {distortos::Mutex::Type::recursive, distortos::Mutex::Protocol::priorityInheritance};
> _lock _lock___atexit_lock {distortos::Mutex::Type::recursive, distortos::Mutex::Protocol::priorityInheritance};
> _lock _lock___malloc_lock_object {distortos::Mutex::Type::recursive, distortos::Mutex::Protocol::priorityInheritance};
>
> void __retarget_lock_init (_LOCK_T *lock)
> {
> *lock = new _lock {distortos::Mutex::Type::normal, distortos::Mutex::Protocol::priorityInheritance};
> }
>
> void __retarget_lock_close(_LOCK_T lock)
> {
> delete lock;
> }
>
> void __retarget_lock_acquire (_LOCK_T lock)
> {
> lock->lock();
> }
>
> void __retarget_lock_release (_LOCK_T lock)
> {
> lock->unlock();
> }
>
> ...
>
> --- >8 --- >8 --- >8 --- >8 --- >8 --- >8 --- >8 --- >8 ---
>
> But I still see a big issue with the weak objects that you provided in
> lock.c... The problem here is that now the user can redefine just 3 of
> them, so the last one will be taken from the weak definition that you
> provided. There will be no error/warning during compilation or linking.
> This will of course fail terribly during run-time due to mismatched
> types... While this may seem a bit unlikely at the first glance, the
> possible scenario that would lead to that is:
> 1. today newlib adds this very cool feature and adds weak objects for
> all used locks.
> 2. after some time RTOS developers start to support it and also provide
> their own versions of the locks needed by newlib.
> 3. after some more time newlib adds another lock somewhere, along with
> the object.
> At this moment all users of code created during step 2 linked with
> newlib version from step 3 will result in undefined behaviour whenever
> the new lock is used...
>
> You also missed some of the locks that are used by newlib:
> newlib/libc/posix/telldir.c:__LOCK_INIT(static, dd_hash_lock);
> newlib/libc/time/tzlock.c:__LOCK_INIT(static, __tz_lock_object);
> newlib/libc/stdlib/quick_exit.c:__LOCK_INIT(static, atexit_mutex);
> newlib/libc/stdlib/envlock.c:__LOCK_INIT_RECURSIVE(static, __env_lock_object);
>
> Maybe it would be somehow possible to bind all of the objects (and
> maybe even functions) together, so that when user provides just one
> definition, all other weak definitions will be immediately disabled?
> This way the user would either have to provide all or none, without an
> option to only provide some of the objects/functions. This is my only
> concern - I have nothing against providing weak definitions, but the
> possibility of overriding only some of the objects is a bit disturbing.
That's a very valid concern indeed. Thanks a lot for this feedback. I'll think
about it and see if I can come up with a solution.
Best regards,
Thomas
next prev parent reply other threads:[~2017-01-12 16:55 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-12-13 17:18 Thomas Preudhomme
2016-12-13 20:13 ` Freddie Chopin
2016-12-14 11:54 ` Thomas Preudhomme
2016-12-14 12:39 ` Freddie Chopin
2017-01-11 13:09 ` Thomas Preudhomme
2016-12-13 21:11 ` Freddie Chopin
2016-12-13 21:41 ` Freddie Chopin
2016-12-14 14:22 ` Sebastian Huber
2016-12-14 14:36 ` Thomas Preudhomme
2016-12-14 14:52 ` Thomas Preudhomme
2017-01-09 18:49 ` Freddie Chopin
2017-01-10 16:50 ` Thomas Preudhomme
2017-01-10 17:07 ` Freddie Chopin
2017-01-11 16:09 ` Thomas Preudhomme
2017-01-11 16:46 ` Craig Howland
2017-01-11 17:48 ` Thomas Preudhomme
2017-01-11 18:08 ` Craig Howland
2017-01-11 19:14 ` Freddie Chopin
2017-01-12 10:52 ` Thomas Preudhomme
2017-01-12 16:20 ` Freddie Chopin
2017-01-12 16:55 ` Thomas Preudhomme [this message]
2017-01-13 11:25 ` Thomas Preudhomme
2017-01-13 13:24 ` Thomas Preudhomme
2017-01-13 18:05 ` Freddie Chopin
2017-01-13 18:16 ` Thomas Preudhomme
2017-01-16 15:59 ` Thomas Preudhomme
2017-01-20 13:37 ` Thomas Preudhomme
2017-01-20 13:55 ` Freddie Chopin
2017-01-24 10:00 ` Freddie Chopin
2017-01-25 12:31 ` Corinna Vinschen
2017-01-30 10:51 ` Thomas Preudhomme
2016-12-14 15:27 ` Freddie Chopin
-- strict thread matches above, loose matches on Subject: below --
2016-11-10 14:42 Thomas Preudhomme
2016-11-10 15:34 ` Freddie Chopin
2016-11-10 16:05 ` Thomas Preudhomme
2016-11-10 20:32 ` Freddie Chopin
2016-11-10 20:35 ` Freddie Chopin
2016-11-11 11:09 ` Thomas Preudhomme
2016-11-11 11:54 ` Freddie Chopin
2016-11-11 11:56 ` Sebastian Huber
2016-11-11 13:40 ` Thomas Preudhomme
2016-11-11 14:10 ` Freddie Chopin
2016-11-23 14:38 ` Thomas Preudhomme
2016-11-23 15:52 ` Freddie Chopin
2016-11-24 7:44 ` Sebastian Huber
2016-11-24 8:29 ` Freddie Chopin
2016-11-25 10:21 ` Thomas Preudhomme
2016-11-25 12:04 ` Thomas Preudhomme
2016-11-25 12:35 ` Sebastian Huber
2016-12-13 17:20 ` Thomas Preudhomme
2016-11-25 14:12 ` Freddie Chopin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=62aaa2d2-f8f7-4c00-7954-f62b47a798b4@foss.arm.com \
--to=thomas.preudhomme@foss.arm.com \
--cc=newlib@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).