From d24c7bfeca98d0142bb46a44e248f57675a8c0c3 Mon Sep 17 00:00:00 2001 From: Petr Machata Date: Thu, 7 May 2009 20:58:19 +0200 Subject: [PATCH] Add a test for dwarf_getmacros --- tests/ChangeLog | 8 ++ tests/Makefile.am | 7 +- tests/dwarf-getmacros.c | 64 ++++++++++ tests/run-dwarf-getmacros.sh | 296 +++++++++++++++++++++++++++++++++++++++++++ tests/testfile51.bz2 | Bin 0 -> 4294 bytes 5 files changed, 372 insertions(+), 3 deletions(-) create mode 100644 tests/dwarf-getmacros.c create mode 100755 tests/run-dwarf-getmacros.sh create mode 100755 tests/testfile51.bz2 diff --git a/tests/ChangeLog b/tests/ChangeLog index f1fd512..66d2a97 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,11 @@ +2009-05-07 Petr Machata + + * testfile51.bz2: New data file. + * dwarf-getmacros.c: New test core. + * run-dwarf-getmacros.sh: New test wrapper. + * Makefile.am (noinst_PROGRAMS, TESTS, EXTRA_DIST, + dwarf_getmacros_LDADD): Add new files. + 2009-04-23 Ulrich Drepper * Makefile [BUILD_STATIC] (libdw): Add $(zip_LIBS). diff --git a/tests/Makefile.am b/tests/Makefile.am index 9f4ccdd..f2341ae 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -60,7 +60,7 @@ noinst_PROGRAMS = arextract arsymtest newfile saridx scnnames sectiondump \ find-prologues funcretval allregs rdwrmmap \ dwfl-bug-addr-overflow arls dwfl-bug-fd-leak \ dwfl-addr-sect dwfl-bug-report early-offscn \ - dwfl-bug-getmodules + dwfl-bug-getmodules dwarf-getmacros # get-ciefde asm_TESTS = asm-tst1 asm-tst2 asm-tst3 asm-tst4 asm-tst5 \ asm-tst6 asm-tst7 asm-tst8 asm-tst9 @@ -86,7 +86,7 @@ TESTS = run-arextract.sh run-arsymtest.sh newfile test-nlist \ dwfl-bug-fd-leak dwfl-bug-report \ run-dwfl-bug-offline-rel.sh run-dwfl-addr-sect.sh \ run-disasm-x86.sh run-disasm-x86-64.sh \ - run-early-offscn.sh + run-early-offscn.sh run-dwarf-getmacros.sh # run-show-ciefde.sh if !STANDALONE @@ -141,7 +141,7 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh \ testfile44.S.bz2 testfile44.expect.bz2 run-disasm-x86.sh \ testfile45.S.bz2 testfile45.expect.bz2 run-disasm-x86-64.sh \ testfile46.bz2 testfile47.bz2 testfile48.bz2 testfile48.debug.bz2 \ - testfile49.bz2 testfile50.bz2 + testfile49.bz2 testfile50.bz2 run-dwarf-getmacros.sh installed_TESTS_ENVIRONMENT = libdir=$(DESTDIR)$(libdir) \ bindir=$(DESTDIR)$(bindir) \ @@ -233,6 +233,7 @@ dwfl_bug_report_LDADD = $(libdw) $(libebl) $(libelf) $(libmudflap) -ldl dwfl_bug_getmodules_LDADD = $(libdw) $(libebl) $(libelf) $(libmudflap) -ldl dwfl_addr_sect_LDADD = $(libdw) $(libebl) $(libelf) $(libmudflap) -ldl sha1_tst_LDADD = $(libeu) $(libmudflap) +dwarf_getmacros_LDADD = $(libdw) CLEANFILES = xxx *.gcno *.gcda *gconv diff --git a/tests/dwarf-getmacros.c b/tests/dwarf-getmacros.c new file mode 100644 index 0000000..5c38097 --- /dev/null +++ b/tests/dwarf-getmacros.c @@ -0,0 +1,64 @@ +/* Test program for dwfl_module_return_value_location. + Copyright (C) 2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + + Red Hat elfutils is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by the + Free Software Foundation; version 2 of the License. + + Red Hat elfutils 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 + General Public License for more details. + + You should have received a copy of the GNU General Public License along + with Red Hat elfutils; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA. + + Red Hat elfutils is an included package of the Open Invention Network. + An included package of the Open Invention Network is a package for which + Open Invention Network licensees cross-license their patents. No patent + license is granted, either expressly or impliedly, by designation as an + included package. Should you wish to participate in the Open Invention + Network licensing program, please visit www.openinventionnetwork.com + . */ + +#include +#include ELFUTILS_HEADER(dw) +#include +#include +#include +#include +#include +#include +#include + +int +main (int argc __attribute__ ((unused)), char *argv[]) +{ + const char *name = argv[1]; + ptrdiff_t cuoff = strtol (argv[2], NULL, 0); + + int fd = open (name, O_RDONLY); + Dwarf *dbg = dwarf_begin (fd, DWARF_C_READ); + + Dwarf_Die cudie_mem, *cudie = dwarf_offdie (dbg, cuoff, &cudie_mem); + int mac (Dwarf_Macro *macro, void *data __attribute__ ((unused))) + { + unsigned int opcode; + dwarf_macro_opcode (macro, &opcode); + if (opcode == DW_MACINFO_define) + { + const char *value; + dwarf_macro_param2 (macro, NULL, &value); + puts (value); + } + return DWARF_CB_ABORT; + } + + ptrdiff_t off = 0; + while ((off = dwarf_getmacros (cudie, mac, NULL, off)) > 0) + ; + + return 0; +} diff --git a/tests/run-dwarf-getmacros.sh b/tests/run-dwarf-getmacros.sh new file mode 100755 index 0000000..d29c534 --- /dev/null +++ b/tests/run-dwarf-getmacros.sh @@ -0,0 +1,296 @@ +#! /bin/sh +# Copyright (C) 2009 Red Hat, Inc. +# This file is part of Red Hat elfutils. +# +# Red Hat elfutils is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by the +# Free Software Foundation; version 2 of the License. +# +# Red Hat elfutils 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 +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with Red Hat elfutils; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA. +# +# Red Hat elfutils is an included package of the Open Invention Network. +# An included package of the Open Invention Network is a package for which +# Open Invention Network licensees cross-license their patents. No patent +# license is granted, either expressly or impliedly, by designation as an +# included package. Should you wish to participate in the Open Invention +# Network licensing program, please visit www.openinventionnetwork.com +# . + +. $srcdir/test-subr.sh + +testfiles testfile51 + +testrun_compare ./dwarf-getmacros testfile51 0xb <<\EOF +__STDC__ 1 +__STDC_HOSTED__ 1 +__GNUC__ 4 +__GNUC_MINOR__ 3 +__GNUC_PATCHLEVEL__ 2 +__GNUC_RH_RELEASE__ 7 +__SIZE_TYPE__ long unsigned int +__PTRDIFF_TYPE__ long int +__WCHAR_TYPE__ int +__WINT_TYPE__ unsigned int +__INTMAX_TYPE__ long int +__UINTMAX_TYPE__ long unsigned int +__GXX_ABI_VERSION 1002 +__SCHAR_MAX__ 127 +__SHRT_MAX__ 32767 +__INT_MAX__ 2147483647 +__LONG_MAX__ 9223372036854775807L +__LONG_LONG_MAX__ 9223372036854775807LL +__WCHAR_MAX__ 2147483647 +__CHAR_BIT__ 8 +__INTMAX_MAX__ 9223372036854775807L +__FLT_EVAL_METHOD__ 0 +__DEC_EVAL_METHOD__ 2 +__FLT_RADIX__ 2 +__FLT_MANT_DIG__ 24 +__FLT_DIG__ 6 +__FLT_MIN_EXP__ (-125) +__FLT_MIN_10_EXP__ (-37) +__FLT_MAX_EXP__ 128 +__FLT_MAX_10_EXP__ 38 +__FLT_MAX__ 3.40282347e+38F +__FLT_MIN__ 1.17549435e-38F +__FLT_EPSILON__ 1.19209290e-7F +__FLT_DENORM_MIN__ 1.40129846e-45F +__FLT_HAS_DENORM__ 1 +__FLT_HAS_INFINITY__ 1 +__FLT_HAS_QUIET_NAN__ 1 +__DBL_MANT_DIG__ 53 +__DBL_DIG__ 15 +__DBL_MIN_EXP__ (-1021) +__DBL_MIN_10_EXP__ (-307) +__DBL_MAX_EXP__ 1024 +__DBL_MAX_10_EXP__ 308 +__DBL_MAX__ 1.7976931348623157e+308 +__DBL_MIN__ 2.2250738585072014e-308 +__DBL_EPSILON__ 2.2204460492503131e-16 +__DBL_DENORM_MIN__ 4.9406564584124654e-324 +__DBL_HAS_DENORM__ 1 +__DBL_HAS_INFINITY__ 1 +__DBL_HAS_QUIET_NAN__ 1 +__LDBL_MANT_DIG__ 64 +__LDBL_DIG__ 18 +__LDBL_MIN_EXP__ (-16381) +__LDBL_MIN_10_EXP__ (-4931) +__LDBL_MAX_EXP__ 16384 +__LDBL_MAX_10_EXP__ 4932 +__DECIMAL_DIG__ 21 +__LDBL_MAX__ 1.18973149535723176502e+4932L +__LDBL_MIN__ 3.36210314311209350626e-4932L +__LDBL_EPSILON__ 1.08420217248550443401e-19L +__LDBL_DENORM_MIN__ 3.64519953188247460253e-4951L +__LDBL_HAS_DENORM__ 1 +__LDBL_HAS_INFINITY__ 1 +__LDBL_HAS_QUIET_NAN__ 1 +__DEC32_MANT_DIG__ 7 +__DEC32_MIN_EXP__ (-95) +__DEC32_MAX_EXP__ 96 +__DEC32_MIN__ 1E-95DF +__DEC32_MAX__ 9.999999E96DF +__DEC32_EPSILON__ 1E-6DF +__DEC32_DEN__ 0.000001E-95DF +__DEC64_MANT_DIG__ 16 +__DEC64_MIN_EXP__ (-383) +__DEC64_MAX_EXP__ 384 +__DEC64_MIN__ 1E-383DD +__DEC64_MAX__ 9.999999999999999E384DD +__DEC64_EPSILON__ 1E-15DD +__DEC64_DEN__ 0.000000000000001E-383DD +__DEC128_MANT_DIG__ 34 +__DEC128_MIN_EXP__ (-6143) +__DEC128_MAX_EXP__ 6144 +__DEC128_MIN__ 1E-6143DL +__DEC128_MAX__ 9.999999999999999999999999999999999E6144DL +__DEC128_EPSILON__ 1E-33DL +__DEC128_DEN__ 0.000000000000000000000000000000001E-6143DL +__REGISTER_PREFIX__ +__USER_LABEL_PREFIX__ +__VERSION__ "4.3.2 20081105 (Red Hat 4.3.2-7)" +__GNUC_GNU_INLINE__ 1 +_LP64 1 +__LP64__ 1 +__NO_INLINE__ 1 +__FINITE_MATH_ONLY__ 0 +__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1 +__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1 +__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1 +__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1 +__SIZEOF_INT__ 4 +__SIZEOF_LONG__ 8 +__SIZEOF_LONG_LONG__ 8 +__SIZEOF_SHORT__ 2 +__SIZEOF_FLOAT__ 4 +__SIZEOF_DOUBLE__ 8 +__SIZEOF_LONG_DOUBLE__ 16 +__SIZEOF_SIZE_T__ 8 +__SIZEOF_WCHAR_T__ 4 +__SIZEOF_WINT_T__ 4 +__SIZEOF_PTRDIFF_T__ 8 +__SIZEOF_POINTER__ 8 +__amd64 1 +__amd64__ 1 +__x86_64 1 +__x86_64__ 1 +__k8 1 +__k8__ 1 +__MMX__ 1 +__SSE__ 1 +__SSE2__ 1 +__SSE_MATH__ 1 +__SSE2_MATH__ 1 +__gnu_linux__ 1 +__linux 1 +__linux__ 1 +linux 1 +__unix 1 +__unix__ 1 +unix 1 +__ELF__ 1 +__DECIMAL_BID_FORMAT__ 1 +macro1 ble +EOF + +testrun_compare ./dwarf-getmacros testfile51 0x84 <<\EOF +__STDC__ 1 +__STDC_HOSTED__ 1 +__GNUC__ 4 +__GNUC_MINOR__ 3 +__GNUC_PATCHLEVEL__ 2 +__GNUC_RH_RELEASE__ 7 +__SIZE_TYPE__ long unsigned int +__PTRDIFF_TYPE__ long int +__WCHAR_TYPE__ int +__WINT_TYPE__ unsigned int +__INTMAX_TYPE__ long int +__UINTMAX_TYPE__ long unsigned int +__GXX_ABI_VERSION 1002 +__SCHAR_MAX__ 127 +__SHRT_MAX__ 32767 +__INT_MAX__ 2147483647 +__LONG_MAX__ 9223372036854775807L +__LONG_LONG_MAX__ 9223372036854775807LL +__WCHAR_MAX__ 2147483647 +__CHAR_BIT__ 8 +__INTMAX_MAX__ 9223372036854775807L +__FLT_EVAL_METHOD__ 0 +__DEC_EVAL_METHOD__ 2 +__FLT_RADIX__ 2 +__FLT_MANT_DIG__ 24 +__FLT_DIG__ 6 +__FLT_MIN_EXP__ (-125) +__FLT_MIN_10_EXP__ (-37) +__FLT_MAX_EXP__ 128 +__FLT_MAX_10_EXP__ 38 +__FLT_MAX__ 3.40282347e+38F +__FLT_MIN__ 1.17549435e-38F +__FLT_EPSILON__ 1.19209290e-7F +__FLT_DENORM_MIN__ 1.40129846e-45F +__FLT_HAS_DENORM__ 1 +__FLT_HAS_INFINITY__ 1 +__FLT_HAS_QUIET_NAN__ 1 +__DBL_MANT_DIG__ 53 +__DBL_DIG__ 15 +__DBL_MIN_EXP__ (-1021) +__DBL_MIN_10_EXP__ (-307) +__DBL_MAX_EXP__ 1024 +__DBL_MAX_10_EXP__ 308 +__DBL_MAX__ 1.7976931348623157e+308 +__DBL_MIN__ 2.2250738585072014e-308 +__DBL_EPSILON__ 2.2204460492503131e-16 +__DBL_DENORM_MIN__ 4.9406564584124654e-324 +__DBL_HAS_DENORM__ 1 +__DBL_HAS_INFINITY__ 1 +__DBL_HAS_QUIET_NAN__ 1 +__LDBL_MANT_DIG__ 64 +__LDBL_DIG__ 18 +__LDBL_MIN_EXP__ (-16381) +__LDBL_MIN_10_EXP__ (-4931) +__LDBL_MAX_EXP__ 16384 +__LDBL_MAX_10_EXP__ 4932 +__DECIMAL_DIG__ 21 +__LDBL_MAX__ 1.18973149535723176502e+4932L +__LDBL_MIN__ 3.36210314311209350626e-4932L +__LDBL_EPSILON__ 1.08420217248550443401e-19L +__LDBL_DENORM_MIN__ 3.64519953188247460253e-4951L +__LDBL_HAS_DENORM__ 1 +__LDBL_HAS_INFINITY__ 1 +__LDBL_HAS_QUIET_NAN__ 1 +__DEC32_MANT_DIG__ 7 +__DEC32_MIN_EXP__ (-95) +__DEC32_MAX_EXP__ 96 +__DEC32_MIN__ 1E-95DF +__DEC32_MAX__ 9.999999E96DF +__DEC32_EPSILON__ 1E-6DF +__DEC32_DEN__ 0.000001E-95DF +__DEC64_MANT_DIG__ 16 +__DEC64_MIN_EXP__ (-383) +__DEC64_MAX_EXP__ 384 +__DEC64_MIN__ 1E-383DD +__DEC64_MAX__ 9.999999999999999E384DD +__DEC64_EPSILON__ 1E-15DD +__DEC64_DEN__ 0.000000000000001E-383DD +__DEC128_MANT_DIG__ 34 +__DEC128_MIN_EXP__ (-6143) +__DEC128_MAX_EXP__ 6144 +__DEC128_MIN__ 1E-6143DL +__DEC128_MAX__ 9.999999999999999999999999999999999E6144DL +__DEC128_EPSILON__ 1E-33DL +__DEC128_DEN__ 0.000000000000000000000000000000001E-6143DL +__REGISTER_PREFIX__ +__USER_LABEL_PREFIX__ +__VERSION__ "4.3.2 20081105 (Red Hat 4.3.2-7)" +__GNUC_GNU_INLINE__ 1 +_LP64 1 +__LP64__ 1 +__NO_INLINE__ 1 +__FINITE_MATH_ONLY__ 0 +__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1 +__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1 +__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1 +__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1 +__SIZEOF_INT__ 4 +__SIZEOF_LONG__ 8 +__SIZEOF_LONG_LONG__ 8 +__SIZEOF_SHORT__ 2 +__SIZEOF_FLOAT__ 4 +__SIZEOF_DOUBLE__ 8 +__SIZEOF_LONG_DOUBLE__ 16 +__SIZEOF_SIZE_T__ 8 +__SIZEOF_WCHAR_T__ 4 +__SIZEOF_WINT_T__ 4 +__SIZEOF_PTRDIFF_T__ 8 +__SIZEOF_POINTER__ 8 +__amd64 1 +__amd64__ 1 +__x86_64 1 +__x86_64__ 1 +__k8 1 +__k8__ 1 +__MMX__ 1 +__SSE__ 1 +__SSE2__ 1 +__SSE_MATH__ 1 +__SSE2_MATH__ 1 +__gnu_linux__ 1 +__linux 1 +__linux__ 1 +linux 1 +__unix 1 +__unix__ 1 +unix 1 +__ELF__ 1 +__DECIMAL_BID_FORMAT__ 1 +macro2 ble +EOF + +exit 0 diff --git a/tests/testfile51.bz2 b/tests/testfile51.bz2 new file mode 100755 index 0000000000000000000000000000000000000000..5ff45c61c86031ed1fe6f4886ba7c1535037b2c8 GIT binary patch literal 4294 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 literal 0 HcmV?d00001 -- 2.7.4