diff --git a/llvm/test/MC/SBF/sbf-include-basic.s b/llvm/test/MC/SBF/sbf-include-basic.s new file mode 100644 index 0000000000000..7a423a454a573 --- /dev/null +++ b/llvm/test/MC/SBF/sbf-include-basic.s @@ -0,0 +1,22 @@ +# RUN: llvm-mc %s -triple=sbf-solana-solana -filetype=obj -I %p -o %t.o +# RUN: llvm-objdump -d %t.o | FileCheck %s --check-prefix=CHECK-OBJ + +# Test basic .include directive functionality for SBF + +.include "sbf-include-helper.s" + +.text +.globl entrypoint +entrypoint: + call custom_log + exit + +# CHECK-OBJ: lddw +# CHECK-OBJ: r1 +# CHECK-OBJ: lddw +# CHECK-OBJ: r2, 0xe +# CHECK-OBJ: call +# CHECK-OBJ: exit +# CHECK-OBJ: : +# CHECK-OBJ: call +# CHECK-OBJ: exit diff --git a/llvm/test/MC/SBF/sbf-include-globl-helper.s b/llvm/test/MC/SBF/sbf-include-globl-helper.s new file mode 100644 index 0000000000000..df30bf9939f1a --- /dev/null +++ b/llvm/test/MC/SBF/sbf-include-globl-helper.s @@ -0,0 +1,9 @@ +# Helper file for sbf-include-no-globl.s +# This file contains a .globl directive which should produce an error +# when included + +.text +.globl helper_fn +helper_fn: + mov64 r0, 0 + exit diff --git a/llvm/test/MC/SBF/sbf-include-helper.s b/llvm/test/MC/SBF/sbf-include-helper.s new file mode 100644 index 0000000000000..0ff40fd6fa44c --- /dev/null +++ b/llvm/test/MC/SBF/sbf-include-helper.s @@ -0,0 +1,11 @@ +# Helper file for sbf-include-basic.s +# This file defines a simple function that can be included + +custom_log: + lddw r1, message + lddw r2, 14 + call sol_log_ + exit + +.rodata + message: .ascii "Hello, Solana!" diff --git a/llvm/test/MC/SBF/sbf-include-missing.s b/llvm/test/MC/SBF/sbf-include-missing.s new file mode 100644 index 0000000000000..ba74b616ddebe --- /dev/null +++ b/llvm/test/MC/SBF/sbf-include-missing.s @@ -0,0 +1,15 @@ +# RUN: not llvm-mc %s -triple=sbf-solana-solana -filetype=obj -I %p 2>&1 \ +# RUN: | FileCheck %s --check-prefix=CHECK + +# Test that including a non-existent file produces an error + +# CHECK: error: +# CHECK: Could not find include file +# CHECK: nonexistent_file.s + +.include "nonexistent_file.s" + +.text +.globl entrypoint +entrypoint: + exit diff --git a/llvm/test/MC/SBF/sbf-include-nested-inner.s b/llvm/test/MC/SBF/sbf-include-nested-inner.s new file mode 100644 index 0000000000000..2e3e78dcea27f --- /dev/null +++ b/llvm/test/MC/SBF/sbf-include-nested-inner.s @@ -0,0 +1,11 @@ +# Inner file for nested include test +# This file is included by sbf-include-nested-middle.s + +custom_log: + lddw r1, message + lddw r2, 7 + call sol_log_ + exit + +.rodata + message: .ascii "Nested!" diff --git a/llvm/test/MC/SBF/sbf-include-nested-middle.s b/llvm/test/MC/SBF/sbf-include-nested-middle.s new file mode 100644 index 0000000000000..ace9429d97c9e --- /dev/null +++ b/llvm/test/MC/SBF/sbf-include-nested-middle.s @@ -0,0 +1,4 @@ +# Middle file for nested include test +# This file is included by sbf-include-nested.s and includes the inner file + +.include "sbf-include-nested-inner.s" diff --git a/llvm/test/MC/SBF/sbf-include-nested.s b/llvm/test/MC/SBF/sbf-include-nested.s new file mode 100644 index 0000000000000..c3596c933af06 --- /dev/null +++ b/llvm/test/MC/SBF/sbf-include-nested.s @@ -0,0 +1,22 @@ +# RUN: llvm-mc %s -triple=sbf-solana-solana -filetype=obj -I %p -o %t.o +# RUN: llvm-objdump -d %t.o | FileCheck %s --check-prefix=CHECK-OBJ + +# Test nested .include directive functionality for SBF + +.include "sbf-include-nested-middle.s" + +.text +.globl entrypoint +entrypoint: + call custom_log + exit + +# CHECK-OBJ: lddw +# CHECK-OBJ: r1 +# CHECK-OBJ: lddw +# CHECK-OBJ: r2, 0x7 +# CHECK-OBJ: call +# CHECK-OBJ: exit +# CHECK-OBJ: : +# CHECK-OBJ: call +# CHECK-OBJ: exit diff --git a/llvm/test/MC/SBF/sbf-include-no-globl.s b/llvm/test/MC/SBF/sbf-include-no-globl.s new file mode 100644 index 0000000000000..984b75b391576 --- /dev/null +++ b/llvm/test/MC/SBF/sbf-include-no-globl.s @@ -0,0 +1,16 @@ +# RUN: not llvm-mc %s -triple=sbf-solana-solana -filetype=obj -I %p 2>&1 \ +# RUN: | FileCheck %s --check-prefix=CHECK + +# Test that .globl in an included file produces an error for SBF + +# CHECK: error: +# CHECK: .globl 'helper_fn' is not allowed in included files +# CHECK: Only the main entrypoint file should declare .globl symbols + +.include "sbf-include-globl-helper.s" + +.text +.globl entrypoint +entrypoint: + call helper_fn + exit