public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
* [rpms/gcc] rhel-f41-base: 4.1.2-12
@ 2026-06-29 12:23 Jakub Jelinek
  0 siblings, 0 replies; 2+ messages in thread
From: Jakub Jelinek @ 2026-06-29 12:23 UTC (permalink / raw)
  To: git-commits

A new commit has been pushed.

Repo   : rpms/gcc
Branch : rhel-f41-base
Commit : 1b9112c69f2f3289701a3b4ef3f6e177c1bd81e9
Author : Jakub Jelinek <jakub@fedoraproject.org>
Date   : 2007-05-03T21:56:10+00:00
Stats  : +22/-0 in 1 file(s)
URL    : https://src.fedoraproject.org/rpms/gcc/c/1b9112c69f2f3289701a3b4ef3f6e177c1bd81e9?branch=rhel-f41-base

Log:
4.1.2-12

---
diff --git a/gcc41-pr28482.patch b/gcc41-pr28482.patch
new file mode 100644
index 0000000..3cff793
--- /dev/null
+++ b/gcc41-pr28482.patch
@@ -0,0 +1,22 @@
+2007-05-02  Jakub Jelinek  <jakub@redhat.com>
+
+	PR libgomp/28482
+	* configure.tgt: Don't link with -Wl,-z,nodlopen even on Linux.
+
+--- libgomp/configure.tgt.jj	2007-04-20 12:55:40.000000000 +0200
++++ libgomp/configure.tgt	2007-05-02 17:32:15.000000000 +0200
+@@ -11,14 +11,11 @@
+ #  XLDFLAGS		Add extra link flags to use.
+ 
+ # Optimize TLS usage by avoiding the overhead of dynamic allocation.
+-# This does require that the library be present during process 
+-# startup, so mark the library as not to be dlopened.
+ if test $have_tls = yes ; then
+   case "${target}" in
+ 
+     *-*-linux*)
+ 	XCFLAGS="${XCFLAGS} -ftls-model=initial-exec"
+-	XLDFLAGS="${XLDFLAGS} -Wl,-z,nodlopen"
+ 	;;
+   esac
+ fi

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* [rpms/gcc] rhel-f41-base: 4.1.2-12
@ 2026-06-29 12:23 Jakub Jelinek
  0 siblings, 0 replies; 2+ messages in thread
From: Jakub Jelinek @ 2026-06-29 12:23 UTC (permalink / raw)
  To: git-commits

A new commit has been pushed.

Repo   : rpms/gcc
Branch : rhel-f41-base
Commit : a1271c1402033a306e9919d3930da1f738ff0410
Author : Jakub Jelinek <jakub@fedoraproject.org>
Date   : 2007-05-03T22:15:08+00:00
Stats  : +382/-811 in 11 file(s)
URL    : https://src.fedoraproject.org/rpms/gcc/c/a1271c1402033a306e9919d3930da1f738ff0410?branch=rhel-f41-base

Log:
4.1.2-12

---
diff --git a/.cvsignore b/.cvsignore
index 2c490bb..f922c4c 100644
--- a/.cvsignore
+++ b/.cvsignore
@@ -1 +1 @@
-gcc-4.1.2-20070424.tar.bz2
+gcc-4.1.2-20070503.tar.bz2

diff --git a/gcc41-dtor-relro.patch b/gcc41-dtor-relro.patch
new file mode 100644
index 0000000..118128c
--- /dev/null
+++ b/gcc41-dtor-relro.patch
@@ -0,0 +1,89 @@
+2007-05-03  Ulrich Drepper  <drepper@redhat.com>
+	    Jakub Jelinek  <jakub@redhat.com>
+
+	* crtstuff.c (HIDDEN_DTOR_LIST_END): New macro.
+	(__do_global_dtors_aux): Use more paranoid loop to run
+	destructors if HIDDEN_DTOR_LIST_END.
+	(__DTOR_END__): Export as a hidden symbol when HIDDEN_DTOR_LIST_END.
+
+--- gcc/crtstuff.c.jj	2007-01-24 22:24:21.000000000 +0100
++++ gcc/crtstuff.c	2007-05-03 10:40:29.000000000 +0200
+@@ -106,6 +107,11 @@ call_ ## FUNC (void)					\
+ # define EH_FRAME_SECTION_CONST
+ #endif
+ 
++#if !defined(DTOR_LIST_END) && defined(OBJECT_FORMAT_ELF) \
++    && defined(HAVE_GAS_HIDDEN) && !defined(FINI_ARRAY_SECTION_ASM_OP)
++# define HIDDEN_DTOR_LIST_END
++#endif
++
+ /* We do not want to add the weak attribute to the declarations of these
+    routines in unwind-dw2-fde.h because that will cause the definition of
+    these symbols to be weak as well.
+@@ -265,10 +271,6 @@ extern void __cxa_finalize (void *) TARG
+ static void __attribute__((used))
+ __do_global_dtors_aux (void)
+ {
+-#ifndef FINI_ARRAY_SECTION_ASM_OP
+-  static func_ptr *p = __DTOR_LIST__ + 1;
+-  func_ptr f;
+-#endif /* !defined(FINI_ARRAY_SECTION_ASM_OP)  */
+   static _Bool completed;
+ 
+   if (__builtin_expect (completed, 0))
+@@ -282,12 +284,32 @@ __do_global_dtors_aux (void)
+ #ifdef FINI_ARRAY_SECTION_ASM_OP
+   /* If we are using .fini_array then destructors will be run via that
+      mechanism.  */
++#elif defined(HIDDEN_DTOR_LIST_END)
++  {
++    /* Safer version that makes sure only .dtors function pointers are
++       called even if the static variable is maliciously changed.  */
++    extern func_ptr __DTOR_END__[] __attribute__((visibility ("hidden")));
++    static size_t dtor_idx;
++    const size_t max_idx = __DTOR_END__ - __DTOR_LIST__ - 1;
++    func_ptr f;
++
++    while (dtor_idx < max_idx)
++      {
++	f = __DTOR_LIST__[++dtor_idx];
++	f ();
++      }
++  }
+ #else /* !defined (FINI_ARRAY_SECTION_ASM_OP) */
+-  while ((f = *p))
+-    {
+-      p++;
+-      f ();
+-    }
++  {
++    static func_ptr *p = __DTOR_LIST__ + 1;
++    func_ptr f;
++
++    while ((f = *p))
++      {
++	p++;
++	f ();
++      }
++  }
+ #endif /* !defined(FINI_ARRAY_SECTION_ASM_OP) */
+ 
+ #ifdef USE_EH_FRAME_REGISTRY
+@@ -471,6 +493,17 @@ STATIC func_ptr __CTOR_END__[1]
+ 
+ #ifdef DTOR_LIST_END
+ DTOR_LIST_END;
++#elif defined(HIDDEN_DTOR_LIST_END)
++#ifdef DTORS_SECTION_ASM_OP
++asm (DTORS_SECTION_ASM_OP);
++#endif
++func_ptr __DTOR_END__[1]
++  __attribute__ ((unused,
++#ifndef DTORS_SECTION_ASM_OP
++		  section(".dtors"),
++#endif
++		  aligned(sizeof(func_ptr)), visibility ("hidden")))
++  = { (func_ptr) 0 };
+ #elif defined(DTORS_SECTION_ASM_OP)
+ asm (DTORS_SECTION_ASM_OP);
+ STATIC func_ptr __DTOR_END__[1]

