All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
To: David Laight <David.Laight@ACULAB.COM>
Cc: Florian Weimer <fweimer@redhat.com>, carlos <carlos@redhat.com>,
	Joseph Myers <joseph@codesourcery.com>,
	Szabolcs Nagy <szabolcs.nagy@arm.com>,
	libc-alpha <libc-alpha@sourceware.org>,
	Thomas Gleixner <tglx@linutronix.de>, Ben Maurer <bmaurer@fb.com>,
	Peter Zijlstra <peterz@infradead.org>,
	"Paul E. McKenney" <paulmck@linux.vnet.ibm.com>,
	Boqun Feng <boqun.feng@gmail.com>,
	Will Deacon <will.deacon@arm.com>,
	Dave Watson <davejwatson@fb.com>, Paul Turner <pjt@google.com>,
	Rich Felker <dalias@libc.org>,
	linux-kernel <linux-kernel@vger.kernel.org>,
	linux-api <linux-api@vger.kernel.org>
Subject: Re: [PATCH 1/5] glibc: Perform rseq(2) registration at C startup and thread creation (v10)
Date: Fri, 14 Jun 2019 09:39:10 -0400 (EDT)	[thread overview]
Message-ID: <1503067753.3387.1560519550939.JavaMail.zimbra@efficios.com> (raw)
In-Reply-To: <69a53ec2ce184af29c4cae58e0b2fb57@AcuMS.aculab.com>

----- On Jun 14, 2019, at 3:29 PM, David Laight David.Laight@ACULAB.COM wrote:

> From: Mathieu Desnoyers
>> Sent: 14 June 2019 14:02
> ...
>> But my original issue remains: if I define a variable called __rseq_handled
>> within either the main executable or the preloaded library, it overshadows
>> the libc one:
> 
> 1) That is the was elf symbol resolution is required to work.
>   Otherwise variables like 'errno' (non-thread safe form) wouldn't work.
> 
> 2) Don't do it then :-)
>   Names starting with __ will be reserved (probably 'for the implementation').
> 
> The real 'fun' starts because, under some circumstances, looking up a symbol as:
>	foo = dlsym(lib_handle, "foo");
> Can find the data item instead of the function!
> Usually it works (even when foo is global data) because 'lib_handle' refers
> to a different symbol table.
> But it can go horribly wrong.

I was setting __rseq_handled too soon, before re-relocation of the dynamic linker.
I moved the initialization after re-relocation and it works fine now.

The purpose of __rseq_handled is to allow early adopter libraries and applications
to define their own global instance of the symbol, and check whether the libc
they are linked against handle rseq registration or not.

libc specifies the layout of that variable (an integer). The dynamic linker
chooses one of those instances so it's used in the global symbol table of the
program. The important thing is that all libraries agree on that global symbol.
Of course this is not compatible with libraries compiled with forced "hidden"
symbols only.

Thanks,

Mathieu

-- 
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com

  reply	other threads:[~2019-06-14 13:39 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20190503184219.19266-1-mathieu.desnoyers@efficios.com>
2019-05-03 18:42 ` [PATCH 1/5] glibc: Perform rseq(2) registration at C startup and thread creation (v10) Mathieu Desnoyers
2019-05-27 11:19   ` Florian Weimer
2019-05-27 19:27     ` Mathieu Desnoyers
2019-05-29 15:45       ` Mathieu Desnoyers
2019-05-30 20:56         ` Mathieu Desnoyers
2019-05-31  8:06           ` Florian Weimer
2019-05-31 14:48             ` Mathieu Desnoyers
2019-05-31 15:46               ` Florian Weimer
2019-05-31 18:10                 ` Mathieu Desnoyers
2019-06-04 11:46                   ` Florian Weimer
2019-06-04 15:57                     ` Mathieu Desnoyers
2019-06-06 11:57                       ` Florian Weimer
2019-06-10 14:43                         ` Carlos O'Donell
2019-06-12 14:00                           ` Mathieu Desnoyers
2019-06-14 10:03                             ` Mathieu Desnoyers
2019-06-14 10:06                               ` Florian Weimer
2019-06-14 10:14                                 ` Mathieu Desnoyers
2019-06-14 11:35                                   ` Florian Weimer
2019-06-14 12:55                                     ` Mathieu Desnoyers
2019-06-14 13:01                                       ` Mathieu Desnoyers
2019-06-14 13:09                                         ` Florian Weimer
2019-06-14 13:18                                           ` Mathieu Desnoyers
2019-06-14 13:24                                             ` Florian Weimer
2019-06-14 13:34                                               ` Mathieu Desnoyers
2019-06-14 13:42                                                 ` Florian Weimer
2019-06-14 13:47                                                   ` Mathieu Desnoyers
2019-06-14 13:53                                                     ` Florian Weimer
2019-06-14 13:59                                                       ` Mathieu Desnoyers
2019-06-14 13:29                                         ` David Laight
2019-06-14 13:39                                           ` Mathieu Desnoyers [this message]
2019-06-12 14:16                         ` Mathieu Desnoyers
2019-06-12 14:22                           ` Florian Weimer
2019-06-12 14:36                             ` Mathieu Desnoyers
2019-06-12 14:43                               ` Florian Weimer
2019-05-03 18:42 ` [PATCH 2/5] glibc: sched_getcpu(): use rseq cpu_id TLS on Linux (v4) Mathieu Desnoyers

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=1503067753.3387.1560519550939.JavaMail.zimbra@efficios.com \
    --to=mathieu.desnoyers@efficios.com \
    --cc=David.Laight@ACULAB.COM \
    --cc=bmaurer@fb.com \
    --cc=boqun.feng@gmail.com \
    --cc=carlos@redhat.com \
    --cc=dalias@libc.org \
    --cc=davejwatson@fb.com \
    --cc=fweimer@redhat.com \
    --cc=joseph@codesourcery.com \
    --cc=libc-alpha@sourceware.org \
    --cc=linux-api@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=paulmck@linux.vnet.ibm.com \
    --cc=peterz@infradead.org \
    --cc=pjt@google.com \
    --cc=szabolcs.nagy@arm.com \
    --cc=tglx@linutronix.de \
    --cc=will.deacon@arm.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.