diff options
Diffstat (limited to 'app-text/ghostscript/files/gs-fix-gc.patch')
-rw-r--r-- | app-text/ghostscript/files/gs-fix-gc.patch | 145 |
1 files changed, 0 insertions, 145 deletions
diff --git a/app-text/ghostscript/files/gs-fix-gc.patch b/app-text/ghostscript/files/gs-fix-gc.patch deleted file mode 100644 index 953b21a86fa1..000000000000 --- a/app-text/ghostscript/files/gs-fix-gc.patch +++ /dev/null @@ -1,145 +0,0 @@ -Index: gs/src/gxalloc.h -=================================================================== -RCS file: /cvs/ghostscript/gs/src/gxalloc.h,v -retrieving revision 1.11 -diff -b -u -r1.11 gxalloc.h ---- gs/src/gxalloc.h 4 Aug 2004 19:36:12 -0000 1.11 -+++ gs/src/gxalloc.h 14 Sep 2004 21:44:37 -0000 -@@ -143,7 +143,7 @@ - byte *cbot; /* bottom of free area */ - /* (top of aligned objects) */ - obj_header_t *rcur; /* current refs object, 0 if none */ -- byte *rtop; /* top of rcur */ -+ byte *rtop; /* top of rcur, not aligned to obj_align_mod */ - byte *ctop; /* top of free area */ - /* (bottom of strings) */ - byte *climit; /* top of strings */ -Index: gs/src/gxobj.h -=================================================================== -RCS file: /cvs/ghostscript/gs/src/gxobj.h,v -retrieving revision 1.6 -diff -b -u -r1.6 gxobj.h ---- gs/src/gxobj.h 21 Feb 2002 22:24:53 -0000 1.6 -+++ gs/src/gxobj.h 14 Sep 2004 21:44:37 -0000 -@@ -110,20 +110,22 @@ - /* The only possible values for obj_align_mod are 4, 8, or 16.... */ - #if obj_align_mod == 4 - # define log2_obj_align_mod 2 --#else --#if obj_align_mod == 8 -+#elif obj_align_mod == 8 - # define log2_obj_align_mod 3 --#else --#if obj_align_mod == 16 -+#elif obj_align_mod == 16 - # define log2_obj_align_mod 4 --#endif --#endif -+#elif obj_align_mod == 32 /* for testing, not seen yet in the wild */ -+# define log2_obj_align_mod 5 -+#else -+# error Unexpected value of obj_align_mod - #endif - #define obj_align_mask (obj_align_mod-1) - #define obj_align_round(siz)\ - (uint)(((siz) + obj_align_mask) & -obj_align_mod) - #define obj_size_round(siz)\ - obj_align_round((siz) + sizeof(obj_header_t)) -+#define ptr_align_round(p)\ -+ ((byte *)obj_align_round((size_t)(p))) - - /* Define the real object header type, taking alignment into account. */ - struct obj_header_s { /* must be a struct because of forward reference */ -Index: gs/src/ialloc.c -=================================================================== -RCS file: /cvs/ghostscript/gs/src/ialloc.c,v -retrieving revision 1.7 -diff -b -u -r1.7 ialloc.c ---- gs/src/ialloc.c 4 Aug 2004 19:36:12 -0000 1.7 -+++ gs/src/ialloc.c 14 Sep 2004 21:44:37 -0000 -@@ -157,8 +157,8 @@ - - /* If we're allocating a run of refs already, */ - /* and we aren't about to overflow the maximum run length, use it. */ -- if (mem->cc.rtop == mem->cc.cbot && -- num_refs < (mem->cc.ctop - mem->cc.cbot) / sizeof(ref) && -+ if (ptr_align_round(mem->cc.rtop) == mem->cc.cbot && -+ num_refs < (mem->cc.ctop - mem->cc.rtop) / sizeof(ref) && - mem->cc.rtop - (byte *) mem->cc.rcur + num_refs * sizeof(ref) < - max_size_st_refs - ) { -@@ -169,8 +169,8 @@ - ialloc_trace_space(mem), client_name_string(cname), - num_refs, (ulong) obj); - mem->cc.rcur[-1].o_size += num_refs * sizeof(ref); -- end = (ref *) (mem->cc.rtop = mem->cc.cbot += -- num_refs * sizeof(ref)); -+ end = (ref *) (mem->cc.rtop += num_refs * sizeof(ref)); -+ mem->cc.cbot = ptr_align_round(mem->cc.rtop); - make_mark(end - 1); - } else { - /* -@@ -225,12 +225,12 @@ - return_error(e_Fatal); - diff = old_num_refs - new_num_refs; - /* Check for LIFO. See gs_free_ref_array for more details. */ -- if (mem->cc.rtop == mem->cc.cbot && -+ if (ptr_align_round(mem->cc.rtop) == mem->cc.cbot && - (byte *) (obj + (old_num_refs + 1)) == mem->cc.rtop - ) { - /* Shorten the refs object. */ -- ref *end = (ref *) (mem->cc.cbot = mem->cc.rtop -= -- diff * sizeof(ref)); -+ ref *end = (ref *) (mem->cc.rtop -= diff * sizeof(ref)); -+ mem->cc.cbot = ptr_align_round(mem->cc.rtop); - - if_debug4('A', "[a%d:<$ ]%s(%u) 0x%lx\n", - ialloc_trace_space(mem), client_name_string(cname), diff, -@@ -264,7 +264,7 @@ - */ - if (!r_has_type(parr, t_array)) - DO_NOTHING; /* don't look for special cases */ -- else if (mem->cc.rtop == mem->cc.cbot && -+ else if (ptr_align_round(mem->cc.rtop) == mem->cc.cbot && - (byte *) (obj + (num_refs + 1)) == mem->cc.rtop - ) { - if ((obj_header_t *) obj == mem->cc.rcur) { -@@ -278,7 +278,8 @@ - ialloc_trace_space(mem), client_name_string(cname), - num_refs, (ulong) obj); - mem->cc.rcur[-1].o_size -= num_refs * sizeof(ref); -- mem->cc.rtop = mem->cc.cbot = (byte *) (obj + 1); -+ mem->cc.rtop = (byte *) (obj + 1); -+ mem->cc.cbot = ptr_align_round(mem->cc.rtop); - make_mark(obj); - } - return; -Index: gs/src/igcref.c -=================================================================== -RCS file: /cvs/ghostscript/gs/src/igcref.c,v -retrieving revision 1.6 -diff -b -u -r1.6 igcref.c ---- gs/src/igcref.c 4 Aug 2004 19:36:12 -0000 1.6 -+++ gs/src/igcref.c 14 Sep 2004 21:44:37 -0000 -@@ -720,15 +720,18 @@ - new_size += sizeof(ref_packed); - /* We want to make the newly freed space into a free block, */ - /* but we can only do this if we have enough room. */ -- if (size - new_size < sizeof(obj_header_t)) { /* Not enough room. Pad to original size. */ -+ if (size < obj_align_round(new_size) + sizeof(obj_header_t)) { /* Not enough room. Pad to original size. */ - while (new_size < size) - *dest++ = pt_tag(pt_integer), - new_size += sizeof(ref_packed); - } else { -- obj_header_t *pfree = (obj_header_t *) ((ref *) dest + 1); -+ byte *pfree_u = (byte *)dest + sizeof(ref); -+ byte *pfree_a = ptr_align_round(pfree_u); -+ obj_header_t *pfree = (obj_header_t *)pfree_a; -+ int align = pfree_a - pfree_u; - - pfree->o_alone = 0; -- pfree->o_size = size - new_size - sizeof(obj_header_t); -+ pfree->o_size = size - new_size - sizeof(obj_header_t) - align; - pfree->o_type = &st_bytes; - } - /* Re-create the final ref. */ |