Data update

This commit is contained in:
Ingy döt Net 2026-02-01 16:33:20 -08:00
parent 5150844a7d
commit 4bb20c9b71
7735 changed files with 38060 additions and 199180 deletions

View file

@ -1,68 +0,0 @@
-- Linux x86_64 with GNAT 15.1.0
with Ada.Unchecked_Conversion;
with Ada.Text_IO;
with Interfaces.C;
with System;
-- Pull in primitive operations for unsigned int types to combine
-- flags with "or"
use type Interfaces.C.unsigned;
procedure Machine_Code_Add is
-- The mmap interface provided by GNAT is limited, expecting only
-- reading and writing files rather than grabbing anonymous
-- executable memory regions. At that point it's easier just to
-- define our own interface.
PROT_READ : constant Interfaces.C.unsigned := 1;
PROT_WRITE : constant Interfaces.C.unsigned := 2;
PROT_EXEC : constant Interfaces.C.unsigned := 4;
MAP_PRIVATE : constant Interfaces.C.unsigned := 2;
MAP_ANON : constant Interfaces.C.unsigned := 32;
function Mmap (addr : System.Address;
len : Interfaces.C.size_t;
prot : Interfaces.C.unsigned;
flags : Interfaces.C.unsigned;
fd : Interfaces.C.unsigned;
off : Interfaces.C.long) return System.Address;
pragma Import (C, Mmap, "mmap");
function Munmap (addr : System.Address;
len : Interfaces.C.size_t) return Interfaces.C.int;
pragma Import (C, Munmap, "munmap");
function Memcpy (dest, src : System.Address; n : Interfaces.C.size_t)
return System.Address;
pragma Import (C, Memcpy, "memcpy");
type Add_Fn is access
function (A, B : Interfaces.C.long) return Interfaces.C.long
with Convention => C;
function To_Add_Fn is
new Ada.Unchecked_Conversion (System.Address, Add_Fn);
Code : constant array (Positive range 1 .. 7)
of Interfaces.C.unsigned_char :=
(16#48#, 16#89#, 16#F8#, 16#48#, 16#01#, 16#F0#, 16#C3#);
Len : constant Interfaces.C.size_t := Code'Length;
Mem : constant System.Address :=
Mmap (System.Null_Address,
Len,
PROT_READ or PROT_WRITE or PROT_EXEC,
MAP_PRIVATE or MAP_ANON,
-1,
0);
Add : constant Add_Fn := To_Add_Fn (Mem);
Dummy : System.Address := Memcpy (Mem, Code'Address, Len);
Dummy2 : Interfaces.C.int;
Sum : Interfaces.C.long := Add (12, 7);
begin
Ada.Text_IO.Put_Line ("12 + 7 =" & Interfaces.C.long'Image (Sum));
Dummy2 := Munmap (Mem, Len);
end Machine_Code_Add;

View file

@ -1,10 +0,0 @@
pushq %rbp
movq %rsp, %rbp
movl %edi, -0x4(%rbp)
movl %esi, -0x8(%rbp)
movl -0x4(%rbp), %esi
addl -0x8(%rbp), %esi
movl %esi, -0xc(%rbp)
movl -0xc(%rbp), %eax
popq %rbp
retq

View file

@ -1,71 +0,0 @@
>>SOURCE FORMAT IS FIXED
IDENTIFICATION DIVISION.
PROGRAM-ID. MC.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 INSTRUCTIONS.
03 USAGE BINARY-CHAR UNSIGNED VALUE H'55'.
03 USAGE BINARY-CHAR UNSIGNED VALUE H'48'.
03 USAGE BINARY-CHAR UNSIGNED VALUE H'89'.
03 USAGE BINARY-CHAR UNSIGNED VALUE H'E5'.
03 USAGE BINARY-CHAR UNSIGNED VALUE H'89'.
03 USAGE BINARY-CHAR UNSIGNED VALUE H'7D'.
03 USAGE BINARY-CHAR UNSIGNED VALUE H'FC'.
03 USAGE BINARY-CHAR UNSIGNED VALUE H'89'.
03 USAGE BINARY-CHAR UNSIGNED VALUE H'75'.
03 USAGE BINARY-CHAR UNSIGNED VALUE H'F8'.
03 USAGE BINARY-CHAR UNSIGNED VALUE H'8B'.
03 USAGE BINARY-CHAR UNSIGNED VALUE H'75'.
03 USAGE BINARY-CHAR UNSIGNED VALUE H'FC'.
03 USAGE BINARY-CHAR UNSIGNED VALUE H'03'.
03 USAGE BINARY-CHAR UNSIGNED VALUE H'75'.
03 USAGE BINARY-CHAR UNSIGNED VALUE H'F8'.
03 USAGE BINARY-CHAR UNSIGNED VALUE H'89'.
03 USAGE BINARY-CHAR UNSIGNED VALUE H'75'.
03 USAGE BINARY-CHAR UNSIGNED VALUE H'F4'.
03 USAGE BINARY-CHAR UNSIGNED VALUE H'8B'.
03 USAGE BINARY-CHAR UNSIGNED VALUE H'45'.
03 USAGE BINARY-CHAR UNSIGNED VALUE H'F4'.
03 USAGE BINARY-CHAR UNSIGNED VALUE H'5D'.
03 USAGE BINARY-CHAR UNSIGNED VALUE H'C3'.
01 MMAP.
03 MMAP-ADDR USAGE POINTER VALUE NULL.
03 MMAP-LEN USAGE BINARY-LONG UNSIGNED VALUE 24.
03 MMAP-PROT USAGE BINARY-INT VALUE H'0007'.
03 MMAP-FLAGS USAGE BINARY-INT VALUE H'1002'.
03 MMAP-FD USAGE BINARY-INT VALUE -1.
03 MMAP-OFFSET USAGE BINARY-LONG VALUE 0.
03 CODE-PTR USAGE PROCEDURE-POINTER.
01 ARG-A USAGE BINARY-INT VALUE 7.
01 ARG-B USAGE BINARY-INT VALUE 12.
01 RESULT USAGE BINARY-INT.
LINKAGE SECTION.
01 MACHINE-CODE PIC X(24).
PROCEDURE DIVISION.
MAIN SECTION.
PERFORM SET-UP.
CALL CODE-PTR USING
BY VALUE ARG-A
BY VALUE ARG-B
RETURNING RESULT.
DISPLAY RESULT.
PERFORM TEAR-DOWN.
STOP RUN.
SET-UP SECTION.
CALL 'mmap' USING
BY VALUE MMAP-ADDR
BY VALUE MMAP-LEN
BY VALUE MMAP-PROT
BY VALUE MMAP-FLAGS
BY VALUE MMAP-FD
BY VALUE MMAP-OFFSET
RETURNING CODE-PTR.
SET ADDRESS OF MACHINE-CODE TO CODE-PTR.
MOVE INSTRUCTIONS TO MACHINE-CODE.
TEAR-DOWN SECTION.
SET ADDRESS OF MACHINE-CODE TO NULL.
CALL 'munmap' USING
BY VALUE CODE-PTR
BY VALUE MMAP-LEN.