[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[COMMITTED] pickles: remove the ELF and DWARF pickles
From: |
Jose E. Marchesi |
Subject: |
[COMMITTED] pickles: remove the ELF and DWARF pickles |
Date: |
Sat, 28 Jan 2023 12:48:11 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) |
The ELF and DWARF pickles are now developed separately at
https://jemarch.net/poke-elf.
This is because they can benefit from releasing improved versions
which are independent from the poke releases.
2023-01-28 Jose E. Marchesi <jemarch@gnu.org>
* pickles/sframe.pk: Do not load elf.pk. It is not needed.
* pickles/elf.pk: Remove.
* pickles/elf-32.pk: Likewise.
* pickles/elf-64.pk: Likewise.
* pickles/elf-common.pk: Likewise.
* pickles/dwarf.pk: Likewise.
* pickles/dwarf-common.pk: Likewise.
* pickles/dwarf-expr.pk: Likewise.
* pickles/dwarf-frame.pk: Likewise.
* pickles/dwarf-info.pk: Likewise.
* pickles/dwarf-pubnames.pk: Likewise.
* pickles/dwarf-types.pk: Likewise.
* pickles/README.elf: New file.
* pickles/README.dwarf: Likewise.
* pickles/Makefile.am (dist_pickles_DATA): Remove elf pickles.
(EXTRA_DIST): Distribute README.elf and README.dwarf.
* testsuite/poke.pickles/elf-test.pk: Remove.
* testsuite/poke.pickles/dwarf-test.pk: Likewise.
* testsuite/poke.pickles/ctf-test.pk: Likewise.
* testsuite/Makefile.am (EXTRA_DIST): Remove elf-test.pk,
dwarf-test.pk and ctf-test.pk.
* doc/poke.texi (Binary Files): Tell how to find the elf pickles.
(ELF): Likewise.
---
ChangeLog | 28 +-
doc/poke.texi | 7 +-
pickles/Makefile.am | 9 +-
pickles/README.dwarf | 2 +
pickles/README.elf | 2 +
pickles/dwarf-common.pk | 103 ------
pickles/dwarf-expr.pk | 253 --------------
pickles/dwarf-frame.pk | 219 ------------
pickles/dwarf-info.pk | 387 ----------------------
pickles/dwarf-pubnames.pk | 63 ----
pickles/dwarf-types.pk | 51 ---
pickles/dwarf.pk | 24 --
pickles/elf-32.pk | 299 -----------------
pickles/elf-64.pk | 344 -------------------
pickles/elf-common.pk | 476 ---------------------------
pickles/elf.pk | 34 --
pickles/sframe.pk | 2 -
testsuite/Makefile.am | 3 -
testsuite/poke.pickles/ctf-test.pk | 28 --
testsuite/poke.pickles/dwarf-test.pk | 28 --
testsuite/poke.pickles/elf-test.pk | 28 --
21 files changed, 42 insertions(+), 2348 deletions(-)
create mode 100644 pickles/README.dwarf
create mode 100644 pickles/README.elf
delete mode 100644 pickles/dwarf-common.pk
delete mode 100644 pickles/dwarf-expr.pk
delete mode 100644 pickles/dwarf-frame.pk
delete mode 100644 pickles/dwarf-info.pk
delete mode 100644 pickles/dwarf-pubnames.pk
delete mode 100644 pickles/dwarf-types.pk
delete mode 100644 pickles/dwarf.pk
delete mode 100644 pickles/elf-32.pk
delete mode 100644 pickles/elf-64.pk
delete mode 100644 pickles/elf-common.pk
delete mode 100644 pickles/elf.pk
delete mode 100644 testsuite/poke.pickles/ctf-test.pk
delete mode 100644 testsuite/poke.pickles/dwarf-test.pk
delete mode 100644 testsuite/poke.pickles/elf-test.pk
diff --git a/ChangeLog b/ChangeLog
index d5f47986..442b27af 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,30 @@
-2023-01-28 Jose E. Marchesi <jemarch@termi>
+2023-01-28 Jose E. Marchesi <jemarch@gnu.org>
+
+ * pickles/sframe.pk: Do not load elf.pk. It is not needed.
+ * pickles/elf.pk: Remove.
+ * pickles/elf-32.pk: Likewise.
+ * pickles/elf-64.pk: Likewise.
+ * pickles/elf-common.pk: Likewise.
+ * pickles/dwarf.pk: Likewise.
+ * pickles/dwarf-common.pk: Likewise.
+ * pickles/dwarf-expr.pk: Likewise.
+ * pickles/dwarf-frame.pk: Likewise.
+ * pickles/dwarf-info.pk: Likewise.
+ * pickles/dwarf-pubnames.pk: Likewise.
+ * pickles/dwarf-types.pk: Likewise.
+ * pickles/README.elf: New file.
+ * pickles/README.dwarf: Likewise.
+ * pickles/Makefile.am (dist_pickles_DATA): Remove elf pickles.
+ (EXTRA_DIST): Distribute README.elf and README.dwarf.
+ * testsuite/poke.pickles/elf-test.pk: Remove.
+ * testsuite/poke.pickles/dwarf-test.pk: Likewise.
+ * testsuite/poke.pickles/ctf-test.pk: Likewise.
+ * testsuite/Makefile.am (EXTRA_DIST): Remove elf-test.pk,
+ dwarf-test.pk and ctf-test.pk.
+ * doc/poke.texi (Binary Files): Tell how to find the elf pickles.
+ (ELF): Likewise.
+
+2023-01-28 Jose E. Marchesi <jemarch@gnu.org>
* poke/poke.c (initialize): Fix addition of POKE_LOAD_PATH to
load_path.
diff --git a/doc/poke.texi b/doc/poke.texi
index 943d12bb..e6c39ae5 100644
--- a/doc/poke.texi
+++ b/doc/poke.texi
@@ -1061,6 +1061,9 @@ and symbols. You don't need to have a perfect knowledge
of the ELF
format in order to follow the examples, but being familiarized with
the concept of object file formats should surely help.
+You will need to install the ELF pickle. You can get it at
+@url{https://jemarch.net/poke-elf}.
+
Obtaining a simple ELF object file is easy, if you have a C compiler
installed:
@@ -8289,7 +8292,9 @@ activities.
@node ELF
@section ELF
-XXX
+poke-elf (@url{https://jemarch.net/poke-elf}) is a full-fledged pickle
+for editing ELF object files, executables, shared libraries and core
+dumps. It supports many architectures and extensions.
@node Dwarf
@section Dwarf
diff --git a/pickles/Makefile.am b/pickles/Makefile.am
index cc4d9877..3e7490ec 100644
--- a/pickles/Makefile.am
+++ b/pickles/Makefile.am
@@ -16,14 +16,15 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
picklesdir = $(pkgdatadir)/pickles
-dist_pickles_DATA = elf-common.pk elf-64.pk elf-32.pk elf.pk ctf.pk
ctf-dump.pk leb128.pk \
+dist_pickles_DATA = ctf.pk ctf-dump.pk leb128.pk \
bpf.pk btf.pk btf-ext.pk btf-dump.pk bmp.pk \
color.pk rgb24.pk id3v1.pk ios.pk diff.pk pk-table.pk \
sframe.pk sframe-dump.pk \
- dwarf.pk dwarf-common.pk dwarf-frame.pk dwarf-pubnames.pk \
- dwarf-types.pk time.pk argp.pk pktest.pk mbr.pk ustar.pk \
- mcr.pk dwarf-expr.pk dwarf-info.pk id3v2.pk jffs2.pk
asn1-ber.pk \
+ time.pk argp.pk pktest.pk mbr.pk ustar.pk \
+ mcr.pk id3v2.pk jffs2.pk asn1-ber.pk \
openpgp.pk search.pk riscv.pk coff.pk coff-i386.pk
coff-aarch64.pk \
pe.pk pe-amd64.pk pe-arm.pk pe-arm64.pk pe-i386.pk
pe-ia64.pk \
pe-m32r.pk pe-mips.pk pe-ppc.pk pe-sh3.pk pe-riscv.pk
pe-debug.pk \
uuid.pk redoxfs.pk pcap.pk ieee754.pk pdap.pk
+
+EXTRA_DIST = README.elf
diff --git a/pickles/README.dwarf b/pickles/README.dwarf
new file mode 100644
index 00000000..bdc9a57d
--- /dev/null
+++ b/pickles/README.dwarf
@@ -0,0 +1,2 @@
+The DWARF pickles that used to be here are now distributed
+separately. See https://jemarch.net/poke-elf.
diff --git a/pickles/README.elf b/pickles/README.elf
new file mode 100644
index 00000000..213623ae
--- /dev/null
+++ b/pickles/README.elf
@@ -0,0 +1,2 @@
+The elf pickles that used to be here are now distributed
+separately. See https://jemarch.net/poke-elf.
diff --git a/pickles/dwarf-common.pk b/pickles/dwarf-common.pk
deleted file mode 100644
index 4b57492e..00000000
--- a/pickles/dwarf-common.pk
+++ /dev/null
@@ -1,103 +0,0 @@
-/* dwarf-common.pk - DWARF implementation for GNU poke.
- Common bits. */
-
-/* Copyright (C) 2020, 2021, 2022, 2023 Jose E. Marchesi. */
-
-/* This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-var dwarf_bits = 32;
-var dwarf_version = 4;
-
-fun dwarf_set_bits = (int bits) int:
- {
- dwarf_bits = bits;
- return 1;
- }
-
-fun dwarf_set_version = (int ver) int:
- {
- dwarf_version = ver;
- return 1;
- }
-
-type Dwarf_Initial_Length =
- union
- {
- struct
- {
- uint<32> marker : (marker == 0xffff_ffff
- && dwarf_set_bits (64));
- offset<uint<64>,B> length;
- } l64;
-
- offset<uint<32>,B> l32 : (l32 < 0xffff_fff0#B
- && dwarf_set_bits (32));
-
- method value = offset<uint<64>,B>:
- {
- try return l32;
- catch if E_elem { return l64.length; }
- }
-
- method _print = void:
- {
- print ("#<");
- try printf ("%v", l64.length);
- catch if E_elem { printf ("%v", l32); }
- print (">");
- }
- };
-
-type Dwarf_Address =
- union
- {
- uint<32> a32 : dwarf_bits == 32;
- uint<64> a64;
-
- method value = uint<64>:
- {
- try return a32;
- catch if E_elem { return a64; }
- }
-
- method _print = void:
- {
- print ("#<");
- try printf ("%v", a32);
- catch if E_elem { printf ("%v", a64); }
- print (">");
- }
- };
-
-type Dwarf_Section_Offset =
- union
- {
- offset<uint<32>,B> o32 : dwarf_bits == 32;
- offset<uint<64>,B> o64;
-
- method value = offset<uint<64>,B>:
- {
- try return o32;
- catch if E_elem { return o64; }
- }
-
- method _print = void:
- {
- print ("#<");
- try printf ("%v", o32);
- catch if E_elem { printf ("%v", o64); }
- print (">");
- }
- };
diff --git a/pickles/dwarf-expr.pk b/pickles/dwarf-expr.pk
deleted file mode 100644
index 11fa8321..00000000
--- a/pickles/dwarf-expr.pk
+++ /dev/null
@@ -1,253 +0,0 @@
-/* dwarf-expr.pk - DWARF implementation for GNU poke.
- Expressions. */
-
-/* Copyright (C) 2020, 2021, 2022, 2023 Jose E. Marchesi. */
-
-/* This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-load leb128;
-
-/* Opcodes. */
-
-var DW_OP_FIRST = 0x03 as uint<8>,
- DW_OP_addr = 0x03 as uint<8>,
- DW_OP_deref = 0x06 as uint<8>,
- DW_OP_const1u = 0x08 as uint<8>,
- DW_OP_const1s = 0x09 as uint<8>,
- DW_OP_const2u = 0x0a as uint<8>,
- DW_OP_const2s = 0x0b as uint<8>,
- DW_OP_const4u = 0x0c as uint<8>,
- DW_OP_const4s = 0x0d as uint<8>,
- DW_OP_const8u = 0x0e as uint<8>,
- DW_OP_const8s = 0x0f as uint<8>,
- DW_OP_constu = 0x10 as uint<8>,
- DW_OP_consts = 0x11 as uint<8>,
- DW_OP_dup = 0x12 as uint<8>,
- DW_OP_drop = 0x13 as uint<8>,
- DW_OP_over = 0x14 as uint<8>,
- DW_OP_pick = 0x15 as uint<8>,
- DW_OP_swap = 0x16 as uint<8>,
- DW_OP_rot = 0x17 as uint<8>,
- DW_OP_xderef = 0x18 as uint<8>,
- DW_OP_abs = 0x19 as uint<8>,
- DW_OP_and = 0x1a as uint<8>,
- DW_OP_div = 0x1b as uint<8>,
- DW_OP_minus = 0x1c as uint<8>,
- DW_OP_mod = 0x1d as uint<8>,
- DW_OP_mul = 0x1e as uint<8>,
- DW_OP_neg = 0x1f as uint<8>,
- DW_OP_not = 0x20 as uint<8>,
- DW_OP_or = 0x21 as uint<8>,
- DW_OP_plus = 0x22 as uint<8>,
- DW_OP_plus_uconst = 0x23 as uint<8>,
- DW_OP_shl = 0x24 as uint<8>,
- DW_OP_shr = 0x25 as uint<8>,
- DW_OP_shra = 0x26 as uint<8>,
- DW_OP_xor = 0x27 as uint<8>,
- DW_OP_bra = 0x28 as uint<8>,
- DW_OP_eq = 0x29 as uint<8>,
- DW_OP_ge = 0x2a as uint<8>,
- DW_OP_gt = 0x2b as uint<8>,
- DW_OP_le = 0x2c as uint<8>,
- DW_OP_lt = 0x2d as uint<8>,
- DW_OP_ne = 0x2e as uint<8>,
- DW_OP_skip = 0x2f as uint<8>,
- DW_OP_lit0 = 0x30 as uint<8>,
- DW_OP_lit1 = 0x31 as uint<8>,
- DW_OP_lit2 = 0x32 as uint<8>,
- DW_OP_lit3 = 0x33 as uint<8>,
- DW_OP_lit4 = 0x34 as uint<8>,
- DW_OP_lit5 = 0x35 as uint<8>,
- DW_OP_lit6 = 0x36 as uint<8>,
- DW_OP_lit7 = 0x37 as uint<8>,
- DW_OP_lit8 = 0x38 as uint<8>,
- DW_OP_lit9 = 0x39 as uint<8>,
- DW_OP_lit10 = 0x3a as uint<8>,
- DW_OP_lit11 = 0x3b as uint<8>,
- DW_OP_lit12 = 0x3c as uint<8>,
- DW_OP_lit13 = 0x3d as uint<8>,
- DW_OP_lit14 = 0x3e as uint<8>,
- DW_OP_lit15 = 0x3f as uint<8>,
- DW_OP_lit16 = 0x40 as uint<8>,
- DW_OP_lit17 = 0x41 as uint<8>,
- DW_OP_lit18 = 0x42 as uint<8>,
- DW_OP_lit19 = 0x43 as uint<8>,
- DW_OP_lit20 = 0x44 as uint<8>,
- DW_OP_lit21 = 0x45 as uint<8>,
- DW_OP_lit22 = 0x46 as uint<8>,
- DW_OP_lit23 = 0x47 as uint<8>,
- DW_OP_lit24 = 0x48 as uint<8>,
- DW_OP_lit25 = 0x49 as uint<8>,
- DW_OP_lit26 = 0x4a as uint<8>,
- DW_OP_lit27 = 0x4b as uint<8>,
- DW_OP_lit28 = 0x4c as uint<8>,
- DW_OP_lit29 = 0x4d as uint<8>,
- DW_OP_lit30 = 0x4e as uint<8>,
- DW_OP_lit31 = 0x4f as uint<8>,
- DW_OP_reg0 = 0x50 as uint<8>,
- DW_OP_reg1 = 0x51 as uint<8>,
- DW_OP_reg2 = 0x52 as uint<8>,
- DW_OP_reg3 = 0x53 as uint<8>,
- DW_OP_reg4 = 0x54 as uint<8>,
- DW_OP_reg5 = 0x55 as uint<8>,
- DW_OP_reg6 = 0x56 as uint<8>,
- DW_OP_reg7 = 0x57 as uint<8>,
- DW_OP_reg8 = 0x58 as uint<8>,
- DW_OP_reg9 = 0x59 as uint<8>,
- DW_OP_reg10 = 0x5a as uint<8>,
- DW_OP_reg11 = 0x5b as uint<8>,
- DW_OP_reg12 = 0x5c as uint<8>,
- DW_OP_reg13 = 0x5d as uint<8>,
- DW_OP_reg14 = 0x5e as uint<8>,
- DW_OP_reg15 = 0x5f as uint<8>,
- DW_OP_reg16 = 0x60 as uint<8>,
- DW_OP_reg17 = 0x61 as uint<8>,
- DW_OP_reg18 = 0x62 as uint<8>,
- DW_OP_reg19 = 0x63 as uint<8>,
- DW_OP_reg20 = 0x64 as uint<8>,
- DW_OP_reg21 = 0x65 as uint<8>,
- DW_OP_reg22 = 0x66 as uint<8>,
- DW_OP_reg23 = 0x67 as uint<8>,
- DW_OP_reg24 = 0x68 as uint<8>,
- DW_OP_reg25 = 0x69 as uint<8>,
- DW_OP_reg26 = 0x6a as uint<8>,
- DW_OP_reg27 = 0x6b as uint<8>,
- DW_OP_reg28 = 0x6c as uint<8>,
- DW_OP_reg29 = 0x6d as uint<8>,
- DW_OP_reg30 = 0x6e as uint<8>,
- DW_OP_reg31 = 0x6f as uint<8>,
- DW_OP_breg0 = 0x70 as uint<8>,
- DW_OP_breg1 = 0x71 as uint<8>,
- DW_OP_breg2 = 0x72 as uint<8>,
- DW_OP_breg3 = 0x73 as uint<8>,
- DW_OP_breg4 = 0x74 as uint<8>,
- DW_OP_breg5 = 0x75 as uint<8>,
- DW_OP_breg6 = 0x76 as uint<8>,
- DW_OP_breg7 = 0x77 as uint<8>,
- DW_OP_breg8 = 0x78 as uint<8>,
- DW_OP_breg9 = 0x79 as uint<8>,
- DW_OP_breg10 = 0x7a as uint<8>,
- DW_OP_breg11 = 0x7b as uint<8>,
- DW_OP_breg12 = 0x7c as uint<8>,
- DW_OP_breg13 = 0x7d as uint<8>,
- DW_OP_breg14 = 0x7e as uint<8>,
- DW_OP_breg15 = 0x7f as uint<8>,
- DW_OP_breg16 = 0x80 as uint<8>,
- DW_OP_breg17 = 0x81 as uint<8>,
- DW_OP_breg18 = 0x82 as uint<8>,
- DW_OP_breg19 = 0x83 as uint<8>,
- DW_OP_breg20 = 0x84 as uint<8>,
- DW_OP_breg21 = 0x85 as uint<8>,
- DW_OP_breg22 = 0x86 as uint<8>,
- DW_OP_breg23 = 0x87 as uint<8>,
- DW_OP_breg24 = 0x88 as uint<8>,
- DW_OP_breg25 = 0x89 as uint<8>,
- DW_OP_breg26 = 0x8a as uint<8>,
- DW_OP_breg27 = 0x8b as uint<8>,
- DW_OP_breg28 = 0x8c as uint<8>,
- DW_OP_breg29 = 0x8d as uint<8>,
- DW_OP_breg30 = 0x8e as uint<8>,
- DW_OP_breg31 = 0x8f as uint<8>,
- DW_OP_regx = 0x90 as uint<8>,
- DW_OP_fbreg = 0x91 as uint<8>,
- DW_OP_bregx = 0x92 as uint<8>,
- DW_OP_piece = 0x93 as uint<8>,
- DW_OP_deref_size = 0x94 as uint<8>,
- DW_OP_xderef_size = 0x95 as uint<8>,
- DW_OP_nop = 0x96 as uint<8>,
- DW_OP_push_object_address = 0x97 as uint<8>,
- DW_OP_call2 = 0x98 as uint<8>,
- DW_OP_call4 = 0x99 as uint<8>,
- DW_OP_call_ref = 0x9a as uint<8>,
- DW_OP_form_tls_address = 0x9b as uint<8>,
- DW_OP_call_frame_cfa = 0x9c as uint<8>,
- DW_OP_bit_piece = 0x9d as uint<8>,
- DW_OP_implicit_value = 0x9e as uint<8>,
- DW_OP_stack_value = 0x9f as uint<8>,
- DW_OP_implicit_pointer = 0xa0 as uint<8>,
- DW_OP_addrx = 0xa1 as uint<8>,
- DW_OP_constx = 0xa2 as uint<8>,
- DW_OP_entry_value = 0xa3 as uint<8>,
- DW_OP_const_type = 0xa4 as uint<8>,
- DW_OP_regval_type = 0xa5 as uint<8>,
- DW_OP_deref_type = 0xa6 as uint<8>,
- DW_OP_xderef_type = 0xa7 as uint<8>,
- DW_OP_convert = 0xa8 as uint<8>,
- DW_OP_reinterpret = 0xa9 as uint<8>,
- /* GNU extensions. */
- DW_OP_GNU_push_tls_address = 0xe0 as uint<8>,
- DW_OP_GNU_uninit = 0xf0 as uint<8>,
- DW_OP_GNU_encoded_addr = 0xf1 as uint<8>,
- DW_OP_GNU_implicit_pointer = 0xf2 as uint<8>,
- DW_OP_GNU_entry_value = 0xf3 as uint<8>,
- DW_OP_GNU_const_type = 0xf4 as uint<8>,
- DW_OP_GNU_regval_type = 0xf5 as uint<8>,
- DW_OP_GNU_deref_type = 0xf6 as uint<8>,
- DW_OP_GNU_convert = 0xf7 as uint<8>,
- DW_OP_GNU_reinterpret = 0xf9 as uint<8>,
- DW_OP_GNU_parameter_ref = 0xfa as uint<8>,
- /* GNU Debug Fission extensions. */
- DW_OP_GNU_addr_index = 0xfb as uint<8>,
- DW_OP_GNU_const_index = 0xfc as uint<8>,
- DW_OP_GNU_variable_value = 0xfd as uint<8>,
- DW_OP_lo_user = 0xe0 as uint<8>,
- DW_OP_hi_user = 0xff as uint<8>,
- DW_OP_LAST = DW_OP_hi_user;
-
-/* Each DWARF operation contains a 1-byte opcode that identifies the
- operation; followed by a variable number of arguments. */
-
-type Dwarf_Op =
- struct
- {
- uint<8> code : code >= DW_OP_FIRST && code <= DW_OP_LAST;
- union
- {
- uint<8> u8 : code in [DW_OP_const1u, DW_OP_pick,
- DW_OP_deref_size, DW_OP_xderef_size];
- int<8> i8 : code == DW_OP_const1s;
-
- uint<16> u16 : code in [DW_OP_const2u, DW_OP_call2];
- int<16> i16 : code in [DW_OP_const2s, DW_OP_skip, DW_OP_bra];
-
- uint<32> u32 : code in [DW_OP_const4u, DW_OP_call4];
- int<32> i32 : code == DW_OP_const4s;
-
- uint<64> u64 : code == DW_OP_const8u;
- int<64> i64 : code == DW_OP_const8s;
-
- ULEB128 u128 : (code in [DW_OP_constu, DW_OP_plus_uconst,
- DW_OP_fbreg, DW_OP_regx, DW_OP_piece]
- || (code >= DW_OP_breg0 && code <= DW_OP_breg31));
-
- struct
- {
- ULEB128 reg;
- LEB128 offset;
- } reg_offset : code in [DW_OP_bregx, DW_OP_bit_piece];
-
- struct
- {
- ULEB128 length;
- byte[length.value] block;
- } size : code == DW_OP_implicit_value;
-
- Dwarf_Address addr : code == DW_OP_addr;
- Dwarf_Section_Offset offset : code == DW_OP_call_ref;
-
- /* Other operations have no arguments. */
- struct {} nothing;
- } arg;
- };
diff --git a/pickles/dwarf-frame.pk b/pickles/dwarf-frame.pk
deleted file mode 100644
index 12c313a8..00000000
--- a/pickles/dwarf-frame.pk
+++ /dev/null
@@ -1,219 +0,0 @@
-/* dwarf-frame.pk - DWARF implementation for GNU poke.
- Call Frame Information. */
-
-/* Copyright (C) 2020, 2021, 2022, 2023 Jose E. Marchesi. */
-
-/* This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-load leb128;
-load "dwarf-common.pk";
-load "dwarf-expr.pk"; /* For Dwarf_Op */
-
-/* Call Frame Instructions. */
-
-var DW_CFA_advance_loc = 0x40 as uint<6>,
- DW_CFA_offset = 0x80 as uint<6>,
- DW_CFA_restore = 0xc0 as uint<6>,
- DW_CFA_extended = 0x00 as uint<6>,
- DW_CFA_nop = 0x00 as uint<6>,
- DW_CFA_set_loc = 0x01 as uint<6>,
- DW_CFA_advance_loc1 = 0x02 as uint<6>,
- DW_CFA_advance_loc2 = 0x03 as uint<6>,
- DW_CFA_advance_loc4 = 0x04 as uint<6>,
- DW_CFA_offset_extended = 0x05 as uint<6>,
- DW_CFA_restore_extended = 0x06 as uint<6>,
- DW_CFA_undefined = 0x07 as uint<6>,
- DW_CFA_same_value = 0x08 as uint<6>,
- DW_CFA_register = 0x09 as uint<6>,
- DW_CFA_remember_state = 0x0a as uint<6>,
- DW_CFA_restore_state = 0x0b as uint<6>,
- DW_CFA_def_cfa = 0x0c as uint<6>,
- DW_CFA_def_cfa_register = 0x0d as uint<6>,
- DW_CFA_def_cfa_offset = 0x0e as uint<6>,
- DW_CFA_def_cfa_expression = 0x0f as uint<6>,
- DW_CFA_expression = 0x10 as uint<6>,
- DW_CFA_offset_extended_sf = 0x11 as uint<6>,
- DW_CFA_def_cfa_sf = 0x12 as uint<6>,
- DW_CFA_def_cfa_offset_sf = 0x13 as uint<6>,
- DW_CFA_val_offset = 0x14 as uint<6>,
- DW_CFA_val_offset_sf = 0x15 as uint<6>,
- DW_CFA_val_expression = 0x16 as uint<6>,
- DW_CFA_low_user = 0x1c as uint<6>,
- DW_CFA_MIPS_advance_loc8 = 0x1d as uint<6>,
- DW_CFA_GNU_window_save = 0x2d as uint<6>,
- DW_CFA_GNU_args_size = 0x2e as uint<6>,
- DW_CFA_GNU_negative_offset_extended = 0x2f as uint<6>,
- DW_CFA_high_user = 0x3f as uint<6>;
-
-type Dwarf_CFI =
- struct
- {
- struct uint<8>
- {
- uint<2> primary;
- uint<6> extop;
- } code;
-
- var ecode = code.extop;
-
- /* Off-opcode arguments follow. */
- union
- {
- ULEB128 u128 : ecode == DW_CFA_offset;
- Dwarf_Address addr : ecode == DW_CFA_set_loc;
- /* XXX: offsets for advance_locN? */
- uint<8> u8 : ecode == DW_CFA_advance_loc1;
- uint<16> u16 : ecode == DW_CFA_advance_loc2;
- uint<32> u32 : ecode == DW_CFA_advance_loc4;
- uint<64> u64 : ecode == DW_CFA_MIPS_advance_loc8;
-
- struct
- {
- ULEB128 reg;
- ULEB128 off;
- } reg_offset : ecode in [DW_CFA_offset_extended,
- DW_CFA_def_cfa,
- DW_CFA_val_offset];
-
- struct
- {
- ULEB128 reg;
- LEB128 off;
- } reg_soffset : ecode in [DW_CFA_offset_extended_sf,
- DW_CFA_def_cfa_sf,
- DW_CFA_val_offset_sf];
-
- ULEB128 reg : ecode in [DW_CFA_restore_extended,
- DW_CFA_undefined,
- DW_CFA_same_value,
- DW_CFA_def_cfa_register];
-
- ULEB128[2] regs : ecode == DW_CFA_register;
-
- ULEB128 offset : ecode == DW_CFA_def_cfa_offset;
- LEB128 soffset : ecode == DW_CFA_def_cfa_offset_sf;
-
- struct
- {
- ULEB128 size;
- Dwarf_Op[size.value#B] ops;
- } exp : ecode == DW_CFA_def_cfa_expression;
-
- struct
- {
- ULEB128 reg;
- ULEB128 size;
- Dwarf_Op[size.value#B] ops;
- } reg_exp : ecode in [DW_CFA_expression,
- DW_CFA_val_expression];
-
- /* Other instructions have no operands. */
- struct {} nothing;
- } ops;
- };
-
-/* DWARF Common Information Entry (CIE)
-
- There is at least one CIE in every non-empty .debug_frame
- section. */
-
-type Dwarf_CIE =
- struct
- {
- /* Size of the CIE structure, not including the `length' field
- itself. */
- Dwarf_Initial_Length length;
-
- /* Constant used to distinguish CIEs from FDEs. */
- union
- {
- uint<32> u32 : (dwarf_bits == 32
- && u32 == 0xffff_ffff);
- uint<64> u64 : u64 == 0xffff_ffff_ffff_ffffLU;
- } cie_id;
-
- /* This version number is specific to the call frame information
- and is independent of the DWARF version number. */
- uint<8> version : ((dwarf_version == 2 && version == 1)
- || (dwarf_version == 3 && version == 3)
- || (dwarf_version == 4 && version == 4)
- || version == 1 /* GAS generates version 1. */);
-
- /* UTF-8 string that identifies the augmentation to this CIE or to
- the FDEs that use it. If there is no augmentation this value
- is a zero byte. */
- string augmentation;
-
- /* Size of a target address in this CIE and any FDEs that use it.
- If a CU exists for this frame, its address size must match the
- address size here. */
- offset<uint<8>,B> address_size;
-
- /* Size of a segment selector in this CIE and any FDEs that use
- it. */
- offset<uint<8>,B> segment_size;
-
- /* A constant that is factored out of all advance location
- instructions. */
- ULEB128 code_alignment_factor;
-
- /* A constant that is factored out of certain offset
- instructions. */
- LEB128 data_alignment_factor;
-
- /* Constant that indicates which column in the rule table
- represents the return address of the function. */
- ULEB128 return_address_register;
-
- var insn_size = (length.value - OFFSET - length'size);
- Dwarf_CFI[insn_size] initial_instructions;
- };
-
-/* DWARF FDE.
- Description of a frame for a given function. */
-
-type Dwarf_FDE =
- struct
- {
- /* Size of the header and instruction stream for this function,
- not including the `length' field itself. */
- Dwarf_Initial_Length length;
-
- /* Offset into the .debug_frame section that denotes the CIE that
- is associated with this FDE. */
- Dwarf_Section_Offset cie_pointer;
-
- /* XXX initial_location (segment selector and target address) */
- Dwarf_Address initial_location;
-
- /* Number of bytes of program instructions described by this
- entry. */
- Dwarf_Address address_range;
-
- var padding = (length.value
- - (cie_pointer'size + initial_location'size
- + address_range'size + address_range.value()#B));
-
- Dwarf_CFI[address_range.value()#B + padding] instructions;
- };
-
-/* Call Frame Information. */
-
-type Dwarf_Call_Frame_Entry =
- union
- {
- Dwarf_CIE cie;
- Dwarf_FDE fde;
- };
diff --git a/pickles/dwarf-info.pk b/pickles/dwarf-info.pk
deleted file mode 100644
index f8adc528..00000000
--- a/pickles/dwarf-info.pk
+++ /dev/null
@@ -1,387 +0,0 @@
-/* dwarf-info.pk - DWARF implementation for GNU poke.
- Data in .debug_info */
-
-/* Copyright (C) 2020, 2021, 2022, 2023 Jose E. Marchesi. */
-
-/* This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-load "dwarf-common.pk";
-
-/* DWARF Tags. */
-
-var DW_TAG_array_type = 0x01,
- DW_TAG_class_type = 0x02,
- DW_TAG_entry_point = 0x03,
- DW_TAG_enumeration_type = 0x04,
- DW_TAG_formal_parameter = 0x05,
- /* 0x06 reserved. */
- /* 0x07 reserved. */
- DW_TAG_imported_declaration = 0x08,
- /* 0x09 reserved. */
- DW_TAG_label = 0x0a,
- DW_TAG_lexical_block = 0x0b,
- /* 0x0c reserved. */
- DW_TAG_member = 0x0d,
- /* 0x0e reserved. */
- DW_TAG_pointer_type = 0x0f,
- DW_TAG_reference_type = 0x10,
- DW_TAG_compile_unit = 0x11,
- DW_TAG_string_type = 0x12,
- DW_TAG_structure_type = 0x13,
- /* 0x14 reserved. */
- DW_TAG_subroutine_type = 0x15,
- DW_TAG_typedef = 0x16,
- DW_TAG_union_type = 0x17,
- DW_TAG_unspecified_parameters = 0x18,
- DW_TAG_variant = 0x19,
- DW_TAG_common_block = 0x1a,
- DW_TAG_common_inclusion = 0x1b,
- DW_TAG_inheritance = 0x1c,
- DW_TAG_inlined_subroutine = 0x1d,
- DW_TAG_module = 0x1e,
- DW_TAG_ptr_to_member_type = 0x1f,
- DW_TAG_set_type = 0x20,
- DW_TAG_subrange_type = 0x21,
- DW_TAG_with_stmt = 0x22,
- DW_TAG_access_declaration = 0x23,
- DW_TAG_base_type = 0x24,
- DW_TAG_catch_block = 0x25,
- DW_TAG_const_type = 0x26,
- DW_TAG_constant = 0x27,
- DW_TAG_enumerator = 0x28,
- DW_TAG_file_type = 0x29,
- DW_TAG_friend = 0x2a,
- DW_TAG_namelist = 0x2b,
- DW_TAG_namelist_item = 0x2c,
- DW_TAG_packed_type = 0x2d,
- DW_TAG_subprogram = 0x2e,
- DW_TAG_template_type_parameter = 0x2f,
- DW_TAG_template_value_parameter = 0x30,
- DW_TAG_thrown_type = 0x31,
- DW_TAG_try_block = 0x32,
- DW_TAG_variant_part = 0x33,
- DW_TAG_variable = 0x34,
- DW_TAG_volatile_type = 0x35,
- DW_TAG_dwarf_procedure = 0x36,
- DW_TAG_restrict_type = 0x37,
- DW_TAG_interface_type = 0x38,
- DW_TAG_namespace = 0x39,
- DW_TAG_imported_module = 0x3a,
- DW_TAG_unspecified_type = 0x3b,
- DW_TAG_partial_unit = 0x3c,
- DW_TAG_imported_unit = 0x3d,
- /* 0x3e reserved. Was DW_TAG_mutable_type. */
- DW_TAG_condition = 0x3f,
- DW_TAG_shared_type = 0x40,
- DW_TAG_type_unit = 0x41,
- DW_TAG_rvalue_reference_type = 0x42,
- DW_TAG_template_alias = 0x43,
- DW_TAG_coarray_type = 0x44,
- DW_TAG_generic_subrange = 0x45,
- DW_TAG_dynamic_type = 0x46,
- DW_TAG_atomic_type = 0x47,
- DW_TAG_call_site = 0x48,
- DW_TAG_call_site_parameter = 0x49,
- DW_TAG_skeleton_unit = 0x4a,
- DW_TAG_immutable_type = 0x4b,
- DW_TAG_lo_user = 0x4080,
- DW_TAG_MIPS_loop = 0x4081,
- DW_TAG_format_label = 0x4101,
- DW_TAG_function_template = 0x4102,
- DW_TAG_class_template = 0x4103,
- DW_TAG_GNU_BINCL = 0x4104,
- DW_TAG_GNU_EINCL = 0x4105,
- DW_TAG_GNU_template_template_param = 0x4106,
- DW_TAG_GNU_template_parameter_pack = 0x4107,
- DW_TAG_GNU_formal_parameter_pack = 0x4108,
- DW_TAG_GNU_call_site = 0x4109,
- DW_TAG_GNU_call_site_parameter = 0x410a,
- DW_TAG_hi_user = 0xffff;
-
-/* DWARF Attributes. */
-
-var DW_AT_sibling = 0x01,
- DW_AT_location = 0x02,
- DW_AT_name = 0x03,
- /* 0x04 reserved. */
- /* 0x05 reserved. */
- /* 0x06 reserved. */
- /* 0x07 reserved. */
- /* 0x08 reserved. */
- DW_AT_ordering = 0x09,
- /* 0x0a reserved. */
- DW_AT_byte_size = 0x0b,
- DW_AT_bit_offset = 0x0c,
- DW_AT_bit_size = 0x0d,
- /* 0x0e reserved. */
- /* 0x0f reserved. */
- DW_AT_stmt_list = 0x10,
- DW_AT_low_pc = 0x11,
- DW_AT_high_pc = 0x12,
- DW_AT_language = 0x13,
- /* 0x14 reserved. */
- DW_AT_discr = 0x15,
- DW_AT_discr_value = 0x16,
- DW_AT_visibility = 0x17,
- DW_AT_import = 0x18,
- DW_AT_string_length = 0x19,
- DW_AT_common_reference = 0x1a,
- DW_AT_comp_dir = 0x1b,
- DW_AT_const_value = 0x1c,
- DW_AT_containing_type = 0x1d,
- DW_AT_default_value = 0x1e,
- /* 0x1f reserved. */
- DW_AT_inline = 0x20,
- DW_AT_is_optional = 0x21,
- DW_AT_lower_bound = 0x22,
- /* 0x23 reserved. */
- /* 0x24 reserved. */
- DW_AT_producer = 0x25,
- /* 0x26 reserved. */
- DW_AT_prototyped = 0x27,
- /* 0x28 reserved. */
- /* 0x29 reserved. */
- DW_AT_return_addr = 0x2a,
- /* 0x2b reserved. */
- DW_AT_start_scope = 0x2c,
- /* 0x2d reserved. */
- DW_AT_bit_stride = 0x2e,
- DW_AT_upper_bound = 0x2f,
- /* 0x30 reserved. */
- DW_AT_abstract_origin = 0x31,
- DW_AT_accessibility = 0x32,
- DW_AT_address_class = 0x33,
- DW_AT_artificial = 0x34,
- DW_AT_base_types = 0x35,
- DW_AT_calling_convention = 0x36,
- DW_AT_count = 0x37,
- DW_AT_data_member_location = 0x38,
- DW_AT_decl_column = 0x39,
- DW_AT_decl_file = 0x3a,
- DW_AT_decl_line = 0x3b,
- DW_AT_declaration = 0x3c,
- DW_AT_discr_list = 0x3d,
- DW_AT_encoding = 0x3e,
- DW_AT_external = 0x3f,
- DW_AT_frame_base = 0x40,
- DW_AT_friend = 0x41,
- DW_AT_identifier_case = 0x42,
- DW_AT_macro_info = 0x43,
- DW_AT_namelist_item = 0x44,
- DW_AT_priority = 0x45,
- DW_AT_segment = 0x46,
- DW_AT_specification = 0x47,
- DW_AT_static_link = 0x48,
- DW_AT_type = 0x49,
- DW_AT_use_location = 0x4a,
- DW_AT_variable_parameter = 0x4b,
- DW_AT_virtuality = 0x4c,
- DW_AT_vtable_elem_location = 0x4d,
- DW_AT_allocated = 0x4e,
- DW_AT_associated = 0x4f,
- DW_AT_data_location = 0x50,
- DW_AT_byte_stride = 0x51,
- DW_AT_entry_pc = 0x52,
- DW_AT_use_UTF8 = 0x53,
- DW_AT_extension = 0x54,
- DW_AT_ranges = 0x55,
- DW_AT_trampoline = 0x56,
- DW_AT_call_column = 0x57,
- DW_AT_call_file = 0x58,
- DW_AT_call_line = 0x59,
- DW_AT_description = 0x5a,
- DW_AT_binary_scale = 0x5b,
- DW_AT_decimal_scale = 0x5c,
- DW_AT_small = 0x5d,
- DW_AT_decimal_sign = 0x5e,
- DW_AT_digit_count = 0x5f,
- DW_AT_picture_string = 0x60,
- DW_AT_mutable = 0x61,
- DW_AT_threads_scaled = 0x62,
- DW_AT_explicit = 0x63,
- DW_AT_object_pointer = 0x64,
- DW_AT_endianity = 0x65,
- DW_AT_elemental = 0x66,
- DW_AT_pure = 0x67,
- DW_AT_recursive = 0x68,
- DW_AT_signature = 0x69,
- DW_AT_main_subprogram = 0x6a,
- DW_AT_data_bit_offset = 0x6b,
- DW_AT_const_expr = 0x6c,
- DW_AT_enum_class = 0x6d,
- DW_AT_linkage_name = 0x6e,
- DW_AT_string_length_bit_size = 0x6f,
- DW_AT_string_length_byte_size = 0x70,
- DW_AT_rank = 0x71,
- DW_AT_str_offsets_base = 0x72,
- DW_AT_addr_base = 0x73,
- DW_AT_rnglists_base = 0x74,
- /* 0x75 reserved. */
- DW_AT_dwo_name = 0x76,
- DW_AT_reference = 0x77,
- DW_AT_rvalue_reference = 0x78,
- DW_AT_macros = 0x79,
- DW_AT_call_all_calls = 0x7a,
- DW_AT_call_all_source_calls = 0x7b,
- DW_AT_call_all_tail_calls = 0x7c,
- DW_AT_call_return_pc = 0x7d,
- DW_AT_call_value = 0x7e,
- DW_AT_call_origin = 0x7f,
- DW_AT_call_parameter = 0x80,
- DW_AT_call_pc = 0x81,
- DW_AT_call_tail_call = 0x82,
- DW_AT_call_target = 0x83,
- DW_AT_call_target_clobbered = 0x84,
- DW_AT_call_data_location = 0x85,
- DW_AT_call_data_value = 0x86,
- DW_AT_noreturn = 0x87,
- DW_AT_alignment = 0x88,
- DW_AT_export_symbols = 0x89,
- DW_AT_deleted = 0x8a,
- DW_AT_defaulted = 0x8b,
- DW_AT_loclists_base = 0x8c,
- DW_AT_lo_user = 0x2000,
- DW_AT_MIPS_fde = 0x2001,
- DW_AT_MIPS_loop_begin = 0x2002,
- DW_AT_MIPS_tail_loop_begin = 0x2003,
- DW_AT_MIPS_epilog_begin = 0x2004,
- DW_AT_MIPS_loop_unroll_factor = 0x2005,
- DW_AT_MIPS_software_pipeline_depth = 0x2006,
- DW_AT_MIPS_linkage_name = 0x2007,
- DW_AT_MIPS_stride = 0x2008,
- DW_AT_MIPS_abstract_name = 0x2009,
- DW_AT_MIPS_clone_origin = 0x200a,
- DW_AT_MIPS_has_inlines = 0x200b,
- DW_AT_MIPS_stride_byte = 0x200c,
- DW_AT_MIPS_stride_elem = 0x200d,
- DW_AT_MIPS_ptr_dopetype = 0x200e,
- DW_AT_MIPS_allocatable_dopetype = 0x200f,
- DW_AT_MIPS_assumed_shape_dopetype = 0x2010,
- DW_AT_MIPS_assumed_size = 0x2011,
- /* GNU extensions. */
- DW_AT_sf_names = 0x2101,
- DW_AT_src_info = 0x2102,
- DW_AT_mac_info = 0x2103,
- DW_AT_src_coords = 0x2104,
- DW_AT_body_begin = 0x2105,
- DW_AT_body_end = 0x2106,
- DW_AT_GNU_vector = 0x2107,
- DW_AT_GNU_guarded_by = 0x2108,
- DW_AT_GNU_pt_guarded_by = 0x2109,
- DW_AT_GNU_guarded = 0x210a,
- DW_AT_GNU_pt_guarded = 0x210b,
- DW_AT_GNU_locks_excluded = 0x210c,
- DW_AT_GNU_exclusive_locks_required = 0x210d,
- DW_AT_GNU_shared_locks_required = 0x210e,
- DW_AT_GNU_odr_signature = 0x210f,
- DW_AT_GNU_template_name = 0x2110,
- DW_AT_GNU_call_site_value = 0x2111,
- DW_AT_GNU_call_site_data_value = 0x2112,
- DW_AT_GNU_call_site_target = 0x2113,
- DW_AT_GNU_call_site_target_clobbered = 0x2114,
- DW_AT_GNU_tail_call = 0x2115,
- DW_AT_GNU_all_tail_call_sites = 0x2116,
- DW_AT_GNU_all_call_sites = 0x2117,
- DW_AT_GNU_all_source_call_sites = 0x2118,
- DW_AT_GNU_locviews = 0x2137,
- DW_AT_GNU_entry_view = 0x2138,
- DW_AT_GNU_macros = 0x2119,
- DW_AT_GNU_deleted = 0x211a,
- /* GNU Debug Fission extensions. */
- DW_AT_GNU_dwo_name = 0x2130,
- DW_AT_GNU_dwo_id = 0x2131,
- DW_AT_GNU_ranges_base = 0x2132,
- DW_AT_GNU_addr_base = 0x2133,
- DW_AT_GNU_pubnames = 0x2134,
- DW_AT_GNU_pubtypes = 0x2135,
- /* https://gcc.gnu.org/wiki/DW_AT_GNU_numerator_denominator */
- DW_AT_GNU_numerator = 0x2303,
- DW_AT_GNU_denominator = 0x2304,
- /* https://gcc.gnu.org/wiki/DW_AT_GNU_bias */
- DW_AT_GNU_bias = 0x2305,
- DW_AT_hi_user = 0x3ff;
-
-/* DWARF form encodings. */
-
-var DW_FORM_addr = 0x01,
- DW_FORM_block2 = 0x03,
- DW_FORM_block4 = 0x04,
- DW_FORM_data2 = 0x05,
- DW_FORM_data4 = 0x06,
- DW_FORM_data8 = 0x07,
- DW_FORM_string = 0x08,
- DW_FORM_block = 0x09,
- DW_FORM_block1 = 0x0a,
- DW_FORM_data1 = 0x0b,
- DW_FORM_flag = 0x0c,
- DW_FORM_sdata = 0x0d,
- DW_FORM_strp = 0x0e,
- DW_FORM_udata = 0x0f,
- DW_FORM_ref_addr = 0x10,
- DW_FORM_ref1 = 0x11,
- DW_FORM_ref2 = 0x12,
- DW_FORM_ref4 = 0x13,
- DW_FORM_ref8 = 0x14,
- DW_FORM_ref_udata = 0x15,
- DW_FORM_indirect = 0x16,
- DW_FORM_sec_offset = 0x17,
- DW_FORM_exprloc = 0x18,
- DW_FORM_flag_present = 0x19,
- DW_FORM_strx = 0x1a,
- DW_FORM_addrx = 0x1b,
- DW_FORM_ref_sup4 = 0x1c,
- DW_FORM_strp_sup = 0x1d,
- DW_FORM_data16 = 0x1e,
- DW_FORM_line_strp = 0x1f,
- DW_FORM_ref_sig8 = 0x20,
- DW_FORM_implicit_const = 0x21,
- DW_FORM_loclistx = 0x22,
- DW_FORM_rnglistx = 0x23,
- DW_FORM_ref_sup8 = 0x24,
- DW_FORM_strx1 = 0x25,
- DW_FORM_strx2 = 0x26,
- DW_FORM_strx3 = 0x27,
- DW_FORM_strx4 = 0x28,
- DW_FORM_addrx1 = 0x29,
- DW_FORM_addrx2 = 0x2a,
- DW_FORM_addrx3 = 0x2b,
- DW_FORM_addrx4 = 0x2c,
- /* GNU Debug Fission extensions. */
- DW_FORM_GNU_addr_index = 0x1f01,
- DW_FORM_GNU_str_index = 0x1f02,
- DW_FORM_GNU_ref_alt = 0x1f20,
- DW_FORM_GNU_strp_alt = 0x1f21;
-
-/* Contributions are stored in .debug_info sections. */
-
-type Dwarf_CU_Header =
- struct
- {
- /* Length of the .debug_info contribution for this CU, not
- including the length field itself. */
- Dwarf_Initial_Length unit_length;
-
- /* Version of the DWARF information for the compilation unit. */
- uint<16> version : (version in [2UH, 3UH, 4UH, 5UH]
- && dwarf_set_version (version));
-
- /* Offset into the .debug_abbrev section that associates the
- compilation unit with a particular set of debugging information
- entry abbreviations. */
- Dwarf_Section_Offset debug_abbrev_offset;
-
- /* Size of an address on the target architecture. */
- offset<uint<8>,B> address_size;
- };
diff --git a/pickles/dwarf-pubnames.pk b/pickles/dwarf-pubnames.pk
deleted file mode 100644
index 3f56c02c..00000000
--- a/pickles/dwarf-pubnames.pk
+++ /dev/null
@@ -1,63 +0,0 @@
-/* dwarf-pubnames.pk - DWARF implementation for GNU poke.
- Name lookup tables. */
-
-/* Copyright (C) 2020, 2021, 2022, 2023 Jose E. Marchesi. */
-
-/* This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-load leb128;
-load "dwarf-common.pk";
-
-/* The sections .debug_pubnames and .debug_pubtypes contain a name
- lookup table each. */
-
-type Dwarf_Name_Lookup_Table =
- struct
- {
- /* Length of the set of entries for this CU, not including the
- length field itself. */
- Dwarf_Initial_Length unit_length;
-
- uint<16> version : (dwarf_version >= 3 && version == 2);
-
- /* Offset into the .debug_info section of the CU header. */
- Dwarf_Section_Offset debug_info_offset;
-
- /* Size of the contents of the .debug_info section generated to
- represent this CU. */
- Dwarf_Initial_Length debug_info_length;
-
- /* The header is followed by a set of entries, which are finished
- by an offset containing the value 0. */
-
- type Global_Name =
- struct
- {
- Dwarf_Section_Offset offset : offset.value != 0#B;
- string name;
- };
-
- Global_Name[] names;
- Dwarf_Section_Offset terminator : terminator.value == 0#B;
-
- /* Return the offset in .debug_info of the object with name NAME.
- If no such object is stored in the table, raise E_generic. */
- method lookup = (string str) offset<uint<64>,B>:
- {
- for (name in names where name.name == str)
- return name.offset.value;
- raise E_generic;
- }
- };
diff --git a/pickles/dwarf-types.pk b/pickles/dwarf-types.pk
deleted file mode 100644
index 1f2c9f99..00000000
--- a/pickles/dwarf-types.pk
+++ /dev/null
@@ -1,51 +0,0 @@
-/* dwarf-frame.pk - DWARF implementation for GNU poke.
- Debug types. */
-
-/* Copyright (C) 2020, 2021, 2022, 2023 Jose E. Marchesi. */
-
-/* This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-load leb128;
-load "dwarf-common.pk";
-
-/* The Dwarf_Type_Unit_Header is the header for the series of DIEs
- conforming a type that has been stored in the .debug_types
- section. */
-
-type Dwarf_Type_Unit_Header =
- struct
- {
- /* Length of the .debug_types contribution for this CU, not
- including the length field itself. */
- Dwarf_Initial_Length unit_length;
-
- /* Version of the DWARF information in this CU. */
- uint<16> version : version == 4;
-
- /* Offset into the .debug_abbrev section that associates this CU
- with a particular set of debugging information entry
- abbreviations. */
- Dwarf_Section_Offset debug_abbrev_offset;
-
- /* Size of an address on the target architecture. */
- offset<uint<8>,B> address_size;
-
- /* Unique signature of the type described in this type unit. */
- uint<64> type_signature;
-
- /* Offset relative to the beginning of the type unit header,
- referring to the DIE that describes the type. */
- Dwarf_Section_Offset type_offset;
- };
diff --git a/pickles/dwarf.pk b/pickles/dwarf.pk
deleted file mode 100644
index 1d3f8c4c..00000000
--- a/pickles/dwarf.pk
+++ /dev/null
@@ -1,24 +0,0 @@
-/* dwarf.pk - DWARF implementation for GNU poke. */
-
-/* Copyright (C) 2020, 2021, 2022, 2023 Jose E. Marchesi. */
-
-/* This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-load "dwarf-common.pk";
-load "dwarf-info.pk";
-load "dwarf-expr.pk";
-load "dwarf-frame.pk";
-load "dwarf-pubnames.pk";
-load "dwarf-types.pk";
diff --git a/pickles/elf-32.pk b/pickles/elf-32.pk
deleted file mode 100644
index 3e494d13..00000000
--- a/pickles/elf-32.pk
+++ /dev/null
@@ -1,299 +0,0 @@
-/* elf-32.pk - 32-bit ELF definitions. */
-
-/* Copyright (C) 2019, 2020, 2021, 2022, 2023 Jose E. Marchesi. */
-
-/* This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-load "elf-common.pk";
-
-/* ELF32 basic types. */
-
-type Elf32_Addr = offset<uint<32>,B>,
- Elf32_Off = offset<uint<32>,B>;
-
-/* ELF32 relocation info.
-
- r_sym is the symbol table index with respect to which the
- relocation must be made.
-
- r_type is the type of relocation to apply, which is
- architecture-specific. */
-
-type Elf32_RelInfo =
- struct Elf_Word
- {
- uint<24> r_sym;
- uint<8> r_type;
- };
-
-/* ELF32 REL relocation entry. */
-
-type Elf32_Rel =
- struct
- {
- Elf32_Addr r_offset;
- Elf32_RelInfo r_info;
- };
-
-/* ELF32 RELA relocation entry.
-
- r_offset holds a section offset in relocatable files, a virtual
- address in executable and shared object files.
-
- r_addend holds a constant value to be added to the relocation's
- value. In architectures using Rel relocations this addend is
- somehow stored in the relocation's memory location. */
-
-type Elf32_Rela =
- struct
- {
- Elf32_Addr r_offset;
- Elf32_RelInfo r_info;
- Elf_Sword r_addend;
- };
-
-/* ELF32 symbol. */
-
-type Elf32_Sym =
- struct
- {
- offset<Elf_Word,B> st_name;
- Elf32_Addr st_value;
- offset<Elf_Word,B> st_size;
- Elf_Sym_Info st_info;
- Elf_Sym_Other_Info st_other;
- Elf_Half st_shndx;
- };
-
-/* ELF32 compressed section header. */
-
-type Elf32_Chdr =
- struct
- {
- /* This member specifies the compression algorithm. */
- Elf_Word ch_type : elf_compress_algorithm_p (ch_type);
- /* Size and required alignment of the uncompressed data. */
- offset<Elf_Word,B> ch_size;
- offset<Elf_Word,B> ch_addralign;
- };
-
-/* ELF32 section flags. */
-
-type Elf32_SectionFlags =
- struct
- {
- Elf_Word flags;
-
- method _print = void:
- {
- elf_pretty_print_section_flags (flags);
- }
- };
-
-/* ELF32 section header table entry. */
-
-type Elf32_Shdr =
- struct
- {
- offset<Elf_Word,B> sh_name;
- Elf_Word sh_type;
- Elf32_SectionFlags sh_flags;
- Elf32_Addr sh_addr;
- Elf32_Off sh_offset;
- offset<Elf_Word,B> sh_size;
- Elf_Word sh_link;
- Elf_Word sh_info;
- Elf_Word sh_addralign;
- offset<Elf_Word,B> sh_entsize;
- };
-
-/* ELF32 program header table entry. */
-
-type Elf32_Phdr =
- struct
- {
- Elf_Word p_type;
- Elf32_Off p_offset;
- Elf32_Addr p_vaddr;
- Elf32_Addr p_paddr;
- offset<Elf_Word,B> p_filesz;
- offset<Elf_Word,B> p_memsz;
- Elf_SegmentFlags p_flags;
- offset<Elf_Word,B> p_align;
- };
-
-/* ELF32 file header. */
-
-type Elf32_Ehdr =
- struct
- {
- Elf_Ident e_ident;
- Elf_Half e_type;
- Elf_Half e_machine;
- Elf_Word e_version = EV_CURRENT;
-
- Elf32_Addr e_entry;
- Elf32_Off e_phoff;
- Elf32_Off e_shoff;
-
- Elf_Word e_flags;
- offset<Elf_Half,B> e_ehsize;
- offset<Elf_Half,B> e_phentsize;
- Elf_Half e_phnum;
- offset<Elf_Half,B> e_shentsize;
- Elf_Half e_shnum;
- Elf_Half e_shstrndx : e_shnum == 0 || e_shstrndx < e_shnum;
- };
-
-/* ELF32 file. */
-
-type Elf32_File =
- struct
- {
- Elf32_Ehdr ehdr;
-
- if (ehdr.e_shnum > 0)
- Elf32_Shdr[ehdr.e_shnum] shdr @ ehdr.e_shoff;
-
- if (ehdr.e_phnum > 0)
- Elf32_Phdr[ehdr.e_phnum] phdr @ ehdr.e_phoff;
-
- /* Given an offset into the ELF file's section string table, return
- the string. */
-
- method get_section_name = (offset<Elf_Word,B> offset) string:
- {
- var strtab = ehdr.e_shstrndx;
- return string @ shdr'ios : shdr[strtab].sh_offset + offset;
- }
-
- /* Given a symtab and an offset into its associated symbol string
- table, return the string. */
-
- method get_symbol_name = (Elf32_Shdr symtab, offset<Elf_Word,B> offset)
string:
- {
- var strtab = symtab.sh_link;
- return string @ shdr'ios : shdr[strtab].sh_offset + offset;
- }
-
- /* Given a section name, return an array of section headers in the
- ELF file having that name. */
-
- method get_sections_by_name = (string name) Elf32_Shdr[]:
- {
- var sections = Elf32_Shdr[]();
-
- for (s in shdr where get_section_name (s.sh_name) == name)
- apush (sections, s);
-
- return sections;
- }
-
- /* Given a section type (SHT_* value) return an array of section
- headers in the ELF file with that type. */
-
- method get_sections_by_type = (Elf_Word stype) Elf32_Shdr[]:
- {
- var sections = Elf32_Shdr[]();
-
- for (s in shdr where s.sh_type == stype)
- apush (sections, s);
-
- return sections;
- }
-
- /* Given a section name, return whether it exists in this
- file. */
-
- method section_name_p = (string name) int:
- {
- var sections = Elf32_Shdr[]();
-
- try sections = get_sections_by_name (name);
- catch if E_inval { return 0; }
-
- return sections'length;
- }
-
- /* Given an offset, return the string stored at that offset in the
- "default" string table of the ELF file. This is the string table
- section named ".strtab". If such a section doesn't exist, or it
- doesn't contain a string table, then raise E_inval. */
- method get_string = (offset<Elf_Word,B> offset) string:
- {
- if (!section_name_p (".strtab"))
- raise E_inval;
-
- var strtab = get_sections_by_name (".strtab")[0];
- return string @ strtab'ios : strtab.sh_offset + offset;
- }
-
- /* Return the signature corresponding to a given group section.
- If the given section header doesn't correspond to a group
- section then raise E_inval. */
-
- method get_group_signature = (Elf32_Shdr section) string:
- {
- if (section.sh_type != SHT_GROUP)
- raise E_inval;
-
- var symtab = shdr[section.sh_link];
- var symtab_data
- = Elf32_Sym [symtab.sh_size] @ shdr'ios : symtab.sh_offset;
- var symbol = symtab_data[section.sh_info];
- var symbol_name = get_symbol_name (symtab, symbol.st_name);
-
- return symbol_name;
- }
-
- /* Return an array of strings with the signatures of the section
- groups present in this ELF file. */
-
- method get_group_signatures = string[]:
- {
- var signatures = string[]();
-
- for (section in shdr where section.sh_type == SHT_GROUP)
- apush (signatures, get_group_signature (section));
-
- return signatures;
- }
-
- /* Given the name of a section group, return an array with the
- section headers corresponding to all the sections in that
- group. If the given name doesn't identify a section group in
- the ELF file then return an empty array. */
-
- method get_section_group = (string group_name) Elf32_Shdr[]:
- {
- var section_group = Elf32_Shdr[]();
-
- var group_sections = get_sections_by_type (SHT_GROUP);
- for (sec in group_sections
- where get_group_signature (sec) == group_name)
- {
- var group_entries
- = (Elf_Word[sec.sh_size - sizeof (Elf_Word)]
- @ sec'ios : sec.sh_offset + sizeof (Elf_Word));
-
- for (entry in group_entries)
- apush (section_group, shdr[entry]);
-
- break;
- }
-
- return section_group;
- }
- };
diff --git a/pickles/elf-64.pk b/pickles/elf-64.pk
deleted file mode 100644
index fa90fa75..00000000
--- a/pickles/elf-64.pk
+++ /dev/null
@@ -1,344 +0,0 @@
-/* elf-64.pk - 64-bit ELF definitions. */
-
-/* Copyright (C) 2019, 2020, 2021, 2022, 2023 Jose E. Marchesi. */
-
-/* This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-load "elf-common.pk";
-
-/* ELF64 basic types. */
-
-type Elf64_Xword = uint<64>,
- Elf64_Sxword = int<64>,
- Elf64_Addr = offset<uint<64>,B>,
- Elf64_Off = offset<uint<64>,B>;
-
-/* ELF64 relocation info.
-
- r_sym is the symbol table index with respect to which the
- relocation must be made.
-
- r_type is the type of relocation to apply, which is
- architecture-specific. */
-
-type Elf64_RelInfo =
- struct Elf64_Xword
- {
- uint<32> r_sym;
- uint<32> r_type;
- };
-
-/* ELF64 REL relocation entry. */
-
-type Elf64_Rel =
- struct
- {
- Elf64_Addr r_offset;
- Elf64_RelInfo r_info;
- };
-
-/* ELF64 RELA relocation entry.
-
- r_offset holds a section offset in relocatable files, a virtual
- address in executable and shared object files.
-
- r_addend holds a constant value to be added to the relocation's
- value. In architectures using Rel relocations this addend is
- somehow stored in the relocation's memory location. */
-
-type Elf64_Rela =
- struct
- {
- Elf64_Addr r_offset;
- Elf64_RelInfo r_info;
- Elf64_Sxword r_addend;
- };
-
-/* ELF64 symbol. */
-
-type Elf64_Sym =
- struct
- {
- offset<Elf_Word,B> st_name;
- Elf_Sym_Info st_info;
- Elf_Sym_Other_Info st_other;
- Elf_Half st_shndx;
- Elf64_Addr st_value;
- Elf64_Xword st_size;
- };
-
-/* Compressed section header, used in sections flagged with
- SHF_COMPRESSED. */
-
-type Elf64_Chdr =
- struct
- {
- /* This member specifies the compression algorithm. */
- Elf_Word ch_type : elf_compress_algorithm_p (ch_type);
- Elf_Word ch_reserved;
- /* Size and required alignment of the uncompressed data. */
- offset<Elf64_Xword,B> ch_size;
- offset<Elf64_Xword,B> ch_addralign;
- };
-
-/* The ELF64 dynamic section contents. */
-
-type Elf64_Dyn =
- struct
- {
- Elf64_Sxword d_tag;
-
- union
- {
- /* Entries in the dynamic tags in a position >= DT_ENCODING
- follow an uniform rule regarding what field is used for the
- data: even entries use d_ptr while odd entries use d_val. */
-
- Elf64_Addr d_ptr
- : (d_tag as int<32> in [DT_PLTGOT, DT_HASH, DT_STRTAB, DT_SYMTAB,
- DT_RELA, DT_SYMENT, DT_INIT, DT_FINI, DT_REL,
- DT_JMPREL, DT_INIT_ARRAY, DT_FINI_ARRAY]
- || (d_tag >= DT_ENCODING && d_tag %2 != 0));
-
- Elf64_Xword d_val;
- } d_data;
- };
-
-/* ELF64 section group. */
-
-type Elf64_Group =
- struct
- {
- Elf_Word flags;
- Elf_Word[] entries; /* Section header indices. */
- };
-
-/* ELF64 section flags. */
-
-type Elf64_SectionFlags =
- struct
- {
- Elf64_Xword flags;
-
- method _print = void:
- {
- elf_pretty_print_section_flags (flags);
- }
- };
-
-/* ELF64 section header table entry.
-
- sh_name specifies the name of the section. It is an index into the
- file's string table.
-
- sh_type is the type of the section, one of the SHT_* values defined
- above.
-
- sh_flags is the ORed value of the 1-bit flags SHF_* defined
- above. */
-
-type Elf64_Shdr =
- struct
- {
- offset<Elf_Word,B> sh_name;
- Elf_Word sh_type;
- Elf64_SectionFlags sh_flags;
- Elf64_Addr sh_addr;
- Elf64_Off sh_offset;
- offset<Elf64_Xword,B> sh_size;
- Elf_Word sh_link;
- Elf_Word sh_info;
- Elf64_Xword sh_addralign;
- offset<Elf64_Xword,B> sh_entsize;
- };
-
-/* ELF64 program header table entry. */
-
-type Elf64_Phdr =
- struct
- {
- Elf_Word p_type;
- Elf_SegmentFlags p_flags;
- Elf64_Off p_offset;
- Elf64_Addr p_vaddr;
- Elf64_Addr p_paddr;
- offset<Elf64_Xword,B> p_filesz;
- offset<Elf64_Xword,B> p_memsz;
- offset<Elf64_Xword,B> p_align;
- };
-
-/* ELF64 file header. */
-
-type Elf64_Ehdr =
- struct
- {
- Elf_Ident e_ident;
- Elf_Half e_type;
- Elf_Half e_machine;
- Elf_Word e_version = EV_CURRENT;
-
- Elf64_Addr e_entry;
- Elf64_Off e_phoff;
- Elf64_Off e_shoff;
-
- Elf_Word e_flags;
- offset<Elf_Half,B> e_ehsize;
- offset<Elf_Half,B> e_phentsize;
- Elf_Half e_phnum;
- offset<Elf_Half,B> e_shentsize;
- Elf_Half e_shnum;
- Elf_Half e_shstrndx : e_shnum == 0 || e_shstrndx < e_shnum;
- };
-
-/* ELF64 file. */
-
-type Elf64_File =
- struct
- {
- Elf64_Ehdr ehdr;
-
- if (ehdr.e_shnum > 0)
- Elf64_Shdr[ehdr.e_shnum] shdr @ ehdr.e_shoff;
-
- if (ehdr.e_phnum > 0)
- Elf64_Phdr[ehdr.e_phnum] phdr @ ehdr.e_phoff;
-
- /* Given an offset into the ELF file's section string table, return
- the string. */
-
- method get_section_name = (offset<Elf_Word,B> offset) string:
- {
- var strtab = ehdr.e_shstrndx;
- return string @ shdr'ios : shdr[strtab].sh_offset + offset;
- }
-
- /* Given a symtab and an offset into its associated symbol string
- table, return the string. */
-
- method get_symbol_name = (Elf64_Shdr symtab, offset<Elf_Word,B> offset)
string:
- {
- var strtab = symtab.sh_link;
- return string @ shdr'ios : shdr[strtab].sh_offset + offset;
- }
-
- /* Given a section name, return an array of section headers in the
- ELF file having that name. */
-
- method get_sections_by_name = (string name) Elf64_Shdr[]:
- {
- var sections = Elf64_Shdr[]();
-
- for (s in shdr where get_section_name (s.sh_name) == name)
- apush (sections, s);
-
- return sections;
- }
-
- /* Given a section type (SHT_* value) return an array of section
- headers in the ELF file with that type. */
-
- method get_sections_by_type = (Elf_Word stype) Elf64_Shdr[]:
- {
- var sections = Elf64_Shdr[]();
-
- for (s in shdr where s.sh_type == stype)
- apush (sections, s);
-
- return sections;
- }
-
- /* Given a section name, return whether it exists in this
- file. */
-
- method section_name_p = (string name) int:
- {
- var sections = Elf64_Shdr[]();
-
- try sections = get_sections_by_name (name);
- catch if E_inval { return 0; }
-
- return sections'length;
- }
-
- /* Given an offset, return the string stored at that offset in the
- "default" string table of the ELF file. This is the string table
- section named ".strtab". If such a section doesn't exist, or it
- doesn't contain a string table, then raise E_inval. */
- method get_string = (offset<Elf_Word,B> offset) string:
- {
- if (!section_name_p (".strtab"))
- raise E_inval;
-
- var strtab = get_sections_by_name (".strtab")[0];
- return string @ strtab'ios : strtab.sh_offset + offset;
- }
-
- /* Return the signature corresponding to a given group section.
- If the given section header doesn't correspond to a group
- section then raise E_inval. */
-
- method get_group_signature = (Elf64_Shdr section) string:
- {
- if (section.sh_type != SHT_GROUP)
- raise E_inval;
-
- var symtab = shdr[section.sh_link];
- var symtab_data
- = Elf64_Sym [symtab.sh_size] @ shdr'ios : symtab.sh_offset;
- var symbol = symtab_data[section.sh_info];
- var symbol_name = get_symbol_name (symtab, symbol.st_name);
-
- return symbol_name;
- }
-
- /* Return an array of strings with the signatures of the section
- groups present in this ELF file. */
-
- method get_group_signatures = string[]:
- {
- var signatures = string[]();
-
- for (section in shdr where section.sh_type == SHT_GROUP)
- apush (signatures, get_group_signature (section));
-
- return signatures;
- }
-
- /* Given the name of a section group, return an array with the
- section headers corresponding to all the sections in that
- group. If the given name doesn't identify a section group in
- the ELF file then return an empty array. */
-
- method get_section_group = (string group_name) Elf64_Shdr[]:
- {
- var section_group = Elf64_Shdr[]();
-
- var group_sections = get_sections_by_type (SHT_GROUP);
- for (sec in group_sections
- where get_group_signature (sec) == group_name)
- {
- var group_entries
- = (Elf_Word[sec.sh_size - sizeof (Elf_Word)]
- @ sec'ios : sec.sh_offset + sizeof (Elf_Word));
-
- for (entry in group_entries)
- apush (section_group, shdr[entry]);
-
- break;
- }
-
- return section_group;
- }
- };
diff --git a/pickles/elf-common.pk b/pickles/elf-common.pk
deleted file mode 100644
index e6d54e4b..00000000
--- a/pickles/elf-common.pk
+++ /dev/null
@@ -1,476 +0,0 @@
-/* elf-common.pk - ELF definitions common to 32 and 64 bits. */
-
-/* Copyright (C) 2019, 2020, 2021, 2022, 2023 Jose E. Marchesi. */
-
-/* This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/* Basic types. */
-
-type Elf_Half = uint<16>,
- Elf_Word = uint<32>,
- Elf_Sword = int<32>;
-
-/* ELF versions. */
-
-var EV_NONE = 0, /* Invalid ELF version. */
- EV_CURRENT = 1;
-
-/* The different kind of ELF files. */
-
-var ET_NONE = 0, /* No file type. */
- ET_REL = 1, /* Relocatable file. */
- ET_EXEC = 2, /* Position-dependent executable. */
- ET_DYN = 3, /* Position-independent executable or shared object. */
- ET_CORE = 4; /* Core file. */
-
-/* ELF machine codes. */
-
-var EM_NONE = 0,
- EM_RISCV = 243;
-
-/* ELF symbol bindings. */
-
-var STB_LOCAL = 0,
- STB_GLOBAL = 1,
- STB_WEAK = 2,
- STB_LOOS = 10,
- STB_HIOS = 12,
- STB_LOPROC = 13,
- STB_HIPROC = 15;
-
-var elf_stb_names =
- ["local","global","weak",.[9]="reserved",.[12]="os",.[15]="proc"];
-
-/* ELF symbol types. */
-
-var STT_NOTYPE = 0,
- STT_OBJECT = 1,
- STT_FUNC = 2,
- STT_SECTION = 3,
- STT_FILE = 4,
- STT_COMMON = 5,
- STT_TLS = 6,
- STT_NUM = 7,
- STT_LOOS = 10,
- STT_GNU_IFUNC = 10,
- STT_HIOS = 12,
- STT_LOPROC = 13,
- STT_HIPROC = 15;
-
-var elf_stt_names =
- ["notype", "object", "func", "section", "file", "common",
- "tls", "num", "8", "9", "gnu_ifunc", "os11", "os12",
- "loproc13", "loproc14", "loproc15"];
-
-/* ELF symbol visibility. */
-
-var STV_DEFAULT = 0,
- STV_INTERNAL = 1,
- STV_HIDDEN = 2,
- STV_PROTECTED = 3;
-
-var elf_stv_names =
- ["default", "internal", "hidden", "protected"];
-
-/* Types for ELF symbol information, including binding, type and
- visibility. */
-
-type Elf_Sym_Info =
- struct uint<8>
- {
- uint<4> st_bind;
- uint<4> st_type;
-
- method _print = void:
- {
- printf ("#<stb:%s,stt:%s>",
- elf_stb_names[st_bind], elf_stt_names[st_type]);
- }
- };
-
-type Elf_Sym_Other_Info =
- struct uint<8>
- {
- uint<5>;
- uint<3> st_visibility;
-
- method _print = void:
- {
- print "#<stv:" + elf_stv_names[st_visibility] + ">";
- }
- };
-
-/* Compression algorithm identificators. */
-
-var ELFCOMPRESS_ZLIB = 1,
- ELFCOMPRESS_LOOS = 0x6000_0000,
- ELFCOMPRESS_HIOS = 0x6fff_ffff,
- ELFCOMPRESS_LOPROC = 0x7000_0000,
- ELFCOMPRESS_HIPROC = 0x7fff_ffff;
-
-fun elf_compress_algorithm_p = (uint<64> ch_type) int:
-{
- return (ch_type == ELFCOMPRESS_ZLIB
- || (ch_type >= ELFCOMPRESS_LOOS && ch_type <= ELFCOMPRESS_HIOS)
- || (ch_type >= ELFCOMPRESS_LOPROC && ch_type <= ELFCOMPRESS_HIPROC));
-}
-
-/* ELF hashing function. */
-
-fun elf_hash = (string input) Elf_Word:
-{
- var h = 0 as uint<32>;
- var high = 0 as uint<32>;
-
- for (c in input)
- {
- h = (h <<. 4) + c;
- high = h & 0xf0000000;
- if (high)
- h = h ^ (high .>> 24);
- h = h & ~high;
- };
-
- return h;
-}
-
-/* Dynamic tags. */
-
-var DT_NULL = 0, /* Tags the end of the dynamic array. */
- /* d_val holds the string table offset of a null-terminated
- string, giving the name of a needed library. The dynamic array
- may. contain multiple entries with this type. */
- DT_NEEDED = 1,
- /* d_val holds the total size, in bytes, of the relocation
- entries associated with the procedure linkage table. If an
- entry of type DT_JMPREL is present, a DT_PLTRELSZ must
- accompany it. */
- DT_PLTRELSZ = 2,
- /* d_ptr holds an address associated with the procedure linkage
- table and/or the global offset table. */
- DT_PLTGOT = 3,
- /* d_ptr holds the address of the symbol hash table. This hash
- table refers to the symbol table referenced by the DT_SYMTAB
- element. */
- DT_HASH = 4,
- /* d_ptr holds the address of the string table. Symbol names,
- library names, and other strings reside in this table. */
- DT_STRTAB = 5,
- /* d_ptr holds the address of the symbol table. */
- DT_SYMTAB = 6,
- /* d_ptr holds the address of a relocation table. Entries in the
- table have explicit addends. An object file may have multiple
- relocation sections. If this element is present, the dynamic
- vector must also have DT_RELASZ and DT_RELAENT elements. */
- DT_RELA = 7,
- /* d_val holds the total size, in bytes, of the DT_RELA relocation
- entry. */
- DT_RELASZ = 8,
- /* d_val holds the size, in bytes, of the DT_RELA relocation
- entry. */
- DT_RELAENT = 9,
- /* d_val holds the size, in bytes, of the string table. */
- DT_STRSZ = 10,
- /* d_val holds the size, in bytes, of a symbol table entry. */
- DT_SYMENT = 11,
- /* d_ptr holds the address of the initialization function. */
- DT_INIT = 12,
- /* d_ptr holds the address of the finalization function. */
- DT_FINI = 13,
- /* d_val holds the string table offset of a null-terminated
- string, giving the name of the shared object. The offset is an
- index into the table recorded in the DT_STRTAB entry. */
- DT_SONAME = 14,
- /* d_val holds the string table offset of a null-terminated search
- library search path string. The offset is an index into the
- table recorded in the DT_STRTAB entry. This entry is at level
- 2. Its use has been superseded by DT_RUNPATH. */
- DT_RPATH = 15,
- /* This element's presence in a shared object library alters the
- dynamic linker's symbol resolution algorithm for references
- within the library. */
- DT_SYMBOLIC = 16,
- /* d_ptr holds the address of a relocation table containing rela
- relocations. If this element is present, the dynamic structure
- must also have DT_RELSZ and DT_RELENT elements. */
- DT_REL = 17,
- /* d_val holds the total size, in bytes, of the DT_REL relocation
- table. */
- DT_RELSZ = 18,
- /* d_val holds the size, in bytes, of the DT_REL relocation
- entry. */
- DT_RELENT = 19,
- /* d_val specifies the type of relocation entry to which the
- procedure linkage table refers: DT_REL or DT_RELA. */
- DT_PLTREL = 20,
- /* This tag is used for debugging. Its contents are not
- specified for the ABI. */
- DT_DEBUG = 21,
- /* This tag's absence signifies that no relocation entry should
- cause a modification to a non-writable segment, as specified
- by the segment permissions in the program header table. If
- this tag is present, one or more relocation entries might
- request modifications to a non-writable segment, and the
- dynamic linker can prepare accordingly. This entry is at
- level 2. Its use has been superseded by the DF_TEXTREL
- flag. */
- DT_TEXTREL = 22,
- /* d_ptr holds the address of relocation entries associated
- solely with the procedure linkage table. If this tag is
- present, the related entries of types DT_PLTRELSZ and
- DT_PLTREL must also be present. */
- DT_JMPREL = 23,
- /* If present, this tag instructs the dynamic linker to process
- all relocations for the object containing this entry before
- transferring control to the program. */
- DT_BIND_NOW = 24,
- /* d_ptr holds the address of the array of pointers to
- initialization functions. */
- DT_INIT_ARRAY = 25,
- /* d_ptr holds the address of the array of pointers to
- finalization functions. */
- DT_FINI_ARRAY = 26,
- /* d_val holds the size in bytes of the array of initialization
- functions pointed to by the DT_INIT_ARRAY entry. If an
- object has a DT_INIT_ARRAY entry, it must also have a
- DT_INIT_ARRAYSZ entry. */
- DT_INIT_ARRAYSZ = 27,
- /* d_val holds the size in bytes of the array of termination
- functions pointed to by the DT_FINI_ARRAY entry. If an
- object has a DT_fINI_ARRAY entry, it must also have a
- DT_FINI_ARRAYSZ entry. */
- DT_FINI_ARRAYSZ = 28,
- /* d_val holds the string table offset of a null-terminated
- library search path string. The offset is an index into the
- table recorded in the DT_STRTAB entry. */
- DT_RUNPATH = 29,
- /* d_val holds flag values specific to the object being
- loaded. */
- DT_FLAGS = 30,
- DT_ENCODING = 32,
- /* d_ptr holds the address of the array of pointers to
- pre-initialization functions. */
- DT_PREINIT_ARRAY = 32,
- /* d_val holds the size in bytes of the array of
- pre-initialization functions pointed to by the
- DT_PREINIT_ARRAY entry. */
- DT_PREINIT_ARRAYSZ = 33,
- /* d_ptr holds the address of the SHT_SYMTAB_SHNDX section
- associated with the dynamic symbol table referenced by the
- DT_SYMTAB element. */
- DT_SYMTAB_SHNDX = 34,
- DT_LOOS = 0x6000_000d,
- DT_HIOS = 0x6fff_f000,
- DT_LOPROC = 0x7000_0000,
- DT_SPARC_REGISTER = 0x7000_0001,
- DT_HIPROC = 0x7fff_ffff;
-
-/* Definitions related to section groups. */
-
-var GRP_COMDAT = 1,
- GRP_MASKOS = 0x0ff0_0000,
- GRP_MASKPROC = 0xf000_0000;
-
-/* Section types. */
-
-var SHT_NULL = 0U,
- SHT_PROGBITS = 1U,
- SHT_SYMTAB = 2U,
- SHT_STRTAB = 3U,
- SHT_RELA = 4U,
- SHT_HASH = 5U,
- SHT_DYNAMIC = 6U,
- SHT_NOTE = 7U,
- SHT_NOBITS = 8U,
- SHT_REL = 9U,
- SHT_SHLIB = 10U,
- SHT_DYNSYM = 11U,
- SHT_INIT_ARRAY = 14U,
- SHT_FINI_ARRAY = 15U,
- SHT_PREINIT_ARRAY = 16U,
- SHT_GROUP = 17U,
- SHT_SYMTAB_SHNDX = 18U,
- SHT_LOOS = 0x6000_0000U,
- SHT_HIOS = 0x6fff_ffffU,
- SHT_LOUSER = 0x8000_0000U,
- SHT_HIUSER = 0xffff_ffffU;
-
-/* Section Attribute Flags. */
-
-var SHF_WRITE = 0x1,
- SHF_ALLOC = 0x2,
- SHF_EXECINSTR = 0x4,
- SHF_MERGE = 0x10,
- SHF_STRINGS = 0x20,
- SHF_INFO_LINK = 0x40,
- SHF_LINK_ORDER = 0x80,
- SHF_OS_NONCONFORMING = 0x100,
- SHF_GROUP = 0x200,
- SHF_TLS = 0x400,
- SHF_COMPRESSED = 0x800,
- SHF_MASKOS = 0x0ff0_0000,
- SHF_MASKPROC = 0xf000_0000;
-
-fun elf_pretty_print_section_flags = (uint<64> flags) void:
-{
- var s = "";
-
- if (flags & SHF_WRITE)
- s = s + "WRITE,";
- if (flags & SHF_ALLOC)
- s = s + "ALLOC,";
- if (flags & SHF_EXECINSTR)
- s = s + "EXECINSTR,";
- if (flags & SHF_MERGE)
- s = s + "MERGE,";
- if (flags & SHF_STRINGS)
- s = s + "STRINGS,";
- if (flags & SHF_INFO_LINK)
- s = s + "INFO_LINK,";
- if (flags & SHF_LINK_ORDER)
- s = s + "LINK_ORDER,";
- if (flags & SHF_OS_NONCONFORMING)
- s = s + "OS_NONCONFORMING,";
- if (flags & SHF_GROUP)
- s = s + "GROUP,";
- if (flags & SHF_TLS)
- s = s + "TLS,";
- if (flags & SHF_COMPRESSED)
- s = s + "COMPRESSED,";
- if (flags & SHF_MASKOS)
- /* XXX call os-specific printer in elf-OS.pk */
- ;
- if (flags & SHF_MASKPROC)
- /* XXX call arch-specific printer in elf-ARCH.pk */
- ;
-
- print "#<" + rtrim (s, ",") + ">";
-}
-
-/* Segment types. */
-
-var PT_NULL = 0,
- PT_LOAD = 1,
- PT_DYNAMIC = 2,
- PT_INTERP = 3,
- PT_NOTE = 4,
- PT_SHLIB = 5,
- PT_PHDR = 6,
- PT_TLS = 7,
- PT_LOOS = 0x6000_0000,
- PT_HIOS = 0x6fff_ffff,
- PT_LOPROC = 0x7000_0000,
- PT_HIPROC = 0x7fff_ffff;
-
-/* Segment Flags. */
-
-var PF_X = 0x1,
- PF_W = 0x2,
- PF_R = 0x4,
- PF_MASKOS = 0x0ff0_0000,
- PF_MASKPROC = 0xf000_0000;
-
-type Elf_SegmentFlags =
- struct
- {
- Elf_Word flags;
-
- method _print = void:
- {
- var s = "";
-
- if (flags & PF_R)
- s = s + "R,";
- if (flags & PF_W)
- s = s + "W,";
- if (flags & PF_X)
- s = s + "X,";
- if (flags & PF_MASKOS)
- /* XXX call os-specific printer in elf-OS.pk */
- ;
- if (flags & PF_MASKPROC)
- /* XXX call arch-specific printer in elf-ARCH.pk */
- ;
-
- print "#<" + rtrim (s, ",") + ">";
- }
- };
-
-/* Encoding of the ELF file. */
-
-var ELFDATANONE = 0,
- ELFDATA2LSB = 1,
- ELFDATA2MSB = 2;
-
-/* ELF hash table. */
-
-type Elf_Hash_Table =
- struct
- {
- Elf_Word nbucket;
- Elf_Word nchain;
-
- Elf_Word[nbucket] bucket;
- Elf_Word[nchain] chain;
- };
-
-/* ELF notes. */
-
-/* Note that the type below can be used for both ELF32 and ELF64
- files. The SYSV ABI says that 64-bit notes must be aligned to 8
- bytes, but binutils is known to generate 64-bit notes aligned to 4
- bytes instead. */
-
-type Elf_Note =
- struct
- {
- /* The first `namesz' bytes in `name' contain a NULL-terminated
- character representation of the entry's owner or originator. */
- Elf_Word namesz;
-
- /* The first `descsz' bytes in `desc' hold the note descriptor.
- The ABI places no constraints on a descriptor's contents. */
- Elf_Word descsz;
-
- /* This word gives the interpretation of the descriptor. Each
- originator controls its own types. They must be non-negative.
- The ABI does not define what descriptors mean. */
- Elf_Word _type;
-
- byte[namesz] name;
- byte[alignto (OFFSET, 4#B)];
-
- byte[descsz] desc;
- byte[alignto (OFFSET, 4#B)];
-};
-
-/* ELF identification struct.
-
- This is the first component in the ELF header for both ELF32 and
- ELF64. */
-
-type Elf_Ident =
- struct
- {
- byte[4] ei_mag == [0x7fUB, 'E', 'L', 'F'];
- byte ei_class;
- byte ei_data :
- (ei_data == ELFDATA2LSB) ? set_endian (ENDIAN_LITTLE) : set_endian
(ENDIAN_BIG);
- byte ei_version;
- byte ei_osabi;
- byte ei_abiversion;
- byte[6] ei_pad;
- offset<byte,B> ei_nident;
- };
diff --git a/pickles/elf.pk b/pickles/elf.pk
deleted file mode 100644
index 0351c961..00000000
--- a/pickles/elf.pk
+++ /dev/null
@@ -1,34 +0,0 @@
-/* elf.pk - ELF implementation for GNU poke. */
-
-/* Copyright (C) 2019, 2020, 2021, 2022, 2023 Jose E. Marchesi. */
-
-/* This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/* This file contains a Poke description of the ELF (Executable and
- * Linking Format) object file format. The ELF format is described in
- * the chapter 4 of the SysV ABI.
- *
- * Both ELF32 and ELF64 are supported.
- *
- * In general, we use the same field names used in the C structs
- * documented in the gABI, that are also used in the widely used ELF
- * implementations like in the GNU binutils and also in elfutils.
- * This makes life easier for system hackers who are already familiar
- * with these names.
- */
-
-load "elf-common.pk";
-load "elf-32.pk";
-load "elf-64.pk";
diff --git a/pickles/sframe.pk b/pickles/sframe.pk
index c7acd8ec..a251b818 100644
--- a/pickles/sframe.pk
+++ b/pickles/sframe.pk
@@ -31,8 +31,6 @@
- libsframe/doc/sframe-spec.texi.
*/
-load elf;
-
/* SFrame format versions. */
var SFRAME_VERSION_1 = 1;
/* SFrame magic number. */
diff --git a/testsuite/Makefile.am b/testsuite/Makefile.am
index 2fcb7bb6..1ba2f989 100644
--- a/testsuite/Makefile.am
+++ b/testsuite/Makefile.am
@@ -592,8 +592,6 @@ EXTRA_DIST = \
poke.pickles/btf-ext-test.pk \
poke.pickles/btf-test.pk \
poke.pickles/coff-test.pk \
- poke.pickles/ctf-test.pk \
- poke.pickles/dwarf-test.pk \
poke.pickles/id3v2-test.pk \
poke.pickles/jffs-test.pk \
poke.pickles/leb128-test.pk \
@@ -607,7 +605,6 @@ EXTRA_DIST = \
poke.pickles/mbr-test.pk \
poke.pickles/id3v1-test.pk \
poke.pickles/rgb24-test.pk \
- poke.pickles/elf-test.pk \
poke.pickles/uuid-test.pk \
poke.pickles/redoxfs-test.pk \
poke.pickles/pcap-test.pk \
diff --git a/testsuite/poke.pickles/ctf-test.pk
b/testsuite/poke.pickles/ctf-test.pk
deleted file mode 100644
index 89b85984..00000000
--- a/testsuite/poke.pickles/ctf-test.pk
+++ /dev/null
@@ -1,28 +0,0 @@
-/* ctf-test.pk - Tests for the CTF pickle. */
-
-/* Copyright (C) 2022, 2023 Jose E. Marchesi. */
-
-/* This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-load pktest;
-load ctf;
-
-var tests = [
- PkTest {
- name = "load ctf pickle",
- },];
-
-var ok = pktest_run (tests);
-exit (ok ? 0 : 1);
diff --git a/testsuite/poke.pickles/dwarf-test.pk
b/testsuite/poke.pickles/dwarf-test.pk
deleted file mode 100644
index 4ea57e75..00000000
--- a/testsuite/poke.pickles/dwarf-test.pk
+++ /dev/null
@@ -1,28 +0,0 @@
-/* dwarf-test.pk - Tests for the DWARF pickle. */
-
-/* Copyright (C) 2022, 2023 Jose E. Marchesi. */
-
-/* This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-load pktest;
-load dwarf;
-
-var tests = [
- PkTest {
- name = "load dwarf pickle",
- },];
-
-var ok = pktest_run (tests);
-exit (ok ? 0 : 1);
diff --git a/testsuite/poke.pickles/elf-test.pk
b/testsuite/poke.pickles/elf-test.pk
deleted file mode 100644
index e06f30eb..00000000
--- a/testsuite/poke.pickles/elf-test.pk
+++ /dev/null
@@ -1,28 +0,0 @@
-/* elf-test.pk - Tests for the ELF pickle. */
-
-/* Copyright (C) 2022, 2023 Jose E. Marchesi. */
-
-/* This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-load pktest;
-load elf;
-
-var tests = [
- PkTest {
- name = "load elf pickle",
- },];
-
-var ok = pktest_run (tests);
-exit (ok ? 0 : 1);
--
2.30.2
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [COMMITTED] pickles: remove the ELF and DWARF pickles,
Jose E. Marchesi <=