diff --git a/gcc41-libgomp-ncpus.patch b/gcc41-libgomp-ncpus.patch
new file mode 100644
index 0000000..3cb6238
--- /dev/null
+++ b/gcc41-libgomp-ncpus.patch
@@ -0,0 +1,186 @@
+2007-05-02  Jakub Jelinek  <jakub@redhat.com>
+
+	* config/linux/proc.c: New file.
+
+--- libgomp/config/linux/proc.c.jj	2007-05-02 13:50:37.000000000 +0200
++++ libgomp/config/linux/proc.c	2007-05-02 16:00:47.000000000 +0200
+@@ -0,0 +1,179 @@
++/* Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc.
++   Contributed by Jakub Jelinek <jakub@redhat.com>.
++
++   This file is part of the GNU OpenMP Library (libgomp).
++
++   Libgomp is free software; you can redistribute it and/or modify it
++   under the terms of the GNU Lesser General Public License as published by
++   the Free Software Foundation; either version 2.1 of the License, or
++   (at your option) any later version.
++
++   Libgomp 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 Lesser General Public License for
++   more details.
++
++   You should have received a copy of the GNU Lesser General Public License 
++   along with libgomp; see the file COPYING.LIB.  If not, write to the
++   Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
++   MA 02110-1301, USA.  */
++
++/* As a special exception, if you link this library with other files, some
++   of which are compiled with GCC, to produce an executable, this library
++   does not by itself cause the resulting executable to be covered by the
++   GNU General Public License.  This exception does not however invalidate
++   any other reasons why the executable file might be covered by the GNU
++   General Public License.  */
++
++/* This file contains system specific routines related to counting
++   online processors and dynamic load balancing.  */
++
++#ifndef _GNU_SOURCE
++#define _GNU_SOURCE 1
++#endif
++#include "libgomp.h"
++#include <sched.h>
++#include <stdlib.h>
++#include <unistd.h>
++#ifdef HAVE_GETLOADAVG
++# ifdef HAVE_SYS_LOADAVG_H
++#  include <sys/loadavg.h>
++# endif
++#endif
++
++#ifdef HAVE_PTHREAD_AFFINITY_NP
++static unsigned long
++cpuset_popcount (cpu_set_t *cpusetp)
++{
++#ifdef CPU_COUNT
++  /* glibc 2.6 and above provide a macro for this.  */
++  return CPU_COUNT (cpusetp);
++#else
++  size_t i;
++  unsigned long ret = 0;
++  extern int check[sizeof (cpusetp->__bits[0]) == sizeof (unsigned long int)];
++
++  (void) check;
++  for (i = 0; i < sizeof (*cpusetp) / sizeof (cpusetp->__bits[0]); i++)
++    {
++      unsigned long int mask = cpusetp->__bits[i];
++      if (mask == 0)
++	continue;
++      ret += __builtin_popcountl (mask);
++    }
++  return ret;
++#endif
++}
++#endif
++
++/* At startup, determine the default number of threads.  It would seem
++   this should be related to the number of cpus online.  */
++
++void
++gomp_init_num_threads (void)
++{
++#ifdef HAVE_PTHREAD_AFFINITY_NP
++  cpu_set_t cpuset;
++
++  if (pthread_getaffinity_np (pthread_self (), sizeof (cpuset), &cpuset) == 0)
++    {
++      /* Count only the CPUs this process can use.  */
++      gomp_nthreads_var = cpuset_popcount (&cpuset);
++      if (gomp_nthreads_var == 0)
++	gomp_nthreads_var = 1;
++      return;
++    }
++#endif
++#ifdef _SC_NPROCESSORS_ONLN
++  gomp_nthreads_var = sysconf (_SC_NPROCESSORS_ONLN);
++#endif
++}
++
++static int
++get_num_procs (void)
++{
++#ifdef HAVE_PTHREAD_AFFINITY_NP
++  cpu_set_t cpuset;
++
++  if (gomp_cpu_affinity == NULL)
++    {
++      /* Count only the CPUs this process can use.  */
++      if (pthread_getaffinity_np (pthread_self (), sizeof (cpuset),
++				  &cpuset) == 0)
++	{
++	  int ret = cpuset_popcount (&cpuset);
++	  return ret != 0 ? ret : 1;
++	}
++    }
++  else
++    {
++      size_t idx;
++      static int affinity_cpus;
++
++      /* We can't use pthread_getaffinity_np in this case
++	 (we have changed it ourselves, it binds to just one CPU).
++	 Count instead the number of different CPUs we are
++	 using.  */
++      CPU_ZERO (&cpuset);
++      if (affinity_cpus == 0)
++	{
++	  int cpus = 0;
++	  for (idx = 0; idx < gomp_cpu_affinity_len; idx++)
++	    if (! CPU_ISSET (gomp_cpu_affinity[idx], &cpuset))
++	      {
++		cpus++;
++		CPU_SET (gomp_cpu_affinity[idx], &cpuset);
++	      }
++	  affinity_cpus = cpus;
++	}
++      return affinity_cpus;
++    }
++#endif
++#ifdef _SC_NPROCESSORS_ONLN
++  return sysconf (_SC_NPROCESSORS_ONLN);
++#else
++  return gomp_nthreads_var;
++#endif
++}
++
++/* When OMP_DYNAMIC is set, at thread launch determine the number of
++   threads we should spawn for this team.  */
++/* ??? I have no idea what best practice for this is.  Surely some
++   function of the number of processors that are *still* online and
++   the load average.  Here I use the number of processors online
++   minus the 15 minute load average.  */
++
++unsigned
++gomp_dynamic_max_threads (void)
++{
++  unsigned n_onln, loadavg;
++
++  n_onln = get_num_procs ();
++  if (n_onln > gomp_nthreads_var)
++    n_onln = gomp_nthreads_var;
++
++  loadavg = 0;
++#ifdef HAVE_GETLOADAVG
++  {
++    double dloadavg[3];
++    if (getloadavg (dloadavg, 3) == 3)
++      {
++	/* Add 0.1 to get a kind of biased rounding.  */
++	loadavg = dloadavg[2] + 0.1;
++      }
++  }
++#endif
++
++  if (loadavg >= n_onln)
++    return 1;
++  else
++    return n_onln - loadavg;
++}
++
++int
++omp_get_num_procs (void)
++{
++  return get_num_procs ();
++}
++
++ialias (omp_get_num_procs)

diff --git a/gcc41-pr28482.patch b/gcc41-pr28482.patch
index 3cff793..2cb3638 100644
--- a/gcc41-pr28482.patch
+++ b/gcc41-pr28482.patch
@@ -5,18 +5,15 @@
 
 --- libgomp/configure.tgt.jj	2007-04-20 12:55:40.000000000 +0200
 +++ libgomp/configure.tgt	2007-05-02 17:32:15.000000000 +0200
-@@ -11,14 +11,11 @@
+@@ -11,11 +11,8 @@
  #  XLDFLAGS		Add extra link flags to use.
  
  # Optimize TLS usage by avoiding the overhead of dynamic allocation.
 -# This does require that the library be present during process 
 -# startup, so mark the library as not to be dlopened.
- if test $have_tls = yes ; then
-   case "${target}" in
- 
-     *-*-linux*)
+ if test $have_tls = yes && test "$with_gnu_ld" = "yes"; then
  	XCFLAGS="${XCFLAGS} -ftls-model=initial-exec"
 -	XLDFLAGS="${XLDFLAGS} -Wl,-z,nodlopen"
- 	;;
-   esac
  fi
+ 
+ # Since we require POSIX threads, assume a POSIX system by default.

