[PATCH][BZ 18960] setlocale.c: Mark *_used symbols as unaligned.
Carlos O'Donell
carlos@redhat.com
Mon Sep 28 15:28:00 GMT 2015
On 09/28/2015 11:22 AM, Florian Weimer wrote:
> On 09/28/2015 05:17 PM, Mike Frysinger wrote:
>> On 28 Sep 2015 16:52, Florian Weimer wrote:
>>> On 09/28/2015 04:18 PM, Rich Felker wrote:
>>>> Can you explain how/why you think this is needed? char has no
>>>> alignment requirements (inherently) so as far as I can tell, the
>>>> compiler may not make any alignment assumptions about an extern object
>>>> of type char.
>>>
>>> s390(x) expects all top-level objects in the data segment to be aligned
>>> to at least 2. As far as I can tell, this is not explicitly mentioned
>>> in the psABI supplement, but it is heavily implied by .align directives
>>> and use of the lalr instruction.
>>
>> how does that bubble in here though ?
>
> The value of a weak symbol is used as flag, to determine that a
> particular piece of code has been linked in. If the object file is
> pulled in by other code, the symbol is defined with an absolute address.
>
>> does locale/localeinfo.h need to update
>> _NL_CURRENT_DEFINE to use helpers from libc-symbols.h ? this seems to be
>> patching a single symptom point rather than addressing the source.
>
> I'm not sure if this occurs in other places.
As I said earlier I did a quick review and this is likely the only case
I could find. I encourage others to look though.
In some sense I agree with Mike, that there could be some kind of macro
to prevent this from ever happening again. That all weak-ref-check idioms
for data addresses should go through a macro that prevents s390 from
failing and enforces a sane symbol-like value (if such a macro doesn't
already exist).
It seems a bit like overkill right now though. I think just making the
value 16 with a comment will work.
Cheers,
Carlos.
More information about the Libc-alpha
mailing list