From 64bbca18a795b01a95665350f4b172904e05db6b Mon Sep 17 00:00:00 2001 From: Alain Magloire Date: Fri, 25 Oct 2002 18:38:19 +0000 Subject: [PATCH] new Method isLittleEndian(). --- .../model/org/eclipse/cdt/core/model/IBinary.java | 3 +++ .../org/eclipse/cdt/internal/core/model/Binary.java | 8 ++++++++ .../org/eclipse/cdt/internal/core/model/BinaryInfo.java | 9 +++++++++ .../utils/org/eclipse/cdt/utils/elf/Elf.java | 9 ++++++++- 4 files changed, 28 insertions(+), 1 deletion(-) diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/IBinary.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/IBinary.java index 1a68f3793b6..02482492b24 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/IBinary.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/IBinary.java @@ -32,4 +32,7 @@ public interface IBinary extends ICFile { public long getData(); public long getBSS(); + + public boolean isLittleEndian(); + } diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/Binary.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/Binary.java index f0bb5fe6884..7d900f04993 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/Binary.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/Binary.java @@ -74,7 +74,15 @@ public class Binary extends CFile implements IBinary { return ((BinaryInfo)getElementInfo()).getSoname(); } + /** + * @see org.eclipse.cdt.core.model.IBinary#isLittleEndian() + */ + public boolean isLittleEndian() { + return ((BinaryInfo)getElementInfo()).isLittleEndian(); + } + public CElementInfo createElementInfo() { return new BinaryInfo(this); } + } diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/BinaryInfo.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/BinaryInfo.java index b47cacafeab..4eee06f6200 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/BinaryInfo.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/BinaryInfo.java @@ -114,6 +114,14 @@ class BinaryInfo extends CFileInfo { return soname; } + public boolean isLittleEndian() { + init(); + if (attribute != null) { + return attribute.isLittleEndian(); + } + return false; + } + private void addFunction(Elf.Symbol [] symbol, boolean external) { for (int i = 0; i < symbol.length; i++) { ICElement parent = getElement(); @@ -244,6 +252,7 @@ class BinaryInfo extends CFileInfo { sizes = helper.getSizes(); soname = helper.getSoname(); + attribute = helper.getElf().getAttributes(); helper.dispose(); } catch (IOException e) { diff --git a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/elf/Elf.java b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/elf/Elf.java index 6edaa5be816..d33b8267313 100644 --- a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/elf/Elf.java +++ b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/elf/Elf.java @@ -590,6 +590,7 @@ public class Elf { String cpu; int type; boolean bDebug; + boolean isle; public String getCPU() { return cpu; @@ -602,6 +603,10 @@ public class Elf { public boolean hasDebug() { return bDebug; } + + public boolean isLittleEndian() { + return isle; + } } @@ -649,13 +654,15 @@ public class Elf { default: attrib.cpu = "none"; } - if ( !bSkipElfData) { + if (!bSkipElfData) { switch (ehdr.e_ident[Elf.ELFhdr.EI_DATA]) { case Elf.ELFhdr.ELFDATA2LSB : attrib.cpu+= "le"; + attrib.isle = true; break; case Elf.ELFhdr.ELFDATA2MSB : attrib.cpu += "be"; + attrib.isle = false; break; } }