forked from rpms/elfutils
		
	Upgrade to upstream elfutils 0.192
- Drop upstreamed patches elfutils-0.190-riscv-flatten.patch elfutils-0.191-riscv-flatten.patch elfutils-0.191-profile-empty-urls.patch - Add elfutils-0.192-libelf-static.patch Resolves: RHEL-64046
This commit is contained in:
		
							parent
							
								
									b8e9691d13
								
							
						
					
					
						commit
						347352d8dc
					
				
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -32,3 +32,4 @@ | |||||||
| /elfutils-0.189.tar.bz2 | /elfutils-0.189.tar.bz2 | ||||||
| /elfutils-0.190.tar.bz2 | /elfutils-0.190.tar.bz2 | ||||||
| /elfutils-0.191.tar.bz2 | /elfutils-0.191.tar.bz2 | ||||||
|  | /elfutils-0.192.tar.bz2 | ||||||
|  | |||||||
| @ -1,359 +0,0 @@ | |||||||
| From e39336df6588c3f9853be7d02819aee262ba2121 Mon Sep 17 00:00:00 2001 |  | ||||||
| From: Mark Wielaard <mark@klomp.org> |  | ||||||
| Date: Tue, 19 Mar 2024 22:43:10 +0000 |  | ||||||
| Subject: [PATCH] riscv: Partial implementation of flatten_aggregate |  | ||||||
| 
 |  | ||||||
| dwfl_module_return_value_location would fail on riscv for functions |  | ||||||
| which return a (small) struct. This patch implements the simplest |  | ||||||
| cases of flatten_aggregate in backends/riscv_retval.c. It just handles |  | ||||||
| structs containing one or two members of the same base type which fit |  | ||||||
| completely or in pieces in one or two general or floating point |  | ||||||
| registers. |  | ||||||
| 
 |  | ||||||
| It also adds a specific test case run-funcretval-struct.sh containing |  | ||||||
| small structs of ints, longs, floats and doubles. All these testscases |  | ||||||
| now work for riscv. There is already a slightly more extensive |  | ||||||
| testcase for this in tests/run-funcretval.sh but that only has a |  | ||||||
| testcase for aarch64. |  | ||||||
| 
 |  | ||||||
| 	 * backends/riscv_retval.c (flatten_aggregate_arg): Implement |  | ||||||
|          for the simple cases where we have a struct with one or two |  | ||||||
|          members of the same base type. |  | ||||||
| 	 (pass_by_flattened_arg): Likewise. Call either |  | ||||||
| 	 pass_in_gpr_lp64 or pass_in_fpr_lp64d. |  | ||||||
| 	 (riscv_return_value_location_lp64ifd): Call |  | ||||||
| 	 flatten_aggregate_arg including size. |  | ||||||
| 	 * tests/Makefile.am (TESTS): Add run-funcretval-struct.sh |  | ||||||
| 	 and run-funcretval-struct-native.sh. |  | ||||||
| 	 (check_PROGRAMS): Add funcretval_test_struct. |  | ||||||
| 	 (funcretval_test_struct_SOURCES): New. |  | ||||||
| 	 (EXTRA_DIST): Add run-funcretval-struct.sh, |  | ||||||
| 	 funcretval_test_struct_riscv.bz2 and |  | ||||||
| 	 run-funcretval-struct-native.sh. |  | ||||||
| 	 * tests/funcretval_test_struct_riscv.bz2: New test binary. |  | ||||||
| 	 * tests/run-funcretval-struct-native.sh: New test. |  | ||||||
| 	 * tests/run-funcretval-struct.sh: Likewise. |  | ||||||
| 
 |  | ||||||
| https://sourceware.org/bugzilla/show_bug.cgi?id=31142 |  | ||||||
| 
 |  | ||||||
| Signed-off-by: Mark Wielaard <mark@klomp.org> |  | ||||||
| ---
 |  | ||||||
|  backends/riscv_retval.c                | 123 ++++++++++++++++++++++--- |  | ||||||
|  tests/Makefile.am                      |   7 ++ |  | ||||||
|  tests/funcretval_test_struct.c         |  86 +++++++++++++++++ |  | ||||||
|  tests/funcretval_test_struct_riscv.bz2 | Bin 0 -> 3821 bytes |  | ||||||
|  tests/run-funcretval-struct-native.sh  |  22 +++++ |  | ||||||
|  tests/run-funcretval-struct.sh         |  35 +++++++ |  | ||||||
|  6 files changed, 262 insertions(+), 11 deletions(-) |  | ||||||
|  create mode 100644 tests/funcretval_test_struct.c |  | ||||||
|  create mode 100755 tests/funcretval_test_struct_riscv.bz2 |  | ||||||
|  create mode 100755 tests/run-funcretval-struct-native.sh |  | ||||||
|  create mode 100755 tests/run-funcretval-struct.sh |  | ||||||
| 
 |  | ||||||
| Fedora NOTE: Both the riscv specific test files weren't included |  | ||||||
|              (funcretval_test_struct_riscv.bz2 and run-funcretval-struct.sh) |  | ||||||
|              Because it contained a binary test. The native test is included |  | ||||||
|              though. |  | ||||||
| 
 |  | ||||||
| diff --git a/backends/riscv_retval.c b/backends/riscv_retval.c
 |  | ||||||
| index 0a1e02f81cd2..50c451a4ba32 100644
 |  | ||||||
| --- a/backends/riscv_retval.c
 |  | ||||||
| +++ b/backends/riscv_retval.c
 |  | ||||||
| @@ -1,6 +1,7 @@
 |  | ||||||
|  /* Function return value location for Linux/RISC-V ABI. |  | ||||||
|     Copyright (C) 2018 Sifive, Inc. |  | ||||||
|     Copyright (C) 2013 Red Hat, Inc. |  | ||||||
| +   Copyright (C) 2024 Mark J. Wielaard <mark@klomp.org>
 |  | ||||||
|     This file is part of elfutils. |  | ||||||
|   |  | ||||||
|     This file is free software; you can redistribute it and/or modify |  | ||||||
| @@ -105,23 +106,123 @@ pass_in_fpr_lp64d (const Dwarf_Op **locp, Dwarf_Word size)
 |  | ||||||
|    return size <= 8 ? 1 : 4; |  | ||||||
|  } |  | ||||||
|   |  | ||||||
| +/* Checks if we can "flatten" the given type, Only handles the simple
 |  | ||||||
| +   cases where we have a struct with one or two the same base type
 |  | ||||||
| +   elements.  */
 |  | ||||||
|  static int |  | ||||||
| -flatten_aggregate_arg (Dwarf_Die *typedie __attribute__ ((unused)),
 |  | ||||||
| -		       Dwarf_Die *arg0 __attribute__ ((unused)),
 |  | ||||||
| -		       Dwarf_Die *arg1 __attribute__ ((unused)))
 |  | ||||||
| +flatten_aggregate_arg (Dwarf_Die *typedie,
 |  | ||||||
| +		       Dwarf_Word size,
 |  | ||||||
| +		       Dwarf_Die *arg0,
 |  | ||||||
| +		       Dwarf_Die *arg1)
 |  | ||||||
