mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-23 14:42:11 +02:00
Bug 253170, ELF and GNU ELF parsers incorrectly parse GNUARM executables.
This commit is contained in:
parent
6931e3cad6
commit
afa454ec63
1 changed files with 45 additions and 1 deletions
|
@ -157,6 +157,11 @@ public class DwarfReader extends Dwarf implements ISymbolReader {
|
||||||
if (str.length() == 0)
|
if (str.length() == 0)
|
||||||
break;
|
break;
|
||||||
dirList.add(str);
|
dirList.add(str);
|
||||||
|
// If the directory is relative, append it to the CU dir
|
||||||
|
IPath dir = new Path(str);
|
||||||
|
if(!dir.isAbsolute())
|
||||||
|
dir = new Path(cuCompDir).append(str);
|
||||||
|
dirList.add(dir.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read file names
|
// Read file names
|
||||||
|
@ -369,7 +374,10 @@ public class DwarfReader extends Dwarf implements ISymbolReader {
|
||||||
// Combine dir & name if needed.
|
// Combine dir & name if needed.
|
||||||
if (!pa.isAbsolute() && dir.length() > 0)
|
if (!pa.isAbsolute() && dir.length() > 0)
|
||||||
pa = dirPa.append(pa);
|
pa = dirPa.append(pa);
|
||||||
|
|
||||||
|
// Fix cygwin style paths
|
||||||
|
pa = new Path(fixUpPath(pa.toString()));
|
||||||
|
|
||||||
// For win32 only.
|
// For win32 only.
|
||||||
// On Windows, there are cases where the source file itself has the full path
|
// On Windows, there are cases where the source file itself has the full path
|
||||||
// except the drive letter.
|
// except the drive letter.
|
||||||
|
@ -394,6 +402,42 @@ public class DwarfReader extends Dwarf implements ISymbolReader {
|
||||||
m_fileCollection.add(fullName);
|
m_fileCollection.add(fullName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private String fixUpPath(String path) {
|
||||||
|
// some compilers generate extra back slashes
|
||||||
|
path = path.replaceAll("\\\\\\\\", "\\\\"); //$NON-NLS-1$//$NON-NLS-2$
|
||||||
|
|
||||||
|
// translate any cygwin drive paths, e.g. //G/System/main.cpp or /cygdrive/c/system/main.c
|
||||||
|
if (path.startsWith("/cygdrive/") && ('/' == path.charAt(11))) { //$NON-NLS-1$
|
||||||
|
char driveLetter = path.charAt(10);
|
||||||
|
driveLetter = (Character.isLowerCase(driveLetter)) ? Character.toUpperCase(driveLetter)
|
||||||
|
: driveLetter;
|
||||||
|
|
||||||
|
StringBuffer buf = new StringBuffer(path);
|
||||||
|
buf.delete(0, 11);
|
||||||
|
buf.insert(0, driveLetter);
|
||||||
|
buf.insert(1, ':');
|
||||||
|
|
||||||
|
path = buf.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
// translate any cygwin drive paths, e.g. //G/System/main.cpp or /cygdrive/c/system/main.c
|
||||||
|
if (path.startsWith("//") && ('/' == path.charAt(3))) { //$NON-NLS-1$
|
||||||
|
char driveLetter = path.charAt(2);
|
||||||
|
driveLetter = (Character.isLowerCase(driveLetter)) ? Character.toUpperCase(driveLetter)
|
||||||
|
: driveLetter;
|
||||||
|
|
||||||
|
StringBuffer buf = new StringBuffer(path);
|
||||||
|
buf.delete(0, 3);
|
||||||
|
buf.insert(0, driveLetter);
|
||||||
|
buf.insert(1, ':');
|
||||||
|
|
||||||
|
path = buf.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Read a null-ended string from the given "data" stream.
|
* Read a null-ended string from the given "data" stream.
|
||||||
* data : IN, byte buffer
|
* data : IN, byte buffer
|
||||||
|
|
Loading…
Add table
Reference in a new issue