mirror of
git://sourceware.org/git/glibc.git
synced 2025-03-13 13:37:38 +08:00
Add tests that the dynamic linker works correctly with symbol names involving hash collisions, for both choices of hash style (and --hash-style=both as well). I note that there weren't actually any previous tests using --hash-style (so tests would only cover the default linker configuration in that regard). Also test symbol versions involving hash collisions. Tested for x86_64.
449 lines
3.6 KiB
C
449 lines
3.6 KiB
C
/* Test ELF hash collisions: shared object.
|
|
Copyright (C) 2024 Free Software Foundation, Inc.
|
|
This file is part of the GNU C Library.
|
|
|
|
The GNU C Library is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU Lesser General Public
|
|
License as published by the Free Software Foundation; either
|
|
version 2.1 of the License, or (at your option) any later version.
|
|
|
|
The GNU C Library is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Lesser General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Lesser General Public
|
|
License along with the GNU C Library; if not, see
|
|
<https://www.gnu.org/licenses/>. */
|
|
|
|
#include <support/check.h>
|
|
|
|
/* Names with hash collisions for classic ELF hash. */
|
|
|
|
int
|
|
foo (void)
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
int
|
|
Hxxxynpfoo (void)
|
|
{
|
|
return 2;
|
|
}
|
|
|
|
int
|
|
HxxxynpHxxxynpfoo (void)
|
|
{
|
|
return 3;
|
|
}
|
|
|
|
int
|
|
HxxxynpHxxxynpHxxxynpfoo (void)
|
|
{
|
|
return 4;
|
|
}
|
|
|
|
int
|
|
HxxxynpHxxxynpHxxxynpHxxxynpfoo (void)
|
|
{
|
|
return 5;
|
|
}
|
|
|
|
|
|
/* Names with hash collisions for GNU hash. */
|
|
|
|
int
|
|
bar (void)
|
|
{
|
|
return 10;
|
|
}
|
|
|
|
int
|
|
gliinmbar (void)
|
|
{
|
|
return 9;
|
|
}
|
|
|
|
int
|
|
gliinmgliinmbar (void)
|
|
{
|
|
return 8;
|
|
}
|
|
|
|
int
|
|
gliinmgliinmgliinmbar (void)
|
|
{
|
|
return 7;
|
|
}
|
|
|
|
int
|
|
gliinmgliinmgliinmgliinmbar (void)
|
|
{
|
|
return 6;
|
|
}
|
|
|
|
|
|
/* Names with specific hash values for each hash (see
|
|
tst-hash-collision1.c for details). */
|
|
|
|
int
|
|
Hxxxynp (void)
|
|
{
|
|
return 11;
|
|
}
|
|
|
|
int
|
|
HxxxypP (void)
|
|
{
|
|
return 12;
|
|
}
|
|
|
|
int
|
|
Hxxyinp (void)
|
|
{
|
|
return 13;
|
|
}
|
|
|
|
int
|
|
HxxyipP (void)
|
|
{
|
|
return 14;
|
|
}
|
|
|
|
int
|
|
HxxykNp (void)
|
|
{
|
|
return 15;
|
|
}
|
|
|
|
int
|
|
Hxxxyoa (void)
|
|
{
|
|
return 16;
|
|
}
|
|
|
|
int
|
|
HxxxypQ (void)
|
|
{
|
|
return 17;
|
|
}
|
|
|
|
int
|
|
HxxxyqA (void)
|
|
{
|
|
return 18;
|
|
}
|
|
|
|
int
|
|
HxxxzaA (void)
|
|
{
|
|
return 19;
|
|
}
|
|
|
|
int
|
|
Hxxxz_a (void)
|
|
{
|
|
return 20;
|
|
}
|
|
|
|
int
|
|
Hxxxyob (void)
|
|
{
|
|
return 21;
|
|
}
|
|
|
|
int
|
|
HxxxypR (void)
|
|
{
|
|
return 22;
|
|
}
|
|
|
|
int
|
|
HxxxyqB (void)
|
|
{
|
|
return 23;
|
|
}
|
|
|
|
int
|
|
HxxxzaB (void)
|
|
{
|
|
return 24;
|
|
}
|
|
|
|
int
|
|
Hxxxz_b (void)
|
|
{
|
|
return 25;
|
|
}
|
|
|
|
int
|
|
glidpk (void)
|
|
{
|
|
return 26;
|
|
}
|
|
|
|
int
|
|
glidqJ (void)
|
|
{
|
|
return 27;
|
|
}
|
|
|
|
int
|
|
glieOk (void)
|
|
{
|
|
return 28;
|
|
}
|
|
|
|
int
|
|
gliePJ (void)
|
|
{
|
|
return 29;
|
|
}
|
|
|
|
int
|
|
gljCpk (void)
|
|
{
|
|
return 30;
|
|
}
|
|
|
|
int
|
|
glidpl (void)
|
|
{
|
|
return 31;
|
|
}
|
|
|
|
int
|
|
glidqK (void)
|
|
{
|
|
return 32;
|
|
}
|
|
|
|
int
|
|
glieOl (void)
|
|
{
|
|
return 33;
|
|
}
|
|
|
|
int
|
|
gliePK (void)
|
|
{
|
|
return 34;
|
|
}
|
|
|
|
int
|
|
gljCpl (void)
|
|
{
|
|
return 35;
|
|
}
|
|
|
|
int
|
|
glidpm (void)
|
|
{
|
|
return 36;
|
|
}
|
|
|
|
int
|
|
glidqL (void)
|
|
{
|
|
return 37;
|
|
}
|
|
|
|
int
|
|
glieOm (void)
|
|
{
|
|
return 38;
|
|
}
|
|
|
|
int
|
|
gliePL (void)
|
|
{
|
|
return 39;
|
|
}
|
|
|
|
int
|
|
gljCpm (void)
|
|
{
|
|
return 40;
|
|
}
|
|
|
|
int
|
|
AdfmZru (void)
|
|
{
|
|
return 41;
|
|
}
|
|
|
|
int
|
|
AdfmZsT (void)
|
|
{
|
|
return 42;
|
|
}
|
|
|
|
int
|
|
AdfmZt3 (void)
|
|
{
|
|
return 43;
|
|
}
|
|
|
|
int
|
|
Adfn9ru (void)
|
|
{
|
|
return 44;
|
|
}
|
|
|
|
int
|
|
Adfn9sT (void)
|
|
{
|
|
return 45;
|
|
}
|
|
|
|
int
|
|
AdfmZrv (void)
|
|
{
|
|
return 46;
|
|
}
|
|
|
|
int
|
|
AdfmZsU (void)
|
|
{
|
|
return 47;
|
|
}
|
|
|
|
int
|
|
AdfmZt4 (void)
|
|
{
|
|
return 48;
|
|
}
|
|
|
|
int
|
|
Adfn9rv (void)
|
|
{
|
|
return 49;
|
|
}
|
|
|
|
int
|
|
Adfn9sU (void)
|
|
{
|
|
return 50;
|
|
}
|
|
|
|
int
|
|
AdfmZrw (void)
|
|
{
|
|
return 51;
|
|
}
|
|
|
|
int
|
|
AdfmZsV (void)
|
|
{
|
|
return 52;
|
|
}
|
|
|
|
int
|
|
AdfmZt5 (void)
|
|
{
|
|
return 53;
|
|
}
|
|
|
|
int
|
|
Adfn9rw (void)
|
|
{
|
|
return 54;
|
|
}
|
|
|
|
int
|
|
Adfn9sV (void)
|
|
{
|
|
return 55;
|
|
}
|
|
|
|
int
|
|
AdfmZrx (void)
|
|
{
|
|
return 56;
|
|
}
|
|
|
|
int
|
|
AdfmZsW (void)
|
|
{
|
|
return 57;
|
|
}
|
|
|
|
int
|
|
AdfmZt6 (void)
|
|
{
|
|
return 58;
|
|
}
|
|
|
|
int
|
|
Adfn9rx (void)
|
|
{
|
|
return 59;
|
|
}
|
|
|
|
int
|
|
Adfn9sW (void)
|
|
{
|
|
return 60;
|
|
}
|
|
|
|
int
|
|
glidpi (void)
|
|
{
|
|
return 61;
|
|
}
|
|
|
|
int
|
|
glidqH (void)
|
|
{
|
|
return 62;
|
|
}
|
|
|
|
int
|
|
glieOi (void)
|
|
{
|
|
return 63;
|
|
}
|
|
|
|
int
|
|
gliePH (void)
|
|
{
|
|
return 64;
|
|
}
|
|
|
|
int
|
|
gljCpi (void)
|
|
{
|
|
return 65;
|
|
}
|
|
|
|
int
|
|
glidpj (void)
|
|
{
|
|
return 66;
|
|
}
|
|
|
|
int
|
|
glidqI (void)
|
|
{
|
|
return 67;
|
|
}
|
|
|
|
int
|
|
glieOj (void)
|
|
{
|
|
return 68;
|
|
}
|
|
|
|
int
|
|
gliePI (void)
|
|
{
|
|
return 69;
|
|
}
|
|
|
|
int
|
|
gljCpj (void)
|
|
{
|
|
return 70;
|
|
}
|