mirror of
https://github.com/opencloud-eu/opencloud.git
synced 2026-04-07 00:53:57 -04:00
Bumps [github.com/testcontainers/testcontainers-go](https://github.com/testcontainers/testcontainers-go) from 0.40.0 to 0.41.0. - [Release notes](https://github.com/testcontainers/testcontainers-go/releases) - [Commits](https://github.com/testcontainers/testcontainers-go/compare/v0.40.0...v0.41.0) --- updated-dependencies: - dependency-name: github.com/testcontainers/testcontainers-go dependency-version: 0.41.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
143 lines
4.0 KiB
ArmAsm
143 lines
4.0 KiB
ArmAsm
// SPDX-License-Identifier: Apache-2.0
|
|
// SPDX-FileCopyrightText: 2026 The Ebitengine Authors
|
|
|
|
//go:build linux
|
|
|
|
#include "textflag.h"
|
|
#include "go_asm.h"
|
|
#include "funcdata.h"
|
|
|
|
#define STACK_SIZE 128
|
|
#define PTR_ADDRESS (STACK_SIZE - 4)
|
|
|
|
// syscall15X calls a function in libc on behalf of the syscall package.
|
|
// syscall15X takes a pointer to a struct like:
|
|
// struct {
|
|
// fn uintptr
|
|
// a1 uintptr
|
|
// ...
|
|
// a32 uintptr
|
|
// f1 uintptr
|
|
// ...
|
|
// f16 uintptr
|
|
// arm64_r8 uintptr
|
|
// }
|
|
// syscall15X must be called on the g0 stack with the
|
|
// C calling convention (use libcCall).
|
|
GLOBL ·syscall15XABI0(SB), NOPTR|RODATA, $4
|
|
DATA ·syscall15XABI0(SB)/4, $syscall15X(SB)
|
|
TEXT syscall15X(SB), NOSPLIT|NOFRAME, $0-0
|
|
// Called via C calling convention: R0 = pointer to syscall15Args
|
|
// NOT via Go calling convention
|
|
// Save link register and callee-saved registers first
|
|
MOVW.W R14, -4(R13) // save LR (decrement and store)
|
|
MOVM.DB.W [R4, R5, R6, R7, R8, R9, R11], (R13) // save callee-saved regs
|
|
|
|
MOVW R0, R8
|
|
SUB $STACK_SIZE, R13
|
|
MOVW R8, PTR_ADDRESS(R13)
|
|
|
|
// Load function pointer first (before anything can corrupt R8)
|
|
MOVW syscall15Args_fn(R8), R5
|
|
MOVW R5, (PTR_ADDRESS-4)(R13) // save fn at offset 56
|
|
|
|
// Load floating point arguments
|
|
// Each float64 spans 2 uintptr slots (8 bytes) on ARM32, so we skip by 2
|
|
MOVD syscall15Args_f1(R8), F0 // f1+f2 -> D0
|
|
MOVD syscall15Args_f3(R8), F1 // f3+f4 -> D1
|
|
MOVD syscall15Args_f5(R8), F2 // f5+f6 -> D2
|
|
MOVD syscall15Args_f7(R8), F3 // f7+f8 -> D3
|
|
MOVD syscall15Args_f9(R8), F4 // f9+f10 -> D4
|
|
MOVD syscall15Args_f11(R8), F5 // f11+f12 -> D5
|
|
MOVD syscall15Args_f13(R8), F6 // f13+f14 -> D6
|
|
MOVD syscall15Args_f15(R8), F7 // f15+f16 -> D7
|
|
|
|
// Load integer arguments into registers (R0-R3 for ARM EABI)
|
|
MOVW syscall15Args_a1(R8), R0 // a1
|
|
MOVW syscall15Args_a2(R8), R1 // a2
|
|
MOVW syscall15Args_a3(R8), R2 // a3
|
|
MOVW syscall15Args_a4(R8), R3 // a4
|
|
|
|
// push a5-a32 onto stack
|
|
MOVW syscall15Args_a5(R8), R4
|
|
MOVW R4, 0(R13)
|
|
MOVW syscall15Args_a6(R8), R4
|
|
MOVW R4, 4(R13)
|
|
MOVW syscall15Args_a7(R8), R4
|
|
MOVW R4, 8(R13)
|
|
MOVW syscall15Args_a8(R8), R4
|
|
MOVW R4, 12(R13)
|
|
MOVW syscall15Args_a9(R8), R4
|
|
MOVW R4, 16(R13)
|
|
MOVW syscall15Args_a10(R8), R4
|
|
MOVW R4, 20(R13)
|
|
MOVW syscall15Args_a11(R8), R4
|
|
MOVW R4, 24(R13)
|
|
MOVW syscall15Args_a12(R8), R4
|
|
MOVW R4, 28(R13)
|
|
MOVW syscall15Args_a13(R8), R4
|
|
MOVW R4, 32(R13)
|
|
MOVW syscall15Args_a14(R8), R4
|
|
MOVW R4, 36(R13)
|
|
MOVW syscall15Args_a15(R8), R4
|
|
MOVW R4, 40(R13)
|
|
MOVW syscall15Args_a16(R8), R4
|
|
MOVW R4, 44(R13)
|
|
MOVW syscall15Args_a17(R8), R4
|
|
MOVW R4, 48(R13)
|
|
MOVW syscall15Args_a18(R8), R4
|
|
MOVW R4, 52(R13)
|
|
MOVW syscall15Args_a19(R8), R4
|
|
MOVW R4, 56(R13)
|
|
MOVW syscall15Args_a20(R8), R4
|
|
MOVW R4, 60(R13)
|
|
MOVW syscall15Args_a21(R8), R4
|
|
MOVW R4, 64(R13)
|
|
MOVW syscall15Args_a22(R8), R4
|
|
MOVW R4, 68(R13)
|
|
MOVW syscall15Args_a23(R8), R4
|
|
MOVW R4, 72(R13)
|
|
MOVW syscall15Args_a24(R8), R4
|
|
MOVW R4, 76(R13)
|
|
MOVW syscall15Args_a25(R8), R4
|
|
MOVW R4, 80(R13)
|
|
MOVW syscall15Args_a26(R8), R4
|
|
MOVW R4, 84(R13)
|
|
MOVW syscall15Args_a27(R8), R4
|
|
MOVW R4, 88(R13)
|
|
MOVW syscall15Args_a28(R8), R4
|
|
MOVW R4, 92(R13)
|
|
MOVW syscall15Args_a29(R8), R4
|
|
MOVW R4, 96(R13)
|
|
MOVW syscall15Args_a30(R8), R4
|
|
MOVW R4, 100(R13)
|
|
MOVW syscall15Args_a31(R8), R4
|
|
MOVW R4, 104(R13)
|
|
MOVW syscall15Args_a32(R8), R4
|
|
MOVW R4, 108(R13)
|
|
|
|
// Load saved function pointer and call
|
|
MOVW (PTR_ADDRESS-4)(R13), R4
|
|
|
|
// Use BLX for Thumb interworking - Go assembler doesn't support BLX Rn
|
|
// BLX R4 = 0xE12FFF34 (ARM encoding, always condition)
|
|
WORD $0xE12FFF34 // blx r4
|
|
|
|
// pop structure pointer
|
|
MOVW PTR_ADDRESS(R13), R8
|
|
ADD $STACK_SIZE, R13
|
|
|
|
// save R0, R1
|
|
MOVW R0, syscall15Args_a1(R8)
|
|
MOVW R1, syscall15Args_a2(R8)
|
|
|
|
// save f0-f3 (each float64 spans 2 uintptr slots on ARM32)
|
|
MOVD F0, syscall15Args_f1(R8)
|
|
MOVD F1, syscall15Args_f3(R8)
|
|
MOVD F2, syscall15Args_f5(R8)
|
|
MOVD F3, syscall15Args_f7(R8)
|
|
|
|
// Restore callee-saved registers and return
|
|
MOVM.IA.W (R13), [R4, R5, R6, R7, R8, R9, R11]
|
|
MOVW.P 4(R13), R15 // pop LR into PC (return)
|