This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH v2 1/2] sim/common: convert sim-arange to use sim-inline


* Stafford Horne <shorne@gmail.com> [2019-03-17 06:40:17 +0900]:

> This fixes a TODO item and also fixes an error which we get when
> building with no optimizations (-O0) in at least gcc 8.2.1.
> 
> Tested with sims that use cgen code lm32, or1k, cris, m32r and inlining
> is working corretly.
> 
> Reference Error:
> 
> gcc -DHAVE_CONFIG_H -DWITH_DEFAULT_MODEL='"or1200"' -DWITH_ALIGNMENT=STRICT_ALIGNMENT \
>  -DWITH_TARGET_WORD_BITSIZE=32 -DWITH_TARGET_WORD_MSB=31 -DWITH_TARGET_ADDRESS_BITSIZE=32 \
>  -DWITH_TARGET_BYTE_ORDER=BFD_ENDIAN_BIG   -DDEFAULT_INLINE=0  -DWITH_SCACHE=16384 \
>  -I. -I../../../binutils-gdb/sim/or1k -I../common -I../../../binutils-gdb/sim/or1k/../common \
>  -I../../include -I../../../binutils-gdb/sim/or1k/../../include -I../../bfd \
>  -I../../../binutils-gdb/sim/or1k/../../bfd -I../../opcodes -I../../../binutils-gdb/sim/or1k/../../opcodes \
>  -g -o run nrun.o libsim.a ../../bfd/libbfd.a ../../opcodes/libopcodes.a  ../../libiberty/libiberty.a \
>  -ldl  -lz -lm
> 
> /usr/bin/ld: libsim.a(mloop.o): in function `extract':
> /home/shorne/work/openrisc/gdb-musl/sim/or1k/mloop.c:82: undefined reference to `sim_addr_range_hit_p'
> /usr/bin/ld: /home/shorne/work/openrisc/gdb-musl/sim/or1k/mloop.c:83: undefined reference to `sim_addr_range_hit_p'
> collect2: error: ld returned 1 exit status
> make[3]: *** [Makefile:305: run] Error 1
> 
> sim/common/ChangeLog:
> 
> 	* Make-common.in (sim-arange_h): Remove sim-arange.c
> 	* sim-arange.c: Remove SIM_ARANGE_C.
> 	Add ifdef for _SIM_ARANGE_C_.
> 	Include "sim-arange.h".
> 	Remove include for unused "sim-assert.h".
> 	Remove DEFINE_INLINE_P.  Remove DEFINE_NON_INLINE_P.
> 	(sim_addr_range_add): Declare as INLINE_SIM_ARANGE.
> 	(sim_addr_range_delete): Declare as INLINE_SIM_ARANGE.
> 	(sim_addr_range_hit_p): Change from SIM_ARANGE_INLINE to
> 	INLINE_SIM_ARANGE.
> 	* sim-arange.h (sim_addr_range_add): Declare as
> 	INLINE_SIM_ARANGE.
> 	(sim_addr_range_delete): Declare as INLINE_SIM_ARANGE.
> 	(sim_addr_range_hit_p) Declare as INLINE_SIM_ARANGE.
> 	Remove definition of SIM_ARANGE_INLINE.
> 	Remove [HAVE_INLINE].
> 	Wrap include "sim-arange.c" in H_REVEALS_MODULE_P.
> 	* sim-base.h: Include "sim-arange.h"
> 	* sim-basics.h: Remove include of "sim-arange.h"
> 	* sim-inline.c: Include "sim-arange.c"
> 	* sim-inline.h: Define INLINE_SIM_ARANGE.
> 	Define SIM_ARANGE_INLINE.  Define EXTERN_SIM_ARANGE_P.
> 	Define STATIC_INLINE_SIM_ARANGE.  Define STATIC_SIM_ARANGE.

This looks good thanks.

Andrew


> ---
>  sim/common/Make-common.in |  3 +--
>  sim/common/sim-arange.c   | 21 ++++++++++-----------
>  sim/common/sim-arange.h   | 30 +++++++++---------------------
>  sim/common/sim-base.h     |  1 +
>  sim/common/sim-basics.h   |  1 -
>  sim/common/sim-inline.c   |  5 ++++-
>  sim/common/sim-inline.h   | 32 ++++++++++++++++++++++++++++++++
>  7 files changed, 57 insertions(+), 36 deletions(-)
> 
> diff --git a/sim/common/Make-common.in b/sim/common/Make-common.in
> index 1a3bcc9417..5d8ac910af 100644
> --- a/sim/common/Make-common.in
> +++ b/sim/common/Make-common.in
> @@ -319,8 +319,7 @@ SIM_MAIN_DEPS = \
>  	$(sim_main_headers)
>  
>  sim-alu_h = $(srccom)/sim-alu.h
> -sim-arange_h = $(srccom)/sim-arange.h \
> -		$(srccom)/sim-arange.c
> +sim-arange_h = $(srccom)/sim-arange.h
>  sim-assert_h = $(srccom)/sim-assert.h
>  sim-base_h = $(srccom)/sim-base.h \
>  		$(sim-module_h) \
> diff --git a/sim/common/sim-arange.c b/sim/common/sim-arange.c
> index b3488ab564..c75245b94b 100644
> --- a/sim/common/sim-arange.c
> +++ b/sim/common/sim-arange.c
> @@ -17,12 +17,12 @@ 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/>.  */
>  
> -/* Tell sim-arange.h it's us.  */
> -#define SIM_ARANGE_C
> +#ifndef _SIM_ARANGE_C_
> +#define _SIM_ARANGE_C_
>  
>  #include "libiberty.h"
>  #include "sim-basics.h"
> -#include "sim-assert.h"
> +#include "sim-arange.h"
>  
>  #ifdef HAVE_STDLIB_H
>  #include <stdlib.h>
> @@ -32,8 +32,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
>  #include <string.h>
>  #endif
>  
> -#ifdef SIM_ARANGE_C_INCLUDED
> -
>  /* Insert a range.  */
>  
>  static void
> @@ -251,7 +249,8 @@ build_search_tree (ADDR_RANGE *ar)
>    free (asrtab);
>  }
>  
> -void
> +INLINE_SIM_ARANGE\
> +(void)
>  sim_addr_range_add (ADDR_RANGE *ar, address_word start, address_word end)
>  {
>    frob_range (ar, start, end, 0);
> @@ -264,7 +263,8 @@ sim_addr_range_add (ADDR_RANGE *ar, address_word start, address_word end)
>    build_search_tree (ar);
>  }
>  
> -void
> +INLINE_SIM_ARANGE\
> +(void)
>  sim_addr_range_delete (ADDR_RANGE *ar, address_word start, address_word end)
>  {
>    frob_range (ar, start, end, 1);
> @@ -277,9 +277,8 @@ sim_addr_range_delete (ADDR_RANGE *ar, address_word start, address_word end)
>    build_search_tree (ar);
>  }
>  
> -#else /* SIM_ARANGE_C_INCLUDED */
> -
> -SIM_ARANGE_INLINE int
> +INLINE_SIM_ARANGE\
> +(int)
>  sim_addr_range_hit_p (ADDR_RANGE *ar, address_word addr)
>  {
>    ADDR_RANGE_TREE *t = ar->range_tree;
> @@ -296,4 +295,4 @@ sim_addr_range_hit_p (ADDR_RANGE *ar, address_word addr)
>    return 0;
>  }
>  
> -#endif /* SIM_ARANGE_C_INCLUDED */
> +#endif /* _SIM_ARANGE_C_ */
> diff --git a/sim/common/sim-arange.h b/sim/common/sim-arange.h
> index f2ac595390..529d1650c2 100644
> --- a/sim/common/sim-arange.h
> +++ b/sim/common/sim-arange.h
> @@ -51,36 +51,24 @@ typedef struct _addr_range {
>  } ADDR_RANGE;
>  
>  /* Add address range START,END to AR.  */
> -extern void sim_addr_range_add (ADDR_RANGE * /*ar*/,
> -				address_word /*start*/,
> -				address_word /*end*/);
> +INLINE_SIM_ARANGE (void) sim_addr_range_add (ADDR_RANGE * /*ar*/,
> +					     address_word /*start*/,
> +					     address_word /*end*/);
>  
>  /* Delete address range START,END from AR.  */
> -extern void sim_addr_range_delete (ADDR_RANGE * /*ar*/,
> -				   address_word /*start*/,
> -				   address_word /*end*/);
> -
> -/* TODO: This should get moved into sim-inline.h.  */
> -#ifdef HAVE_INLINE
> -#ifdef SIM_ARANGE_C
> -#define SIM_ARANGE_INLINE INLINE
> -#else
> -#define SIM_ARANGE_INLINE EXTERN_INLINE
> -#endif
> -#else
> -#define SIM_ARANGE_INLINE extern
> -#endif
> +INLINE_SIM_ARANGE (void) sim_addr_range_delete (ADDR_RANGE * /*ar*/,
> +						address_word /*start*/,
> +						address_word /*end*/);
>  
>  /* Return non-zero if ADDR is in range AR, traversing the entire tree.
>     If no range is specified, that is defined to mean "everything".  */
> -SIM_ARANGE_INLINE int
> -sim_addr_range_hit_p (ADDR_RANGE * /*ar*/, address_word /*addr*/);
> +INLINE_SIM_ARANGE (int) sim_addr_range_hit_p (ADDR_RANGE * /*ar*/,
> +					      address_word /*addr*/);
>  #define ADDR_RANGE_HIT_P(ar, addr) \
>    ((ar)->range_tree == NULL || sim_addr_range_hit_p ((ar), (addr)))
>  
> -#ifdef HAVE_INLINE
> +#if H_REVEALS_MODULE_P (SIM_ARANGE_INLINE)
>  #include "sim-arange.c"
>  #endif
> -#define SIM_ARANGE_C_INCLUDED
>  
>  #endif /* SIM_ARANGE_H */
> diff --git a/sim/common/sim-base.h b/sim/common/sim-base.h
> index 3123c07e2b..d07ff2168c 100644
> --- a/sim/common/sim-base.h
> +++ b/sim/common/sim-base.h
> @@ -82,6 +82,7 @@ typedef struct _sim_cpu sim_cpu;
>  
>  #include "sim-module.h"
>  
> +#include "sim-arange.h"
>  #include "sim-trace.h"
>  #include "sim-core.h"
>  #include "sim-events.h"
> diff --git a/sim/common/sim-basics.h b/sim/common/sim-basics.h
> index c796b057ce..5aa76db424 100644
> --- a/sim/common/sim-basics.h
> +++ b/sim/common/sim-basics.h
> @@ -144,7 +144,6 @@ typedef enum {
>  #include "sim-bits.h"
>  #include "sim-endian.h"
>  #include "sim-signal.h"
> -#include "sim-arange.h"
>  
>  #include "sim-utils.h"
>  
> diff --git a/sim/common/sim-inline.c b/sim/common/sim-inline.c
> index 9021e2a4a9..3a2af7917a 100644
> --- a/sim/common/sim-inline.c
> +++ b/sim/common/sim-inline.c
> @@ -29,6 +29,10 @@
>  #include "sim-inline.h"
>  #include "sim-main.h"
>  
> +#if C_REVEALS_MODULE_P (SIM_ARANGE_INLINE)
> +#include "sim-arange.c"
> +#endif
> +
>  
>  #if C_REVEALS_MODULE_P (SIM_BITS_INLINE)
>  #include "sim-bits.c"
> @@ -64,7 +68,6 @@
>  #include "sim-main.c"
>  #endif
>  
> -
>  #if C_REVEALS_MODULE_P (ENGINE_INLINE)
>  /* #include "engine.c" - handled by generator */
>  #endif
> diff --git a/sim/common/sim-inline.h b/sim/common/sim-inline.h
> index 11c58b9622..87dfbb5dc4 100644
> --- a/sim/common/sim-inline.h
> +++ b/sim/common/sim-inline.h
> @@ -348,6 +348,38 @@
>  
>  
>  
> +
> +/* sim_arange */
> +
> +#if !defined (SIM_ARANGE_INLINE) && (DEFAULT_INLINE)
> +# define SIM_ARANGE_INLINE (ALL_H_INLINE)
> +#endif
> +
> +#if ((H_REVEALS_MODULE_P (SIM_ARANGE_INLINE) || defined (SIM_INLINE_C)) \
> +     && !defined (SIM_ARANGE_C) \
> +     && (REVEAL_MODULE_P (SIM_ARANGE_INLINE)))
> +# if (SIM_ARANGE_INLINE & INLINE_GLOBALS)
> +#  define INLINE_SIM_ARANGE(TYPE) static INLINE TYPE UNUSED
> +#  define EXTERN_SIM_ARANGE_P 0
> +# else
> +#  define INLINE_SIM_ARANGE(TYPE) static TYPE UNUSED
> +#  define EXTERN_SIM_ARANGE_P 0
> +# endif
> +#else
> +# define INLINE_SIM_ARANGE(TYPE) TYPE
> +# define EXTERN_SIM_ARANGE_P 1
> +#endif
> +
> +#if (SIM_ARANGE_INLINE & INLINE_LOCALS)
> +# define STATIC_INLINE_SIM_ARANGE(TYPE) static INLINE TYPE
> +#else
> +# define STATIC_INLINE_SIM_ARANGE(TYPE) static TYPE
> +#endif
> +
> +#define STATIC_SIM_ARANGE(TYPE) static TYPE
> +
> +
> +
>  /* *****
>     sim-bits and sim-endian are treated differently from the rest
>     of the modules below.  Their default value is ALL_H_INLINE.
> -- 
> 2.19.1
> 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]