diff --git a/gcc41-pr30558.patch b/gcc41-pr30558.patch
deleted file mode 100644
index 10581b4..0000000
--- a/gcc41-pr30558.patch
+++ /dev/null
@@ -1,65 +0,0 @@
-2007-04-24  Jakub Jelinek  <jakub@redhat.com>
-
-	PR tree-optimization/30558
-	* tree-eh.c (lower_eh_filter): If EH_FILTER_MUST_NOT_THROW
-	clear this_state.prev_try.
-
-	* g++.dg/gomp/pr30558.C: New test.
-
---- gcc/tree-eh.c.jj	2007-03-12 17:18:17.000000000 +0100
-+++ gcc/tree-eh.c	2007-04-24 17:32:16.000000000 +0200
-@@ -1497,6 +1497,10 @@ lower_eh_filter (struct leh_state *state
- 					 EH_FILTER_TYPES (inner));
-   this_state = *state;
-   this_state.cur_region = this_region;
-+  /* For must not throw regions any cleanup regions inside it
-+     can't reach outer catch regions.  */
-+  if (EH_FILTER_MUST_NOT_THROW (inner))
-+    this_state.prev_try = NULL;
- 
-   lower_eh_constructs_1 (&this_state, &TREE_OPERAND (*tp, 0));
- 
---- gcc/testsuite/g++.dg/gomp/pr30558.C.jj	2007-04-24 17:41:47.000000000 +0200
-+++ gcc/testsuite/g++.dg/gomp/pr30558.C	2007-04-24 17:42:24.000000000 +0200
-@@ -0,0 +1,41 @@
-+// PR tree-optimization/30558
-+// { dg-do compile }
-+// { dg-options "-fopenmp" }
-+
-+template <typename T> struct F
-+{
-+  ~F ();
-+  F (T);
-+  const T &operator[] (unsigned i) const;
-+};
-+
-+template <typename T> F<T> foo (const F<T> &x)
-+{
-+  return F<T> (x[1]);
-+}
-+
-+struct G
-+{
-+  G () { bar (2); }
-+  F<int> &operator () (F<int> x);
-+  void bar (int);
-+};
-+
-+int
-+main ()
-+{
-+  try
-+  {
-+    G g;
-+#pragma omp parallel for
-+    for (int i = 0; i < 10; ++i)
-+      {
-+	F<int> j (i);
-+	F<int> f = g (j);
-+	F<int> h = foo (f);
-+      }
-+  }
-+  catch (int &e)
-+  {
-+  }
-+}