|  { |  | ||||||
| -  /* ??? */
 |  | ||||||
| +  int tag0, tag1;
 |  | ||||||
| +  Dwarf_Die member;
 |  | ||||||
| +  Dwarf_Word encoding0, encoding1;
 |  | ||||||
| +  Dwarf_Attribute attr;
 |  | ||||||
| +  Dwarf_Word size0, size1;
 |  | ||||||
| +
 |  | ||||||
| +  if (size < 8 || size > 16)
 |  | ||||||
| +    return 0;
 |  | ||||||
| +
 |  | ||||||
| +  if (dwarf_child (typedie, arg0) != 0)
 |  | ||||||
| +    return 0;
 |  | ||||||
| +
 |  | ||||||
| +  tag0 = dwarf_tag (arg0);
 |  | ||||||
| +  while (tag0 != -1 && tag0 != DW_TAG_member)
 |  | ||||||
| +    {
 |  | ||||||
| +      if (dwarf_siblingof (arg0, arg0) != 0)
 |  | ||||||
| +	return 0;
 |  | ||||||
| +      tag0 = dwarf_tag (arg0);
 |  | ||||||
| +    }
 |  | ||||||
| +
 |  | ||||||
| +  if (tag0 != DW_TAG_member)
 |  | ||||||
| +    return 0;
 |  | ||||||
| +
 |  | ||||||
| +  /* Remember where we are.  */
 |  | ||||||
| +  member = *arg0;
 |  | ||||||
| +
 |  | ||||||
| +  tag0 = dwarf_peeled_die_type (arg0, arg0);
 |  | ||||||
| +  if (tag0 != DW_TAG_base_type)
 |  | ||||||
| +    return 0;
 |  | ||||||
| +
 |  | ||||||
| +  if (dwarf_attr_integrate (arg0, DW_AT_encoding, &attr) == NULL
 |  | ||||||
| +      || dwarf_formudata (&attr, &encoding0) != 0)
 |  | ||||||
| +    return 0;
 |  | ||||||
| +
 |  | ||||||
| +  if (dwarf_bytesize_aux (arg0, &size0) != 0)
 |  | ||||||
| +    return 0;
 |  | ||||||
| +
 |  | ||||||
| +  if (size == size0)
 |  | ||||||
| +    return 1; /* This one member is the whole size. */
 |  | ||||||
| +
 |  | ||||||
| +  if (size != 2 * size0)
 |  | ||||||
| +    return 0; /* We only handle two of the same.  */
 |  | ||||||
| +
 |  | ||||||
| +  /* Look for another member with the same encoding.  */
 |  | ||||||
| +  if (dwarf_siblingof (&member, arg1) != 0)
 |  | ||||||
| +    return 0;
 |  | ||||||
| +
 |  | ||||||
| +  tag1 = dwarf_tag (arg1);
 |  | ||||||
| +  while (tag1 != -1 && tag1 != DW_TAG_member)
 |  | ||||||
| +    {
 |  | ||||||
| +      if (dwarf_siblingof (arg1, arg1) != 0)
 |  | ||||||
| +	return 0;
 |  | ||||||
| +      tag1 = dwarf_tag (arg1);
 |  | ||||||
| +    }
 |  | ||||||
| +
 |  | ||||||
| +  if (tag1 != DW_TAG_member)
 |  | ||||||
| +    return 0;
 |  | ||||||
| +
 |  | ||||||
| +  tag1 = dwarf_peeled_die_type (arg1, arg1);
 |  | ||||||
| +  if (tag1 != DW_TAG_base_type)
 |  | ||||||
| +    return 0; /* We can only handle two equal base types for now. */
 |  | ||||||
| +
 |  | ||||||
| +  if (dwarf_attr_integrate (arg1, DW_AT_encoding, &attr) == NULL
 |  | ||||||
| +      || dwarf_formudata (&attr, &encoding1) != 0
 |  | ||||||
| +      || encoding0 != encoding1)
 |  | ||||||
| +    return 0; /* We can only handle two of the same for now. */
 |  | ||||||
| +
 |  | ||||||
| +  if (dwarf_bytesize_aux (arg1, &size1) != 0)
 |  | ||||||
| +    return 0;
 |  | ||||||
| +
 |  | ||||||
| +  if (size0 != size1)
 |  | ||||||
| +    return 0; /* We can only handle two of the same for now. */
 |  | ||||||
| +
 |  | ||||||
|    return 1; |  | ||||||
|  } |  | ||||||
|   |  | ||||||
| +/* arg0 and arg1 should be the peeled die types found by
 |  | ||||||
| +   flatten_aggregate_arg.  */
 |  | ||||||
|  static int |  | ||||||
| -pass_by_flattened_arg (const Dwarf_Op **locp __attribute__ ((unused)),
 |  | ||||||
| -		       Dwarf_Word size __attribute__ ((unused)),
 |  | ||||||
| -		       Dwarf_Die *arg0 __attribute__ ((unused)),
 |  | ||||||
| -		       Dwarf_Die *arg1 __attribute__ ((unused)))
 |  | ||||||
| +pass_by_flattened_arg (const Dwarf_Op **locp,
 |  | ||||||
| +		       Dwarf_Word size,
 |  | ||||||
| +		       Dwarf_Die *arg0,
 |  | ||||||
| +		       Dwarf_Die *arg1 __attribute__((unused)))
 |  | ||||||
|  { |  | ||||||
| -  /* ??? */
 |  | ||||||
| -  return -2;
 |  | ||||||
| +  /* For now we just assume arg0 and arg1 are the same type and
 |  | ||||||
| +     encoding.  */
 |  | ||||||
| +  Dwarf_Word encoding;
 |  | ||||||
| +  Dwarf_Attribute attr;
 |  | ||||||
| +
 |  | ||||||
| +  if (dwarf_attr_integrate (arg0, DW_AT_encoding, &attr) == NULL
 |  | ||||||
| +      || dwarf_formudata (&attr, &encoding) != 0)
 |  | ||||||
| +    return -1;
 |  | ||||||
| +
 |  | ||||||
| +  switch (encoding)
 |  | ||||||
| +    {
 |  | ||||||
| +    case DW_ATE_boolean:
 |  | ||||||
| +    case DW_ATE_signed:
 |  | ||||||
| +    case DW_ATE_unsigned:
 |  | ||||||
| +    case DW_ATE_unsigned_char:
 |  | ||||||
| +    case DW_ATE_signed_char:
 |  | ||||||
| +      return pass_in_gpr_lp64 (locp, size);
 |  | ||||||
| +
 |  | ||||||
| +    case DW_ATE_float:
 |  | ||||||
| +      return pass_in_fpr_lp64d (locp, size);
 |  | ||||||
| +
 |  | ||||||
| +    default:
 |  | ||||||
| +      return -1;
 |  | ||||||
| +    }
 |  | ||||||
|  } |  | ||||||
|   |  | ||||||
|  int |  | ||||||
| @@ -158,7 +259,7 @@ riscv_return_value_location_lp64ifd (int fp, Dwarf_Die *functypedie,
 |  | ||||||
|  	 provided the floating-point real is no more than FLEN bits wide and |  | ||||||
|  	 the integer is no more than XLEN bits wide.  */ |  | ||||||
|        if (tag == DW_TAG_structure_type |  | ||||||
| -	  && flatten_aggregate_arg (&typedie, &arg0, &arg1))
 |  | ||||||
| +	  && flatten_aggregate_arg (&typedie, size, &arg0, &arg1))
 |  | ||||||
