Changeset 4935 in CLRX


Ignore:
Timestamp:
Aug 25, 2019, 4:45:11 PM (3 weeks ago)
Author:
matszpk
Message:

CLRadeonExtender: ROCm: next fixes for disassemblying LLVM10 bin format. First working disassembler for OpenCL Navi binaries.

Location:
CLRadeonExtender/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • CLRadeonExtender/trunk/amdasm/DisasmInternals.h

    r3575 r4935  
    7272            const std::vector<ROCmDisasmRegionInput>& regions,
    7373            size_t codeSize, const cxbyte* code, ISADisassembler* isaDisassembler,
    74             Flags flags);
     74            Flags flags, bool llvm10BinFormat = false);
    7575
    7676// disassemble Gallium binary input
  • CLRadeonExtender/trunk/amdasm/DisasmROCm.cpp

    r4934 r4935  
    568568            const std::vector<ROCmDisasmRegionInput>& regions,
    569569            size_t codeSize, const cxbyte* code, ISADisassembler* isaDisassembler,
    570             Flags flags)
     570            Flags flags, bool llvm10BinFormat)
    571571{
    572572    const bool doDumpData = ((flags & DISASM_DUMPDATA) != 0);
     
    595595    }
    596596   
     597    const size_t kconfigSize = llvm10BinFormat ? 0 : 256;
     598   
    597599    for (size_t i = 0; i < regionsNum; i++)
    598600    {
     
    601603             region.type==ROCmRegionType::FKERNEL) && doDumpCode)
    602604        {
    603             if (region.offset+256 > codeSize)
     605            if (region.offset+kconfigSize > codeSize)
    604606                throw DisasmException("Region Offset out of range");
    605607            // kernel code begin after HSA config
    606             isaDisassembler->setInput(region.size-256, code + region.offset+256,
    607                                 region.offset+256);
     608            isaDisassembler->setInput(region.size-kconfigSize,
     609                                code + region.offset+kconfigSize,
     610                                region.offset+kconfigSize);
    608611            isaDisassembler->analyzeBeforeDisassemble();
    609612        }
     
    662665                if (!doDumpConfig)
    663666                    printDisasmData(0x100, code + region.offset, output, true);
    664                 else    // skip, config was dumped in kernel configuration
     667                else if (kconfigSize!=0)
     668                    // skip, config was dumped in kernel configuration
    665669                    output.write(".skip 256\n", 10);
    666670            }
    667671           
    668             if (doDumpCode && dataSize >= 256)
     672            if (doDumpCode && dataSize >= kconfigSize)
    669673            {
    670674                // dump code of region
    671                 isaDisassembler->setInput(dataSize-256, code + region.offset+256,
    672                                 region.offset+256, region.offset+1);
     675                isaDisassembler->setInput(dataSize-kconfigSize,
     676                                code + region.offset+kconfigSize,
     677                                region.offset+kconfigSize, region.offset+1);
    673678                isaDisassembler->setDontPrintLabels(i+1<regionsNum);
    674679                isaDisassembler->disassemble();
     
    10961101    // disassembly code in HSA form
    10971102    if (rocmInput->code != nullptr && rocmInput->codeSize != 0)
    1098         disassembleAMDHSACode(output, rocmInput->regions,
    1099                         rocmInput->codeSize, rocmInput->code, isaDisassembler, flags);
     1103        disassembleAMDHSACode(output, rocmInput->regions, rocmInput->codeSize,
     1104                    rocmInput->code, isaDisassembler, flags, rocmInput->llvm10BinFormat);
    11001105}
  • CLRadeonExtender/trunk/amdbin/ROCmBinaries.cpp

    r4934 r4935  
    175175                throw BinException("Kernel or code offset is too big!");
    176176            const char* symName = getSymbolName(i);
    177             regions[j++] = { symName, size, value, type };
     177            regions[j] = { symName, size, value, type };
     178            kernelDescs[j] = nullptr;
    178179            if (llvm10BinFormat)
    179180            {
     
    181182                                        CString(symName));
    182183                if (it != tmpKernelDescs.end())
    183                     kernelDescs[i] = reinterpret_cast<const ROCmKernelDescriptor*>(
    184                                 rodataContent + it->second);
    185                 else
    186                     kernelDescs[i] = nullptr;
     184                    kernelDescs[j] = reinterpret_cast<const ROCmKernelDescriptor*>(
     185                                binaryCode + it->second);
    187186            }
     187            j++;
    188188        }
    189189    }
Note: See TracChangeset for help on using the changeset viewer.