Ignore:
Timestamp:
Jan 27, 2018, 4:49:47 PM (23 months ago)
Author:
matszpk
Message:

CLRadeonExtender: ROCmBinGen: Include different section indices in the symbols depends on the input configuration.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • CLRadeonExtender/trunk/amdbin/ROCmBinaries.cpp

    r3668 r3669  
    336336            0xe0, EV_CURRENT, UINT_MAX, 0, eflags },
    337337            true, true, true, PHREGION_FILESTART);
    338     // add symbols (kernels, function kernels and data symbols)
    339     elfBinGen64.addSymbol(ElfSymbol64("_DYNAMIC", 5,
    340                   ELF64_ST_INFO(STB_LOCAL, STT_NOTYPE), STV_HIDDEN, true, 0, 0));
    341     for (const ROCmSymbolInput& symbol: input->symbols)
    342     {
    343         ElfSymbol64 elfsym;
    344         switch (symbol.type)
    345         {
    346             case ROCmRegionType::KERNEL:
    347                 elfsym = ElfSymbol64(symbol.symbolName.c_str(), 4,
    348                       ELF64_ST_INFO(STB_GLOBAL, STT_GNU_IFUNC), 0, true,
    349                       symbol.offset, symbol.size);
    350                 break;
    351             case ROCmRegionType::FKERNEL:
    352                 elfsym = ElfSymbol64(symbol.symbolName.c_str(), 4,
    353                       ELF64_ST_INFO(STB_GLOBAL, STT_FUNC), 0, true,
    354                       symbol.offset, symbol.size);
    355                 break;
    356             case ROCmRegionType::DATA:
    357                 elfsym = ElfSymbol64(symbol.symbolName.c_str(), 4,
    358                       ELF64_ST_INFO(STB_GLOBAL, STT_OBJECT), 0, true,
    359                       symbol.offset, symbol.size);
    360                 break;
    361             default:
    362                 break;
    363         }
    364         // add to symbols and dynamic symbols table
    365         elfBinGen64.addSymbol(elfsym);
    366         elfBinGen64.addDynSymbol(elfsym);
    367     }
    368    
    369     static const int32_t dynTags[] = {
    370         DT_SYMTAB, DT_SYMENT, DT_STRTAB, DT_STRSZ, DT_HASH };
    371     elfBinGen64.addDynamics(sizeof(dynTags)/sizeof(int32_t), dynTags);
    372338   
    373339    uint16_t mainBuiltinSectTable[ROCMSECTID_MAX-ELFSECTID_START+1];
     
    396362    addMainSectionToTable(mainSectionsNum, mainBuiltinSectTable, ELFSECTID_SHSTRTAB);
    397363    addMainSectionToTable(mainSectionsNum, mainBuiltinSectTable, ELFSECTID_STRTAB);
     364   
     365    // add symbols (kernels, function kernels and data symbols)
     366    elfBinGen64.addSymbol(ElfSymbol64("_DYNAMIC",
     367                  mainBuiltinSectTable[ROCMSECTID_DYNAMIC-ELFSECTID_START],
     368                  ELF64_ST_INFO(STB_LOCAL, STT_NOTYPE), STV_HIDDEN, true, 0, 0));
     369    const uint16_t textSectIndex = mainBuiltinSectTable[ELFSECTID_TEXT-ELFSECTID_START];
     370    for (const ROCmSymbolInput& symbol: input->symbols)
     371    {
     372        ElfSymbol64 elfsym;
     373        switch (symbol.type)
     374        {
     375            case ROCmRegionType::KERNEL:
     376                elfsym = ElfSymbol64(symbol.symbolName.c_str(), textSectIndex,
     377                      ELF64_ST_INFO(STB_GLOBAL, STT_GNU_IFUNC), 0, true,
     378                      symbol.offset, symbol.size);
     379                break;
     380            case ROCmRegionType::FKERNEL:
     381                elfsym = ElfSymbol64(symbol.symbolName.c_str(), textSectIndex,
     382                      ELF64_ST_INFO(STB_GLOBAL, STT_FUNC), 0, true,
     383                      symbol.offset, symbol.size);
     384                break;
     385            case ROCmRegionType::DATA:
     386                elfsym = ElfSymbol64(symbol.symbolName.c_str(), textSectIndex,
     387                      ELF64_ST_INFO(STB_GLOBAL, STT_OBJECT), 0, true,
     388                      symbol.offset, symbol.size);
     389                break;
     390            default:
     391                break;
     392        }
     393        // add to symbols and dynamic symbols table
     394        elfBinGen64.addSymbol(elfsym);
     395        elfBinGen64.addDynSymbol(elfsym);
     396    }
     397   
     398    static const int32_t dynTags[] = {
     399        DT_SYMTAB, DT_SYMENT, DT_STRTAB, DT_STRSZ, DT_HASH };
     400    elfBinGen64.addDynamics(sizeof(dynTags)/sizeof(int32_t), dynTags);
    398401   
    399402    // elf program headers
Note: See TracChangeset for help on using the changeset viewer.