|  	return pass_by_flattened_arg (locp, size, &arg0, &arg1); |  | ||||||
|        /* Aggregates larger than 2*XLEN bits are passed by reference.  */ |  | ||||||
|        else if (size > 16) |  | ||||||
| diff --git a/tests/Makefile.am b/tests/Makefile.am
 |  | ||||||
| index 9141074fe44c..9315ec3bbe4c 100644
 |  | ||||||
| --- a/tests/Makefile.am
 |  | ||||||
| +++ b/tests/Makefile.am
 |  | ||||||
| @@ -284,6 +285,10 @@ funcretval_test__11_SOURCES = funcretval_test++11.cxx
 |  | ||||||
|  TESTS += run-funcretval++11.sh |  | ||||||
|  endif |  | ||||||
|   |  | ||||||
| +check_PROGRAMS += funcretval_test_struct
 |  | ||||||
| +funcretval_test_struct_SOURCES = funcretval_test_struct.c
 |  | ||||||
| +TESTS += run-funcretval-struct-native.sh
 |  | ||||||
| +
 |  | ||||||
|  EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \ |  | ||||||
|  	     run-ar-N.sh \ |  | ||||||
|  	     run-show-die-info.sh run-get-files.sh run-get-lines.sh \ |  | ||||||
| @@ -635,6 +641,7 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \
 |  | ||||||
|  	     testfile_nvidia_linemap.bz2 \ |  | ||||||
|  	     testfile-largealign.o.bz2 run-strip-largealign.sh \ |  | ||||||
|  	     run-funcretval++11.sh \ |  | ||||||
| +	     run-funcretval-struct-native.sh \
 |  | ||||||
|  	     test-ar-duplicates.a.bz2 \ |  | ||||||
|  	     run-dwfl-core-noncontig.sh testcore-noncontig.bz2 \ |  | ||||||
|  	     testfile-dwarf5-line-clang.bz2 \ |  | ||||||
| diff --git a/tests/funcretval_test_struct.c b/tests/funcretval_test_struct.c
 |  | ||||||
| new file mode 100644 |  | ||||||
| index 000000000000..df94bde0a42d
 |  | ||||||
| --- /dev/null
 |  | ||||||
| +++ b/tests/funcretval_test_struct.c
 |  | ||||||
| @@ -0,0 +1,86 @@
 |  | ||||||
| +/* Copyright (C) 2024 Mark J. Wielaard <mark@klomp.org>
 |  | ||||||
| +   This file is part of elfutils.
 |  | ||||||
| +
 |  | ||||||
| +   This file 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; either version 3 of the License, or
 |  | ||||||
| +   (at your option) any later version.
 |  | ||||||
| +
 |  | ||||||
| +   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 this program.  If not, see <http://www.gnu.org/licenses/>.  */
 |  | ||||||
| +
 |  | ||||||
| +typedef struct
 |  | ||||||
| +  {
 |  | ||||||
| +    int q;
 |  | ||||||
| +    int r;
 |  | ||||||
| +  } div_t;
 |  | ||||||
| +
 |  | ||||||
| +typedef struct
 |  | ||||||
| +  {
 |  | ||||||
| +    long q;
 |  | ||||||
| +    long r;
 |  | ||||||
| +  } ldiv_t;
 |  | ||||||
| +
 |  | ||||||
| +typedef struct
 |  | ||||||
| +  {
 |  | ||||||
| +    float x;
 |  | ||||||
| +    float y;
 |  | ||||||
| +  } point_t;
 |  | ||||||
| +
 |  | ||||||
| +typedef struct
 |  | ||||||
| +  {
 |  | ||||||
| +    double x;
 |  | ||||||
| +    double y;
 |  | ||||||
| +  } dpoint_t;
 |  | ||||||
| +
 |  | ||||||
| +div_t __attribute__((__noinline__))
 |  | ||||||
| +div (int n, int d)
 |  | ||||||
| +{
 |  | ||||||
| +  div_t r;
 |  | ||||||
| +  r.q = n / d;
 |  | ||||||
| +  r.r = n % d;
 |  | ||||||
| +  return r;
 |  | ||||||
| +}
 |  | ||||||
| +
 |  | ||||||
| +ldiv_t __attribute__((__noinline__))
 |  | ||||||
| +ldiv (long n, long d)
 |  | ||||||
| +{
 |  | ||||||
| +  ldiv_t r;
 |  | ||||||
| +  r.q = n / d;
 |  | ||||||
| +  r.r = n % d;
 |  | ||||||
| +  return r;
 |  | ||||||
| +}
 |  | ||||||
| +
 |  | ||||||
| +point_t __attribute__((__noinline__))
 |  | ||||||
| +mkpt (float x, float y)
 |  | ||||||
| +{
 |  | ||||||
| +  point_t r;
 |  | ||||||
| +  r.x = x;
 |  | ||||||
| +  r.y = y;
 |  | ||||||
| +  return r;
 |  | ||||||
| +}
 |  | ||||||
| +
 |  | ||||||
| +dpoint_t __attribute__((__noinline__))
 |  | ||||||
| +dmkpt (double x, double y)
 |  | ||||||
| +{
 |  | ||||||
| +  dpoint_t r;
 |  | ||||||
| +  r.x = x;
 |  | ||||||
| +  r.y = y;
 |  | ||||||
| +  return r;
 |  | ||||||
| +}
 |  | ||||||
| +
 |  | ||||||
| +int
 |  | ||||||
| +main (void)
 |  | ||||||
| +{
 |  | ||||||
| +  div_t d = div (3, 2);
 |  | ||||||
| +  ldiv_t ld = ldiv (3, 2);
 |  | ||||||
| +  point_t p = mkpt (3.0f, 1.0f);
 |  | ||||||
| +  dpoint_t dp = dmkpt (3.0d, 1.0d);
 |  | ||||||
| +
 |  | ||||||
| +  return d.q - (int) p.y + ld.q - (int) dp.y;
 |  | ||||||
| +}
 |  | ||||||
| 
 |  | ||||||
| diff --git a/tests/run-funcretval-struct-native.sh b/tests/run-funcretval-struct-native.sh
 |  | ||||||
| new file mode 100755 |  | ||||||
| index 000000000000..798edb3b61b3
 |  | ||||||
| --- /dev/null
 |  | ||||||
| +++ b/tests/run-funcretval-struct-native.sh
 |  | ||||||
| @@ -0,0 +1,22 @@
 |  | ||||||
| +#! /bin/sh
 |  | ||||||
| +# Copyright (C) 2024 Mark J. Wielaard <mark@klomp.org>
 |  | ||||||
| +# This file is part of elfutils.
 |  | ||||||
| +#
 |  | ||||||
| +# This file 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; either version 3 of the License, or
 |  | ||||||
| +# (at your option) any later version.
 |  | ||||||
| +#
 |  | ||||||
| +# 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 this program.  If not, see <http://www.gnu.org/licenses/>.
 |  | ||||||
| +
 |  | ||||||
| +. $srcdir/test-subr.sh
 |  | ||||||
| +
 |  | ||||||
