From 2b291399f5e9ba3882d49616cf4b1187b67e7745 Mon Sep 17 00:00:00 2001 From: Matthew Khouzam Date: Sun, 5 Apr 2020 15:45:54 -0400 Subject: [PATCH] Bug 561786 - Add unit tests for Elf Test on X86-64, i386, ppc64 and ppc32. Add Elf compiled executables to resources folder in order to ensure address coherence. Change-Id: Ie85636c9732cc41b6e5505ecf7acc783644bb442 Signed-off-by: Matthew Khouzam --- .gitattributes | 1 + .../META-INF/MANIFEST.MF | 1 + .../org/eclipse/cdt/utils/elf/ElfTest.java | 125 ++++++++++++++++++ .../resources/elf/unit_test/Makefile | 2 + .../resources/elf/unit_test/readme.txt | 23 ++++ .../resources/elf/unit_test/simple-be32.elf | Bin 0 -> 69736 bytes .../resources/elf/unit_test/simple-be64.elf | Bin 0 -> 71144 bytes .../resources/elf/unit_test/simple-le32.elf | Bin 0 -> 8188 bytes .../resources/elf/unit_test/simple-le64.elf | Bin 0 -> 9576 bytes .../resources/elf/unit_test/simple.c | 9 ++ .../core/suite/AutomatedIntegrationSuite.java | 2 + 11 files changed, 163 insertions(+) create mode 100644 core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/utils/elf/ElfTest.java create mode 100644 core/org.eclipse.cdt.core.tests/resources/elf/unit_test/Makefile create mode 100644 core/org.eclipse.cdt.core.tests/resources/elf/unit_test/readme.txt create mode 100755 core/org.eclipse.cdt.core.tests/resources/elf/unit_test/simple-be32.elf create mode 100755 core/org.eclipse.cdt.core.tests/resources/elf/unit_test/simple-be64.elf create mode 100755 core/org.eclipse.cdt.core.tests/resources/elf/unit_test/simple-le32.elf create mode 100644 core/org.eclipse.cdt.core.tests/resources/elf/unit_test/simple-le64.elf create mode 100644 core/org.eclipse.cdt.core.tests/resources/elf/unit_test/simple.c diff --git a/.gitattributes b/.gitattributes index 3f9d5d5cdc4..6fef3513726 100644 --- a/.gitattributes +++ b/.gitattributes @@ -19,6 +19,7 @@ CONTRIBUTING text *.h text *.s text *.S text +*.elf binary # C-like configuration/scripts *.ac text diff --git a/core/org.eclipse.cdt.core.tests/META-INF/MANIFEST.MF b/core/org.eclipse.cdt.core.tests/META-INF/MANIFEST.MF index 4c051c50dca..90068381a7a 100644 --- a/core/org.eclipse.cdt.core.tests/META-INF/MANIFEST.MF +++ b/core/org.eclipse.cdt.core.tests/META-INF/MANIFEST.MF @@ -35,6 +35,7 @@ Export-Package: org.eclipse.cdt.core.cdescriptor.tests, Require-Bundle: org.eclipse.core.resources, org.eclipse.cdt.core, org.junit, + org.eclipse.jdt.junit4.runtime, org.eclipse.core.runtime, org.eclipse.ui.ide, org.eclipse.ui, diff --git a/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/utils/elf/ElfTest.java b/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/utils/elf/ElfTest.java new file mode 100644 index 00000000000..0ac159bd2c8 --- /dev/null +++ b/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/utils/elf/ElfTest.java @@ -0,0 +1,125 @@ +/******************************************************************************* + * Copyright (c) 2020 Ericsson + * + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +package org.eclipse.cdt.utils.elf; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import java.io.IOException; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; + +import org.eclipse.cdt.utils.elf.Elf.Section; +import org.eclipse.cdt.utils.elf.Elf.Symbol; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.junit.runners.Parameterized.Parameters; + +/** + * Elf reader test + * @author Matthew Khouzam + */ +@RunWith(Parameterized.class) +public class ElfTest { + + private static final String SYMTAB_NAME = ".symtab"; + + @Parameters(name = "{0}") + public static Collection elfArchitectures() { + return Arrays.asList(new Object[][] { + { "BE32", "resources/elf/unit_test/simple-be32.elf", 35, "0x00000000", "0x100001a8", 75, "0x10000518" }, + { "BE64", "resources/elf/unit_test/simple-be64.elf", 34, "0x0000000000000000", "0x0000000010000240", 69, + "0x000000001001fea0" }, + { "LE32", "resources/elf/unit_test/simple-le32.elf", 36, "0x00000000", "0x080481cc", 70, "0x080483e5" }, + { "LE64", "resources/elf/unit_test/simple-le64.elf", 36, "0x0000000000000000", "0x00000000004002b8", 68, + "0x00000000004004e4" }, }); + } + + private static final Collection functions = Arrays.asList("", "crtstuff.c", "simple.c", "crtstuff.c", + "_ITM_deregisterTMCloneTable", "__gmon_start__", "_Jv_RegisterClasses", "_ITM_registerTMCloneTable", + "_init", "_start", "deregister_tm_clones", "register_tm_clones", "__do_global_dtors_aux", "frame_dummy", + "function", "main", "__libc_csu_init", "__libc_csu_fini", "_fini", "_IO_stdin_used", "__FRAME_END__", + "__JCR_LIST__", "__JCR_END__", "_DYNAMIC", "data_start", "__data_start", "__dso_handle", "_edata", + "__bss_start", "__TMC_END__", "_end"); + + private final String arch; + private final Elf elf; + private final int nbSections; + private final String symtabBaseAddress; + private final String dynsymBaseAddress; + private final int nbSymbols; + private final String mainAddress; + + public ElfTest(String architecture, String path, int sections, String symBaseAddress, String dynBaseAddress, + int symbolCount, String mainAddr) throws IOException { + nbSections = sections; + elf = new Elf(path); + arch = architecture; + symtabBaseAddress = symBaseAddress; + dynsymBaseAddress = dynBaseAddress; + nbSymbols = symbolCount; + mainAddress = mainAddr; + } + + /** + * Test getting the sections + * @throws IOException + */ + @Test + public void testGetSections() throws IOException { + assertEquals(arch + ": " + "Number of sections", nbSections, elf.getSections().length); + Section sectionByName = elf.getSectionByName(SYMTAB_NAME); + assertNotNull(sectionByName); + assertEquals(arch + ": " + "symbol table", SYMTAB_NAME, sectionByName.toString()); + assertEquals(arch + ": " + "binary address", symtabBaseAddress, sectionByName.sh_addr.toHexAddressString()); + assertEquals(arch + ": " + "sh_name", 1, sectionByName.sh_name); + sectionByName = elf.getSectionByName(".dynsym"); + assertNotNull(sectionByName); + assertEquals(arch + ": " + "dynamic symbols", ".dynsym", sectionByName.toString()); + assertEquals(arch + ": " + "binary address", dynsymBaseAddress, sectionByName.sh_addr.toHexAddressString()); + assertEquals(arch + ": " + "sh_name", 78L, sectionByName.sh_name); + } + + /** + * Test getting symbols, this loads the symbols so it modifies the state of elf. + * @throws IOException + */ + @Test + public void testGetSymbols() throws IOException { + Section sectionByName = elf.getSectionByName(SYMTAB_NAME); + assertNotNull(sectionByName); + // never call Elf#LoadSymbols before this point + assertNull(arch + ": " + "Null symbols", elf.getSymbols()); + elf.loadSymbols(); + Symbol[] symbols = elf.getSymbols(); + assertNotNull(arch + ": " + "Symbols are set", symbols); + assertEquals(nbSymbols, symbols.length); + List functionList = Arrays.asList(symbols).stream().map(Symbol::toString).collect(Collectors.toList()); + for (String function : functions) { + assertTrue(arch + ": " + "Symbols does not contain \"" + function + '"', functionList.contains(function)); + } + Symbol symbol = null; + for (int i = 0; i < symbols.length; i++) { + if (symbols[i].toString().equals("main")) { + symbol = symbols[i]; + break; + } + } + assertNotNull(symbol); + assertEquals(arch + ": " + "Main address", mainAddress, symbol.st_value.toHexAddressString()); + } + +} diff --git a/core/org.eclipse.cdt.core.tests/resources/elf/unit_test/Makefile b/core/org.eclipse.cdt.core.tests/resources/elf/unit_test/Makefile new file mode 100644 index 00000000000..3bf7cf61345 --- /dev/null +++ b/core/org.eclipse.cdt.core.tests/resources/elf/unit_test/Makefile @@ -0,0 +1,2 @@ +#just an example +gcc simple.c -g -o simple.elf \ No newline at end of file diff --git a/core/org.eclipse.cdt.core.tests/resources/elf/unit_test/readme.txt b/core/org.eclipse.cdt.core.tests/resources/elf/unit_test/readme.txt new file mode 100644 index 00000000000..680713cecba --- /dev/null +++ b/core/org.eclipse.cdt.core.tests/resources/elf/unit_test/readme.txt @@ -0,0 +1,23 @@ +## Adding elf files tests + +1- generate an elf file + +e.g. +`gcc simple.c -g -o simple-my_arch.elf + +where gcc is the appropriate compiler +examples of gcc in linux would be: +- aarch64-linux-gnu-gcc +- power-linux-gnu-gcc +... + +2- read certain fields: + +`readelf simple-my_arch.elf -s +or +`readelf simple-my_arch.elf -a + + +3- update ElfTest.java by adding the new architecture into the method "elfArchitectures" + +That is it. \ No newline at end of file diff --git a/core/org.eclipse.cdt.core.tests/resources/elf/unit_test/simple-be32.elf b/core/org.eclipse.cdt.core.tests/resources/elf/unit_test/simple-be32.elf new file mode 100755 index 0000000000000000000000000000000000000000..a94056380dfa3028626239f4a23b1770d15135c6 GIT binary patch literal 69736 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 literal 0 HcmV?d00001 diff --git a/core/org.eclipse.cdt.core.tests/resources/elf/unit_test/simple.c b/core/org.eclipse.cdt.core.tests/resources/elf/unit_test/simple.c new file mode 100644 index 00000000000..ed52c24d253 --- /dev/null +++ b/core/org.eclipse.cdt.core.tests/resources/elf/unit_test/simple.c @@ -0,0 +1,9 @@ +int function(int argument) +{ + return 2 * argument; +} + +int main() +{ + return function(2); +} diff --git a/core/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/core/suite/AutomatedIntegrationSuite.java b/core/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/core/suite/AutomatedIntegrationSuite.java index cfa0142ad91..f8453660dce 100644 --- a/core/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/core/suite/AutomatedIntegrationSuite.java +++ b/core/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/core/suite/AutomatedIntegrationSuite.java @@ -45,6 +45,7 @@ import org.eclipse.cdt.utils.StorableCdtVariablesTest; import org.eclipse.cdt.utils.UNCPathConverterTest; import org.eclipse.cdt.utils.WeakHashSetTest; import org.eclipse.cdt.utils.elf.ElfParserTest; +import org.eclipse.cdt.utils.elf.ElfTest; import junit.framework.JUnit4TestAdapter; import junit.framework.Test; @@ -103,6 +104,7 @@ public class AutomatedIntegrationSuite extends TestSuite { suite.addTest(UNCPathConverterTest.suite()); suite.addTest(TestScopeOfBuildConfigResourceChangesPreference.suite()); suite.addTest(ElfParserTest.suite()); + suite.addTest(new JUnit4TestAdapter(ElfTest.class)); // Add in PDOM tests suite.addTest(PDOMTests.suite());