a2cc9021e27227adec0466d22aa4bc8a3ab3dd4d
[libffi.git] / patches / aix-ibm-xlc
1 Index: libffi/ChangeLog
2 ===================================================================
3 --- libffi.orig/ChangeLog
4 +++ libffi/ChangeLog
5 @@ -93,6 +93,19 @@
6  
7         * configure: Regenerate.
8  
9 +2011-02-11  Anthony Green  <green@moxielogic.com>
10 +
11 +       From Tom Honermann <tom.honermann@oracle.com>:
12 +       * src/powerpc/aix.S (ffi_call_AIX): Support for xlc toolchain on
13 +       AIX.  Declare .ffi_prep_args.  Insert nops after branch
14 +       instructions so that the AIX linker can insert TOC reload
15 +       instructions.
16 +       * src/powerpc/aix_closure.S: Declare .ffi_closure_helper_DARWIN.
17 +
18 +2011-02-08  Uli Link  <ul.mcamafia@linkitup.de>
19 +
20 +       * include/ffi.h.in (FFI_64_BIT_MAX): Define and use.
21 +
22  2011-02-09  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
23  
24         PR libffi/46661
25 @@ -103,7 +116,7 @@
26  2011-02-08  Rafael Avila de Espindola  <respindola@mozilla.com>
27  
28         * configure.ac: Fix x86 test for pc related relocs.
29 -       * confifure: Rebuilt.
30 +       * configure: Rebuilt.
31  
32  2011-02-07  Joel Sherrill <joel.sherrill@oarcorp.com>
33  
34 Index: libffi/include/ffi.h.in
35 ===================================================================
36 --- libffi.orig/include/ffi.h.in
37 +++ libffi/include/ffi.h.in
38 @@ -1,16 +1,17 @@
39  /* -----------------------------------------------------------------*-C-*-
40 -   libffi @VERSION@ - Copyright (c) 1996-2003, 2007, 2008  Red Hat, Inc.
41 +   libffi @VERSION@ - Copyright (c) 2011 Anthony Green
42 +                    - Copyright (c) 1996-2003, 2007, 2008 Red Hat, Inc.
43  
44 -   Permission is hereby granted, free of charge, to any person obtaining
45 -   a copy of this software and associated documentation files (the
46 -   ``Software''), to deal in the Software without restriction, including
47 -   without limitation the rights to use, copy, modify, merge, publish,
48 -   distribute, sublicense, and/or sell copies of the Software, and to
49 -   permit persons to whom the Software is furnished to do so, subject to
50 -   the following conditions:
51 +   Permission is hereby granted, free of charge, to any person
52 +   obtaining a copy of this software and associated documentation
53 +   files (the ``Software''), to deal in the Software without
54 +   restriction, including without limitation the rights to use, copy,
55 +   modify, merge, publish, distribute, sublicense, and/or sell copies
56 +   of the Software, and to permit persons to whom the Software is
57 +   furnished to do so, subject to the following conditions:
58  
59 -   The above copyright notice and this permission notice shall be included
60 -   in all copies or substantial portions of the Software.
61 +   The above copyright notice and this permission notice shall be
62 +   included in all copies or substantial portions of the Software.
63  
64     THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
65     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
66 @@ -77,15 +78,31 @@ extern "C" {
67  /* LONG_LONG_MAX is not always defined (not if STRICT_ANSI, for example).
68     But we can find it either under the correct ANSI name, or under GNU
69     C's internal name.  */
70 +
71 +#define FFI_64_BIT_MAX 9223372036854775807
72 +
73  #ifdef LONG_LONG_MAX
74  # define FFI_LONG_LONG_MAX LONG_LONG_MAX
75  #else
76  # ifdef LLONG_MAX
77  #  define FFI_LONG_LONG_MAX LLONG_MAX
78 +#  ifdef _AIX52 /* or newer has C99 LLONG_MAX */
79 +#   undef FFI_64_BIT_MAX
80 +#   define FFI_64_BIT_MAX 9223372036854775807LL
81 +#  endif /* _AIX52 or newer */
82  # else
83  #  ifdef __GNUC__
84  #   define FFI_LONG_LONG_MAX __LONG_LONG_MAX__
85  #  endif
86 +#  ifdef _AIX /* AIX 5.1 and earlier have LONGLONG_MAX */
87 +#   ifndef __PPC64__
88 +#    if defined (__IBMC__) || defined (__IBMCPP__)
89 +#     define FFI_LONG_LONG_MAX LONGLONG_MAX
90 +#    endif
91 +#   endif /* __PPC64__ */
92 +#   undef  FFI_64_BIT_MAX
93 +#   define FFI_64_BIT_MAX 9223372036854775807LL
94 +#  endif
95  # endif
96  #endif
97  
98 @@ -132,17 +149,17 @@ typedef struct _ffi_type
99  #endif
100  
101  #if LONG_MAX == 2147483647
102 -# if FFI_LONG_LONG_MAX != 9223372036854775807
103 +# if FFI_LONG_LONG_MAX != FFI_64_BIT_MAX
104   #error "no 64-bit data type supported"
105  # endif
106 -#elif LONG_MAX != 9223372036854775807
107 +#elif LONG_MAX != FFI_64_BIT_MAX
108   #error "long size not supported"
109  #endif
110  
111  #if LONG_MAX == 2147483647
112  # define ffi_type_ulong        ffi_type_uint32
113  # define ffi_type_slong        ffi_type_sint32
114 -#elif LONG_MAX == 9223372036854775807
115 +#elif LONG_MAX == FFI_64_BIT_MAX
116  # define ffi_type_ulong        ffi_type_uint64
117  # define ffi_type_slong        ffi_type_sint64
118  #else
119 @@ -195,7 +212,7 @@ typedef struct {
120  #ifndef FFI_SIZEOF_ARG
121  # if LONG_MAX == 2147483647
122  #  define FFI_SIZEOF_ARG        4
123 -# elif LONG_MAX == 9223372036854775807
124 +# elif LONG_MAX == FFI_64_BIT_MAX
125  #  define FFI_SIZEOF_ARG        8
126  # endif
127  #endif
128 Index: libffi/src/powerpc/aix.S
129 ===================================================================
130 --- libffi.orig/src/powerpc/aix.S
131 +++ libffi/src/powerpc/aix.S
132 @@ -1,5 +1,5 @@
133  /* -----------------------------------------------------------------------
134 -   aix.S - Copyright (c) 2002,2009 Free Software Foundation, Inc.
135 +   aix.S - Copyright (c) 2002, 2009 Free Software Foundation, Inc.
136     based on darwin.S by John Hornkvist
137  
138     PowerPC Assembly glue.
139 @@ -79,6 +79,8 @@
140         .set f20,20
141         .set f21,21
142  
143 +       .extern .ffi_prep_args
144 +
145  #define LIBFFI_ASM
146  #include <fficonfig.h>
147  #include <ffi.h>
148 @@ -125,6 +127,7 @@ ffi_call_AIX:
149         /* Call ffi_prep_args.  */
150         mr      r4, r1
151         bl      .ffi_prep_args
152 +       nop
153  
154         /* Now do the call.  */
155         ld      r0, 0(r29)
156 @@ -226,6 +229,7 @@ L(float_return_value):
157         /* Call ffi_prep_args.  */
158         mr      r4, r1
159         bl      .ffi_prep_args
160 +       nop
161  
162         /* Now do the call.  */
163         lwz     r0, 0(r29)
164 Index: libffi/src/powerpc/aix_closure.S
165 ===================================================================
166 --- libffi.orig/src/powerpc/aix_closure.S
167 +++ libffi/src/powerpc/aix_closure.S
168 @@ -79,6 +79,8 @@
169         .set f20,20
170         .set f21,21
171  
172 +       .extern .ffi_closure_helper_DARWIN
173 +
174  #define LIBFFI_ASM
175  #define JUMPTARGET(name) name
176  #define L(x) x
177 Index: libffi/configure
178 ===================================================================
179 --- libffi.orig/configure
180 +++ libffi/configure
181 @@ -13318,67 +13318,69 @@ $as_echo "#define HAVE_AS_X86_64_UNWIND_
182      fi
183  fi
184  
185 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether .eh_frame section should be read-only" >&5
186 +if test "x$GCC" = "xyes"; then
187 +  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether .eh_frame section should be read-only" >&5
188  $as_echo_n "checking whether .eh_frame section should be read-only... " >&6; }
189  if ${libffi_cv_ro_eh_frame+:} false; then :
190    $as_echo_n "(cached) " >&6
191  else
192  
193 -       libffi_cv_ro_eh_frame=no
194 -       echo 'extern void foo (void); void bar (void) { foo (); foo (); }' > conftest.c
195 -       if $CC $CFLAGS -S -fpic -fexceptions -o conftest.s conftest.c > /dev/null 2>&1; then
196 -           if grep '.section.*eh_frame.*"a"' conftest.s > /dev/null; then
197 -               libffi_cv_ro_eh_frame=yes
198 -           elif grep '.section.*eh_frame.*#alloc' conftest.c \
199 -                | grep -v '#write' > /dev/null; then
200 -               libffi_cv_ro_eh_frame=yes
201 -           fi
202 -       fi
203 -       rm -f conftest.*
204 +       libffi_cv_ro_eh_frame=no
205 +       echo 'extern void foo (void); void bar (void) { foo (); foo (); }' > conftest.c
206 +       if $CC $CFLAGS -S -fpic -fexceptions -o conftest.s conftest.c > /dev/null 2>&1; then
207 +           if grep '.section.*eh_frame.*"a"' conftest.s > /dev/null; then
208 +               libffi_cv_ro_eh_frame=yes
209 +           elif grep '.section.*eh_frame.*#alloc' conftest.c \
210 +                | grep -v '#write' > /dev/null; then
211 +               libffi_cv_ro_eh_frame=yes
212 +           fi
213 +       fi
214 +       rm -f conftest.*
215  
216  fi
217  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libffi_cv_ro_eh_frame" >&5
218  $as_echo "$libffi_cv_ro_eh_frame" >&6; }
219 -if test "x$libffi_cv_ro_eh_frame" = xyes; then
220 +  if test "x$libffi_cv_ro_eh_frame" = xyes; then
221  
222  $as_echo "#define HAVE_RO_EH_FRAME 1" >>confdefs.h
223  
224  
225  $as_echo "#define EH_FRAME_FLAGS \"a\"" >>confdefs.h
226  
227 -else
228 +  else
229  
230  $as_echo "#define EH_FRAME_FLAGS \"aw\"" >>confdefs.h
231  
232 -fi
233 +  fi
234  
235 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for __attribute__((visibility(\"hidden\")))" >&5
236 +  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __attribute__((visibility(\"hidden\")))" >&5
237  $as_echo_n "checking for __attribute__((visibility(\"hidden\")))... " >&6; }
238  if ${libffi_cv_hidden_visibility_attribute+:} false; then :
239    $as_echo_n "(cached) " >&6
240  else
241  
242 -       echo 'int __attribute__ ((visibility ("hidden"))) foo (void) { return 1; }' > conftest.c
243 -       libffi_cv_hidden_visibility_attribute=no
244 -       if { ac_try='${CC-cc} -Werror -S conftest.c -o conftest.s 1>&5'
245 +       echo 'int __attribute__ ((visibility ("hidden"))) foo (void) { return 1  ; }' > conftest.c
246 +       libffi_cv_hidden_visibility_attribute=no
247 +       if { ac_try='${CC-cc} -Werror -S conftest.c -o conftest.s 1>&5'
248    { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
249    (eval $ac_try) 2>&5
250    ac_status=$?
251    $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
252    test $ac_status = 0; }; }; then
253 -           if grep '\.hidden.*foo' conftest.s >/dev/null; then
254 -               libffi_cv_hidden_visibility_attribute=yes
255 -           fi
256 -       fi
257 -       rm -f conftest.*
258 +           if grep '\.hidden.*foo' conftest.s >/dev/null; then
259 +               libffi_cv_hidden_visibility_attribute=yes
260 +           fi
261 +       fi
262 +       rm -f conftest.*
263  
264  fi
265  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libffi_cv_hidden_visibility_attribute" >&5
266  $as_echo "$libffi_cv_hidden_visibility_attribute" >&6; }
267 -if test $libffi_cv_hidden_visibility_attribute = yes; then
268 +  if test $libffi_cv_hidden_visibility_attribute = yes; then
269  
270  $as_echo "#define HAVE_HIDDEN_VISIBILITY_ATTRIBUTE 1" >>confdefs.h
271  
272 +  fi
273  fi
274  
275  
276 Index: libffi/configure.ac
277 ===================================================================
278 --- libffi.orig/configure.ac
279 +++ libffi/configure.ac
280 @@ -345,44 +345,46 @@ if test x$TARGET = xX86_64; then
281      fi
282  fi
283  
284 -AC_CACHE_CHECK([whether .eh_frame section should be read-only],
285 -    libffi_cv_ro_eh_frame, [
286 -       libffi_cv_ro_eh_frame=no
287 -       echo 'extern void foo (void); void bar (void) { foo (); foo (); }' > conftest.c
288 -       if $CC $CFLAGS -S -fpic -fexceptions -o conftest.s conftest.c > /dev/null 2>&1; then
289 -           if grep '.section.*eh_frame.*"a"' conftest.s > /dev/null; then
290 -               libffi_cv_ro_eh_frame=yes
291 -           elif grep '.section.*eh_frame.*#alloc' conftest.c \
292 -                | grep -v '#write' > /dev/null; then
293 -               libffi_cv_ro_eh_frame=yes
294 -           fi
295 -       fi
296 -       rm -f conftest.*
297 -    ])
298 -if test "x$libffi_cv_ro_eh_frame" = xyes; then
299 -    AC_DEFINE(HAVE_RO_EH_FRAME, 1,
300 -             [Define if .eh_frame sections should be read-only.])
301 -    AC_DEFINE(EH_FRAME_FLAGS, "a",
302 -             [Define to the flags needed for the .section .eh_frame directive.])
303 -else
304 -    AC_DEFINE(EH_FRAME_FLAGS, "aw",
305 -             [Define to the flags needed for the .section .eh_frame directive.])
306 -fi
307 +if test "x$GCC" = "xyes"; then
308 +  AC_CACHE_CHECK([whether .eh_frame section should be read-only],
309 +      libffi_cv_ro_eh_frame, [
310 +       libffi_cv_ro_eh_frame=no
311 +       echo 'extern void foo (void); void bar (void) { foo (); foo (); }' > conftest.c
312 +       if $CC $CFLAGS -S -fpic -fexceptions -o conftest.s conftest.c > /dev/null 2>&1; then
313 +           if grep '.section.*eh_frame.*"a"' conftest.s > /dev/null; then
314 +               libffi_cv_ro_eh_frame=yes
315 +           elif grep '.section.*eh_frame.*#alloc' conftest.c \
316 +                | grep -v '#write' > /dev/null; then
317 +               libffi_cv_ro_eh_frame=yes
318 +           fi
319 +       fi
320 +       rm -f conftest.*
321 +      ])
322 +  if test "x$libffi_cv_ro_eh_frame" = xyes; then
323 +      AC_DEFINE(HAVE_RO_EH_FRAME, 1,
324 +             [Define if .eh_frame sections should be read-only.])
325 +      AC_DEFINE(EH_FRAME_FLAGS, "a",
326 +             [Define to the flags needed for the .section .eh_frame directive.  ])
327 +  else
328 +      AC_DEFINE(EH_FRAME_FLAGS, "aw",
329 +             [Define to the flags needed for the .section .eh_frame directive.  ])
330 +  fi
331  
332 -AC_CACHE_CHECK([for __attribute__((visibility("hidden")))],
333 -    libffi_cv_hidden_visibility_attribute, [
334 -       echo 'int __attribute__ ((visibility ("hidden"))) foo (void) { return 1; }' > conftest.c
335 -       libffi_cv_hidden_visibility_attribute=no
336 -       if AC_TRY_COMMAND(${CC-cc} -Werror -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD); then
337 -           if grep '\.hidden.*foo' conftest.s >/dev/null; then
338 -               libffi_cv_hidden_visibility_attribute=yes
339 -           fi
340 -       fi
341 -       rm -f conftest.*
342 -    ])
343 -if test $libffi_cv_hidden_visibility_attribute = yes; then
344 -    AC_DEFINE(HAVE_HIDDEN_VISIBILITY_ATTRIBUTE, 1,
345 -             [Define if __attribute__((visibility("hidden"))) is supported.])
346 +  AC_CACHE_CHECK([for __attribute__((visibility("hidden")))],
347 +      libffi_cv_hidden_visibility_attribute, [
348 +       echo 'int __attribute__ ((visibility ("hidden"))) foo (void) { return 1  ; }' > conftest.c
349 +       libffi_cv_hidden_visibility_attribute=no
350 +       if AC_TRY_COMMAND(${CC-cc} -Werror -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD); then
351 +           if grep '\.hidden.*foo' conftest.s >/dev/null; then
352 +               libffi_cv_hidden_visibility_attribute=yes
353 +           fi
354 +       fi
355 +       rm -f conftest.*
356 +      ])
357 +  if test $libffi_cv_hidden_visibility_attribute = yes; then
358 +      AC_DEFINE(HAVE_HIDDEN_VISIBILITY_ATTRIBUTE, 1,
359 +             [Define if __attribute__((visibility("hidden"))) is supported.])
360 +  fi
361  fi
362  
363  AH_BOTTOM([