| +# Just run it, we don't know what the native representation is.
 |  | ||||||
| +# But it should at least work and not error out.
 |  | ||||||
| +testrun $abs_builddir/funcretval -e $abs_builddir/funcretval_test_struct
 |  | ||||||
| -- 
 |  | ||||||
| 2.44.0 |  | ||||||
| 
 |  | ||||||
| @ -1,96 +0,0 @@ | |||||||
| commit 0ba2e4aa9945019a8c6db95d27d142b660a63a79 |  | ||||||
| Author: Mark Wielaard <mark@klomp.org> |  | ||||||
| Date:   Tue Mar 26 21:42:39 2024 +0100 |  | ||||||
| 
 |  | ||||||
|     config: Make sure profile.sh succeeds with set -e and set -o pipefail |  | ||||||
|      |  | ||||||
|     profile.sh might fail with set -o pipefail because: |  | ||||||
|      |  | ||||||
|     cat /dev/null "${prefix}/etc/debuginfod"/*.urls 2>/dev/null | tr '\n' ' ' |  | ||||||
|      |  | ||||||
|     might fail when there isn't an *.urls file the first command in the |  | ||||||
|     pipe fails (the 2>/dev/null is there to hide that failure). |  | ||||||
|      |  | ||||||
|     This can be fixed by adding || : at the end. |  | ||||||
|      |  | ||||||
|     This works because : always succeeds and  produces no outpur which is |  | ||||||
|     what the script expects when the command would fail. |  | ||||||
|      |  | ||||||
|     Also add a new testcase that runs profile.sh with bout  set -e |  | ||||||
|     and set -o pipefail. |  | ||||||
|      |  | ||||||
|             * config/profile.sh.in: Add || : at end of pipe. |  | ||||||
|             * tests/run-debuginfod-client-profile.sh: New test. |  | ||||||
|             * tests/Makefile.am (TESTS): Add run-debuginfod-client-profile.sh. |  | ||||||
|             (EXTRA_DIST): Likewise. |  | ||||||
|      |  | ||||||
|     https://sourceware.org/bugzilla/show_bug.cgi?id=31562 |  | ||||||
|      |  | ||||||
|     Signed-off-by: Mark Wielaard <mark@klomp.org> |  | ||||||
| 
 |  | ||||||
| diff --git a/config/profile.sh.in b/config/profile.sh.in
 |  | ||||||
| index 3f4397dcb44d..84d3260ddcfc 100644
 |  | ||||||
| --- a/config/profile.sh.in
 |  | ||||||
| +++ b/config/profile.sh.in
 |  | ||||||
| @@ -6,7 +6,7 @@
 |  | ||||||
|   |  | ||||||
|  if [ -z "$DEBUGINFOD_URLS" ]; then |  | ||||||
|      prefix="@prefix@" |  | ||||||
| -    DEBUGINFOD_URLS=$(cat /dev/null "@sysconfdir@/debuginfod"/*.urls 2>/dev/null | tr '\n' ' ')
 |  | ||||||
| +    DEBUGINFOD_URLS=$(cat /dev/null "@sysconfdir@/debuginfod"/*.urls 2>/dev/null | tr '\n' ' ' || :)
 |  | ||||||
|      [ -n "$DEBUGINFOD_URLS" ] && export DEBUGINFOD_URLS || unset DEBUGINFOD_URLS |  | ||||||
|      unset prefix |  | ||||||
|  fi |  | ||||||
| diff --git a/tests/Makefile.am b/tests/Makefile.am
 |  | ||||||
| index 9315ec3bbe4c..344d6706e16e 100644
 |  | ||||||
| --- a/tests/Makefile.am
 |  | ||||||
| +++ b/tests/Makefile.am
 |  | ||||||
| @@ -209,6 +209,7 @@ TESTS = run-arextract.sh run-arsymtest.sh run-ar.sh newfile test-nlist \
 |  | ||||||
|  	run-disasm-riscv64.sh \ |  | ||||||
|  	run-pt_gnu_prop-tests.sh \ |  | ||||||
|  	run-getphdrnum.sh run-test-includes.sh \ |  | ||||||
| +	run-debuginfod-client-profile.sh \
 |  | ||||||
|  	leb128 read_unaligned \ |  | ||||||
|  	msg_tst system-elf-libelf-test system-elf-gelf-test \ |  | ||||||
|  	$(asm_TESTS) run-disasm-bpf.sh run-low_high_pc-dw-form-indirect.sh \ |  | ||||||
| @@ -636,6 +637,7 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \
 |  | ||||||
|  	     testfile_pt_gnu_prop.bz2 testfile_pt_gnu_prop32.bz2 \ |  | ||||||
|  	     run-getphdrnum.sh testfile-phdrs.elf.bz2 \ |  | ||||||
|  	     run-test-includes.sh run-low_high_pc-dw-form-indirect.sh \ |  | ||||||
| +	     run-debuginfod-client-profile.sh \
 |  | ||||||
|  	     run-readelf-dw-form-indirect.sh testfile-dw-form-indirect.bz2 \ |  | ||||||
|  	     run-nvidia-extended-linemap-libdw.sh run-nvidia-extended-linemap-readelf.sh \ |  | ||||||
|  	     testfile_nvidia_linemap.bz2 \ |  | ||||||
| diff --git a/tests/run-debuginfod-client-profile.sh b/tests/run-debuginfod-client-profile.sh
 |  | ||||||
| new file mode 100755 |  | ||||||
| index 000000000000..7435ced83f15
 |  | ||||||
| --- /dev/null
 |  | ||||||
| +++ b/tests/run-debuginfod-client-profile.sh
 |  | ||||||
| @@ -0,0 +1,27 @@
 |  | ||||||
| +#! /bin/sh
 |  | ||||||
| +# Copyright (C) 2024 Mark J. Wielaard
 |  | ||||||
| +# This file is part of elfutils.
 |  | ||||||
| +#
 |  | ||||||
| +# This file 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; either version 3 of the License, or
 |  | ||||||
| +# (at your option) any later version.
 |  | ||||||
| +#
 |  | ||||||
| +# 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 this program.  If not, see <http://www.gnu.org/licenses/>.
 |  | ||||||
| +
 |  | ||||||
| +. $srcdir/test-subr.sh
 |  | ||||||
| +
 |  | ||||||
| +# Make sure the profile.sh or profile.d/debuginfod.sh works even with
 |  | ||||||
| +# set -e (any command error is an error) and set -o pipefail (any error
 |  | ||||||
| +# in a pipe fails the whole pipe command).
 |  | ||||||
| +
 |  | ||||||
| +set -e
 |  | ||||||
| +set -o pipefail
 |  | ||||||
| +
 |  | ||||||
| +source ${abs_top_builddir}/config/profile.sh
 |  | ||||||
| @ -1,359 +0,0 @@ | |||||||
| From e39336df6588c3f9853be7d02819aee262ba2121 Mon Sep 17 00:00:00 2001 |  | ||||||
| From: Mark Wielaard <mark@klomp.org> |  | ||||||
| Date: Tue, 19 Mar 2024 22:43:10 +0000 |  | ||||||
| Subject: [PATCH] riscv: Partial implementation of flatten_aggregate |  | ||||||
| 
 |  | ||||||
| dwfl_module_return_value_location would fail on riscv for functions |  | ||||||
| which return a (small) struct. This patch implements the simplest |  | ||||||
| cases of flatten_aggregate in backends/riscv_retval.c. It just handles |  | ||||||
| structs containing one or two members of the same base type which fit |  | ||||||
| completely or in pieces in one or two general or floating point |  | ||||||
| registers. |  | ||||||
| 
 |  | ||||||
| It also adds a specific test case run-funcretval-struct.sh containing |  | ||||||
| small structs of ints, longs, floats and doubles. All these testscases |  | ||||||
| now work for riscv. There is already a slightly more extensive |  | ||||||
| testcase for this in tests/run-funcretval.sh but that only has a |  | ||||||
| testcase for aarch64. |  | ||||||
| 
 |  | ||||||
| 	 * backends/riscv_retval.c (flatten_aggregate_arg): Implement |  | ||||||
|          for the simple cases where we have a struct with one or two |  | ||||||
|          members of the same base type. |  | ||||||
| 	 (pass_by_flattened_arg): Likewise. Call either |  | ||||||
| 	 pass_in_gpr_lp64 or pass_in_fpr_lp64d. |  | ||||||
| 	 (riscv_return_value_location_lp64ifd): Call |  | ||||||
| 	 flatten_aggregate_arg including size. |  | ||||||
| 	 * tests/Makefile.am (TESTS): Add run-funcretval-struct.sh |  | ||||||
| 	 and run-funcretval-struct-native.sh. |  | ||||||
| 	 (check_PROGRAMS): Add funcretval_test_struct. |  | ||||||
| 	 (funcretval_test_struct_SOURCES): New. |  | ||||||
| 	 (EXTRA_DIST): Add run-funcretval-struct.sh, |  | ||||||
| 	 funcretval_test_struct_riscv.bz2 and |  | ||||||
| 	 run-funcretval-struct-native.sh. |  | ||||||
| 	 * tests/funcretval_test_struct_riscv.bz2: New test binary. |  | ||||||
| 	 * tests/run-funcretval-struct-native.sh: New test. |  | ||||||
| 	 * tests/run-funcretval-struct.sh: Likewise. |  | ||||||
| 
 |  | ||||||
| https://sourceware.org/bugzilla/show_bug.cgi?id=31142 |  | ||||||
| 
 |  | ||||||
| Signed-off-by: Mark Wielaard <mark@klomp.org> |  | ||||||
| ---
 |  | ||||||
|  backends/riscv_retval.c                | 123 ++++++++++++++++++++++--- |  | ||||||
|  tests/Makefile.am                      |   7 ++ |  | ||||||
|  tests/funcretval_test_struct.c         |  86 +++++++++++++++++ |  | ||||||
|  tests/funcretval_test_struct_riscv.bz2 | Bin 0 -> 3821 bytes |  | ||||||
|  tests/run-funcretval-struct-native.sh  |  22 +++++ |  | ||||||
|  tests/run-funcretval-struct.sh         |  35 +++++++ |  | ||||||
|  6 files changed, 262 insertions(+), 11 deletions(-) |  | ||||||
|  create mode 100644 tests/funcretval_test_struct.c |  | ||||||
|  create mode 100755 tests/funcretval_test_struct_riscv.bz2 |  | ||||||
|  create mode 100755 tests/run-funcretval-struct-native.sh |  | ||||||
|  create mode 100755 tests/run-funcretval-struct.sh |  | ||||||
| 
 |  | ||||||
| Fedora NOTE: Both the riscv specific test files weren't included |  | ||||||
|              (funcretval_test_struct_riscv.bz2 and run-funcretval-struct.sh) |  | ||||||
|              Because it contained a binary test. The native test is included |  | ||||||
|              though. |  | ||||||
| 
 |  | ||||||
| diff --git a/backends/riscv_retval.c b/backends/riscv_retval.c
 |  | ||||||
| index 0a1e02f81cd2..50c451a4ba32 100644
 |  | ||||||
| --- a/backends/riscv_retval.c
 |  | ||||||
| +++ b/backends/riscv_retval.c
 |  | ||||||
| @@ -1,6 +1,7 @@
 |  | ||||||
|  /* Function return value location for Linux/RISC-V ABI. |  | ||||||
|     Copyright (C) 2018 Sifive, Inc. |  | ||||||
|     Copyright (C) 2013 Red Hat, Inc. |  | ||||||
| +   Copyright (C) 2024 Mark J. Wielaard <mark@klomp.org>
 |  | ||||||
|     This file is part of elfutils. |  | ||||||
|   |  | ||||||
|     This file is free software; you can redistribute it and/or modify |  | ||||||
| @@ -105,23 +106,123 @@ pass_in_fpr_lp64d (const Dwarf_Op **locp, Dwarf_Word size)
 |  | ||||||
|    return size <= 8 ? 1 : 4; |  | ||||||
|  } |  | ||||||
|   |  | ||||||
| +/* Checks if we can "flatten" the given type, Only handles the simple
 |  | ||||||
| +   cases where we have a struct with one or two the same base type
 |  | ||||||
| +   elements.  */
 |  | ||||||
