mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-12-14 11:39:35 +00:00
AMDHSA: Code object v3 updates
- Copy kernel symbol attributes into kernel descriptor attributes - Make sure kernel symbol's visibility is not "higher" than protected Differential Revision: https://reviews.llvm.org/D59057 llvm-svn: 355630
This commit is contained in:
parent
d0156256e2
commit
47f0bf8f1f
@ -554,16 +554,25 @@ void AMDGPUTargetELFStreamer::EmitAmdhsaKernelDescriptor(
|
||||
auto &Streamer = getStreamer();
|
||||
auto &Context = Streamer.getContext();
|
||||
|
||||
MCSymbolELF *KernelCodeSymbol = cast<MCSymbolELF>(
|
||||
Context.getOrCreateSymbol(Twine(KernelName)));
|
||||
MCSymbolELF *KernelDescriptorSymbol = cast<MCSymbolELF>(
|
||||
Context.getOrCreateSymbol(Twine(KernelName) + Twine(".kd")));
|
||||
KernelDescriptorSymbol->setBinding(ELF::STB_GLOBAL);
|
||||
|
||||
// Copy kernel descriptor symbol's binding, other and visibility from the
|
||||
// kernel code symbol.
|
||||
KernelDescriptorSymbol->setBinding(KernelCodeSymbol->getBinding());
|
||||
KernelDescriptorSymbol->setOther(KernelCodeSymbol->getOther());
|
||||
KernelDescriptorSymbol->setVisibility(KernelCodeSymbol->getVisibility());
|
||||
// Kernel descriptor symbol's type and size are fixed.
|
||||
KernelDescriptorSymbol->setType(ELF::STT_OBJECT);
|
||||
KernelDescriptorSymbol->setSize(
|
||||
MCConstantExpr::create(sizeof(KernelDescriptor), Context));
|
||||
|
||||
MCSymbolELF *KernelCodeSymbol = cast<MCSymbolELF>(
|
||||
Context.getOrCreateSymbol(Twine(KernelName)));
|
||||
KernelCodeSymbol->setBinding(ELF::STB_LOCAL);
|
||||
// The visibility of the kernel code symbol must be protected or less to allow
|
||||
// static relocations from the kernel descriptor to be used.
|
||||
if (KernelCodeSymbol->getVisibility() == ELF::STV_DEFAULT)
|
||||
KernelCodeSymbol->setVisibility(ELF::STV_PROTECTED);
|
||||
|
||||
Streamer.EmitLabel(KernelDescriptorSymbol);
|
||||
Streamer.EmitBytes(StringRef(
|
||||
|
@ -50,14 +50,14 @@
|
||||
; OSABI-AMDHSA-ELF: .rodata PROGBITS {{[0-9]+}} {{[0-9]+}} {{[0-9a-f]+}} {{[0-9]+}} A {{[0-9]+}} {{[0-9]+}} 64
|
||||
|
||||
; OSABI-AMDHSA-ELF: Relocation section '.rela.rodata' at offset
|
||||
; OSABI-AMDHSA-ELF: 0000000000000010 0000000300000005 R_AMDGPU_REL64 0000000000000000 .text + 10
|
||||
; OSABI-AMDHSA-ELF: 0000000000000050 0000000300000005 R_AMDGPU_REL64 0000000000000000 .text + 110
|
||||
; OSABI-AMDHSA-ELF: 0000000000000010 0000000100000005 R_AMDGPU_REL64 0000000000000000 fadd + 10
|
||||
; OSABI-AMDHSA-ELF: 0000000000000050 0000000300000005 R_AMDGPU_REL64 0000000000000100 fsub + 10
|
||||
|
||||
; OSABI-AMDHSA-ELF: Symbol table '.symtab' contains {{[0-9]+}} entries
|
||||
; OSABI-AMDHSA-ELF: {{[0-9]+}}: 0000000000000000 {{[0-9]+}} FUNC LOCAL DEFAULT {{[0-9]+}} fadd
|
||||
; OSABI-AMDHSA-ELF: {{[0-9]+}}: 0000000000000100 {{[0-9]+}} FUNC LOCAL DEFAULT {{[0-9]+}} fsub
|
||||
; OSABI-AMDHSA-ELF: {{[0-9]+}}: 0000000000000000 64 OBJECT GLOBAL DEFAULT {{[0-9]+}} fadd.kd
|
||||
; OSABI-AMDHSA-ELF: {{[0-9]+}}: 0000000000000040 64 OBJECT GLOBAL DEFAULT {{[0-9]+}} fsub.kd
|
||||
; OSABI-AMDHSA-ELF: {{[0-9]+}}: 0000000000000000 {{[0-9]+}} FUNC GLOBAL PROTECTED {{[0-9]+}} fadd
|
||||
; OSABI-AMDHSA-ELF: {{[0-9]+}}: 0000000000000000 64 OBJECT GLOBAL DEFAULT {{[0-9]+}} fadd.kd
|
||||
; OSABI-AMDHSA-ELF: {{[0-9]+}}: 0000000000000100 {{[0-9]+}} FUNC GLOBAL PROTECTED {{[0-9]+}} fsub
|
||||
; OSABI-AMDHSA-ELF: {{[0-9]+}}: 0000000000000040 64 OBJECT GLOBAL DEFAULT {{[0-9]+}} fsub.kd
|
||||
|
||||
; OSABI-AMDHSA-ELF: Displaying notes found at file offset
|
||||
; OSABI-AMDHSA-ELF: AMDGPU 0x{{[0-9a-f]+}} NT_AMDGPU_METADATA (AMDGPU Metadata)
|
||||
|
@ -16,12 +16,12 @@
|
||||
// READOBJ: 0000000000000090 {{[0-9a-f]+}}00000005 R_AMDGPU_REL64 0000000000000000 .text + 210
|
||||
|
||||
// READOBJ: Symbol table '.symtab' contains {{[0-9]+}} entries:
|
||||
// READOBJ: {{[0-9]+}}: 0000000000000100 0 FUNC LOCAL DEFAULT 2 complete
|
||||
// READOBJ: {{[0-9]+}}: 0000000000000000 0 FUNC LOCAL DEFAULT 2 minimal
|
||||
// READOBJ: {{[0-9]+}}: 0000000000000200 0 FUNC LOCAL DEFAULT 2 special_sgpr
|
||||
// READOBJ: {{[0-9]+}}: 0000000000000040 64 OBJECT GLOBAL DEFAULT 3 complete.kd
|
||||
// READOBJ: {{[0-9]+}}: 0000000000000000 64 OBJECT GLOBAL DEFAULT 3 minimal.kd
|
||||
// READOBJ: {{[0-9]+}}: 0000000000000080 64 OBJECT GLOBAL DEFAULT 3 special_sgpr.kd
|
||||
// READOBJ: {{[0-9]+}}: 0000000000000100 0 FUNC LOCAL PROTECTED 2 complete
|
||||
// READOBJ: {{[0-9]+}}: 0000000000000040 64 OBJECT LOCAL DEFAULT 3 complete.kd
|
||||
// READOBJ: {{[0-9]+}}: 0000000000000000 0 FUNC LOCAL PROTECTED 2 minimal
|
||||
// READOBJ: {{[0-9]+}}: 0000000000000000 64 OBJECT LOCAL DEFAULT 3 minimal.kd
|
||||
// READOBJ: {{[0-9]+}}: 0000000000000200 0 FUNC LOCAL PROTECTED 2 special_sgpr
|
||||
// READOBJ: {{[0-9]+}}: 0000000000000080 64 OBJECT LOCAL DEFAULT 3 special_sgpr.kd
|
||||
|
||||
// OBJDUMP: Contents of section .rodata
|
||||
// Note, relocation for KERNEL_CODE_ENTRY_BYTE_OFFSET is not resolved here.
|
||||
|
Loading…
Reference in New Issue
Block a user