Add support for R_AMDGPU_RELATIVE64

- Add support for R_AMDGPU_RELATIVE64 relocation record.
- Return status error if any unsupported relocation record encountered.

Change-Id: Icbb5dcb81109a70c1f2195412a0df58a11be9da1


[ROCm/ROCR-Runtime commit: d472b24d05]
This commit is contained in:
Tony Tye
2018-01-25 21:06:05 -05:00
parent 2b39004aa6
commit ab3c53761b
2 changed files with 9 additions and 6 deletions
@@ -116,6 +116,7 @@ typedef enum {
#define R_AMDGPU_64 3
#define R_AMDGPU_INIT_SAMPLER 4
#define R_AMDGPU_INIT_IMAGE 5
#define R_AMDGPU_RELATIVE64 13
// AMD GPU Note Type Enumeration Values.
#define NT_AMDGPU_HSA_CODE_OBJECT_VERSION 1
@@ -1673,14 +1673,16 @@ hsa_status_t ExecutableImpl::ApplyDynamicRelocation(hsa_agent_t agent, amd::hsa:
break;
}
case R_AMDGPU_INIT_IMAGE:
case R_AMDGPU_INIT_SAMPLER:
// Images and samplers are not supported in v2.1.
return HSA_STATUS_ERROR_INVALID_CODE_OBJECT;
case R_AMDGPU_RELATIVE64:
{
int64_t baseDelta = reinterpret_cast<uint64_t>(relSeg->Address(0)) - relSeg->VAddr();
uint64_t relocatedAddr = baseDelta + rel->addend();
relSeg->Copy(rel->offset(), &relocatedAddr, sizeof(relocatedAddr));
break;
}
default:
// Ignore.
break;
return HSA_STATUS_ERROR_INVALID_CODE_OBJECT;
}
return HSA_STATUS_SUCCESS;
}