* Andrew John Hughes:

> On 24/06/2019 14:54, Florian Weimer wrote:
>> * Severin Gehwolf:
>> 
>>> Could I please get reviews for this 8u only change? The JDK 8u build
>>> logic for launcher files includes linker version script files (a.k.a
>>> mapfiles). The script file for x86 (32bit) marks symbol _IO_stdin_used
>>> as local. When the symbol is not visible to the dynamic loader, glibc
>>> will use a legacy stdio implementation instead. This is a historic, x86
>>> (32bit) only glibc issue, I've been told.
>> 
>> It may impact other historic GNU/Linux targets, but I don't think they
>> have OpenJDK ports.  POWER and Z are 64-bit only, I assume.
>> 
>> Thanks,
>> Florian
>> 
>
> OpenJDK is built on s390 (31-bit) and ppc (32-bit) for RHEL 7.

Oh.  I did not know this.

I looked at a recent internal s390 build, and found this:

Symbol table [ 6] '.dynsym' contains 8 entries:
 1 local symbol  String table: [ 7] '.dynstr'
  Num:    Value   Size Type    Bind   Vis          Ndx Name
    0: 00000000      0 NOTYPE  LOCAL  DEFAULT    UNDEF 
    1: 00000000      0 NOTYPE  WEAK   DEFAULT    UNDEF 
_ITM_deregisterTMCloneTable
    2: 00000000      0 NOTYPE  WEAK   DEFAULT    UNDEF __gmon_start__
    3: 00000000      0 NOTYPE  WEAK   DEFAULT    UNDEF _Jv_RegisterClasses
    4: 00000000      0 NOTYPE  WEAK   DEFAULT    UNDEF _ITM_registerTMCloneTable
    5: 00400474      0 FUNC    GLOBAL DEFAULT    UNDEF 
__libc_start_main@GLIBC_2.0 (2)
    6: 00400494      0 FUNC    GLOBAL DEFAULT    UNDEF 
JLI_Launch@SUNWprivate_1.1 (3)
    7: 004007b8      4 OBJECT  GLOBAL DEFAULT       16 _IO_stdin_used

Same for a ppc build:

Symbol table [ 6] '.dynsym' contains 8 entries:
 1 local symbol  String table: [ 7] '.dynstr'
  Num:    Value   Size Type    Bind   Vis          Ndx Name
    0: 00000000      0 NOTYPE  LOCAL  DEFAULT    UNDEF 
    1: 00000000      0 NOTYPE  WEAK   DEFAULT    UNDEF 
_ITM_deregisterTMCloneTable
    2: 00000000      0 NOTYPE  WEAK   DEFAULT    UNDEF __gmon_start__
    3: 00000000      0 FUNC    GLOBAL DEFAULT    UNDEF 
__libc_start_main@GLIBC_2.0 (2)
    4: 00000000      0 FUNC    GLOBAL DEFAULT    UNDEF 
JLI_Launch@SUNWprivate_1.1 (3)
    5: 00000000      0 NOTYPE  WEAK   DEFAULT    UNDEF _Jv_RegisterClasses
    6: 00000000      0 NOTYPE  WEAK   DEFAULT    UNDEF _ITM_registerTMCloneTable
    7: 100007ac      4 OBJECT  GLOBAL DEFAULT       15 _IO_stdin_used

Any binary which references __libc_start_main@GLIBC_2.0 and which does
not export _IO_stdin_used in .dynsym (.symtab does not count) has this
issue, irrespective of the architecture.  The key point is support for
the glibc 2.0 ABI level (as indicated by the GLIBC_2.0 symbol version).
Architectures which joined in glibc 2.1 or later do not have this
fallback code (although the _IO_stdin_used marker symbol is sometimes
still there, quite unnecessarily).

So these two builds one does not have the issue.  The build is from May,
so it can't have Severin's fix yet
(java-1.8.0-openjdk-1.8.0.222.b04-1.el7, in case you wonder), and the
i686 build does show the issue.

Thanks,
Florian

Reply via email to