summaryrefslogtreecommitdiff
path: root/lang/parrot/patches
diff options
context:
space:
mode:
authorhe <he>2009-12-09 09:23:50 +0000
committerhe <he>2009-12-09 09:23:50 +0000
commit17af388572bae53f4260ffd12473071787ae14af (patch)
treecc3ec2944961300b66aaaa2695d599c7b01813a5 /lang/parrot/patches
parent2b62a1519949e25ca89862b508fb674411c750b7 (diff)
downloadpkgsrc-17af388572bae53f4260ffd12473071787ae14af.tar.gz
Update to version 1.7.0.
Pkgsrc changes: o Adapt the patch to t/op/io.t to a change done upstream slightly after 1.7.0 was released. o Add a patch which fixes a problem exposed by one of the tests, related to library cloning, which caused dlclose() to be called twice with the same handle value, ref. Parrot ticket 1340. Upstream changes: New in 1.7.0 - Functionality + Parrot_capture_lex has been added to the PARROT_EXPORT API + PARROT_MAX_ARGS has been increased from 8 to 16 to allow for ops that take mo re than 8 args - Performance + The profiling runcore now caches metadata for improved performance - Maintenance and cleanup + Expanded the Parrot debugger documentation + Parrot debugger now uses the new Parrot STRING API + Continue to port rest of internals to use the STRING API - Deprecations + The JIT subsystem has been removed and is being written from the ground up. More information can be found at https://trac.parrot.org/parrot/wiki/JITRewrite + Implicit optional named parameters (eligible in 2.1) + Continuation-based ExceptionHandlers (eligible in 2.1) + Use of undocumented variables in class_init (eligible in 2.1) + Parrot_oo_get_namespace (eligible in 2.1) - Bugfix + Improved line number tracking in IMCC - Tests + Converted many more Perl 5 tests to PIR + Expanded test coverage of the CallSignature, Namespace, FixedPMCArray, ResizeableIntegerArray and ExceptionHandler PMCs
Diffstat (limited to 'lang/parrot/patches')
-rw-r--r--lang/parrot/patches/patch-ai30
-rw-r--r--lang/parrot/patches/patch-ak109
2 files changed, 118 insertions, 21 deletions
diff --git a/lang/parrot/patches/patch-ai b/lang/parrot/patches/patch-ai
index eb5cff72092..e6cbbe115ce 100644
--- a/lang/parrot/patches/patch-ai
+++ b/lang/parrot/patches/patch-ai
@@ -1,11 +1,11 @@
-$NetBSD: patch-ai,v 1.1 2009/10/21 14:23:13 he Exp $
+$NetBSD: patch-ai,v 1.2 2009/12/09 09:23:51 he Exp $
-I beleive this test works for all relevant pkgsrc platforms.
-It has been similarly transformed upstream after 1.7.0 was released.
+Mirror a change committed just after the release: the open_pipe_for_writing
+test should work everywhere.
---- t/op/io.t.orig 2008-12-18 06:19:20.000000000 +0100
+--- t/op/io.t.orig 2009-10-20 23:30:03.000000000 +0200
+++ t/op/io.t
-@@ -51,28 +51,9 @@ Tests various io opcodes.
+@@ -51,22 +51,6 @@ Tests various io opcodes.
ok(1, 'open with null mode')
.end
@@ -15,7 +15,7 @@ It has been similarly transformed upstream after 1.7.0 was released.
- .include 'sysinfo.pasm'
- $S0 = sysinfo .SYSINFO_PARROT_OS
- if $S0 == 'linux' goto tt661_ok
-- if $S0 == 'MSWin32' goto tt661_ok
+-# if $S0 == 'MSWin32' goto tt661_ok
- if $S0 == 'darwin' goto tt661_ok
- if $S0 == 'openbsd' goto tt661_ok
-
@@ -28,35 +28,23 @@ It has been similarly transformed upstream after 1.7.0 was released.
.include 'iglobals.pasm'
.sub 'open_pipe_for_reading'
-- $I0 = tt661_todo_test()
-- unless $I0 goto open_pipe_for_reading_todoed
--
- .local pmc interp
- interp = getinterp
-
-@@ -103,15 +84,9 @@ Tests various io opcodes.
- open_pipe_for_reading_failed:
- nok(1, 'open pipe for reading')
- .return ()
--
-- open_pipe_for_reading_todoed:
-- todo(1, 'Unimplemented in this platform, TT #661')
+@@ -103,8 +87,6 @@ Tests various io opcodes.
.end
.sub 'open_pipe_for_writing'
- $I0 = tt661_todo_test()
- unless $I0 goto open_pipe_for_writing_todoed
--
.local pmc interp
interp = getinterp
-@@ -144,9 +119,6 @@ Tests various io opcodes.
+@@ -137,10 +119,6 @@ Tests various io opcodes.
open_pipe_for_writing_failed:
nok(1, 'open pipe for writing')
.return ()
-
- open_pipe_for_writing_todoed:
- todo(1, 'Unimplemented in this platform, TT #661')
+-
.end
# Local Variables:
diff --git a/lang/parrot/patches/patch-ak b/lang/parrot/patches/patch-ak
new file mode 100644
index 00000000000..ecba1e6f8f6
--- /dev/null
+++ b/lang/parrot/patches/patch-ak
@@ -0,0 +1,109 @@
+$NetBSD: patch-ak,v 1.1 2009/12/09 09:23:51 he Exp $
+
+Prevent problem exposed by "library cloning", where the dlopen()-returned
+handle is copied, causing dlclose() to be called twice with the same handle,
+which in turn triggers a warning from ld.elf_so on NetBSD. Ref.
+http://trac.parrot.org/parrot/ticket/1340.
+
+Index: config/gen/platform/generic/dl.c
+===================================================================
+--- config/gen/platform/generic/dl.c (revision 42823)
++++ config/gen/platform/generic/dl.c (working copy)
+@@ -22,11 +22,69 @@
+ */
+
+ #ifdef PARROT_HAS_HEADER_DLFCN
++# include <stddef.h>
++# include <stdlib.h>
+ # include <dlfcn.h>
+ #endif
+
+ #define PARROT_DLOPEN_FLAGS RTLD_LAZY
+
++#ifdef PARROT_HAS_HEADER_DLFCN
++
++struct handle_entry {
++ void *handle;
++ struct handle_entry *next;
++};
++
++struct handle_entry *handle_list = NULL;
++
++static void
++push_handle_entry(void *handle)
++{
++ struct handle_entry *e;
++
++ e = malloc(sizeof(struct handle_entry));
++ if (!e) { return; }
++ e->handle = handle;
++ e->next = handle_list;
++ handle_list = e;
++}
++
++static void *
++find_handle_entry(void *handle)
++{
++ struct handle_entry *e;
++
++ for(e = handle_list; e; e = e->next) {
++ if (e->handle == handle)
++ return handle;
++ }
++ return NULL;
++}
++
++static void
++remove_handle_entry(void *handle)
++{
++ struct handle_entry *cur, *prev, *p;
++
++ if (handle_list) {
++ if (handle_list->handle == handle) {
++ p = handle_list;
++ handle_list = p->next;
++ free(p);
++ } else {
++ for (cur = handle_list; cur; prev = cur, cur = cur->next) {
++ if (cur->handle == handle) {
++ prev->next = cur->next;
++ free(cur);
++ }
++ }
++ }
++ }
++}
++#endif /* PARROT_HAS_HEADER_DLFCN */
++
++
+ /*
+
+ =item C<void * Parrot_dlopen(const char *filename)>
+@@ -39,7 +97,11 @@
+ Parrot_dlopen(const char *filename)
+ {
+ #ifdef PARROT_HAS_HEADER_DLFCN
+- return dlopen(filename, PARROT_DLOPEN_FLAGS);
++ void *h;
++
++ h = dlopen(filename, PARROT_DLOPEN_FLAGS);
++ push_handle_entry(h);
++ return h;
+ #else
+ return 0;
+ #endif
+@@ -93,7 +155,13 @@
+ Parrot_dlclose(void *handle)
+ {
+ #ifdef PARROT_HAS_HEADER_DLFCN
+- return dlclose(handle);
++ int rv;
++
++ if (find_handle_entry(handle)) {
++ remove_handle_entry(handle);
++ rv = dlclose(handle);
++ return rv;
++ }
+ #else
+ return -1;
+ #endif