This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH] s390: Convert to crt[in].S.
- From: "Andreas Krebbel" <krebbel at linux dot vnet dot ibm dot com>
- To: Richard Henderson <rth at twiddle dot net>
- Cc: libc-alpha at sourceware dot org, schwidefsky at de dot ibm dot com
- Date: Thu, 16 Feb 2012 10:44:50 +0100
- Subject: Re: [PATCH] s390: Convert to crt[in].S.
- References: <1329364986-29500-1-git-send-email-rth@twiddle.net>
Ok. You beat me to the punch. I've tested your patch on s390 and s390x
without seeing any regressions.
Could you please remove the pt-initfini.c files as well:
./nptl/sysdeps/unix/sysv/linux/s390/s390-32/pt-initfini.c
./nptl/sysdeps/unix/sysv/linux/s390/s390-64/pt-initfini.c
I again compared the resulting .o files. The only difference I could
spot was due to the removal of some .align directives in crtn.s so the
code is not padded to a multiple of 4 byte size anymore. I don't see
a reason why this has been done in the first place so that's ok to my
understanding.
Thanks for taking care of this!
Bye,
-Andreas-
On Wed, Feb 15, 2012 at 08:03:06PM -0800, Richard Henderson wrote:
> This is the last of the conversions to crt*.S files.
>
> Tested via cross-compile and objdump -dr to prove that
> the files are unchanged before and after the conversion.
>
> Ok?
>
>
> r~
>
>
> ---
> sysdeps/s390/s390-32/crti.S | 102 +++++++++++++++++++++++++
> sysdeps/s390/s390-32/crtn.S | 47 ++++++++++++
> sysdeps/s390/s390-32/initfini.c | 156 ---------------------------------------
> sysdeps/s390/s390-64/crti.S | 91 +++++++++++++++++++++++
> sysdeps/s390/s390-64/crtn.S | 50 +++++++++++++
> sysdeps/s390/s390-64/initfini.c | 143 -----------------------------------
> 6 files changed, 290 insertions(+), 299 deletions(-)
> create mode 100644 sysdeps/s390/s390-32/crti.S
> create mode 100644 sysdeps/s390/s390-32/crtn.S
> delete mode 100644 sysdeps/s390/s390-32/initfini.c
> create mode 100644 sysdeps/s390/s390-64/crti.S
> create mode 100644 sysdeps/s390/s390-64/crtn.S
> delete mode 100644 sysdeps/s390/s390-64/initfini.c
>
> diff --git a/sysdeps/s390/s390-32/crti.S b/sysdeps/s390/s390-32/crti.S
> new file mode 100644
> index 0000000..df5855a
> --- /dev/null
> +++ b/sysdeps/s390/s390-32/crti.S
> @@ -0,0 +1,102 @@
> +/* Special .init and .fini section support for S/390.
> + Copyright (C) 2000, 2001, 2002, 2012 Free Software Foundation, Inc.
> + This file is part of the GNU C Library.
> +
> + The GNU C Library 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.
> +
> + In addition to the permissions in the GNU Lesser General Public
> + License, the Free Software Foundation gives you unlimited
> + permission to link the compiled version of this file with other
> + programs, and to distribute those programs without any restriction
> + coming from the use of this file. (The GNU Lesser General Public
> + License restrictions do apply in other respects; for example, they
> + cover modification of the file, and distribution when not linked
> + into another program.)
> +
> + Note that people who make modified versions of this file are not
> + obligated to grant this special exception for their modified
> + versions; it is their choice whether to do so. The GNU Lesser
> + General Public License gives permission to release a modified
> + version without this exception; this exception also makes it
> + possible to release a modified version which carries forward this
> + exception.
> +
> + The GNU C Library 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 the GNU C Library; if not, see
> + <http://www.gnu.org/licenses/>. */
> +
> +/* crti.S puts a function prologue at the beginning of the .init and
> + .fini sections and defines global symbols for those addresses, so
> + they can be called as functions. The symbols _init and _fini are
> + magic and cause the linker to emit DT_INIT and DT_FINI. */
> +
> +#include <libc-symbols.h>
> +#include <sysdep.h>
> +
> +#ifndef PREINIT_FUNCTION
> +# define PREINIT_FUNCTION __gmon_start__
> +#endif
> +
> +#ifndef PREINIT_FUNCTION_WEAK
> +# define PREINIT_FUNCTION_WEAK 1
> +#endif
> +
> +#if PREINIT_FUNCTION_WEAK
> + weak_extern (PREINIT_FUNCTION)
> +#else
> + .hidden PREINIT_FUNCTION
> +#endif
> +
> + .section .init,"ax",@progbits
> + .globl _init
> + .type _init,@function
> + .align 4
> +_init:
> + stm %r6,%r15,24(%r15)
> + bras %r13,1f
> +0:
> +#if PREINIT_FUNCTION_WEAK
> + .long PREINIT_FUNCTION@GOT
> +#else
> + .long PREINIT_FUNCTION-0b
> +#endif
> + .long _GLOBAL_OFFSET_TABLE_-0b
> +1: lr %r1,%r15
> + ahi %r15,-96
> + st %r1,0(%r15)
> + l %r12,4(%r13)
> + ar %r12,%r13
> + l %r1,0(%r13)
> +#if PREINIT_FUNCTION_WEAK
> + l %r1,0(%r1,%r12)
> + ltr %r1,%r1
> + je 2f
> +#else
> + la %r1,0(%r1,%r13)
> +#endif
> + basr %r14,%r1
> + .align 4,0x07
> +2:
> +
> + .section .fini,"ax",@progbits
> + .globl _fini
> + .type _fini,@function
> + .align 4
> +_fini:
> + stm %r6,%r15,24(%r15)
> + bras %r13,1f
> +0: .long _GLOBAL_OFFSET_TABLE_-0b
> +1: lr %r1,%r15
> + ahi %r15,-96
> + st %r1,0(%r15)
> + l %r12,0(%r13)
> + ar %r12,%r13
> + .align 4,0x07
> diff --git a/sysdeps/s390/s390-32/crtn.S b/sysdeps/s390/s390-32/crtn.S
> new file mode 100644
> index 0000000..1147636
> --- /dev/null
> +++ b/sysdeps/s390/s390-32/crtn.S
> @@ -0,0 +1,47 @@
> +/* Special .init and .fini section support for S/390.
> + Copyright (C) 2000, 2001, 2002, 2012 Free Software Foundation, Inc.
> + This file is part of the GNU C Library.
> +
> + The GNU C Library 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.
> +
> + In addition to the permissions in the GNU Lesser General Public
> + License, the Free Software Foundation gives you unlimited
> + permission to link the compiled version of this file with other
> + programs, and to distribute those programs without any restriction
> + coming from the use of this file. (The GNU Lesser General Public
> + License restrictions do apply in other respects; for example, they
> + cover modification of the file, and distribution when not linked
> + into another program.)
> +
> + Note that people who make modified versions of this file are not
> + obligated to grant this special exception for their modified
> + versions; it is their choice whether to do so. The GNU Lesser
> + General Public License gives permission to release a modified
> + version without this exception; this exception also makes it
> + possible to release a modified version which carries forward this
> + exception.
> +
> + The GNU C Library 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 the GNU C Library; if not, see
> + <http://www.gnu.org/licenses/>. */
> +
> +/* crtn.S puts function epilogues in the .init and .fini sections
> + corresponding to the prologues in crti.S. */
> +
> + .section .init,"ax",@progbits
> + l %r4,152(%r15)
> + lm %r6,%r15,120(%r15)
> + br %r4
> +
> + .section .fini,"ax",@progbits
> + l %r4,152(%r15)
> + lm %r6,%r15,120(%r15)
> + br %r4
> diff --git a/sysdeps/s390/s390-32/initfini.c b/sysdeps/s390/s390-32/initfini.c
> deleted file mode 100644
> index ed6b34e..0000000
> --- a/sysdeps/s390/s390-32/initfini.c
> +++ /dev/null
> @@ -1,156 +0,0 @@
> -/* Special .init and .fini section support for S/390.
> - Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
> - This file is part of the GNU C Library.
> -
> - The GNU C Library 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.
> -
> - In addition to the permissions in the GNU Lesser General Public
> - License, the Free Software Foundation gives you unlimited
> - permission to link the compiled version of this file with other
> - programs, and to distribute those programs without any restriction
> - coming from the use of this file. (The GNU Lesser General Public
> - License restrictions do apply in other respects; for example, they
> - cover modification of the file, and distribution when not linked
> - into another program.)
> -
> - Note that people who make modified versions of this file are not
> - obligated to grant this special exception for their modified
> - versions; it is their choice whether to do so. The GNU Lesser
> - General Public License gives permission to release a modified
> - version without this exception; this exception also makes it
> - possible to release a modified version which carries forward this
> - exception.
> -
> - The GNU C Library 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 the GNU C Library; if not, see
> - <http://www.gnu.org/licenses/>. */
> -
> -/* This file is compiled into assembly code which is then munged by a sed
> - script into two files: crti.s and crtn.s.
> -
> - * crti.s puts a function prologue at the beginning of the
> - .init and .fini sections and defines global symbols for
> - those addresses, so they can be called as functions.
> -
> - * crtn.s puts the corresponding function epilogues
> - in the .init and .fini sections. */
> -
> -__asm__ ("\
> -\n\
> -#include \"defs.h\"\n\
> -\n\
> -/*@HEADER_ENDS*/\n\
> -\n\
> -/*@TESTS_BEGIN*/\n\
> -\n\
> -/*@TESTS_END*/\n\
> -\n\
> -/*@_init_PROLOG_BEGINS*/\n\
> -\n\
> - .section .init\n\
> -#NO_APP\n\
> - .align 4\n\
> -.globl _init\n\
> - .type _init,@function\n\
> -_init:\n\
> -# leaf function 0\n\
> -# automatics 0\n\
> -# outgoing args 0\n\
> -# need frame pointer 0\n\
> -# call alloca 0\n\
> -# has varargs 0\n\
> -# incoming args (stack) 0\n\
> -# function length 36\n\
> - STM 6,15,24(15)\n\
> - BRAS 13,.LTN1_0\n\
> -.LT1_0:\n\
> -.LC14:\n\
> - .long __gmon_start__@GOT\n\
> -.LC15:\n\
> - .long _GLOBAL_OFFSET_TABLE_-.LT1_0\n\
> -.LTN1_0:\n\
> - LR 1,15\n\
> - AHI 15,-96\n\
> - ST 1,0(15)\n\
> - L 12,.LC15-.LT1_0(13)\n\
> - AR 12,13\n\
> - L 1,.LC14-.LT1_0(13)\n\
> - L 1,0(1,12)\n\
> - LTR 1,1\n\
> - JE .L22\n\
> - BASR 14,1\n\
> -.L22:\n\
> -#APP\n\
> - .align 4,0x07\n\
> - END_INIT\n\
> -\n\
> -/*@_init_PROLOG_ENDS*/\n\
> -\n\
> -/*@_init_EPILOG_BEGINS*/\n\
> - .align 4\n\
> - .section .init\n\
> -#NO_APP\n\
> - .align 4\n\
> - L 4,152(15)\n\
> - LM 6,15,120(15)\n\
> - BR 4\n\
> -#APP\n\
> - END_INIT\n\
> -\n\
> -/*@_init_EPILOG_ENDS*/\n\
> -\n\
> -/*@_fini_PROLOG_BEGINS*/\n\
> - .section .fini\n\
> -#NO_APP\n\
> - .align 4\n\
> -.globl _fini\n\
> - .type _fini,@function\n\
> -_fini:\n\
> -# leaf function 0\n\
> -# automatics 0\n\
> -# outgoing args 0\n\
> -# need frame pointer 0\n\
> -# call alloca 0\n\
> -# has varargs 0\n\
> -# incoming args (stack) 0\n\
> -# function length 30\n\
> - STM 6,15,24(15)\n\
> - BRAS 13,.LTN2_0\n\
> -.LT2_0:\n\
> -.LC17:\n\
> - .long _GLOBAL_OFFSET_TABLE_-.LT2_0\n\
> -.LTN2_0:\n\
> - LR 1,15\n\
> - AHI 15,-96\n\
> - ST 1,0(15)\n\
> - L 12,.LC17-.LT2_0(13)\n\
> - AR 12,13\n\
> -#APP\n\
> - .align 4,0x07\n\
> - END_FINI\n\
> -\n\
> -/*@_fini_PROLOG_ENDS*/\n\
> -\n\
> -/*@_fini_EPILOG_BEGINS*/\n\
> - .align 4\n\
> - .section .fini\n\
> -#NO_APP\n\
> - .align 4\n\
> - L 4,152(15)\n\
> - LM 6,15,120(15)\n\
> - BR 4\n\
> -#APP\n\
> - END_FINI\n\
> -\n\
> -/*@_fini_EPILOG_ENDS*/\n\
> -\n\
> -/*@TRAILER_BEGINS*/\
> -");
> diff --git a/sysdeps/s390/s390-64/crti.S b/sysdeps/s390/s390-64/crti.S
> new file mode 100644
> index 0000000..ff63e19
> --- /dev/null
> +++ b/sysdeps/s390/s390-64/crti.S
> @@ -0,0 +1,91 @@
> +/* Special .init and .fini section support for 64 bit S/390.
> + Copyright (C) 2001, 2012 Free Software Foundation, Inc.
> + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
> + This file is part of the GNU C Library.
> +
> + The GNU C Library 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.
> +
> + In addition to the permissions in the GNU Lesser General Public
> + License, the Free Software Foundation gives you unlimited
> + permission to link the compiled version of this file with other
> + programs, and to distribute those programs without any restriction
> + coming from the use of this file. (The GNU Lesser General Public
> + License restrictions do apply in other respects; for example, they
> + cover modification of the file, and distribution when not linked
> + into another program.)
> +
> + Note that people who make modified versions of this file are not
> + obligated to grant this special exception for their modified
> + versions; it is their choice whether to do so. The GNU Lesser
> + General Public License gives permission to release a modified
> + version without this exception; this exception also makes it
> + possible to release a modified version which carries forward this
> + exception.
> +
> + The GNU C Library 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 the GNU C Library; if not, see
> + <http://www.gnu.org/licenses/>. */
> +
> +/* crti.S puts a function prologue at the beginning of the .init and
> + .fini sections and defines global symbols for those addresses, so
> + they can be called as functions. The symbols _init and _fini are
> + magic and cause the linker to emit DT_INIT and DT_FINI. */
> +
> +#include <libc-symbols.h>
> +#include <sysdep.h>
> +
> +#ifndef PREINIT_FUNCTION
> +# define PREINIT_FUNCTION __gmon_start__
> +#endif
> +
> +#ifndef PREINIT_FUNCTION_WEAK
> +# define PREINIT_FUNCTION_WEAK 1
> +#endif
> +
> +#if PREINIT_FUNCTION_WEAK
> + weak_extern (PREINIT_FUNCTION)
> +#else
> + .hidden PREINIT_FUNCTION
> +#endif
> +
> + .section .init,"ax",@progbits
> + .align 4
> + .globl _init
> + .type _init,@function
> +_init:
> + stmg %r6,%r15,48(%r15)
> + lgr %r1,%r15
> + aghi %r15,-160
> + stg %r1,0(%r15)
> + larl %r12,_GLOBAL_OFFSET_TABLE_
> +#if PREINIT_FUNCTION_WEAK
> + larl %r1,PREINIT_FUNCTION@GOTENT
> + lg %r1,0(%r1)
> + ltgr %r1,%r1
> + je 1f
> + basr %r14,%r1
> +#else
> + brasl %r14,PREINIT_FUNCTION
> +#endif
> + .align 4,0x07
> +1:
> +
> + .section .fini,"ax",@progbits
> + .align 4
> + .globl _fini
> + .type _fini,@function
> +_fini:
> + stmg %r6,%r15,48(%r15)
> + lgr %r1,%r15
> + aghi %r15,-160
> + stg %r1,0(%r15)
> + larl %r12,_GLOBAL_OFFSET_TABLE_
> + .align 4,0x07
> diff --git a/sysdeps/s390/s390-64/crtn.S b/sysdeps/s390/s390-64/crtn.S
> new file mode 100644
> index 0000000..bf72d56
> --- /dev/null
> +++ b/sysdeps/s390/s390-64/crtn.S
> @@ -0,0 +1,50 @@
> +/* Special .init and .fini section support for 64 bit S/390.
> + Copyright (C) 2001, 2012 Free Software Foundation, Inc.
> + Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
> + This file is part of the GNU C Library.
> +
> + The GNU C Library 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.
> +
> + In addition to the permissions in the GNU Lesser General Public
> + License, the Free Software Foundation gives you unlimited
> + permission to link the compiled version of this file with other
> + programs, and to distribute those programs without any restriction
> + coming from the use of this file. (The GNU Lesser General Public
> + License restrictions do apply in other respects; for example, they
> + cover modification of the file, and distribution when not linked
> + into another program.)
> +
> + Note that people who make modified versions of this file are not
> + obligated to grant this special exception for their modified
> + versions; it is their choice whether to do so. The GNU Lesser
> + General Public License gives permission to release a modified
> + version without this exception; this exception also makes it
> + possible to release a modified version which carries forward this
> + exception.
> +
> + The GNU C Library 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 the GNU C Library; if not, see
> + <http://www.gnu.org/licenses/>. */
> +
> +/* crtn.S puts function epilogues in the .init and .fini sections
> + corresponding to the prologues in crti.S. */
> +
> + .section .init
> + .align 4
> + lg %r4,272(%r15)
> + lmg %r6,%r15,208(%r15)
> + br %r4
> +
> + .section .fini
> + .align 4
> + lg %r4,272(%r15)
> + lmg %r6,%r15,208(%r15)
> + br %r4
> diff --git a/sysdeps/s390/s390-64/initfini.c b/sysdeps/s390/s390-64/initfini.c
> deleted file mode 100644
> index fe448de..0000000
> --- a/sysdeps/s390/s390-64/initfini.c
> +++ /dev/null
> @@ -1,143 +0,0 @@
> -/* Special .init and .fini section support for 64 bit S/390.
> - Copyright (C) 2001 Free Software Foundation, Inc.
> - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
> - This file is part of the GNU C Library.
> -
> - The GNU C Library 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.
> -
> - In addition to the permissions in the GNU Lesser General Public
> - License, the Free Software Foundation gives you unlimited
> - permission to link the compiled version of this file with other
> - programs, and to distribute those programs without any restriction
> - coming from the use of this file. (The GNU Lesser General Public
> - License restrictions do apply in other respects; for example, they
> - cover modification of the file, and distribution when not linked
> - into another program.)
> -
> - Note that people who make modified versions of this file are not
> - obligated to grant this special exception for their modified
> - versions; it is their choice whether to do so. The GNU Lesser
> - General Public License gives permission to release a modified
> - version without this exception; this exception also makes it
> - possible to release a modified version which carries forward this
> - exception.
> -
> - The GNU C Library 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 the GNU C Library; if not, see
> - <http://www.gnu.org/licenses/>. */
> -
> -/* This file is compiled into assembly code which is then munged by a sed
> - script into two files: crti.s and crtn.s.
> -
> - * crti.s puts a function prologue at the beginning of the
> - .init and .fini sections and defines global symbols for
> - those addresses, so they can be called as functions.
> -
> - * crtn.s puts the corresponding function epilogues
> - in the .init and .fini sections. */
> -
> -__asm__ ("\
> -\n\
> -#include \"defs.h\"\n\
> -\n\
> -/*@HEADER_ENDS*/\n\
> -\n\
> -/*@TESTS_BEGIN*/\n\
> -\n\
> -/*@TESTS_END*/\n\
> -\n\
> -/*@_init_PROLOG_BEGINS*/\n\
> -\n\
> - .section .init\n\
> -#NO_APP\n\
> - .align 4\n\
> -.globl _init\n\
> - .type _init,@function\n\
> -_init:\n\
> -# leaf function 0\n\
> -# automatics 0\n\
> -# outgoing args 0\n\
> -# need frame pointer 0\n\
> -# call alloca 0\n\
> -# has varargs 0\n\
> -# incoming args (stack) 0\n\
> -# function length 36\n\
> - STMG 6,15,48(15)\n\
> - LGR 1,15\n\
> - AGHI 15,-160\n\
> - STG 1,0(15)\n\
> - LARL 12,_GLOBAL_OFFSET_TABLE_\n\
> - LARL 1,__gmon_start__@GOTENT\n\
> - LG 1,0(1)\n\
> - LTGR 1,1\n\
> - JE .L22\n\
> - BASR 14,1\n\
> -.L22:\n\
> -#APP\n\
> - .align 4,0x07\n\
> - END_INIT\n\
> -\n\
> -/*@_init_PROLOG_ENDS*/\n\
> -\n\
> -/*@_init_EPILOG_BEGINS*/\n\
> - .align 4\n\
> - .section .init\n\
> -#NO_APP\n\
> - .align 4\n\
> - LG 4,272(15)\n\
> - LMG 6,15,208(15)\n\
> - BR 4\n\
> -#APP\n\
> - END_INIT\n\
> -\n\
> -/*@_init_EPILOG_ENDS*/\n\
> -\n\
> -/*@_fini_PROLOG_BEGINS*/\n\
> - .section .fini\n\
> -#NO_APP\n\
> - .align 4\n\
> -.globl _fini\n\
> - .type _fini,@function\n\
> -_fini:\n\
> -# leaf function 0\n\
> -# automatics 0\n\
> -# outgoing args 0\n\
> -# need frame pointer 0\n\
> -# call alloca 0\n\
> -# has varargs 0\n\
> -# incoming args (stack) 0\n\
> -# function length 30\n\
> - STMG 6,15,48(15)\n\
> - LGR 1,15\n\
> - AGHI 15,-160\n\
> - STG 1,0(15)\n\
> - LARL 12,_GLOBAL_OFFSET_TABLE_\n\
> -#APP\n\
> - .align 4,0x07\n\
> - END_FINI\n\
> -\n\
> -/*@_fini_PROLOG_ENDS*/\n\
> -\n\
> -/*@_fini_EPILOG_BEGINS*/\n\
> - .align 4\n\
> - .section .fini\n\
> -#NO_APP\n\
> - .align 4\n\
> - LG 4,272(15)\n\
> - LMG 6,15,208(15)\n\
> - BR 4\n\
> -#APP\n\
> - END_FINI\n\
> -\n\
> -/*@_fini_EPILOG_ENDS*/\n\
> -\n\
> - /*@TRAILER_BEGINS*/\
> -");
> --
> 1.7.7.6