diff --git a/gcc41-pr31598.patch b/gcc41-pr31598.patch
deleted file mode 100644
index 30232a9..0000000
--- a/gcc41-pr31598.patch
+++ /dev/null
@@ -1,96 +0,0 @@
-2007-04-24  Jakub Jelinek  <jakub@redhat.com>
-
-	PR c++/31598
-	* tree-inline.c (copy_body_r): Don't touch TREE_TYPE of OMP_CLAUSE.
-
-	* semantics.c (finish_omp_clauses): Don't create CP_OMP_CLAUSE_INFO
-	for type dependent OMP_CLAUSE_DECLs.
-
-	* g++.dg/gomp/pr31598.C: New test.
-
---- gcc/tree-inline.c.jj	2007-04-14 14:55:25.000000000 +0200
-+++ gcc/tree-inline.c	2007-04-24 11:33:19.000000000 +0200
-@@ -650,7 +650,8 @@ copy_body_r (tree *tp, int *walk_subtree
- 	    (NULL_TREE,
- 	     id->eh_region_offset + TREE_INT_CST_LOW (TREE_OPERAND (*tp, 0)));
- 
--      TREE_TYPE (*tp) = remap_type (TREE_TYPE (*tp), id);
-+      if (TREE_CODE (*tp) != OMP_CLAUSE)
-+	TREE_TYPE (*tp) = remap_type (TREE_TYPE (*tp), id);
- 
-       /* The copied TARGET_EXPR has never been expanded, even if the
- 	 original node was expanded already.  */
---- gcc/cp/semantics.c.jj	2007-04-01 20:16:51.000000000 +0200
-+++ gcc/cp/semantics.c	2007-04-24 10:45:35.000000000 +0200
-@@ -3627,7 +3627,8 @@ finish_omp_clauses (tree clauses)
- 	 Save the results, because later we won't be in the right context
- 	 for making these queries.  */
-       if (CLASS_TYPE_P (inner_type)
--	  && (need_default_ctor || need_copy_ctor || need_copy_assignment))
-+	  && (need_default_ctor || need_copy_ctor || need_copy_assignment)
-+	  && !type_dependent_expression_p (t))
- 	{
- 	  int save_errorcount = errorcount;
- 	  tree info;
---- gcc/testsuite/g++.dg/gomp/pr31598.C.jj	2007-04-24 10:47:50.000000000 +0200
-+++ gcc/testsuite/g++.dg/gomp/pr31598.C	2007-04-24 11:49:35.000000000 +0200
-@@ -0,0 +1,59 @@
-+// PR c++/31598
-+// { dg-do compile }
-+//
-+// Copyright (C) 2007 Free Software Foundation, Inc.
-+// Contributed by Theodore.Papadopoulo
-+//   16 Apr 2007 <Theodore.Papadopoulo@sophia.inria.fr>
-+
-+int i;
-+template <typename> struct A { A() {} };
-+template <typename> struct C { C() { i++; } C(const C &) { i += 2; } };
-+struct D { D() {} };
-+
-+struct M { typedef double E; };
-+
-+template <typename T>
-+struct R
-+{
-+  R()
-+  {
-+    typedef A<typename T::E> B;
-+    B b;
-+    #pragma omp parallel for firstprivate(b) schedule(guided)
-+      for (int t = 0; t < 10; ++t)
-+	;
-+  }
-+};
-+
-+template <typename T>
-+struct S
-+{
-+  S()
-+  {
-+    typedef C<typename T::E> B;
-+    B b;
-+    #pragma omp parallel for firstprivate(b)
-+      for (int t = 0; t < 10; ++t)
-+	;
-+  }
-+};
-+
-+struct U
-+{
-+  U()
-+  {
-+    D b;
-+    #pragma omp parallel for firstprivate(b)
-+      for (int t = 0; t < 10; ++t)
-+	;
-+  }
-+};
-+
-+int
-+main ()
-+{
-+  R<M> r;
-+  S<M> s;
-+  U u;
-+  return 0;
-+}

diff --git a/gcc41-pr31748.patch b/gcc41-pr31748.patch
new file mode 100644
index 0000000..1329d44
--- /dev/null
+++ b/gcc41-pr31748.patch
@@ -0,0 +1,43 @@
+2007-05-01  Jakub Jelinek  <jakub@redhat.com>
+
+	PR c++/31748
+	* semantics.c (finish_omp_clauses): Use %qD instead of %qE for
+	DECL_P in not a variable and appears more than once error messages.
+
+	* g++.dg/gomp/pr31748.C: New test.
+
+--- gcc/cp/semantics.c.jj	2007-04-26 09:30:58.000000000 +0200
++++ gcc/cp/semantics.c	2007-05-01 14:22:58.000000000 +0200
+@@ -3376,14 +3376,17 @@ finish_omp_clauses (tree clauses)
+ 	    {
+ 	      if (processing_template_decl)
+ 		break;
+-	      error ("%qE is not a variable in clause %qs", t, name);
++	      if (DECL_P (t))
++		error ("%qD is not a variable in clause %qs", t, name);
++	      else
++		error ("%qE is not a variable in clause %qs", t, name);
+ 	      remove = true;
+ 	    }
+ 	  else if (bitmap_bit_p (&generic_head, DECL_UID (t))
+ 		   || bitmap_bit_p (&firstprivate_head, DECL_UID (t))
+ 		   || bitmap_bit_p (&lastprivate_head, DECL_UID (t)))
+ 	    {
+-	      error ("%qE appears more than once in data clauses", t);
++	      error ("%qD appears more than once in data clauses", t);
+ 	      remove = true;
+ 	    }
+ 	  else
+--- gcc/testsuite/g++.dg/gomp/pr31748.C.jj	2007-05-01 14:26:13.000000000 +0200
++++ gcc/testsuite/g++.dg/gomp/pr31748.C	2007-05-01 14:26:07.000000000 +0200
+@@ -0,0 +1,10 @@
++// PR c++/31748
++
++struct A;
++
++void
++foo ()
++{
++#pragma omp parallel private(A)	// { dg-error "struct A.*is not a variable" }
++  ;
++}

diff --git a/gcc41-rh231818.patch b/gcc41-rh231818.patch
deleted file mode 100644
index f7b4226..0000000
--- a/gcc41-rh231818.patch
+++ /dev/null
@@ -1,633 +0,0 @@
-2007-04-02  Francis Kung  <fkung@redhat.com>
-
-	* gnu/java/awt/peer/gtk/FreetypeGlyphVector.java
-	(fontSet): Initialize to null.
-	(FreetypeGlyphVector(Font, int[], FontRenderContext)): Populate fontSet
-	array with default font if needed.
-	(FreetypeGlyphVector(FreetypeGlyphVector)): Clone all fields.
-	(getNativeFontPointer): New native method.
-	* include/gnu_java_awt_peer_gtk_FreetypeGlyphVector.h: Regenerated.
-	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c
-	(Java_gnu_java_awt_peer_gtk_FreetypeGlyphVector_getNativeFontPointer):
-	New function.
-
-2007-04-02  Francis Kung  <fkung@redhat.com>
-
-	* gnu/java/awt/peer/gtk/CairoGraphics2D.java
-	(cairoDrawGlyphVector): Added parameter.
-	(drawGlyphVector): Retrieve and pass fontset parameter.
-	* gnu/java/awt/peer/gtk/ComponentGraphics.java
-	(cairoDrawGlyphVector): Added parameter.
-	(lock): Removed unnecessary cast.
-	(unlock): Removed unnecessary cast and explicitly set to ONE variable.
-	* gnu/java/awt/peer/gtk/FreetypeGlyphVector.java
-	(fontSet): New field.
-	(dispose): New native method.
-	(finalize): New method.
-	(getGlyphFonts): New method.
-	(getGlyphOutline): Pass fontSet parameter to native method.
-	(getGlyphOutlineNative): Added parameter.
-	(getGlyphs): Pass extra parameters to native method.
-	(getGlyphsNative): Added parameters.
-	(getKerning): Added fontSet parameter.
-	(getMetricsNative): Added fontSet parameter.
-	(performDefaultLayout): Only check kerning if glyphs use the same font.
-	(setupGlyphMetrics): Pass extra parameters to native methods.
-	* include/gnu_java_awt_peer_gtk_CairoGraphics2D.h,
-	* include/gnu_java_awt_peer_gtk_FreetypGlyphVector.h: Regenerated.
-	* native/jni/gtk-peer/gdkfont.h: Enable pango engine.
-	(peerfont): Add variable for fontset.
-	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c
-	(Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoDrawGlyphVector): Accept
-	array of font pointers to use when drawing glyphs.
-	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c
-	(getFontSet): New function.
-	(Java_gnu_java_awt_peer_gtk_FreetypeGlyphVector_dispose): New function.
-	(Java_gnu_java_awt_peer_gtk_FreetypeGlyphVector_getGlyphOutlineNative):
-	Added and use new fontSet parameter.
-	(Java_gnu_java_awt_peer_gtk_FreetypeGlyphVector_getGlyphs): Use pango
-	to retrieve glyphs and estimate font, if the current font does not contain
-	a requested glyph.
-	(Java_gnu_java_awt_peer_gtk_FreetypeGlyphVector_getKerning): Added and use
-	new fontSet parameter.
-	(Java_gnu_java_awt_peer_gtk_FreetypeGlyphVector_getMetricsNative): Added
-	and use new fontSet parameter.
-	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c
-	(Java_gnu_java_awt_peer_gtk_GdkFontPeer_dispose): Free fontset.
-	(Java_gnu_java_awt_peer_gtk_GdkFontPeer_setFont): Load fontset.
-
---- libjava/classpath/gnu/java/awt/peer/gtk/CairoGraphics2D.java	16 Mar 2007 15:14:53 -0000	1.67
-+++ libjava/classpath/gnu/java/awt/peer/gtk/CairoGraphics2D.java	2 Apr 2007 19:39:26 -0000	1.68
-@@ -392,7 +392,7 @@ public abstract class CairoGraphics2D ex
-    */
-   native void cairoDrawGlyphVector(long pointer, GdkFontPeer font, 
-                                    float x, float y, int n, 
--                                   int[] codes, float[] positions);
-+                                   int[] codes, float[] positions, long[] fontset);
- 
-   /**
-    * Set the font in cairo.
-@@ -1676,6 +1676,7 @@ public abstract class CairoGraphics2D ex
-       {
-         int n = gv.getNumGlyphs ();
-         int[] codes = gv.getGlyphCodes (0, n, null);
-+        long[] fontset = ((FreetypeGlyphVector)gv).getGlyphFonts (0, n, null);
-         float[] positions = gv.getGlyphPositions (0, n, null);
- 
-         setFont (gv.getFont ());
-@@ -1683,7 +1684,7 @@ public abstract class CairoGraphics2D ex
- 	synchronized (fontPeer) 
- 	  { 
- 	    cairoDrawGlyphVector(nativePointer, fontPeer,
--				 x, y, n, codes, positions);
-+				 x, y, n, codes, positions, fontset);
- 	  }
-       }
-     else
---- libjava/classpath/gnu/java/awt/peer/gtk/ComponentGraphics.java	16 Mar 2007 15:14:53 -0000	1.25
-+++ libjava/classpath/gnu/java/awt/peer/gtk/ComponentGraphics.java	2 Apr 2007 19:39:26 -0000	1.26
-@@ -134,6 +134,8 @@ public class ComponentGraphics extends C
- 	hasLock.set(null);
- 	end_gdk_drawing();
-       }
-+    else if (i.intValue() == 2)
-+      hasLock.set(ONE);
-     else
-       hasLock.set(Integer.valueOf(i.intValue() - 1));
-   }
---- libjava/classpath/gnu/java/awt/peer/gtk/FreetypeGlyphVector.java	6 Mar 2007 19:38:31 -0000	1.16
-+++ libjava/classpath/gnu/java/awt/peer/gtk/FreetypeGlyphVector.java	2 Apr 2007 21:28:58 -0000	1.18
-@@ -79,6 +79,11 @@ public class FreetypeGlyphVector extends
-    * The glyph codes
-    */
-   private int[] glyphCodes;
-+  
-+  /**
-+   * The set of fonts used in this glyph vector.
-+   */
-+  private long[] fontSet = null;
- 
-   /**
-    * Glyph transforms. (de facto only the translation is used)
-@@ -86,6 +91,19 @@ public class FreetypeGlyphVector extends
-   private AffineTransform[] glyphTransforms;
- 
-   private GlyphMetrics[] metricsCache;
-+  
-+  private native void dispose(long[] fonts);
-+  
-+  /**
-+   * Returns a pointer to the native PangoFcFont object.
-+   * 
-+   * The object will be referenced with g_object_ref n times before being
-+   * returned, and must be unreferenced a corresponding number of times.
-+   * 
-+   * @param n Number of times to reference the object.
-+   * @return Pointer to the native default font.
-+   */
-+  private native long getNativeFontPointer(int n);
- 
-   /**
-    * Create a glyphvector from a given (Freetype) font and a String.
-@@ -135,6 +153,13 @@ public class FreetypeGlyphVector extends
-     glyphCodes = new int[ codes.length ];
-     System.arraycopy(codes, 0, glyphCodes, 0, codes.length);
-     nGlyphs = glyphCodes.length;
-+    
-+    if (fontSet == null)
-+      {
-+        fontSet = new long[nGlyphs];
-+        Arrays.fill(fontSet, getNativeFontPointer(nGlyphs));
-+      }
-+    
-     performDefaultLayout();
-   }
- 
-@@ -157,6 +182,7 @@ public class FreetypeGlyphVector extends
-       }
- 
-     glyphCodes = new int[ nGlyphs ];
-+    fontSet = new long[nGlyphs];
-     glyphPositions = new float[(nGlyphs + 1) * 2];
-     glyphTransforms = new AffineTransform[ nGlyphs ];
-     for(int i = 0; i < nGlyphs; i++ )
-@@ -166,6 +192,13 @@ public class FreetypeGlyphVector extends
-       }
-     System.arraycopy(gv.glyphPositions, 0, glyphPositions, 0,
-                      glyphPositions.length);
-+    System.arraycopy(gv.glyphCodes, 0, glyphCodes, 0, nGlyphs);
-+    System.arraycopy(gv.fontSet, 0, fontSet, 0, nGlyphs);
-+  }
-+  
-+  public void finalize()
-+  {
-+    dispose(fontSet);
-   }
- 
-   /**
-@@ -175,6 +208,7 @@ public class FreetypeGlyphVector extends
-   {
-     nGlyphs = s.codePointCount( 0, s.length() );
-     glyphCodes = new int[ nGlyphs ];
-+    fontSet = new long[ nGlyphs ];
-     int[] codePoints = new int[ nGlyphs ];
-     int stringIndex = 0;
- 
-@@ -194,22 +228,22 @@ public class FreetypeGlyphVector extends
-           }
-       }
- 
--   glyphCodes = getGlyphs( codePoints );
-+    getGlyphs( codePoints, glyphCodes, fontSet );
-   }
- 
-   /**
-    * Returns the glyph code within the font for a given character
-    */
--  public native int[] getGlyphs(int[] codepoints);
-+  public native int[] getGlyphs(int[] codepoints, int[] glyphs, long[] fonts);
- 
-   /**
-    * Returns the kerning of a glyph pair
-    */
--  private native Point2D getKerning(int leftGlyph, int rightGlyph);
-+  private native Point2D getKerning(int leftGlyph, int rightGlyph, long font);
- 
--  private native double[] getMetricsNative( int glyphCode );
-+  private native double[] getMetricsNative(int glyphCode, long font);
- 
--  private native GeneralPath getGlyphOutlineNative(int glyphIndex);
-+  private native GeneralPath getGlyphOutlineNative(int glyphIndex, long font);
- 
- 
-   public Object clone()
-@@ -267,10 +301,12 @@ public class FreetypeGlyphVector extends
- 
-         x += gm.getAdvanceX();
-         y += gm.getAdvanceY();
--        
--        if (i != nGlyphs-1)
-+
-+        // Get the kerning only if it's not the last glyph, and the two glyphs are
-+        // using the same font
-+        if (i != nGlyphs-1 && fontSet[i] == fontSet[i+1])
-           {
--            Point2D p = getKerning(glyphCodes[i], glyphCodes[i + 1]);
-+            Point2D p = getKerning(glyphCodes[i], glyphCodes[i + 1], fontSet[i]);
-             x += p.getX();
-             y += p.getY();
-           }
-@@ -305,6 +341,26 @@ public class FreetypeGlyphVector extends
-     return rval;
-   }
- 
-+  /**
-+   * Returns pointers to the fonts used in this glyph vector.
-+   * 
-+   * The array index matches that of the glyph vector itself.
-+   */
-+  protected long[] getGlyphFonts(int beginGlyphIndex, int numEntries, 
-+                                 long[] codeReturn)
-+  {
-+    long[] rval;
-+
-+    if( codeReturn == null || codeReturn.length < numEntries)
-+      rval = new long[ numEntries ];
-+    else
-+      rval = codeReturn;
-+    
-+    System.arraycopy(fontSet, beginGlyphIndex, rval, 0, numEntries);
-+
-+    return rval;
-+  }
-+
-   public Shape getGlyphLogicalBounds(int glyphIndex)
-   {
-     GlyphMetrics gm = getGlyphMetrics( glyphIndex );
-@@ -335,11 +391,10 @@ public class FreetypeGlyphVector extends
- 
-     for(int i = 0; i < nGlyphs; i++)
-       {
--	GlyphMetrics gm = (GlyphMetrics)
--	  peer.getGlyphMetrics( glyphCodes[ i ] );
-+	GlyphMetrics gm = (GlyphMetrics)peer.getGlyphMetrics(glyphCodes[i]);
- 	if( gm == null )
- 	  {
--	    double[] val = getMetricsNative( glyphCodes[ i ] );
-+	    double[] val = getMetricsNative(glyphCodes[i], fontSet[i]);
- 	    if( val == null )
- 	      gm = null;
- 	    else
-@@ -374,7 +429,8 @@ public class FreetypeGlyphVector extends
-    */
-   public Shape getGlyphOutline(int glyphIndex)
-   {
--    GeneralPath gp = getGlyphOutlineNative( glyphCodes[ glyphIndex ] );
-+    GeneralPath gp = getGlyphOutlineNative(glyphCodes[glyphIndex],
-+					   fontSet[glyphIndex]);
-     if (glyphTransforms[glyphIndex] != null)
-       gp.transform( glyphTransforms[glyphIndex]);
-     
---- libjava/classpath/include/gnu_java_awt_peer_gtk_CairoGraphics2D.h	16 Mar 2007 15:14:53 -0000	1.17
-+++ libjava/classpath/include/gnu_java_awt_peer_gtk_CairoGraphics2D.h	2 Apr 2007 19:39:26 -0000	1.18
-@@ -22,7 +22,7 @@ JNIEXPORT void JNICALL Java_gnu_java_awt
- JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoSetFillRule (JNIEnv *env, jobject, jlong, jint);
- JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoSetLine (JNIEnv *env, jobject, jlong, jdouble, jint, jint, jdouble);
- JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoSetDash (JNIEnv *env, jobject, jlong, jdoubleArray, jint, jdouble);
--JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoDrawGlyphVector (JNIEnv *env, jobject, jlong, jobject, jfloat, jfloat, jint, jintArray, jfloatArray);
-+JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoDrawGlyphVector (JNIEnv *env, jobject, jlong, jobject, jfloat, jfloat, jint, jintArray, jfloatArray, jlongArray);
- JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoSetFont (JNIEnv *env, jobject, jlong, jobject);
- JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoRectangle (JNIEnv *env, jobject, jlong, jdouble, jdouble, jdouble, jdouble);
- JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoArc (JNIEnv *env, jobject, jlong, jdouble, jdouble, jdouble, jdouble, jdouble);
---- libjava/classpath/include/gnu_java_awt_peer_gtk_FreetypeGlyphVector.h	11 Jun 2006 08:29:57 -0000	1.2
-+++ libjava/classpath/include/gnu_java_awt_peer_gtk_FreetypeGlyphVector.h	2 Apr 2007 21:28:58 -0000	1.4
-@@ -10,10 +10,12 @@ extern "C"
- {
- #endif
- 
--JNIEXPORT jintArray JNICALL Java_gnu_java_awt_peer_gtk_FreetypeGlyphVector_getGlyphs (JNIEnv *env, jobject, jintArray);
--JNIEXPORT jobject JNICALL Java_gnu_java_awt_peer_gtk_FreetypeGlyphVector_getKerning (JNIEnv *env, jobject, jint, jint);
--JNIEXPORT jdoubleArray JNICALL Java_gnu_java_awt_peer_gtk_FreetypeGlyphVector_getMetricsNative (JNIEnv *env, jobject, jint);
--JNIEXPORT jobject JNICALL Java_gnu_java_awt_peer_gtk_FreetypeGlyphVector_getGlyphOutlineNative (JNIEnv *env, jobject, jint);
-+JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_FreetypeGlyphVector_getGlyphs (JNIEnv *env, jobject, jintArray, jintArray, jlongArray);
-+JNIEXPORT jobject JNICALL Java_gnu_java_awt_peer_gtk_FreetypeGlyphVector_getKerning (JNIEnv *env, jobject, jint, jint, jlong);
-+JNIEXPORT jdoubleArray JNICALL Java_gnu_java_awt_peer_gtk_FreetypeGlyphVector_getMetricsNative (JNIEnv *env, jobject, jint, jlong);
-+JNIEXPORT jobject JNICALL Java_gnu_java_awt_peer_gtk_FreetypeGlyphVector_getGlyphOutlineNative (JNIEnv *env, jobject, jint, jlong);
-+JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_FreetypeGlyphVector_dispose (JNIEnv *env, jobject, jlongArray);
-+JNIEXPORT jlong JNICALL Java_gnu_java_awt_peer_gtk_FreetypeGlyphVector_getNativeFontPointer (JNIEnv *env, jobject, jint);
- 
- #ifdef __cplusplus
- }
---- libjava/classpath/native/jni/gtk-peer/gdkfont.h	21 Nov 2006 14:14:25 -0000	1.10
-+++ libjava/classpath/native/jni/gtk-peer/gdkfont.h	2 Apr 2007 19:39:26 -0000	1.11
-@@ -40,6 +40,7 @@
- 
- #include "gtkpeer.h"
- 
-+#define PANGO_ENABLE_ENGINE
- #include <pango/pango.h>
- #include <pango/pango-context.h>
- #include <pango/pango-fontmap.h>
-@@ -123,6 +124,7 @@ extern struct state_table *cp_gtk_native
- struct peerfont
- {
-   PangoFont *font;
-+  PangoFontset *set;
-   PangoFontDescription *desc;
-   PangoContext *ctx;
-   PangoLayout *layout;
---- libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c	16 Mar 2007 15:14:55 -0000	1.21
-+++ libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c	2 Apr 2007 19:39:26 -0000	1.22
-@@ -308,9 +308,8 @@ Java_gnu_java_awt_peer_gtk_CairoGraphics
-  jobject font,
-  jfloat x, jfloat y, jint n,
-  jintArray java_codes,
-- jfloatArray java_positions)
-+ jfloatArray java_positions, jlongArray java_fontset)
- {
--  
-   struct cairographics2d *gr = NULL;
-   struct peerfont *pfont = NULL;
-   cairo_glyph_t *glyphs = NULL;
-@@ -333,6 +332,7 @@ Java_gnu_java_awt_peer_gtk_CairoGraphics
-   native_codes = (*env)->GetIntArrayElements (env, java_codes, NULL);
-   native_positions = (*env)->GetFloatArrayElements (env, java_positions, NULL);
-   
-+  /* Set up glyphs and layout */
-   for (i = 0; i < n; ++i)
-     {
-       glyphs[i].index = native_codes[i];
-@@ -343,10 +343,31 @@ Java_gnu_java_awt_peer_gtk_CairoGraphics
-   (*env)->ReleaseFloatArrayElements (env, java_positions, native_positions, 0);
-   (*env)->ReleaseIntArrayElements (env, java_codes, native_codes, 0);
- 
--  pango_fc_font_lock_face( (PangoFcFont *)pfont->font );
--  cairo_show_glyphs (gr->cr, glyphs, n);
--  pango_fc_font_unlock_face( (PangoFcFont *)pfont->font );
-+  /* Iterate through glyphs and draw */
-+  jlong* fonts = (*env)->GetLongArrayElements (env, java_fontset, NULL);
-+  for (i = 0; i < n; i++)
-+    {
-+      PangoFcFont *font = JLONG_TO_PTR(PangoFcFont, fonts[i]);
-+
-+      /* Draw as many glyphs as possible with the current font */
-+      int length = 0;
-+      while (i < n-1 && fonts[i] == fonts[i+1])
-+        {
-+          length++;
-+          i++;
-+        }
-+    
-+      FT_Face face = pango_fc_font_lock_face( font );
-+      cairo_font_face_t *ft = cairo_ft_font_face_create_for_ft_face (face, 0);
-+      g_assert (ft != NULL);
- 
-+      cairo_set_font_face (gr->cr, ft);
-+      cairo_show_glyphs (gr->cr, &glyphs[i-length], length+1);
-+                       
-+      cairo_font_face_destroy (ft);
-+      pango_fc_font_unlock_face(font);
-+    }
-+    
-   g_free(glyphs);
- }
- 
---- libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c	11 Jun 2006 11:31:03 -0000	1.4
-+++ libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c	2 Apr 2007 21:28:59 -0000	1.6
-@@ -35,6 +35,7 @@ this exception to your version of the li
- obligated to do so.  If you do not wish to do so, delete this
- exception statement from your version. */
- 
-+#define PANGO_ENABLE_ENGINE
- #include <jni.h>
- #include <gtk/gtk.h>
- #include <string.h>
-@@ -43,6 +44,7 @@ exception statement from your version. *
- #include <pango/pangofc-font.h>
- #include <freetype/ftglyph.h>
- #include <freetype/ftoutln.h>
-+#include "jcl.h"
- #include "native_state.h"
- #include "gdkfont.h"
- #include "gnu_java_awt_peer_gtk_FreetypeGlyphVector.h"
-@@ -81,42 +83,92 @@ getFont(JNIEnv *env, jobject obj)
-   return (PangoFcFont *)pfont->font;
- }
- 
--JNIEXPORT jintArray JNICALL 
-+static PangoFontset *
-+getFontSet(JNIEnv *env, jobject obj)
-+{
-+  jfieldID fid;
-+  jobject data;
-+  jclass cls;
-+  struct peerfont *pfont;
-+
-+  cls = (*env)->GetObjectClass (env, obj);
-+  fid = (*env)->GetFieldID (env, cls, "peer", 
-+				 "Lgnu/java/awt/peer/gtk/GdkFontPeer;");
-+  g_assert (fid != 0);
-+
-+  data = (*env)->GetObjectField (env, obj, fid);
-+  g_assert (data != NULL);
-+
-+  pfont = (struct peerfont *)NSA_GET_FONT_PTR (env, data);
-+  g_assert (pfont != NULL);
-+  g_assert (pfont->font != NULL);
-+
-+  return (PangoFontset *)pfont->set;
-+}
-+
-+JNIEXPORT void JNICALL 
- Java_gnu_java_awt_peer_gtk_FreetypeGlyphVector_getGlyphs
--  (JNIEnv *env, jobject obj, jintArray codepoints)
-+  (JNIEnv *env, jobject obj, jintArray codepoints, jintArray glyphs,
-+   jlongArray fonts)
- {
--  FT_Face ft_face;
--  jintArray retArray;
--  PangoFcFont *font;
--  jint *values, *cpvals;
-+  PangoFcFont *default_font, *current_font;
-+  PangoFontset *pfs;
-+  jint *cpvals;
-   jint length;
-   int i;
- 
--  font = getFont(env, obj);
--
--  ft_face = pango_fc_font_lock_face( font );
--  g_assert (ft_face != NULL);
-+  /* Set up default font and fontset */
-+  default_font = getFont(env, obj);
-+  current_font = default_font;
-+  pfs = getFontSet(env, obj);
- 
-+  /* Retrieve string information */
-   length = (*env)->GetArrayLength (env, codepoints);
-   cpvals = (*env)->GetIntArrayElements (env, codepoints, NULL);
-+  
-+  jint *glyphArray = (*env)->GetIntArrayElements (env, glyphs, NULL);
-+  jlong *fontArray = (*env)->GetLongArrayElements (env, fonts, NULL);
- 
--  retArray = (*env)->NewIntArray (env, length);
--  values = (*env)->GetIntArrayElements (env, retArray, NULL);
-+  /* A design goal of Pango is to be threadsafe, but it's admitted that it is
-+   * not actually threadsafe at the moment.  Using gdk locking here to be safe,
-+   * but I don't know if if actually helps at all... */ 
-+  gdk_threads_enter();
- 
-   for( i = 0; i < length; i++ )
--    values[i] = FT_Get_Char_Index( ft_face, cpvals[i] );
-+  {
-+  	/* Ensure the current font has the requested character; if it doesn't,
-+  	 * try the default font before pulling a new font out of the fontset.
-+  	 * Once chosen, a font will be used until a character not in the font is
-+  	 * encountered. */ 
-+  	if (!pango_fc_font_has_char(current_font, cpvals[i]))
-+  	  {
-+  	    if (pango_fc_font_has_char(default_font, cpvals[i]))
-+  	      {
-+  	        current_font = default_font;
-+  	      }
-+  	    else
-+  	      {
-+  	        current_font = (PangoFcFont*)pango_fontset_get_font(pfs, cpvals[i]);
-+  	      }
-+  	  }
-+  	
-+  	/* Get glyph, and store both glyph and pointer to font */
-+    glyphArray[i] = (int)pango_fc_font_get_glyph(current_font,
-+                                                 (gunichar)cpvals[i]);
-+    g_object_ref(current_font);
-+    fontArray[i] = PTR_TO_JLONG(current_font);
-+  }
-+  
-+  gdk_threads_leave();
- 
--  (*env)->ReleaseIntArrayElements (env, retArray, values, 0);
-+  (*env)->ReleaseIntArrayElements (env, glyphs, glyphArray, 0);
-   (*env)->ReleaseIntArrayElements (env, codepoints, cpvals, 0);
--
--  pango_fc_font_unlock_face (font);
--
--  return retArray;
-+  (*env)->ReleaseLongArrayElements (env, fonts, fontArray, 0);
- }
- 
- JNIEXPORT jobject JNICALL 
- Java_gnu_java_awt_peer_gtk_FreetypeGlyphVector_getKerning
--(JNIEnv *env, jobject obj, jint rightGlyph, jint leftGlyph)
-+(JNIEnv *env, jobject obj __attribute__((unused)), jint rightGlyph, jint leftGlyph, jlong fnt)
- {
-   FT_Face ft_face;
-   FT_Vector kern;
-@@ -125,7 +177,7 @@ Java_gnu_java_awt_peer_gtk_FreetypeGlyph
-   jvalue values[2];
-   PangoFcFont *font;
- 
--  font = getFont(env, obj);
-+  font = JLONG_TO_PTR(PangoFcFont, fnt);
-   ft_face = pango_fc_font_lock_face( font );
-   g_assert (ft_face != NULL);
-   FT_Get_Kerning( ft_face, rightGlyph, leftGlyph, FT_KERNING_DEFAULT, &kern );
-@@ -142,14 +194,14 @@ Java_gnu_java_awt_peer_gtk_FreetypeGlyph
- 
- JNIEXPORT jdoubleArray JNICALL 
- Java_gnu_java_awt_peer_gtk_FreetypeGlyphVector_getMetricsNative
--(JNIEnv *env, jobject obj, jint glyphIndex )
-+(JNIEnv *env, jobject obj __attribute__((unused)), jint glyphIndex, jlong fnt)
- {
-   FT_Face ft_face;
-   jdouble *values;
-   jdoubleArray retArray = NULL;
-   PangoFcFont *font;
- 
--  font = getFont(env, obj);
-+  font = JLONG_TO_PTR(PangoFcFont, fnt);
-   ft_face = pango_fc_font_lock_face( font );
- 
-   g_assert (ft_face != NULL);
-@@ -285,7 +337,7 @@ static int _curveTo( const FT_Vector*  c
- 
- JNIEXPORT jobject JNICALL 
- Java_gnu_java_awt_peer_gtk_FreetypeGlyphVector_getGlyphOutlineNative
-- (JNIEnv *env, jobject obj, jint glyphIndex)
-+ (JNIEnv *env, jobject obj __attribute__((unused)), jint glyphIndex, jlong fnt)
- {
-   generalpath *path;
-   jobject gp;
-@@ -302,7 +354,7 @@ Java_gnu_java_awt_peer_gtk_FreetypeGlyph
-   FT_Face ft_face;
-   FT_Glyph glyph;
- 
--  font = getFont(env, obj);
-+  font = JLONG_TO_PTR(PangoFcFont, fnt);
-   ft_face = pango_fc_font_lock_face( font );
- 
-   g_assert (ft_face != NULL);
-@@ -345,4 +397,39 @@ Java_gnu_java_awt_peer_gtk_FreetypeGlyph
-   return gp; 
- }
- 
-+JNIEXPORT void JNICALL 
-+Java_gnu_java_awt_peer_gtk_FreetypeGlyphVector_dispose
-+ (JNIEnv *env, jobject obj __attribute__((unused)), jlongArray fontset)
-+{
-+  PangoFcFont *font;
-+  jlong *fontArray; 
-+  int i, length;
- 
-+  length = (*env)->GetArrayLength (env, fontset);
-+  fontArray = (*env)->GetLongArrayElements (env, fontset, NULL);
-+  
-+  gdk_threads_enter();
-+  
-+  for( i = 0; i < length; i++ )
-+  {
-+    font = JLONG_TO_PTR(PangoFcFont, fontArray[i]);
-+    g_object_unref(font);
-+  }
-+  
-+  gdk_threads_leave();
-+
-+  (*env)->ReleaseLongArrayElements (env, fontset, fontArray, 0);
-+}
-+
-+JNIEXPORT jlong JNICALL 
-+Java_gnu_java_awt_peer_gtk_FreetypeGlyphVector_getNativeFontPointer
-+ (JNIEnv *env, jobject obj, jint n)
-+{
-+  int i;
-+  PangoFcFont *font = getFont(env, obj);
-+  
-+  for (i = 0; i < n; i++)
-+    g_object_ref(font);
-+  
-+  return PTR_TO_JLONG(font);
-+}
---- libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c	26 Feb 2007 22:11:38 -0000	1.22
-+++ libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c	2 Apr 2007 19:39:26 -0000	1.23
-@@ -35,6 +35,7 @@
-    obligated to do so.  If you do not wish to do so, delete this
-    exception statement from your version. */
- 
-+#define PANGO_ENABLE_ENGINE
- #include <pango/pango.h>
- #include <pango/pangoft2.h>
- #include <pango/pangofc-font.h>
-@@ -97,6 +98,8 @@ Java_gnu_java_awt_peer_gtk_GdkFontPeer_d
-     g_object_unref (pfont->layout);
-   if (pfont->font != NULL)
-     g_object_unref (pfont->font);
-+  if (pfont->set != NULL)
-+    g_object_unref (pfont->set);
-   if (pfont->ctx != NULL)
-     g_object_unref (pfont->ctx);
-   if (pfont->desc != NULL)
-@@ -257,6 +260,8 @@ Java_gnu_java_awt_peer_gtk_GdkFontPeer_s
-     g_object_unref (pfont->ctx);
-   if (pfont->font != NULL)
-     g_object_unref (pfont->font);
-+  if (pfont->set != NULL)
-+    g_object_unref (pfont->set);
-   if (pfont->desc != NULL)
-     pango_font_description_free (pfont->desc);
- 
-@@ -268,7 +273,6 @@ Java_gnu_java_awt_peer_gtk_GdkFontPeer_s
-   pango_font_description_set_family (pfont->desc, family_name);
-   (*env)->ReleaseStringUTFChars(env, family_name_str, family_name);
- 
--
-   if (style & java_awt_font_BOLD)
-     pango_font_description_set_weight (pfont->desc, PANGO_WEIGHT_BOLD);
- 
-@@ -293,6 +297,8 @@ Java_gnu_java_awt_peer_gtk_GdkFontPeer_s
-   
-   pango_context_set_font_description (pfont->ctx, pfont->desc);
-   pango_context_set_language (pfont->ctx, gtk_get_default_language());
-+  pfont->set = pango_context_load_fontset(pfont->ctx, pfont->desc,
-+  										  gtk_get_default_language());
-   pfont->font = pango_context_load_font (pfont->ctx, pfont->desc);
-   g_assert (pfont->font != NULL);
- 

diff --git a/gcc41-tls-data-alignment.patch b/gcc41-tls-data-alignment.patch
new file mode 100644
index 0000000..1ad26c7
--- /dev/null
+++ b/gcc41-tls-data-alignment.patch
@@ -0,0 +1,33 @@
+2007-05-03  Jakub Jelinek  <jakub@redhat.com>
+
+	* varasm.c (align_variable): Don't increase alignment for
+	DECL_THREAD_LOCAL_P variables above BITS_PER_WORD through
+	DATA_ALIGNMENT or CONSTANT_ALIGNMENT.
+
+--- gcc/varasm.c.jj	2007-04-14 14:55:25.000000000 +0200
++++ gcc/varasm.c	2007-05-03 11:23:56.000000000 +0200
+@@ -1097,11 +1097,22 @@ align_variable (tree decl, bool dont_out
+   if (! DECL_USER_ALIGN (decl))
+     {
+ #ifdef DATA_ALIGNMENT
+-      align = DATA_ALIGNMENT (TREE_TYPE (decl), align);
++      unsigned int data_align = DATA_ALIGNMENT (TREE_TYPE (decl), align);
++      /* Don't increase alignment too much for TLS variables - TLS space
++	 is too precious.  */
++      if (! DECL_THREAD_LOCAL_P (decl) || data_align <= BITS_PER_WORD)
++	align = data_align;
+ #endif
+ #ifdef CONSTANT_ALIGNMENT
+       if (DECL_INITIAL (decl) != 0 && DECL_INITIAL (decl) != error_mark_node)
+-	align = CONSTANT_ALIGNMENT (DECL_INITIAL (decl), align);
++	{
++	  unsigned int const_align = CONSTANT_ALIGNMENT (DECL_INITIAL (decl),
++							 align);
++	  /* Don't increase alignment too much for TLS variables - TLS space
++	     is too precious.  */
++	  if (! DECL_THREAD_LOCAL_P (decl) || const_align <= BITS_PER_WORD)
++	    align = const_align;
++	}
+ #endif
+     }
+ 

diff --git a/gcc41.spec b/gcc41.spec
index 38a472b..1e156f6 100644
--- a/gcc41.spec
+++ b/gcc41.spec
@@ -1,6 +1,6 @@
-%define DATE 20070424
+%define DATE 20070503
 %define gcc_version 4.1.2
-%define gcc_release 11
+%define gcc_release 12
 %define _unpackaged_files_terminate_build 0
 %define multilib_64_archs sparc64 ppc64 s390x x86_64
 %define include_gappletviewer 1
@@ -137,12 +137,14 @@ Patch25: gcc41-pr29299.patch
 Patch26: gcc41-java-bogus-debugline.patch
 Patch27: gcc41-libjava-visibility.patch
 Patch28: gcc41-pr31187.patch
-Patch29: gcc41-rh231818.patch
+Patch29: gcc41-dtor-relro.patch
 Patch30: gcc41-rh234515.patch
-Patch31: gcc41-pr30558.patch
+Patch31: gcc41-libgomp-ncpus.patch
 Patch32: gcc41-rh236895.patch
-Patch33: gcc41-pr31598.patch
+Patch33: gcc41-pr28482.patch
 Patch34: gcc41-rh235008.patch
+Patch35: gcc41-pr31748.patch
+Patch36: gcc41-tls-data-alignment.patch
 
 %define _gnu %{nil}
 %ifarch sparc
@@ -450,12 +452,14 @@ which are required to run programs compiled with the GNAT.
 %patch26 -p0 -b .java-bogus-debugline~
 %patch27 -p0 -b .libjava-visibility~
 %patch28 -p0 -b .pr31187~
-%patch29 -p0 -b .rh231818~
+%patch29 -p0 -b .dtor-relro~
 %patch30 -p0 -b .rh234515~
-%patch31 -p0 -b .pr30558~
+%patch31 -p0 -b .libgomp-ncpus~
 %patch32 -p0 -b .rh236895~
-%patch33 -p0 -b .pr31598~
+%patch33 -p0 -b .pr28482~
 %patch34 -p0 -b .rh235008~
+%patch35 -p0 -b .pr31748~
+%patch36 -p0 -b .tls-data-alignment~
 
 sed -i -e 's/4\.1\.3/4.1.2/' gcc/BASE-VER gcc/version.c
 sed -i -e 's/" (Red Hat[^)]*)"/" (Red Hat %{version}-%{gcc_release})"/' gcc/version.c
@@ -1579,6 +1583,19 @@ fi
 %doc rpm.doc/changelogs/libmudflap/ChangeLog*
 
 %changelog
+* Thu May  3 2007 Jakub Jelinek <jakub@redhat.com> 4.1.2-12
+- update from gcc-4_1-branch (-r124100:124365)
+  - PRs c++/30016, c++/30221, middle-end/30761, target/18989,
+	target/28675, tree-optimization/29446, tree-optimization/31698
+- add default.css Java resource (Tom Fitzsimmons, #237304)
+- don't increase alignment of TLS variables too much
+- __do_global_dtors_aux hardening
+- allow libgomp to be dlopened (PR libgomp/28482)
+- speed up and improve libgomp omp_get_num_procs and dynamic
+  thread count computation
+- GOMP_CPU_AFFINITY support
+- fix ICE on C++ type passed as OpenMP clause variable (PR c++/31748)
+
 * Wed Apr 25 2007 Jakub Jelinek <jakub@redhat.com> 4.1.2-11
 - update from gcc-4_1-branch (-r123951:124100)
   - PRs middle-end/31448, preprocessor/30468, target/28623, target/31641

diff --git a/sources b/sources
index 249d2cb..63b52c2 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-0a2c2aaf18c3227cfb4a6f85ec68847d  gcc-4.1.2-20070424.tar.bz2
+f592f2e4d5779b970a7050a864131e69  gcc-4.1.2-20070503.tar.bz2

^ permalink raw reply related	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2026-06-29 12:23 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-06-29 12:23 [rpms/gcc] rhel-f41-base: 4.1.2-12 Jakub Jelinek
2026-06-29 12:23 Jakub Jelinek

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox