Codegear Rad Studio 2009 -update 1-4- 12.0.3420.21218.1 • Full HD

That one-cycle delay was the only thing keeping the pressure valves from exploding.

“No,” Aris said, plugging the dusty drive into a pristine Windows XP machine he kept in a Faraday cage. “The original RTL—the Run-Time Library—had a specific quirk. The TList.Sort method in Update 4 uses a non-stable QuickSort. Update 3 used Merge Sort. Every compiler after 12.0.3420.21218.1 changed the memory alignment for ShortString from 1-byte to 4-byte. The DLL you replaced expects pointers to be misaligned by three bytes.”

The corrupted DLL was calling a function named GetWaterFlow . But the original GetWaterFlow expected a PChar with a trailing null. The new DLL passed a String . In every other version of Delphi, that was fine—they were compatible. But in 12.0.3420.21218.1, the compiler's internal TObject.Free method had a one-cycle delay before releasing the string’s reference count. It was a threading bug that had been fixed in Update 5, which was never released. CodeGear RAD Studio 2009 -Update 1-4- 12.0.3420.21218.1

“That’s history ,” Aris replied, his fingers dancing over a mechanical keyboard. “And history has a memory layout.”

He injected a single inline assembly block into the GetWaterFlow function: That one-cycle delay was the only thing keeping

asm NOP NOP // Restore the original 1-cycle delay MOV EAX, [EBP - $04] DEC EAX MOV [EBP - $04], EAX end; He hit . The old C++ linker clattered to life. The executable was generated in 6.3 seconds—exactly as it had been fifteen years ago.

“It’s just old software,” Jenna said, panicking. “We’ll virtualize a Linux container and—” The TList

The last true build of Delphi 2009 sat on a dusty external hard drive in Dr. Aris Thorne’s basement. The label, written in fading marker, read: “CodeGear RAD Studio 2009 - Update 1-4 - 12.0.3420.21218.1.”