mirror of
https://github.com/Zenithsiz/ftmemsim-valgrind.git
synced 2026-02-03 18:13:01 +00:00
gcc10 arm64 build needs __getauxval for linking with libgcc
Provide a new library libgcc-sup-<platform>.a that contains symbols needed by libgcc. This needs to be linked after -lgcc to provide any symbols missing which would normally be provided by glibc. At the moment this only provides __getauxval on arm64 linux. https://bugs.kde.org/show_bug.cgi?id=421321
This commit is contained in:
parent
a2ef3fcf6a
commit
abbc0761fa
@ -17,7 +17,8 @@ TOOL_DEPENDENCIES_@VGCONF_PLATFORM_SEC_CAPS@ = \
|
||||
endif
|
||||
|
||||
|
||||
TOOL_LDADD_COMMON = -lgcc
|
||||
TOOL_LDADD_COMMON = -lgcc \
|
||||
$(top_builddir)/coregrind/libgcc-sup-@VGCONF_ARCH_PRI@-@VGCONF_OS@.a
|
||||
TOOL_LDADD_@VGCONF_PLATFORM_PRI_CAPS@ = \
|
||||
$(TOOL_DEPENDENCIES_@VGCONF_PLATFORM_PRI_CAPS@) $(TOOL_LDADD_COMMON)
|
||||
if VGCONF_HAVE_PLATFORM_SEC
|
||||
|
||||
@ -542,6 +542,32 @@ libcoregrind_@VGCONF_ARCH_SEC@_@VGCONF_OS@_a_DEPENDENCIES = \
|
||||
libnolto_coregrind-@VGCONF_ARCH_SEC@-@VGCONF_OS@.a
|
||||
endif
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
# libgcc-sup-<platform>.a
|
||||
# Special supplemental library for functions normally supplied by glibc
|
||||
# used by libgcc.
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
pkglib_LIBRARIES += libgcc-sup-@VGCONF_ARCH_PRI@-@VGCONF_OS@.a
|
||||
if VGCONF_HAVE_PLATFORM_SEC
|
||||
pkglib_LIBRARIES += libgcc-sup-@VGCONF_ARCH_SEC@-@VGCONF_OS@.a
|
||||
endif
|
||||
|
||||
libgcc_sup_@VGCONF_ARCH_PRI@_@VGCONF_OS@_a_SOURCES = \
|
||||
m_libgcc_sup.c
|
||||
libgcc_sup_@VGCONF_ARCH_PRI@_@VGCONF_OS@_a_CPPFLAGS = \
|
||||
$(AM_CPPFLAGS_@VGCONF_PLATFORM_PRI_CAPS@)
|
||||
libgcc_sup_@VGCONF_ARCH_PRI@_@VGCONF_OS@_a_CFLAGS = \
|
||||
$(AM_CFLAGS_PSO_@VGCONF_PLATFORM_PRI_CAPS@)
|
||||
if VGCONF_HAVE_PLATFORM_SEC
|
||||
libgcc_sup_@VGCONF_ARCH_SEC@_@VGCONF_OS@_a_SOURCES = \
|
||||
m_libgcc_sup.c
|
||||
libgcc_sup_@VGCONF_ARCH_SEC@_@VGCONF_OS@_a_CPPFLAGS = \
|
||||
$(AM_CPPFLAGS_@VGCONF_PLATFORM_SEC_CAPS@)
|
||||
libgcc_sup_@VGCONF_ARCH_SEC@_@VGCONF_OS@_a_CFLAGS = \
|
||||
$(AM_CFLAGS_PSO_@VGCONF_PLATFORM_SEC_CAPS@)
|
||||
endif
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
# libreplacemalloc_toolpreload-<platform>.a
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
61
coregrind/m_libgcc_sup.c
Normal file
61
coregrind/m_libgcc_sup.c
Normal file
@ -0,0 +1,61 @@
|
||||
/* -*- mode: C; c-basic-offset: 3; -*- */
|
||||
|
||||
/*--------------------------------------------------------------------*/
|
||||
/*--- Supplemental functions for libgcc normally provided by glibc ---*/
|
||||
/*--------------------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
This file is part of Valgrind, a dynamic binary instrumentation
|
||||
framework.
|
||||
|
||||
Copyright (C) 2020 Mark Wielaard
|
||||
mark@klomp.org
|
||||
|
||||
This program 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 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
This program 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/>.
|
||||
|
||||
The GNU General Public License is contained in the file COPYING.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include "pub_core_basics.h"
|
||||
#include "pub_core_clientstate.h"
|
||||
|
||||
/*====================================================================*/
|
||||
/*=== arm64 libgcc support function for init_have_lse_atomics ===*/
|
||||
/*====================================================================*/
|
||||
|
||||
#if defined(VGP_arm64_linux)
|
||||
struct auxv
|
||||
{
|
||||
Word a_type;
|
||||
union {
|
||||
void *a_ptr;
|
||||
Word a_val;
|
||||
} u;
|
||||
};
|
||||
#define AT_NULL 0
|
||||
|
||||
unsigned long int __getauxval (unsigned long int type);
|
||||
unsigned long int __getauxval (unsigned long int type)
|
||||
{
|
||||
struct auxv *p;
|
||||
for (p = (struct auxv *) VG_(client_auxv);
|
||||
p != NULL && p->a_type != AT_NULL;
|
||||
p++)
|
||||
if (p->a_type == type)
|
||||
return p->u.a_val;
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
Loading…
x
Reference in New Issue
Block a user