|  static int |  | ||||||
| -flatten_aggregate_arg (Dwarf_Die *typedie __attribute__ ((unused)),
 |  | ||||||
| -		       Dwarf_Die *arg0 __attribute__ ((unused)),
 |  | ||||||
| -		       Dwarf_Die *arg1 __attribute__ ((unused)))
 |  | ||||||
| +flatten_aggregate_arg (Dwarf_Die *typedie,
 |  | ||||||
| +		       Dwarf_Word size,
 |  | ||||||
| +		       Dwarf_Die *arg0,
 |  | ||||||
| +		       Dwarf_Die *arg1)
 |  | ||||||
|  { |  | ||||||
| -  /* ??? */
 |  | ||||||
| +  int tag0, tag1;
 |  | ||||||
| +  Dwarf_Die member;
 |  | ||||||
| +  Dwarf_Word encoding0, encoding1;
 |  | ||||||
| +  Dwarf_Attribute attr;
 |  | ||||||
| +  Dwarf_Word size0, size1;
 |  | ||||||
| +
 |  | ||||||
| +  if (size < 8 || size > 16)
 |  | ||||||
| +    return 0;
 |  | ||||||
| +
 |  | ||||||
| +  if (dwarf_child (typedie, arg0) != 0)
 |  | ||||||
| +    return 0;
 |  | ||||||
| +
 |  | ||||||
| +  tag0 = dwarf_tag (arg0);
 |  | ||||||
| +  while (tag0 != -1 && tag0 != DW_TAG_member)
 |  | ||||||
| +    {
 |  | ||||||
| +      if (dwarf_siblingof (arg0, arg0) != 0)
 |  | ||||||
| +	return 0;
 |  | ||||||
| +      tag0 = dwarf_tag (arg0);
 |  | ||||||
| +    }
 |  | ||||||
| +
 |  | ||||||
| +  if (tag0 != DW_TAG_member)
 |  | ||||||
| +    return 0;
 |  | ||||||
| +
 |  | ||||||
| +  /* Remember where we are.  */
 |  | ||||||
| +  member = *arg0;
 |  | ||||||
| +
 |  | ||||||
| +  tag0 = dwarf_peeled_die_type (arg0, arg0);
 |  | ||||||
| +  if (tag0 != DW_TAG_base_type)
 |  | ||||||
| +    return 0;
 |  | ||||||
| +
 |  | ||||||
| +  if (dwarf_attr_integrate (arg0, DW_AT_encoding, &attr) == NULL
 |  | ||||||
| +      || dwarf_formudata (&attr, &encoding0) != 0)
 |  | ||||||
| +    return 0;
 |  | ||||||
| +
 |  | ||||||
| +  if (dwarf_bytesize_aux (arg0, &size0) != 0)
 |  | ||||||
| +    return 0;
 |  | ||||||
| +
 |  | ||||||
| +  if (size == size0)
 |  | ||||||
| +    return 1; /* This one member is the whole size. */
 |  | ||||||
| +
 |  | ||||||
| +  if (size != 2 * size0)
 |  | ||||||
| +    return 0; /* We only handle two of the same.  */
 |  | ||||||
| +
 |  | ||||||
| +  /* Look for another member with the same encoding.  */
 |  | ||||||
| +  if (dwarf_siblingof (&member, arg1) != 0)
 |  | ||||||
| +    return 0;
 |  | ||||||
| +
 |  | ||||||
| +  tag1 = dwarf_tag (arg1);
 |  | ||||||
| +  while (tag1 != -1 && tag1 != DW_TAG_member)
 |  | ||||||
| +    {
 |  | ||||||
| +      if (dwarf_siblingof (arg1, arg1) != 0)
 |  | ||||||
| +	return 0;
 |  | ||||||
| +      tag1 = dwarf_tag (arg1);
 |  | ||||||
| +    }
 |  | ||||||
| +
 |  | ||||||
| +  if (tag1 != DW_TAG_member)
 |  | ||||||
| +    return 0;
 |  | ||||||
| +
 |  | ||||||
| +  tag1 = dwarf_peeled_die_type (arg1, arg1);
 |  | ||||||
| +  if (tag1 != DW_TAG_base_type)
 |  | ||||||
| +    return 0; /* We can only handle two equal base types for now. */
 |  | ||||||
| +
 |  | ||||||
| +  if (dwarf_attr_integrate (arg1, DW_AT_encoding, &attr) == NULL
 |  | ||||||
| +      || dwarf_formudata (&attr, &encoding1) != 0
 |  | ||||||
| +      || encoding0 != encoding1)
 |  | ||||||
| +    return 0; /* We can only handle two of the same for now. */
 |  | ||||||
| +
 |  | ||||||
| +  if (dwarf_bytesize_aux (arg1, &size1) != 0)
 |  | ||||||
| +    return 0;
 |  | ||||||
| +
 |  | ||||||
| +  if (size0 != size1)
 |  | ||||||
| +    return 0; /* We can only handle two of the same for now. */
 |  | ||||||
| +
 |  | ||||||
|    return 1; |  | ||||||
|  } |  | ||||||
|   |  | ||||||
| +/* arg0 and arg1 should be the peeled die types found by
 |  | ||||||
| +   flatten_aggregate_arg.  */
 |  | ||||||
