Lines 66-73
elf_get_dynamic_info (struct link_map *l, ElfW(Dyn) *temp)
Link Here
|
66 |
info[DT_VALTAGIDX (dyn->d_tag) + DT_NUM + DT_THISPROCNUM |
66 |
info[DT_VALTAGIDX (dyn->d_tag) + DT_NUM + DT_THISPROCNUM |
67 |
+ DT_VERSIONTAGNUM + DT_EXTRANUM] = dyn; |
67 |
+ DT_VERSIONTAGNUM + DT_EXTRANUM] = dyn; |
68 |
else if ((d_tag_utype) DT_ADDRTAGIDX (dyn->d_tag) < DT_ADDRNUM) |
68 |
else if ((d_tag_utype) DT_ADDRTAGIDX (dyn->d_tag) < DT_ADDRNUM) |
69 |
info[DT_ADDRTAGIDX (dyn->d_tag) + DT_NUM + DT_THISPROCNUM |
69 |
{ |
70 |
+ DT_VERSIONTAGNUM + DT_EXTRANUM + DT_VALNUM] = dyn; |
70 |
/* Use local 'tag_ix' to avoid gcc picking large offset: |
|
|
71 |
DT_ADDRTAGIDX (x) = 0x6ffffeff - x |
72 |
which leads gcc to use R_IA64_REL64LSB relocation. |
73 |
We cannot allow it as 'elf_get_dynamic_info' is called |
74 |
before relocations are processed by 'ld.so'. |
75 |
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60465#c32. |
76 |
*/ |
77 |
d_tag_utype tag_ix = |
78 |
DT_ADDRTAGIDX (dyn->d_tag) + DT_NUM + DT_THISPROCNUM |
79 |
+ DT_VERSIONTAGNUM + DT_EXTRANUM + DT_VALNUM; |
80 |
info[tag_ix] = dyn; |
81 |
} |
71 |
++dyn; |
82 |
++dyn; |
72 |
} |
83 |
} |
73 |
|
84 |
|
74 |
- |
|
|