Date: Saturday, March 12, 2022 @ 19:23:20 Author: arojas Revision: 1150136
9437DD3815A7A9169E3D3946AFF5D95098BC6FF5 key removal Added: libretro-duckstation/trunk/glibc-2.34.patch Modified: libretro-duckstation/trunk/PKGBUILD ------------------+ PKGBUILD | 12 ++++- glibc-2.34.patch | 119 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 128 insertions(+), 3 deletions(-) Modified: PKGBUILD =================================================================== --- PKGBUILD 2022-03-12 19:22:38 UTC (rev 1150135) +++ PKGBUILD 2022-03-12 19:23:20 UTC (rev 1150136) @@ -2,7 +2,7 @@ pkgname=libretro-duckstation pkgver=2105 -pkgrel=1 +pkgrel=2 pkgdesc='Sony PlayStation core' arch=(x86_64) url=https://github.com/stenzek/duckstation @@ -18,8 +18,10 @@ git ) _commit=79aaf908a602e03a16698976791c82baafa794d0 -source=(git+https://github.com/stenzek/duckstation.git#commit=${_commit}) -sha256sums=(SKIP) +source=(git+https://github.com/stenzek/duckstation.git#commit=${_commit} + glibc-2.34.patch) +sha256sums=('SKIP' + 'fef29c81a9a42451a64a1cc32c6489b67bd9464ed5eedca4c03bc7853b8f2a11') pkgver() { cd duckstation @@ -27,6 +29,10 @@ git rev-list --count HEAD } +prepare() { + patch -d duckstation -p1 < glibc-2.34.patch # Fix build with glibc 2.34 +} + build() { cmake -S duckstation -B build \ -DCMAKE_BUILD_TYPE=None \ Added: glibc-2.34.patch =================================================================== --- glibc-2.34.patch (rev 0) +++ glibc-2.34.patch 2022-03-12 19:23:20 UTC (rev 1150136) @@ -0,0 +1,119 @@ +diff --git a/src/core/cpu_core.h b/src/core/cpu_core.h +index 66059635..252ee860 100644 +--- a/src/core/cpu_core.h ++++ b/src/core/cpu_core.h +@@ -56,6 +56,9 @@ struct State + + // data cache (used as scratchpad) + std::array<u8, DCACHE_SIZE> dcache = {}; ++ ++ static constexpr u32 GPRRegisterOffset(u32 index) { return offsetof(State, regs.r) + (sizeof(u32) * index); } ++ static constexpr u32 GTERegisterOffset(u32 index) { return offsetof(State, gte_regs.r32) + (sizeof(u32) * index); } + }; + + extern State g_state; +diff --git a/src/core/cpu_recompiler_code_generator.cpp b/src/core/cpu_recompiler_code_generator.cpp +index 1c7ae0db..a454d4f5 100644 +--- a/src/core/cpu_recompiler_code_generator.cpp ++++ b/src/core/cpu_recompiler_code_generator.cpp +@@ -14,11 +14,6 @@ Log_SetChannel(CPU::Recompiler); + + namespace CPU::Recompiler { + +-u32 CodeGenerator::CalculateRegisterOffset(Reg reg) +-{ +- return u32(offsetof(State, regs.r[0]) + (static_cast<u32>(reg) * sizeof(u32))); +-} +- + bool CodeGenerator::CompileBlock(const CodeBlock* block, CodeBlock::HostCodePointer* out_host_code, + u32* out_host_code_size) + { +@@ -1991,7 +1986,7 @@ Value CodeGenerator::DoGTERegisterRead(u32 index) + + default: + { +- EmitLoadCPUStructField(value.host_reg, RegSize_32, offsetof(State, gte_regs.r32[index])); ++ EmitLoadCPUStructField(value.host_reg, RegSize_32, State::GTERegisterOffset(index)); + } + break; + } +@@ -2020,7 +2015,7 @@ void CodeGenerator::DoGTERegisterWrite(u32 index, const Value& value) + { + // sign-extend z component of vector registers + Value temp = ConvertValueSize(value.ViewAsSize(RegSize_16), RegSize_32, true); +- EmitStoreCPUStructField(offsetof(State, gte_regs.r32[index]), temp); ++ EmitStoreCPUStructField(State::GTERegisterOffset(index), temp); + return; + } + break; +@@ -2033,7 +2028,7 @@ void CodeGenerator::DoGTERegisterWrite(u32 index, const Value& value) + { + // zero-extend unsigned values + Value temp = ConvertValueSize(value.ViewAsSize(RegSize_16), RegSize_32, false); +- EmitStoreCPUStructField(offsetof(State, gte_regs.r32[index]), temp); ++ EmitStoreCPUStructField(State::GTERegisterOffset(index), temp); + return; + } + break; +@@ -2044,15 +2039,15 @@ void CodeGenerator::DoGTERegisterWrite(u32 index, const Value& value) + Value temp = m_register_cache.AllocateScratch(RegSize_32); + + // SXY0 <- SXY1 +- EmitLoadCPUStructField(temp.host_reg, RegSize_32, offsetof(State, gte_regs.r32[13])); +- EmitStoreCPUStructField(offsetof(State, gte_regs.r32[12]), temp); ++ EmitLoadCPUStructField(temp.host_reg, RegSize_32, State::GTERegisterOffset(13)); ++ EmitStoreCPUStructField(State::GTERegisterOffset(12), temp); + + // SXY1 <- SXY2 +- EmitLoadCPUStructField(temp.host_reg, RegSize_32, offsetof(State, gte_regs.r32[14])); +- EmitStoreCPUStructField(offsetof(State, gte_regs.r32[13]), temp); ++ EmitLoadCPUStructField(temp.host_reg, RegSize_32, State::GTERegisterOffset(14)); ++ EmitStoreCPUStructField(State::GTERegisterOffset(13), temp); + + // SXY2 <- SXYP +- EmitStoreCPUStructField(offsetof(State, gte_regs.r32[14]), value); ++ EmitStoreCPUStructField(State::GTERegisterOffset(14), value); + return; + } + break; +@@ -2075,7 +2070,7 @@ void CodeGenerator::DoGTERegisterWrite(u32 index, const Value& value) + default: + { + // written as-is, 2x16 or 1x32 bits +- EmitStoreCPUStructField(offsetof(State, gte_regs.r32[index]), value); ++ EmitStoreCPUStructField(State::GTERegisterOffset(index), value); + return; + } + } +diff --git a/src/core/cpu_recompiler_code_generator.h b/src/core/cpu_recompiler_code_generator.h +index b5999233..94af334e 100644 +--- a/src/core/cpu_recompiler_code_generator.h ++++ b/src/core/cpu_recompiler_code_generator.h +@@ -19,7 +19,6 @@ public: + CodeGenerator(JitCodeBuffer* code_buffer); + ~CodeGenerator(); + +- static u32 CalculateRegisterOffset(Reg reg); + static const char* GetHostRegName(HostReg reg, RegSize size = HostPointerSize); + static void AlignCodeBuffer(JitCodeBuffer* code_buffer); + +diff --git a/src/core/cpu_recompiler_code_generator_generic.cpp b/src/core/cpu_recompiler_code_generator_generic.cpp +index b652cb24..8b8b2d76 100644 +--- a/src/core/cpu_recompiler_code_generator_generic.cpp ++++ b/src/core/cpu_recompiler_code_generator_generic.cpp +@@ -5,13 +5,13 @@ namespace CPU::Recompiler { + + void CodeGenerator::EmitLoadGuestRegister(HostReg host_reg, Reg guest_reg) + { +- EmitLoadCPUStructField(host_reg, RegSize_32, CalculateRegisterOffset(guest_reg)); ++ EmitLoadCPUStructField(host_reg, RegSize_32, State::GPRRegisterOffset(static_cast<u32>(guest_reg))); + } + + void CodeGenerator::EmitStoreGuestRegister(Reg guest_reg, const Value& value) + { + DebugAssert(value.size == RegSize_32); +- EmitStoreCPUStructField(CalculateRegisterOffset(guest_reg), value); ++ EmitStoreCPUStructField(State::GPRRegisterOffset(static_cast<u32>(guest_reg)), value); + } + + void CodeGenerator::EmitStoreInterpreterLoadDelay(Reg reg, const Value& value)