|  static int |  | ||||||
| -pass_by_flattened_arg (const Dwarf_Op **locp __attribute__ ((unused)),
 |  | ||||||
| -		       Dwarf_Word size __attribute__ ((unused)),
 |  | ||||||
| -		       Dwarf_Die *arg0 __attribute__ ((unused)),
 |  | ||||||
| -		       Dwarf_Die *arg1 __attribute__ ((unused)))
 |  | ||||||
| +pass_by_flattened_arg (const Dwarf_Op **locp,
 |  | ||||||
| +		       Dwarf_Word size,
 |  | ||||||
| +		       Dwarf_Die *arg0,
 |  | ||||||
| +		       Dwarf_Die *arg1 __attribute__((unused)))
 |  | ||||||
|  { |  | ||||||
| -  /* ??? */
 |  | ||||||
| -  return -2;
 |  | ||||||
| +  /* For now we just assume arg0 and arg1 are the same type and
 |  | ||||||
| +     encoding.  */
 |  | ||||||
| +  Dwarf_Word encoding;
 |  | ||||||
| +  Dwarf_Attribute attr;
 |  | ||||||
| +
 |  | ||||||
| +  if (dwarf_attr_integrate (arg0, DW_AT_encoding, &attr) == NULL
 |  | ||||||
| +      || dwarf_formudata (&attr, &encoding) != 0)
 |  | ||||||
| +    return -1;
 |  | ||||||
| +
 |  | ||||||
| +  switch (encoding)
 |  | ||||||
| +    {
 |  | ||||||
| +    case DW_ATE_boolean:
 |  | ||||||
| +    case DW_ATE_signed:
 |  | ||||||
| +    case DW_ATE_unsigned:
 |  | ||||||
| +    case DW_ATE_unsigned_char:
 |  | ||||||
| +    case DW_ATE_signed_char:
 |  | ||||||
| +      return pass_in_gpr_lp64 (locp, size);
 |  | ||||||
| +
 |  | ||||||
| +    case DW_ATE_float:
 |  | ||||||
| +      return pass_in_fpr_lp64d (locp, size);
 |  | ||||||
| +
 |  | ||||||
| +    default:
 |  | ||||||
| +      return -1;
 |  | ||||||
| +    }
 |  | ||||||
|  } |  | ||||||
|   |  | ||||||
|  int |  | ||||||
| @@ -158,7 +259,7 @@ riscv_return_value_location_lp64ifd (int fp, Dwarf_Die *functypedie,
 |  | ||||||
|  	 provided the floating-point real is no more than FLEN bits wide and |  | ||||||
|  	 the integer is no more than XLEN bits wide.  */ |  | ||||||
|        if (tag == DW_TAG_structure_type |  | ||||||
| -	  && flatten_aggregate_arg (&typedie, &arg0, &arg1))
 |  | ||||||
| +	  && flatten_aggregate_arg (&typedie, size, &arg0, &arg1))
 |  | ||||||
|  	return pass_by_flattened_arg (locp, size, &arg0, &arg1); |  | ||||||
|        /* Aggregates larger than 2*XLEN bits are passed by reference.  */ |  | ||||||
|        else if (size > 16) |  | ||||||
| diff --git a/tests/Makefile.am b/tests/Makefile.am
 |  | ||||||
| index 9141074fe44c..9315ec3bbe4c 100644
 |  | ||||||
| --- a/tests/Makefile.am
 |  | ||||||
| +++ b/tests/Makefile.am
 |  | ||||||
| @@ -284,6 +285,10 @@ funcretval_test__11_SOURCES = funcretval_test++11.cxx
 |  | ||||||
|  TESTS += run-funcretval++11.sh |  | ||||||
|  endif |  | ||||||
|   |  | ||||||
| +check_PROGRAMS += funcretval_test_struct
 |  | ||||||
| +funcretval_test_struct_SOURCES = funcretval_test_struct.c
 |  | ||||||
| +TESTS += run-funcretval-struct-native.sh
 |  | ||||||
| +
 |  | ||||||
|  EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \ |  | ||||||
|  	     run-ar-N.sh \ |  | ||||||
|  	     run-show-die-info.sh run-get-files.sh run-get-lines.sh \ |  | ||||||
| @@ -635,6 +641,7 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \
 |  | ||||||
