blob: 268b74b0b6fc80d8a820280377c91d5bdfaa447a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
BEGIN {
split(ENVIRON["SYMBOLS"], SYMBOLS);
}
{
for (x in SYMBOLS) {
sym_regex = "^" SYMBOLS[x] "(@|$)"
if ($8 ~ sym_regex) {
split($8, symbol_array, /@|@@/);
# Don't add local symbols of versioned libc's
if (VERSIONED_LIBC && !symbol_array[2])
continue;
# Handle non-versioned libc's like uClibc ...
if (!symbol_array[2])
symbol_array[2] = "";
# We have a versioned libc
if (symbol_array[2] && !VERSIONED_LIBC)
VERSIONED_LIBC = 1;
ADD = 1;
# Check that we do not add duplicates
for (x in PROCESSED_SYMBOLS) {
if (x == $8) {
ADD = 0;
break;
}
}
if (ADD) {
SYMBOL_LIST[symbol_array[2]] = SYMBOL_LIST[symbol_array[2]] " " symbol_array[1];
PROCESSED_SYMBOLS[$8] = $8;
}
}
}
}
END {
for (sym_version in SYMBOL_LIST) {
if (sym_version)
VERSIONS = VERSIONS " " sym_version;
}
# We need the symbol versions sorted alphabetically ...
if (VERSIONS) {
split(VERSIONS, VERSION_LIST);
COUNT = asort(VERSION_LIST);
} else {
# Handle non-versioned libc's like uClibc ...
COUNT = 1;
}
for (i = 1; i <= COUNT; i++) {
if (VERSION_LIST[i]) {
sym_version = VERSION_LIST[i];
printf("%s {\n", sym_version);
} else {
# Handle non-versioned libc's like uClibc ...
sym_version = "";
printf("{\n");
}
printf(" global:\n");
split(SYMBOL_LIST[sym_version], sym_names);
for (x in sym_names)
printf(" %s;\n", sym_names[x]);
if (!old_sym_version) {
printf(" local:\n");
printf(" *;\n");
printf("};\n");
} else {
printf("} %s;\n", old_sym_version);
}
old_sym_version = sym_version;
}
}
|