|
@@ -1667,7 +1667,8 @@ int cmSystemTools::WaitForLine(cmsysProcess* process, std::string& line,
|
|
|
for (; outiter != out.end(); ++outiter) {
|
|
|
if ((*outiter == '\r') && ((outiter + 1) == out.end())) {
|
|
|
break;
|
|
|
- } else if (*outiter == '\n' || *outiter == '\0') {
|
|
|
+ }
|
|
|
+ if (*outiter == '\n' || *outiter == '\0') {
|
|
|
std::vector<char>::size_type length = outiter - out.begin();
|
|
|
if (length > 1 && *(outiter - 1) == '\r') {
|
|
|
--length;
|
|
@@ -1684,7 +1685,8 @@ int cmSystemTools::WaitForLine(cmsysProcess* process, std::string& line,
|
|
|
for (; erriter != err.end(); ++erriter) {
|
|
|
if ((*erriter == '\r') && ((erriter + 1) == err.end())) {
|
|
|
break;
|
|
|
- } else if (*erriter == '\n' || *erriter == '\0') {
|
|
|
+ }
|
|
|
+ if (*erriter == '\n' || *erriter == '\0') {
|
|
|
std::vector<char>::size_type length = erriter - err.begin();
|
|
|
if (length > 1 && *(erriter - 1) == '\r') {
|
|
|
--length;
|
|
@@ -2583,29 +2585,28 @@ bool cmSystemTools::RemoveRPath(std::string const& file, std::string* emsg,
|
|
|
it = dentries.erase(it);
|
|
|
entriesErased++;
|
|
|
continue;
|
|
|
- } else {
|
|
|
- if (cmELF::TagMipsRldMapRel != 0 &&
|
|
|
- it->first == cmELF::TagMipsRldMapRel) {
|
|
|
- // Background: debuggers need to know the "linker map" which contains
|
|
|
- // the addresses each dynamic object is loaded at. Most arches use
|
|
|
- // the DT_DEBUG tag which the dynamic linker writes to (directly) and
|
|
|
- // contain the location of the linker map, however on MIPS the
|
|
|
- // .dynamic section is always read-only so this is not possible. MIPS
|
|
|
- // objects instead contain a DT_MIPS_RLD_MAP tag which contains the
|
|
|
- // address where the dyanmic linker will write to (an indirect
|
|
|
- // version of DT_DEBUG). Since this doesn't work when using PIE, a
|
|
|
- // relative equivalent was created - DT_MIPS_RLD_MAP_REL. Since this
|
|
|
- // version contains a relative offset, moving it changes the
|
|
|
- // calculated address. This may cause the dyanmic linker to write
|
|
|
- // into memory it should not be changing.
|
|
|
- //
|
|
|
- // To fix this, we adjust the value of DT_MIPS_RLD_MAP_REL here. If
|
|
|
- // we move it up by n bytes, we add n bytes to the value of this tag.
|
|
|
- it->second += entriesErased * sizeof_dentry;
|
|
|
- }
|
|
|
-
|
|
|
- it++;
|
|
|
}
|
|
|
+ if (cmELF::TagMipsRldMapRel != 0 &&
|
|
|
+ it->first == cmELF::TagMipsRldMapRel) {
|
|
|
+ // Background: debuggers need to know the "linker map" which contains
|
|
|
+ // the addresses each dynamic object is loaded at. Most arches use
|
|
|
+ // the DT_DEBUG tag which the dynamic linker writes to (directly) and
|
|
|
+ // contain the location of the linker map, however on MIPS the
|
|
|
+ // .dynamic section is always read-only so this is not possible. MIPS
|
|
|
+ // objects instead contain a DT_MIPS_RLD_MAP tag which contains the
|
|
|
+ // address where the dyanmic linker will write to (an indirect
|
|
|
+ // version of DT_DEBUG). Since this doesn't work when using PIE, a
|
|
|
+ // relative equivalent was created - DT_MIPS_RLD_MAP_REL. Since this
|
|
|
+ // version contains a relative offset, moving it changes the
|
|
|
+ // calculated address. This may cause the dyanmic linker to write
|
|
|
+ // into memory it should not be changing.
|
|
|
+ //
|
|
|
+ // To fix this, we adjust the value of DT_MIPS_RLD_MAP_REL here. If
|
|
|
+ // we move it up by n bytes, we add n bytes to the value of this tag.
|
|
|
+ it->second += entriesErased * sizeof_dentry;
|
|
|
+ }
|
|
|
+
|
|
|
+ it++;
|
|
|
}
|
|
|
|
|
|
// Encode new entries list
|