public inbox for newlib@sourceware.org
 help / color / mirror / Atom feed
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

  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).