Hi, this fixes a problem with a missing symbol __sync_synchronize which happens when newlib is used together with libstdc++ for the non-threaded simulator target arm-none-eabi.
There are several questions on stackoverflow about this issue. I would like to add a weak symbol for this target, since this is only a default implementation and not meant to override a possibly more sophisticated synchronization function from the c-runtime. Regression tested successfully on arm-none-eabi with newlib-3.3.0. Is it OK for trunk? Thanks Bernd.
From f8a3df552f4b98308096659c66b4c8ea68580f25 Mon Sep 17 00:00:00 2001 From: Bernd Edlinger <bernd.edlin...@hotmail.de> Date: Mon, 2 Nov 2020 11:43:44 +0100 Subject: [PATCH] libgcc: Add a weak stub for __sync_synchronize This patch adds a default implementation for __sync_synchronize, which prevents many unresolved symbol errors on arm-none-eabi. This happens often in C++ programs even without any threading. libgcc: 2020-11-02 Bernd Edlinger <bernd.edlin...@hotmail.de> * config.host: Use t-eabi for arm-none-eabi. * config/arm/t-eabi: New. * config/arm/eabi-sync.c: New. --- libgcc/config.host | 2 +- libgcc/config/arm/eabi-sync.c | 39 +++++++++++++++++++++++++++++++++++++++ libgcc/config/arm/t-eabi | 1 + 3 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 libgcc/config/arm/eabi-sync.c create mode 100644 libgcc/config/arm/t-eabi diff --git a/libgcc/config.host b/libgcc/config.host index fd8e55e..e25abf4 100644 --- a/libgcc/config.host +++ b/libgcc/config.host @@ -495,7 +495,7 @@ arm*-*-eabi* | arm*-*-symbianelf* | arm*-*-rtems*) tm_file="$tm_file arm/bpabi-lib.h" case ${host} in arm*-*-eabi* | arm*-*-rtems*) - tmake_file="${tmake_file} arm/t-bpabi t-crtfm" + tmake_file="${tmake_file} arm/t-bpabi t-crtfm arm/t-eabi" extra_parts="crtbegin.o crtend.o crti.o crtn.o" ;; arm*-*-symbianelf*) diff --git a/libgcc/config/arm/eabi-sync.c b/libgcc/config/arm/eabi-sync.c new file mode 100644 index 0000000..bffdd4a --- /dev/null +++ b/libgcc/config/arm/eabi-sync.c @@ -0,0 +1,39 @@ +/* Copyright (C) 2020 Free Software Foundation, Inc. + +This file is part of GCC. + +GCC 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, or (at your option) any later +version. + +GCC 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +<http://www.gnu.org/licenses/>. */ + +void __attribute__ ((weak)) +__sync_synchronize (void) +{ +#if defined (__ARM_ARCH_6__) || defined (__ARM_ARCH_6J__) \ + || defined (__ARM_ARCH_6K__) || defined (__ARM_ARCH_6T2__) \ + || defined (__ARM_ARCH_6Z__) || defined (__ARM_ARCH_6ZK__) \ + || defined (__ARM_ARCH_7__) || defined (__ARM_ARCH_7A__) +#if defined (__ARM_ARCH_7__) || defined (__ARM_ARCH_7A__) + __asm __volatile ("dmb" : : : "memory"); +#else + __asm __volatile ("mcr p15, 0, r0, c7, c10, 5" : : : "memory"); +#endif +#else + __asm __volatile ("nop" : : : "memory"); +#endif +} diff --git a/libgcc/config/arm/t-eabi b/libgcc/config/arm/t-eabi new file mode 100644 index 0000000..556032f --- /dev/null +++ b/libgcc/config/arm/t-eabi @@ -0,0 +1 @@ +LIB2ADD_ST += $(srcdir)/config/arm/eabi-sync.c -- 1.9.1