|  	     testfile_nvidia_linemap.bz2 \ |  | ||||||
|  	     testfile-largealign.o.bz2 run-strip-largealign.sh \ |  | ||||||
|  	     run-funcretval++11.sh \ |  | ||||||
| +	     run-funcretval-struct-native.sh \
 |  | ||||||
|  	     test-ar-duplicates.a.bz2 \ |  | ||||||
|  	     run-dwfl-core-noncontig.sh testcore-noncontig.bz2 \ |  | ||||||
|  	     testfile-dwarf5-line-clang.bz2 \ |  | ||||||
| diff --git a/tests/funcretval_test_struct.c b/tests/funcretval_test_struct.c
 |  | ||||||
| new file mode 100644 |  | ||||||
| index 000000000000..df94bde0a42d
 |  | ||||||
| --- /dev/null
 |  | ||||||
| +++ b/tests/funcretval_test_struct.c
 |  | ||||||
| @@ -0,0 +1,86 @@
 |  | ||||||
| +/* Copyright (C) 2024 Mark J. Wielaard <mark@klomp.org>
 |  | ||||||
| +   This file is part of elfutils.
 |  | ||||||
| +
 |  | ||||||
| +   This file 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; either version 3 of the License, or
 |  | ||||||
| +   (at your option) any later version.
 |  | ||||||
| +
 |  | ||||||
| +   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 this program.  If not, see <http://www.gnu.org/licenses/>.  */
 |  | ||||||
| +
 |  | ||||||
| +typedef struct
 |  | ||||||
| +  {
 |  | ||||||
| +    int q;
 |  | ||||||
| +    int r;
 |  | ||||||
| +  } div_t;
 |  | ||||||
| +
 |  | ||||||
| +typedef struct
 |  | ||||||
| +  {
 |  | ||||||
| +    long q;
 |  | ||||||
| +    long r;
 |  | ||||||
| +  } ldiv_t;
 |  | ||||||
| +
 |  | ||||||
| +typedef struct
 |  | ||||||
| +  {
 |  | ||||||
| +    float x;
 |  | ||||||
| +    float y;
 |  | ||||||
| +  } point_t;
 |  | ||||||
| +
 |  | ||||||
| +typedef struct
 |  | ||||||
| +  {
 |  | ||||||
| +    double x;
 |  | ||||||
| +    double y;
 |  | ||||||
| +  } dpoint_t;
 |  | ||||||
| +
 |  | ||||||
| +div_t __attribute__((__noinline__))
 |  | ||||||
| +div (int n, int d)
 |  | ||||||
| +{
 |  | ||||||
| +  div_t r;
 |  | ||||||
| +  r.q = n / d;
 |  | ||||||
| +  r.r = n % d;
 |  | ||||||
| +  return r;
 |  | ||||||
| +}
 |  | ||||||
| +
 |  | ||||||
| +ldiv_t __attribute__((__noinline__))
 |  | ||||||
| +ldiv (long n, long d)
 |  | ||||||
| +{
 |  | ||||||
| +  ldiv_t r;
 |  | ||||||
| +  r.q = n / d;
 |  | ||||||
| +  r.r = n % d;
 |  | ||||||
| +  return r;
 |  | ||||||
| +}
 |  | ||||||
| +
 |  | ||||||
| +point_t __attribute__((__noinline__))
 |  | ||||||
| +mkpt (float x, float y)
 |  | ||||||
| +{
 |  | ||||||
| +  point_t r;
 |  | ||||||
| +  r.x = x;
 |  | ||||||
| +  r.y = y;
 |  | ||||||
| +  return r;
 |  | ||||||
| +}
 |  | ||||||
| +
 |  | ||||||
| +dpoint_t __attribute__((__noinline__))
 |  | ||||||
| +dmkpt (double x, double y)
 |  | ||||||
| +{
 |  | ||||||
| +  dpoint_t r;
 |  | ||||||
| +  r.x = x;
 |  | ||||||
| +  r.y = y;
 |  | ||||||
| +  return r;
 |  | ||||||
| +}
 |  | ||||||
| +
 |  | ||||||
| +int
 |  | ||||||
| +main (void)
 |  | ||||||
| +{
 |  | ||||||
| +  div_t d = div (3, 2);
 |  | ||||||
| +  ldiv_t ld = ldiv (3, 2);
 |  | ||||||
| +  point_t p = mkpt (3.0f, 1.0f);
 |  | ||||||
| +  dpoint_t dp = dmkpt (3.0d, 1.0d);
 |  | ||||||
| +
 |  | ||||||
| +  return d.q - (int) p.y + ld.q - (int) dp.y;
 |  | ||||||
| +}
 |  | ||||||
| 
 |  | ||||||
| diff --git a/tests/run-funcretval-struct-native.sh b/tests/run-funcretval-struct-native.sh
 |  | ||||||
| new file mode 100755 |  | ||||||
| index 000000000000..798edb3b61b3
 |  | ||||||
| --- /dev/null
 |  | ||||||
| +++ b/tests/run-funcretval-struct-native.sh
 |  | ||||||
| @@ -0,0 +1,22 @@
 |  | ||||||
| +#! /bin/sh
 |  | ||||||
| +# Copyright (C) 2024 Mark J. Wielaard <mark@klomp.org>
 |  | ||||||
| +# This file is part of elfutils.
 |  | ||||||
| +#
 |  | ||||||
| +# This file 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; either version 3 of the License, or
 |  | ||||||
| +# (at your option) any later version.
 |  | ||||||
| +#
 |  | ||||||
| +# 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 this program.  If not, see <http://www.gnu.org/licenses/>.
 |  | ||||||
| +
 |  | ||||||
| +. $srcdir/test-subr.sh
 |  | ||||||
| +
 |  | ||||||
| +# Just run it, we don't know what the native representation is.
 |  | ||||||
| +# But it should at least work and not error out.
 |  | ||||||
| +testrun $abs_builddir/funcretval -e $abs_builddir/funcretval_test_struct
 |  | ||||||
| -- 
 |  | ||||||
| 2.44.0 |  | ||||||
| 
 |  | ||||||
							
								
								
									
										36
									
								
								elfutils-0.192-libelf-static.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								elfutils-0.192-libelf-static.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,36 @@ | |||||||
|  | From 0a65a54593ae489d40cb993caa74095d45bc47fd Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Mark Wielaard <mark@klomp.org> | ||||||
|  | Date: Tue, 22 Oct 2024 15:03:42 +0200 | ||||||
|  | Subject: [PATCH] libelf: Add libeu objects to libelf.a static archive | ||||||
|  | 
 | ||||||
|  | libelf might use some symbols from libeu.a, specifically the eu-search | ||||||
|  | wrappers. But we don't ship libeu.a separately. So include the libeu | ||||||
|  | objects in the libelf.a archive to facilitate static linking. | ||||||
|  | 
 | ||||||
|  | 	* libelf/Makefile.am (libeu_objects): New variable. | ||||||
|  | 	(libelf_a_LIBADD): New, add libeu_objects. | ||||||
|  | 
 | ||||||
|  | https://sourceware.org/bugzilla/show_bug.cgi?id=32293 | ||||||
|  | 
 | ||||||
