# New Ticket Created by J�rgen B�mmels
# Please include the string: [perl #18144]
# in the subject line of all future correspondence about this issue.
# <URL: http://rt.perl.org/rt2/Ticket/Display.html?id=18144 >
In order to do some debugging with PackFiles I had resurrected
pdump. It now uses a valid interpreter for output.
To test it use
make pdump
pdump life.pbc
-- attachment 1 ------------------------------------------------------
url: http://rt.perl.org/rt2/attach/40719/32825/696825/pdump.diff
Index: pdump.c
===================================================================
RCS file: /cvs/public/parrot/pdump.c,v
retrieving revision 1.13
diff -u -r1.13 pdump.c
--- pdump.c 6 Mar 2002 15:45:28 -0000 1.13
+++ pdump.c 28 Oct 2002 22:20:58 -0000
@@ -11,6 +11,10 @@
*/
#include "parrot/packfile.h"
+#include "parrot/interpreter.h"
+
+void PackFile_dump (struct Parrot_Interp *interpreter,
+ struct PackFile *pf);
int
main(int argc, char **argv)
@@ -20,7 +24,7 @@
opcode_t *packed;
size_t packed_size;
struct PackFile *pf;
- struct Parrot_Interp *interpreter = make_interpreter(NO_FLAGS);
+ struct Parrot_Interp *interpreter;
if (argc != 2) {
fprintf(stderr, "pdump: usage: pdump FILE\n");
@@ -37,9 +41,9 @@
return 1;
}
- init_world();
-
interpreter = make_interpreter(NO_FLAGS);
+ Parrot_init (interpreter, (void *) &file_stat);
+ init_world(interpreter);
packed_size = file_stat.st_size;
@@ -68,8 +72,8 @@
printf("Can't unpack.\n");
return 1;
}
- PackFile_dump(pf);
- PackFile_DELETE(pf);
+ PackFile_dump(interpreter, pf);
+ PackFile_destroy(pf);
pf = NULL;
Index: packdump.c
===================================================================
RCS file: /cvs/public/parrot/packdump.c,v
retrieving revision 1.4
diff -u -r1.4 packdump.c
--- packdump.c 11 Oct 2002 01:46:31 -0000 1.4
+++ packdump.c 28 Oct 2002 22:20:58 -0000
@@ -13,64 +13,82 @@
#include "parrot/parrot.h"
#include "parrot/packfile.h"
+/*
+** FIXME: this should also be segmentized.
+** For now just remove some warnings
+*/
+
+void PackFile_dump (struct Parrot_Interp *, struct PackFile *);
+static void PackFile_FixupTable_dump (struct Parrot_Interp *,
+ struct PackFile_FixupTable *);
+static void PackFile_ConstTable_dump (struct Parrot_Interp *,
+ struct PackFile_ConstTable *);
+static void PackFile_Constant_dump (struct Parrot_Interp *,
+ struct PackFile_Constant *);
+
void
-PackFile_dump(struct PackFile *self)
+PackFile_dump(struct Parrot_Interp *interpreter, struct PackFile *self)
{
size_t i;
- PIO_printf(NULL, "FIXUP => {\n");
+ PIO_printf(interpreter, "FIXUP => {\n");
- PackFile_FixupTable_dump(self->fixup_table);
+ PackFile_FixupTable_dump(interpreter, self->fixup_table);
- PIO_printf(NULL, "},\n");
+ PIO_printf(interpreter, "},\n");
- PIO_printf(NULL, "CONST => [\n");
+ PIO_printf(interpreter, "CONST => [\n");
- PackFile_ConstTable_dump(self->const_table);
+ PackFile_ConstTable_dump(interpreter, self->const_table);
- PIO_printf(NULL, "],\n");
+ PIO_printf(interpreter, "],\n");
- PIO_printf(NULL, "BCODE => [ # %ld bytes", (long)self->byte_code_size);
+ PIO_printf(interpreter, "BCODE => [ # %ld bytes",
+ (long)self->byte_code_size);
for (i = 0; i < self->byte_code_size / sizeof(opcode_t); i++) {
if (i % 8 == 0) {
- PIO_printf(NULL, "\n %08lx: ", (unsigned long)i * sizeof(opcode_t));
+ PIO_printf(interpreter, "\n %08lx: ",
+ (unsigned long)i * sizeof(opcode_t));
}
- PIO_printf(NULL, "%08lx ", (unsigned long)self->byte_code[i]);
+ PIO_printf(interpreter, "%08lx ", (unsigned long)self->byte_code[i]);
}
- PIO_printf(NULL, "\n]\n");
+ PIO_printf(interpreter, "\n]\n");
return;
}
void
-PackFile_FixupTable_dump(struct PackFile_FixupTable *self)
+PackFile_FixupTable_dump(struct Parrot_Interp *interpreter,
+ struct PackFile_FixupTable *self)
{
UNUSED(self);
return;
}
void
-PackFile_ConstTable_dump(struct PackFile_ConstTable *self)
+PackFile_ConstTable_dump(struct Parrot_Interp *interpreter,
+ struct PackFile_ConstTable *self)
{
opcode_t i;
if (!self) {
- PIO_eprintf(NULL, "PackFile_ConstTable_dump: self == NULL!\n");
+ PIO_eprintf(interpreter, "PackFile_ConstTable_dump: self == NULL!\n");
return;
}
for (i = 0; i < self->const_count; i++) {
- PIO_printf(NULL, " # %ld:\n", (long)i);
- PackFile_Constant_dump(self->constants[i]);
+ PIO_printf(interpreter, " # %ld:\n", (long)i);
+ PackFile_Constant_dump(interpreter, self->constants[i]);
}
return;
}
void
-PackFile_Constant_dump(struct PackFile_Constant *self)
+PackFile_Constant_dump(struct Parrot_Interp *interpreter,
+ struct PackFile_Constant *self)
{
if (!self) {
/* TODO: OK to be silent here? */
@@ -80,23 +98,27 @@
switch (self->type) {
case PFC_NONE:
/* TODO: OK to be silent here? */
- PIO_printf(NULL," [ 'PFC_NONE', undef ],\n");
+ PIO_printf(interpreter," [ 'PFC_NONE', undef ],\n");
break;
case PFC_NUMBER:
- PIO_printf(NULL, " [ 'PFC_NUMBER', %g ],\n", self->number);
+ PIO_printf(interpreter, " [ 'PFC_NUMBER', %g ],\n", self->number);
break;
case PFC_STRING:
- PIO_printf(NULL, " [ 'PFC_STRING', {\n");
- PIO_printf(NULL, " FLAGS => 0x%04lx,\n", (long)self->string->flags);
- PIO_printf(NULL, " ENCODING => %s,\n", self->string->encoding->name);
- PIO_printf(NULL, " TYPE => %s,\n", self->string->type->name);
- PIO_printf(NULL, " SIZE => %ld,\n", (long)self->string->bufused);
+ PIO_printf(interpreter, " [ 'PFC_STRING', {\n");
+ PIO_printf(interpreter, " FLAGS => 0x%04lx,\n",
+ (long)self->string->flags);
+ PIO_printf(interpreter, " ENCODING => %s,\n",
+ self->string->encoding->name);
+ PIO_printf(interpreter, " TYPE => %s,\n",
+ self->string->type->name);
+ PIO_printf(interpreter, " SIZE => %ld,\n",
+ (long)self->string->bufused);
/* TODO: Won't do anything reasonable for most encodings */
- PIO_printf(NULL, " DATA => '%.*s'\n",
- (int)self->string->bufused, (char *)self->string->strstart);
- PIO_printf(NULL, " } ],\n");
+ PIO_printf(interpreter, " DATA => '%.*s'\n",
+ (int)self->string->bufused, (char *)self->string->strstart);
+ PIO_printf(interpreter, " } ],\n");
break;
default: