Changeset 3738 in CLRX


Ignore:
Timestamp:
Feb 7, 2018, 3:20:13 PM (15 months ago)
Author:
matszpk
Message:

CLRadeonExtender: ElfBin?: put to symtab and dynsym info index of the last local symbol (conform with standard).

Location:
CLRadeonExtender/trunk
Files:
5 edited

Legend:

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

    r3575 r3738  
    705705   
    706706    /// get symtab section
    707     static ElfRegionTemplate symtabSection()
     707    static ElfRegionTemplate symtabSection(bool defInfo = true)
    708708    { return ElfRegionTemplate(0, (const cxbyte*)nullptr, sizeof(typename Types::Word),
    709                 ".symtab", SHT_SYMTAB, 0); }
     709                ".symtab", SHT_SYMTAB, 0, 0, defInfo ? BINGEN_DEFAULT : 0); }
    710710   
    711711    /// get dynsym section
    712     static ElfRegionTemplate dynsymSection()
     712    static ElfRegionTemplate dynsymSection(bool defInfo = true)
    713713    { return ElfRegionTemplate(0, (const cxbyte*)nullptr, sizeof(typename Types::Word),
    714                 ".dynsym", SHT_DYNSYM, SHF_ALLOC); }
     714                ".dynsym", SHT_DYNSYM, SHF_ALLOC, 0, defInfo ? BINGEN_DEFAULT : 0); }
    715715   
    716716    /// get hash section
  • CLRadeonExtender/trunk/amdbin/AmdCL2BinGen.cpp

    r3712 r3738  
    24542454        {
    24552455            /* new driver version */
    2456             innerBinGen->addRegion(ElfRegion64::symtabSection());
     2456            innerBinGen->addRegion(ElfRegion64::symtabSection(false));
    24572457            innerBinSectionTable[ELFSECTID_SYMTAB-ELFSECTID_START] = extraSectionIndex++;
    24582458        }
     
    25202520                                  SHT_STRTAB, SHF_STRINGS, 0, 0));
    25212521            innerBinSectionTable[ELFSECTID_STRTAB-ELFSECTID_START] = extraSectionIndex++;
    2522             innerBinGen->addRegion(ElfRegion64::symtabSection());
     2522            innerBinGen->addRegion(ElfRegion64::symtabSection(false));
    25232523            innerBinSectionTable[ELFSECTID_SYMTAB-ELFSECTID_START] = extraSectionIndex++;
    25242524            innerBinGen->addRegion(ElfRegion64(0, (const cxbyte*)nullptr, 1, ".shstrtab",
  • CLRadeonExtender/trunk/amdbin/ElfBinaries.cpp

    r3575 r3738  
    1919
    2020#include <CLRX/Config.h>
     21#include <algorithm>
    2122#include <cstdlib>
    2223#include <cstring>
     
    10181019                    else // otherwise if not match this size
    10191020                        SLEV(shdr.sh_size, regionOffsets[j+1]-regionOffsets[j]);
    1020                     SLEV(shdr.sh_info, region2.section.info);
     1021                   
     1022                    if ((region2.section.type!=SHT_SYMTAB &&
     1023                         region2.section.type!=SHT_DYNSYM) ||
     1024                            region2.section.info != BINGEN_DEFAULT)
     1025                        // put set info
     1026                        SLEV(shdr.sh_info, region2.section.info);
     1027                    else // if symbtabs
     1028                    {
     1029                        // otherwise if default for symtabs, put count of last local
     1030                        const auto& symbolsList = (region2.section.type == SHT_SYMTAB) ?
     1031                            symbols : dynSymbols;
     1032                        cxuint lastLocal = 0;
     1033                        for (size_t l = 0; l < symbolsList.size(); l++)
     1034                            if (ELF32_ST_BIND(symbolsList[l].info)==STB_LOCAL)
     1035                                lastLocal = l+1;
     1036                        if ((region2.section.type==SHT_SYMTAB && addNullSym) ||
     1037                            (region2.section.type==SHT_DYNSYM && addNullDynSym))
     1038                            lastLocal++;
     1039                        SLEV(shdr.sh_info, lastLocal);
     1040                    }
     1041                   
    10211042                    SLEV(shdr.sh_addralign, (region2.section.align==0) ?
    10221043                            region2.align : region2.section.align);
  • CLRadeonExtender/trunk/amdbin/GalliumBinaries.cpp

    r3661 r3738  
    716716    elfBinGen.addRegion(ElfRegion::shstrtabSection());
    717717    elfBinGen.addRegion(ElfRegion::sectionHeaderTable());
    718     elfBinGen.addRegion(ElfRegion::symtabSection());
     718    elfBinGen.addRegion(ElfRegion::symtabSection(false));
    719719    elfBinGen.addRegion(ElfRegion::strtabSection());
    720720    /* symbols */
  • CLRadeonExtender/trunk/amdbin/ROCmBinaries.cpp

    r3736 r3738  
    20822082   
    20832083    elfBinGen64.addRegion(ElfRegion64(0, (const cxbyte*)nullptr, 8,
    2084                 ".dynsym", SHT_DYNSYM, SHF_ALLOC, 0, 1, Elf64Types::nobase));
     2084                ".dynsym", SHT_DYNSYM, SHF_ALLOC, 0, BINGEN_DEFAULT, Elf64Types::nobase));
    20852085    elfBinGen64.addRegion(ElfRegion64(0, (const cxbyte*)nullptr, 4,
    20862086                ".hash", SHT_HASH, SHF_ALLOC,
     
    21062106              SHT_PROGBITS, SHF_MERGE|SHF_STRINGS, 0, 0, 0, 1));
    21072107    elfBinGen64.addRegion(ElfRegion64(0, (const cxbyte*)nullptr, 8,
    2108                 ".symtab", SHT_SYMTAB, 0, 0, 2));
     2108                ".symtab", SHT_SYMTAB, 0, 0, BINGEN_DEFAULT));
    21092109    elfBinGen64.addRegion(ElfRegion64::shstrtabSection());
    21102110    elfBinGen64.addRegion(ElfRegion64::strtabSection());
Note: See TracChangeset for help on using the changeset viewer.