Changeset 2551 in CLRX


Ignore:
Timestamp:
Nov 8, 2016, 10:48:26 PM (4 years ago)
Author:
matszpk
Message:

CLRadeonExtender: Apply Elf notes support in AmdCL2BinGen. write name with zero while storing note in elf (ElfBinGen?).
Add constructors to ElfNote?.

Location:
CLRadeonExtender/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • CLRadeonExtender/trunk/CLRX/amdbin/ElfBinaries.h

    r2550 r2551  
    645645    const cxbyte* desc;
    646646    uint32_t type;
     647   
     648    ElfNote() : name(nullptr), descSize(0), desc(nullptr), type(0)
     649    { }
     650    ElfNote(const char* _name, size_t _descSize, const cxbyte* _desc, uint32_t _type)
     651        : name(_name), descSize(_descSize), desc(_desc), type(_type)
     652    { }
    647653};
    648654
  • CLRadeonExtender/trunk/amdbin/AmdCL2BinGen.cpp

    r2550 r2551  
    16411641};
    16421642
     1643static const cxbyte noteDescType1[8] = { 1, 0, 0, 0, 0, 0, 0, 0 };
     1644static const cxbyte noteDescType2[12] = { 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0 };
     1645static const cxbyte noteDescType3[30] =
     1646{ 4, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     1647  'A', 'M', 'D', 0, 'A', 'M', 'D', 'G', 'P', 'U', 0, 0, 0, 0  };
     1648static const cxbyte noteDescType4[8] =
     1649{ 0xf0, 0x83, 0x17, 0xfb, 0xfc, 0x7f, 0x00, 0x00 };
     1650static const cxbyte noteDescType4_16_3[0x29] =
     1651{ 0x19, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'A', 'M', 'D', ' ', 'H', 'S', 'A', ' ',
     1652  'R', 'u', 'n', 't', 'i', 'm', 'e', ' ',
     1653  'F', 'i', 'n', 'a', 'l', 'i', 'z', 'e', 'r', 0, 0, 0, 0  };
     1654static const cxbyte noteDescType5[25] =
     1655{ 0x16, 0, '-', 'h', 's', 'a', '_', 'c', 'a', 'l', 'l', '_',
     1656    'c', 'o', 'n', 'v', 'e', 'n', 't', 'i', 'o', 'n', '=', 0, 0 };
     1657static const cxbyte noteDescType5_16_3[26] =
     1658{ 0x16, 0, '-', 'h', 's', 'a', '_', 'c', 'a', 'l', 'l', '_',
     1659    'c', 'o', 'n', 'v', 'e', 'n', 't', 'i', 'o', 'n', '=', '0', 0, 0 };
     1660static const cxbyte noteDescType5_gpupro[26] =
     1661{ 0x16, 0, '-', 'h', 's', 'a', '_', 'c', 'a', 'l', 'l', '_',
     1662    'c', 'o', 'n', 'v', 'e', 'n', 't', 'i', 'o', 'n', '=', '0', 0, 't' };
     1663
    16431664static const size_t noteAMDGPUTypeOffset = 0x74;
    16441665
     
    19792000            innerBinSectionTable[ELFSECTID_STRTAB-ELFSECTID_START] = extraSectionIndex++;
    19802001           
    1981             noteBuf.reset(new cxbyte[sizeof(noteSectionData16_3)]);
    1982             ::memcpy(noteBuf.get(), noteSectionData16_3, sizeof(noteSectionData16_3));
    19832002            // set AMDGPU type
    19842003            /*
     
    19902009             * AMD - 5 - size=0x19 \x16\000-hsa_call_convention=\0\0
    19912010             */
    1992             SULEV(*(uint32_t*)(noteBuf.get()+noteAMDGPUTypeOffset_16_3),
    1993                   amdGpuArchValues.major);
    1994             SULEV(*(uint32_t*)(noteBuf.get()+noteAMDGPUTypeOffset_16_3 + 4),
    1995                   amdGpuArchValues.minor);
    1996             SULEV(*(uint32_t*)(noteBuf.get()+noteAMDGPUTypeOffset_16_3 + 8),
    1997                   amdGpuArchValues.stepping);
     2011            innerBinGen->addNote(ElfNote("AMD", sizeof noteDescType1, noteDescType1, 1U));
     2012            innerBinGen->addNote(ElfNote("AMD", sizeof noteDescType2, noteDescType2, 2U));
     2013            noteBuf.reset(new cxbyte[0x1a]);
     2014            ::memcpy(noteBuf.get(), noteDescType3, 0x1a);
     2015            SULEV(*(uint32_t*)(noteBuf.get()+4), amdGpuArchValues.major);
     2016            SULEV(*(uint32_t*)(noteBuf.get()+8), amdGpuArchValues.minor);
     2017            SULEV(*(uint32_t*)(noteBuf.get()+12), amdGpuArchValues.stepping);
     2018            innerBinGen->addNote(ElfNote("AMD", 0x1a, noteBuf.get(), 3U));
     2019            innerBinGen->addNote(ElfNote("AMD",
     2020                         sizeof noteDescType4_16_3, noteDescType4_16_3, 4U));
     2021            if (!gpuProDriver)
     2022                innerBinGen->addNote(ElfNote("AMD",
     2023                             sizeof noteDescType5_16_3, noteDescType5_16_3, 5U));
     2024            else
     2025                innerBinGen->addNote(ElfNote("AMD",
     2026                             sizeof noteDescType5_gpupro, noteDescType5_gpupro, 5U));
    19982027           
    1999             if (gpuProDriver)
    2000                 noteBuf[197] = 't';
    2001             innerBinGen->addRegion(ElfRegion64(sizeof(noteSectionData16_3),
    2002                        noteBuf.get(), 8, ".note", SHT_NOTE, 0));
     2028            innerBinGen->addRegion(ElfRegion64::noteSection());
    20032029            innerBinSectionTable[AMDCL2SECTID_NOTE-ELFSECTID_START] = extraSectionIndex++;
    20042030        }
     
    20722098             * AMD - 4 - size=8 random values 0x7ffXXXXXXXX
    20732099             */
    2074             noteBuf.reset(new cxbyte[sizeof(noteSectionData)]);
    2075             ::memcpy(noteBuf.get(), noteSectionData, sizeof(noteSectionData));
    2076             // set AMDGPU type
    2077             SULEV(*(uint32_t*)(noteBuf.get()+noteAMDGPUTypeOffset),
    2078                   amdGpuArchValues.major);
    2079             SULEV(*(uint32_t*)(noteBuf.get()+noteAMDGPUTypeOffset + 4),
    2080                   amdGpuArchValues.minor);
    2081             SULEV(*(uint32_t*)(noteBuf.get()+noteAMDGPUTypeOffset + 8),
    2082                   amdGpuArchValues.stepping);
    2083             innerBinGen->addRegion(ElfRegion64(sizeof(noteSectionData),
    2084                        noteBuf.get(), 8, ".note", SHT_NOTE, 0));
     2100            innerBinGen->addNote(ElfNote("AMD", sizeof noteDescType1, noteDescType1, 1U));
     2101            innerBinGen->addNote(ElfNote("AMD", sizeof noteDescType2, noteDescType2, 2U));
     2102            innerBinGen->addNote(ElfNote("AMD", sizeof noteDescType5, noteDescType5, 5U));
     2103            noteBuf.reset(new cxbyte[0x1e]);
     2104            ::memcpy(noteBuf.get(), noteDescType3, 0x1e);
     2105            SULEV(*(uint32_t*)(noteBuf.get()+4), amdGpuArchValues.major);
     2106            SULEV(*(uint32_t*)(noteBuf.get()+8), amdGpuArchValues.minor);
     2107            SULEV(*(uint32_t*)(noteBuf.get()+12), amdGpuArchValues.stepping);
     2108            innerBinGen->addNote(ElfNote("AMD", 0x1e, noteBuf.get(), 3U));
     2109            innerBinGen->addNote(ElfNote("AMD", sizeof noteDescType4, noteDescType4, 4U));
     2110           
     2111            innerBinGen->addRegion(ElfRegion64::noteSection());
    20852112           
    20862113            innerBinSectionTable[AMDCL2SECTID_NOTE-ELFSECTID_START] = extraSectionIndex++;
  • CLRadeonExtender/trunk/amdbin/ElfBinaries.cpp

    r2547 r2551  
    970970                        SLEV(nhdr.n_type, note.type);
    971971                        fob.writeObject(nhdr);
    972                         fob.writeString(note.name);
     972                        fob.write(nameSize, note.name);
    973973                        if ((nameSize&3) != 0)
    974974                            fob.fill(4 - (nameSize&3), 0);
Note: See TracChangeset for help on using the changeset viewer.