|  | Signed-off-by: Mark Wielaard <mark@klomp.org> | ||||||
|  | ---
 | ||||||
|  |  libelf/Makefile.am | 3 +++ | ||||||
|  |  1 file changed, 3 insertions(+) | ||||||
|  | 
 | ||||||
|  | diff --git a/libelf/Makefile.am b/libelf/Makefile.am
 | ||||||
|  | index 3402863e..2d3dbdf2 100644
 | ||||||
|  | --- a/libelf/Makefile.am
 | ||||||
|  | +++ b/libelf/Makefile.am
 | ||||||
|  | @@ -122,6 +122,9 @@ libelf.so: $(srcdir)/libelf.map $(libelf_so_LIBS) $(libelf_so_DEPS)
 | ||||||
|  |  	@$(textrel_check) | ||||||
|  |  	$(AM_V_at)ln -fs $@ $@.$(VERSION) | ||||||
|  |   | ||||||
|  | +libeu_objects = $(shell $(AR) t ../lib/libeu.a)
 | ||||||
|  | +libelf_a_LIBADD = $(addprefix ../lib/,$(libeu_objects))
 | ||||||
|  | +
 | ||||||
|  |  install: install-am libelf.so | ||||||
|  |  	$(mkinstalldirs) $(DESTDIR)$(libdir) | ||||||
|  |  	$(INSTALL_PROGRAM) libelf.so $(DESTDIR)$(libdir)/libelf-$(PACKAGE_VERSION).so | ||||||
|  | -- 
 | ||||||
|  | 2.47.0 | ||||||
|  | 
 | ||||||
| @ -3,8 +3,8 @@ | |||||||
| %bcond_with static | %bcond_with static | ||||||
| 
 | 
 | ||||||
| Name: elfutils | Name: elfutils | ||||||
| Version: 0.191 | Version: 0.192 | ||||||
| %global baserelease 5 | %global baserelease 1 | ||||||
| Release: %{baserelease}%{?dist} | Release: %{baserelease}%{?dist} | ||||||
| URL: http://elfutils.org/ | URL: http://elfutils.org/ | ||||||
| %global source_url ftp://sourceware.org/pub/elfutils/%{version}/ | %global source_url ftp://sourceware.org/pub/elfutils/%{version}/ | ||||||
| @ -39,6 +39,8 @@ BuildRequires: pkgconfig(libmicrohttpd) >= 0.9.33 | |||||||
| BuildRequires: pkgconfig(libcurl) >= 7.29.0 | BuildRequires: pkgconfig(libcurl) >= 7.29.0 | ||||||
| BuildRequires: pkgconfig(sqlite3) >= 3.7.17 | BuildRequires: pkgconfig(sqlite3) >= 3.7.17 | ||||||
| BuildRequires: pkgconfig(libarchive) >= 3.1.2 | BuildRequires: pkgconfig(libarchive) >= 3.1.2 | ||||||
|  | # For debugindod metadata query | ||||||
|  | BuildRequires: pkgconfig(json-c) >= 0.11 | ||||||
| 
 | 
 | ||||||
| # For tests need to bunzip2 test files. | # For tests need to bunzip2 test files. | ||||||
| BuildRequires: bzip2 | BuildRequires: bzip2 | ||||||
| @ -75,7 +77,8 @@ BuildRequires: gettext-devel | |||||||
| # For s390x... FDO package notes are bogus. | # For s390x... FDO package notes are bogus. | ||||||
| Patch1: elfutils-0.186-fdo-swap.patch | Patch1: elfutils-0.186-fdo-swap.patch | ||||||
| 
 | 
 | ||||||
| Patch2: elfutils-0.190-riscv-flatten.patch | # Include libeu.a objects in libelf.a for static linking. | ||||||
|  | Patch2: elfutils-0.192-libelf-static.patch | ||||||
| 
 | 
 | ||||||
| %description | %description | ||||||
| Elfutils is a collection of utilities, including stack (to show | Elfutils is a collection of utilities, including stack (to show | ||||||
| @ -426,6 +429,9 @@ fi | |||||||
| %{_libdir}/libelf.so | %{_libdir}/libelf.so | ||||||
| %{_libdir}/pkgconfig/libelf.pc | %{_libdir}/pkgconfig/libelf.pc | ||||||
| %{_mandir}/man3/elf_*.3* | %{_mandir}/man3/elf_*.3* | ||||||
|  | %{_mandir}/man3/elf32_*.3* | ||||||
|  | %{_mandir}/man3/elf64_*.3* | ||||||
|  | %{_mandir}/man3/libelf.3* | ||||||
| 
 | 
 | ||||||
| %if %{with static} | %if %{with static} | ||||||
| %files libelf-devel-static | %files libelf-devel-static | ||||||
| @ -446,6 +452,7 @@ fi | |||||||
| %config(noreplace) %{_sysconfdir}/profile.d/* | %config(noreplace) %{_sysconfdir}/profile.d/* | ||||||
| %if "%{?dist_debuginfod_url}" | %if "%{?dist_debuginfod_url}" | ||||||
| %config(noreplace) %{_sysconfdir}/debuginfod/* | %config(noreplace) %{_sysconfdir}/debuginfod/* | ||||||
|  | %config(noreplace) %{_datadir}/fish/vendor_conf.d/* | ||||||
| %endif | %endif | ||||||
| 
 | 
 | ||||||
| %files debuginfod-client-devel | %files debuginfod-client-devel | ||||||
| @ -485,6 +492,14 @@ exit 0 | |||||||
| %systemd_postun_with_restart debuginfod.service | %systemd_postun_with_restart debuginfod.service | ||||||
| 
 | 
 | ||||||
| %changelog | %changelog | ||||||
|  | * Wed Oct 23 2024 Aaron Merey <amerey@redhat.com> - 0.192-1 | ||||||
|  | - Upgrade to upstream elfutils 0.192 | ||||||
|  | - Drop upstreamed patches | ||||||
|  |   elfutils-0.190-riscv-flatten.patch | ||||||
|  |   elfutils-0.191-riscv-flatten.patch | ||||||
|  |   elfutils-0.191-profile-empty-urls.patch | ||||||
|  | - Add elfutils-0.192-libelf-static.patch | ||||||
|  | 
 | ||||||
| * Tue Jun 25 2024 Mark Wielaard <mjw@fedoraproject.org> - 0.191-5 | * Tue Jun 25 2024 Mark Wielaard <mjw@fedoraproject.org> - 0.191-5 | ||||||
| - Add elfutils-0.190-riscv-flatten.patch | - Add elfutils-0.190-riscv-flatten.patch | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										2
									
								
								sources
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								sources
									
									
									
									
									
								
							| @ -1 +1 @@ | |||||||
| SHA512 (elfutils-0.191.tar.bz2) = e22d85f25317a79b36d370347e50284c9120c86f9830f08791b7b6a7b4ad89b9bf4c7c71129133b8d193a0edffb2a2c17987b7e48428b9670aff5ce918777e04 | SHA512 (elfutils-0.192.tar.bz2) = 543188f5f2cfe5bc7955a878416c5f252edff9926754e5de0c6c57b132f21d9285c9b29e41281e93baad11d4ae7efbbf93580c114579c182103565fe99bd3909 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user