This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Compiler/TMS570LC4357: __delay_cycles(); results in unresolved reference compilation error

Part Number: TMS570LC4357

Tool/software: TI C/C++ Compiler

When updating the compiler in my project to v18.1.1.LTS, the call to the intrinsic __delay_cycles() results in an unresolved reference compilation error.

Changing the compiler back to v16.9.7.LTS and the project compiles fine. 

  • I am unable to reproduce this problem.  For the source file which contains the call to __delay_cycles, please send in a test case as described in the article How to Submit a Compiler Test Case.

    Thanks and regards,

    -George

  • Simply creating a "hello world" project and adding a call to __delay_cycles() showed the problem on my system.
    Also verified that a peer's development system showed the same problem.

    Preprocessed source file attached.

    CCS version: 7.3.0.00019
    TI Compiler: 18.1.1.LTS
    Processor:    TMS570LC43xx

    hello.pp.txt
    /*****************************************************************************/
    /* STDIO.H                                                                   */
    /*                                                                           */
    /* Copyright (c) 1993 Texas Instruments Incorporated                         */
    /* http://www.ti.com/                                                        */
    /*                                                                           */
    /*  Redistribution and  use in source  and binary forms, with  or without    */
    /*  modification,  are permitted provided  that the  following conditions    */
    /*  are met:                                                                 */
    /*                                                                           */
    /*     Redistributions  of source  code must  retain the  above copyright    */
    /*     notice, this list of conditions and the following disclaimer.         */
    /*                                                                           */
    /*     Redistributions in binary form  must reproduce the above copyright    */
    /*     notice, this  list of conditions  and the following  disclaimer in    */
    /*     the  documentation  and/or   other  materials  provided  with  the    */
    /*     distribution.                                                         */
    /*                                                                           */
    /*     Neither the  name of Texas Instruments Incorporated  nor the names    */
    /*     of its  contributors may  be used to  endorse or  promote products    */
    /*     derived  from   this  software  without   specific  prior  written    */
    /*     permission.                                                           */
    /*                                                                           */
    /*  THIS SOFTWARE  IS PROVIDED BY THE COPYRIGHT  HOLDERS AND CONTRIBUTORS    */
    /*  "AS IS"  AND ANY  EXPRESS OR IMPLIED  WARRANTIES, INCLUDING,  BUT NOT    */
    /*  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR    */
    /*  A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT    */
    /*  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,    */
    /*  SPECIAL,  EXEMPLARY,  OR CONSEQUENTIAL  DAMAGES  (INCLUDING, BUT  NOT    */
    /*  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,    */
    /*  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY    */
    /*  THEORY OF  LIABILITY, WHETHER IN CONTRACT, STRICT  LIABILITY, OR TORT    */
    /*  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE    */
    /*  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     */
    /*                                                                           */
    /*****************************************************************************/
    
    
    /*****************************************************************************/
    /* _ti_config.h                                                              */
    /*                                                                           */
    /* Copyright (c) 2017 Texas Instruments Incorporated                         */
    /* http://www.ti.com/                                                        */
    /*                                                                           */
    /*  Redistribution and  use in source  and binary forms, with  or without    */
    /*  modification,  are permitted provided  that the  following conditions    */
    /*  are met:                                                                 */
    /*                                                                           */
    /*     Redistributions  of source  code must  retain the  above copyright    */
    /*     notice, this list of conditions and the following disclaimer.         */
    /*                                                                           */
    /*     Redistributions in binary form  must reproduce the above copyright    */
    /*     notice, this  list of conditions  and the following  disclaimer in    */
    /*     the  documentation  and/or   other  materials  provided  with  the    */
    /*     distribution.                                                         */
    /*                                                                           */
    /*     Neither the  name of Texas Instruments Incorporated  nor the names    */
    /*     of its  contributors may  be used to  endorse or  promote products    */
    /*     derived  from   this  software  without   specific  prior  written    */
    /*     permission.                                                           */
    /*                                                                           */
    /*  THIS SOFTWARE  IS PROVIDED BY THE COPYRIGHT  HOLDERS AND CONTRIBUTORS    */
    /*  "AS IS"  AND ANY  EXPRESS OR IMPLIED  WARRANTIES, INCLUDING,  BUT NOT    */
    /*  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR    */
    /*  A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT    */
    /*  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,    */
    /*  SPECIAL,  EXEMPLARY,  OR CONSEQUENTIAL  DAMAGES  (INCLUDING, BUT  NOT    */
    /*  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,    */
    /*  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY    */
    /*  THEORY OF  LIABILITY, WHETHER IN CONTRACT, STRICT  LIABILITY, OR TORT    */
    /*  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE    */
    /*  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     */
    /*                                                                           */
    /*****************************************************************************/
    
    
    #pragma diag_push
    #pragma CHECK_MISRA("-19.4")
    #pragma CHECK_MISRA("-19.1")
    
    /* Common definitions */
    
    /* C */
     /* C89/C99 */
    
    
    
    
    
    /* _TI_NOEXCEPT_CPP14 is defined to noexcept only when compiling for C++14. It
       is intended to be used for functions like abort and atexit that are supposed
       to be declared noexcept only in C++14 mode. */
    
    /* Target-specific definitions */
    /*****************************************************************************/
    /* linkage.h                                                                 */
    /*                                                                           */
    /* Copyright (c) 1998 Texas Instruments Incorporated                         */
    /* http://www.ti.com/                                                        */
    /*                                                                           */
    /*  Redistribution and  use in source  and binary forms, with  or without    */
    /*  modification,  are permitted provided  that the  following conditions    */
    /*  are met:                                                                 */
    /*                                                                           */
    /*     Redistributions  of source  code must  retain the  above copyright    */
    /*     notice, this list of conditions and the following disclaimer.         */
    /*                                                                           */
    /*     Redistributions in binary form  must reproduce the above copyright    */
    /*     notice, this  list of conditions  and the following  disclaimer in    */
    /*     the  documentation  and/or   other  materials  provided  with  the    */
    /*     distribution.                                                         */
    /*                                                                           */
    /*     Neither the  name of Texas Instruments Incorporated  nor the names    */
    /*     of its  contributors may  be used to  endorse or  promote products    */
    /*     derived  from   this  software  without   specific  prior  written    */
    /*     permission.                                                           */
    /*                                                                           */
    /*  THIS SOFTWARE  IS PROVIDED BY THE COPYRIGHT  HOLDERS AND CONTRIBUTORS    */
    /*  "AS IS"  AND ANY  EXPRESS OR IMPLIED  WARRANTIES, INCLUDING,  BUT NOT    */
    /*  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR    */
    /*  A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT    */
    /*  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,    */
    /*  SPECIAL,  EXEMPLARY,  OR CONSEQUENTIAL  DAMAGES  (INCLUDING, BUT  NOT    */
    /*  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,    */
    /*  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY    */
    /*  THEORY OF  LIABILITY, WHETHER IN CONTRACT, STRICT  LIABILITY, OR TORT    */
    /*  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE    */
    /*  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     */
    /*                                                                           */
    /*****************************************************************************/
    
    
    #pragma diag_push
    #pragma CHECK_MISRA("-19.4") /* macros required for implementation */
    
    /* No modifiers are needed to access code or data */
    
    
    /*--------------------------------------------------------------------------*/
    /* Define _IDECL ==> how inline functions are declared                      */
    /*--------------------------------------------------------------------------*/
    
    #pragma diag_pop
    
    
    #pragma diag_pop
    
    /*****************************************************************************/
    /* stdarg.h                                                                  */
    /*                                                                           */
    /* Copyright (c) 1996 Texas Instruments Incorporated                         */
    /* http://www.ti.com/                                                        */
    /*                                                                           */
    /*  Redistribution and  use in source  and binary forms, with  or without    */
    /*  modification,  are permitted provided  that the  following conditions    */
    /*  are met:                                                                 */
    /*                                                                           */
    /*     Redistributions  of source  code must  retain the  above copyright    */
    /*     notice, this list of conditions and the following disclaimer.         */
    /*                                                                           */
    /*     Redistributions in binary form  must reproduce the above copyright    */
    /*     notice, this  list of conditions  and the following  disclaimer in    */
    /*     the  documentation  and/or   other  materials  provided  with  the    */
    /*     distribution.                                                         */
    /*                                                                           */
    /*     Neither the  name of Texas Instruments Incorporated  nor the names    */
    /*     of its  contributors may  be used to  endorse or  promote products    */
    /*     derived  from   this  software  without   specific  prior  written    */
    /*     permission.                                                           */
    /*                                                                           */
    /*  THIS SOFTWARE  IS PROVIDED BY THE COPYRIGHT  HOLDERS AND CONTRIBUTORS    */
    /*  "AS IS"  AND ANY  EXPRESS OR IMPLIED  WARRANTIES, INCLUDING,  BUT NOT    */
    /*  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR    */
    /*  A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT    */
    /*  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,    */
    /*  SPECIAL,  EXEMPLARY,  OR CONSEQUENTIAL  DAMAGES  (INCLUDING, BUT  NOT    */
    /*  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,    */
    /*  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY    */
    /*  THEORY OF  LIABILITY, WHETHER IN CONTRACT, STRICT  LIABILITY, OR TORT    */
    /*  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE    */
    /*  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     */
    /*                                                                           */
    /*****************************************************************************/
    
    
    #pragma diag_push
    #pragma CHECK_MISRA("-19.7") /* need function-like macros */
    #pragma CHECK_MISRA("-19.10") /* need types as macro arguments */
    #pragma CHECK_MISRA("-20.1") /* standard headers must define standard names */
    #pragma CHECK_MISRA("-20.2") /* standard headers must define standard names */
    
    /*-
     * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
     *
     * Copyright (c) 2002 Mike Barcroft <mike@FreeBSD.org>
     * All rights reserved.
     *
     * Redistribution and use in source and binary forms, with or without
     * modification, are permitted provided that the following conditions
     * are met:
     * 1. Redistributions of source code must retain the above copyright
     *    notice, this list of conditions and the following disclaimer.
     * 2. Redistributions in binary form must reproduce the above copyright
     *    notice, this list of conditions and the following disclaimer in the
     *    documentation and/or other materials provided with the distribution.
     *
     * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
     * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
     * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     * SUCH DAMAGE.
     *
     * $FreeBSD$
     */
    
    
    /*-
     * SPDX-License-Identifier: BSD-3-Clause
     *
     * Copyright (c) 1991, 1993
     *	The Regents of the University of California.  All rights reserved.
     *
     * This code is derived from software contributed to Berkeley by
     * Berkeley Software Design, Inc.
     *
     * Redistribution and use in source and binary forms, with or without
     * modification, are permitted provided that the following conditions
     * are met:
     * 1. Redistributions of source code must retain the above copyright
     *    notice, this list of conditions and the following disclaimer.
     * 2. Redistributions in binary form must reproduce the above copyright
     *    notice, this list of conditions and the following disclaimer in the
     *    documentation and/or other materials provided with the distribution.
     * 3. Neither the name of the University nor the names of its contributors
     *    may be used to endorse or promote products derived from this software
     *    without specific prior written permission.
     *
     * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
     * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
     * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     * SUCH DAMAGE.
     *
     *	@(#)cdefs.h	8.8 (Berkeley) 1/9/95
     * $FreeBSD$
     */
    
    
    #pragma diag_push
    #pragma CHECK_MISRA("none")
    
    /*
     * Testing against Clang-specific extensions.
     */
    
    
    /*
     * This code has been put in place to help reduce the addition of
     * compiler specific defines in FreeBSD code.  It helps to aid in
     * having a compiler-agnostic source tree.
     */
    
    
    
    
    
    
    
    /*
     * Macro to test if we're using a specific version of gcc or later.
     */
    
    /*
     * The __CONCAT macro is used to concatenate parts of symbol names, e.g.
     * with "#define OLD(foo) __CONCAT(old,foo)", OLD(foo) produces oldfoo.
     * The __CONCAT macro is a bit tricky to use if it must work in non-ANSI
     * mode -- there must be no spaces between its arguments, and for nested
     * __CONCAT's, all the __CONCAT's must be at the left.  __CONCAT can also
     * concatenate double-quoted strings produced by the __STRING macro, but
     * this only works with ANSI C.
     *
     * __XSTRING is like __STRING, but it expands any macros in its argument
     * first.  It is only available with ANSI C.
     */
    
    
    
    /*
     * Compiler-dependent macros to help declare dead (non-returning) and
     * pure (no side effects) functions, and unused variables.  They are
     * null except for versions of gcc that are known to support the features
     * properly (old versions of gcc-2 supported the dead and pure features
     * in a different (wrong) way).  If we do not provide an implementation
     * for a given compiler, let the compile fail if it is told to use
     * a feature that we cannot live without.
     */
    
    /*
     * TI ADD - check that __GNUC__ is defined before referencing it to avoid
     *          generating an error when __GNUC__ treated as zero warning is
     *          promoted to an error via -pdse195 option.
     */
    
    
    
    /*
     * Keywords added in C11.
     */
    
    
    
    
    /*
     * No native support for _Atomic(). Place object in structure to prevent
     * most forms of direct non-atomic access.
     */
    
    
    
    /*
     * XXX: Some compilers (Clang 3.3, GCC 4.7) falsely announce C++11 mode
     * without actually supporting the thread_local keyword. Don't check for
     * the presence of C++11 when defining _Thread_local.
     */
    
    
    /*
     * Emulation of C11 _Generic().  Unlike the previously defined C11
     * keywords, it is not possible to implement this using exactly the same
     * syntax.  Therefore implement something similar under the name
     * __generic().  Unlike _Generic(), this macro can only distinguish
     * between a single type, so it requires nested invocations to
     * distinguish multiple cases.
     */
    
    
    /*
     * C99 Static array indices in function parameter declarations.  Syntax such as:
     * void bar(int myArray[static 10]);
     * is allowed in C99 but not in C++.  Define __min_size appropriately so
     * headers using it can be compiled in either language.  Use like this:
     * void bar(int myArray[__min_size(10)]);
     */
    
    
    
    
    
    
    
    /* XXX: should use `#if __STDC_VERSION__ < 199901'. */
    
    
    /* C++11 exposes a load of C99 stuff */
    
    /*
     * GCC 2.95 provides `__restrict' as an extension to C90 to support the
     * C99-specific `restrict' type qualifier.  We happen to use `__restrict' as
     * a way to define the `restrict' type qualifier without disturbing older
     * software that is unaware of C99 keywords.
     * The TI compiler supports __restrict in all compilation modes.
     */
    
    /*
     * GNU C version 2.96 adds explicit branch prediction so that
     * the CPU back-end can hint the processor and also so that
     * code blocks can be reordered such that the predicted path
     * sees a more linear flow, thus improving cache behavior, etc.
     *
     * The following two macros provide us with a way to utilize this
     * compiler feature.  Use __predict_true() if you expect the expression
     * to evaluate to true, and __predict_false() if you expect the
     * expression to evaluate to false.
     *
     * A few notes about usage:
     *
     *	* Generally, __predict_false() error condition checks (unless
     *	  you have some _strong_ reason to do otherwise, in which case
     *	  document it), and/or __predict_true() `no-error' condition
     *	  checks, assuming you want to optimize for the no-error case.
     *
     *	* Other than that, if you don't know the likelihood of a test
     *	  succeeding from empirical or other `hard' evidence, don't
     *	  make predictions.
     *
     *	* These are meant to be used in places that are run `a lot'.
     *	  It is wasteful to make predictions in code that is run
     *	  seldomly (e.g. at subsystem initialization time) as the
     *	  basic block reordering that this affects can often generate
     *	  larger code.
     */
    
    
    /*
     * We define this here since <stddef.h>, <sys/queue.h>, and <sys/types.h>
     * require it.
     */
    
    /*
     * Given the pointer x to the member m of the struct s, return
     * a pointer to the containing structure.  When using GCC, we first
     * assign pointer x to a local variable, to check that its type is
     * compatible with member m.
     */
    
    /*
     * Compiler-dependent macros to declare that functions take printf-like
     * or scanf-like arguments.  They are null except for versions of gcc
     * that are known to support the features properly (old versions of gcc-2
     * didn't permit keeping the keywords out of the application namespace).
     */
    
    /* Compiler-dependent macros that rely on FreeBSD-specific extensions. */
    
    
    
    /*
     * The following definition might not work well if used in header files,
     * but it should be better than nothing.  If you want a "do nothing"
     * version, then it should generate some harmless declaration, such as:
     *    #define	__IDSTRING(name,string)	struct __hack
     */
    
    
    /*
     * Embed the rcs id of a source file in the resulting library.  Note that in
     * more recent ELF binutils, we use .ident allowing the ID to be stripped.
     * Usage:
     *	__FBSDID("$FreeBSD$");
     */
    
    
    
    
    
    
    
    
    /*-
     * The following definitions are an extension of the behavior originally
     * implemented in <sys/_posix.h>, but with a different level of granularity.
     * POSIX.1 requires that the macros we test be defined before any standard
     * header file is included.
     *
     * Here's a quick run-down of the versions:
     *  defined(_POSIX_SOURCE)		1003.1-1988
     *  _POSIX_C_SOURCE == 1		1003.1-1990
     *  _POSIX_C_SOURCE == 2		1003.2-1992 C Language Binding Option
     *  _POSIX_C_SOURCE == 199309		1003.1b-1993
     *  _POSIX_C_SOURCE == 199506		1003.1c-1995, 1003.1i-1995,
     *					and the omnibus ISO/IEC 9945-1: 1996
     *  _POSIX_C_SOURCE == 200112		1003.1-2001
     *  _POSIX_C_SOURCE == 200809		1003.1-2008
     *
     * In addition, the X/Open Portability Guide, which is now the Single UNIX
     * Specification, defines a feature-test macro which indicates the version of
     * that specification, and which subsumes _POSIX_C_SOURCE.
     *
     * Our macros begin with two underscores to avoid namespace screwage.
     */
    
    /* Deal with IEEE Std. 1003.1-1990, in which _POSIX_C_SOURCE == 1. */
    
    /* Deal with IEEE Std. 1003.2-1992, in which _POSIX_C_SOURCE == 2. */
    
    /* Deal with various X/Open Portability Guides and Single UNIX Spec. */
    
    /*
     * Deal with all versions of POSIX.  The ordering relative to the tests above is
     * important.
     */
    /*-
     * Deal with _ANSI_SOURCE:
     * If it is defined, and no other compilation environment is explicitly
     * requested, then define our internal feature-test macros to zero.  This
     * makes no difference to the preprocessor (undefined symbols in preprocessing
     * expressions are defined to have value zero), but makes it more convenient for
     * a test program to print out the values.
     *
     * If a program mistakenly defines _ANSI_SOURCE and some other macro such as
     * _POSIX_C_SOURCE, we will assume that it wants the broader compilation
     * environment (and in fact we will never get here).
     */
    
    /* User override __EXT1_VISIBLE */
    
    
    /*
     * Old versions of GCC use non-standard ARM arch symbols; acle-compat.h
     * translates them to __ARM_ARCH and the modern feature symbols defined by ARM.
     */
    
    /*
     * Nullability qualifiers: currently only supported by Clang.
     */
    
    /*
     * Type Safety Checking
     *
     * Clang provides additional attributes to enable checking type safety
     * properties that cannot be enforced by the C type system. 
     */
    
    
    /*
     * Lock annotations.
     *
     * Clang provides support for doing basic thread-safety tests at
     * compile-time, by marking which locks will/should be held when
     * entering/leaving a functions.
     *
     * Furthermore, it is also possible to annotate variables and structure
     * members to enforce that they are only accessed when certain locks are
     * held.
     */
    
    
    /* Structure implements a lock. */
    
    /* Function acquires an exclusive or shared lock. */
    
    /* Function attempts to acquire an exclusive or shared lock. */
    
    /* Function releases a lock. */
    
    /* Function asserts that an exclusive or shared lock is held. */
    
    /* Function requires that an exclusive or shared lock is or is not held. */
    
    /* Function should not be analyzed. */
    
    /* Guard variables and structure members by lock. */
    
    #pragma diag_pop
    
    /*-
     * SPDX-License-Identifier: BSD-4-Clause
     *
     * Copyright (c) 2002 Mike Barcroft <mike@FreeBSD.org>
     * Copyright (c) 1990, 1993
     *	The Regents of the University of California.  All rights reserved.
     *
     * Redistribution and use in source and binary forms, with or without
     * modification, are permitted provided that the following conditions
     * are met:
     * 1. Redistributions of source code must retain the above copyright
     *    notice, this list of conditions and the following disclaimer.
     * 2. Redistributions in binary form must reproduce the above copyright
     *    notice, this list of conditions and the following disclaimer in the
     *    documentation and/or other materials provided with the distribution.
     * 3. All advertising materials mentioning features or use of this software
     *    must display the following acknowledgement:
     *	This product includes software developed by the University of
     *	California, Berkeley and its contributors.
     * 4. Neither the name of the University nor the names of its contributors
     *    may be used to endorse or promote products derived from this software
     *    without specific prior written permission.
     *
     * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
     * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
     * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     * SUCH DAMAGE.
     *
     *	From: @(#)ansi.h	8.2 (Berkeley) 1/4/94
     *	From: @(#)types.h	8.3 (Berkeley) 1/5/94
     * $FreeBSD$
     */
    
    
    
    #pragma diag_push
    /* This file is required to use base types */
    #pragma CHECK_MISRA("-6.3")
    
    /*
     * Basic types upon which most other types are built.
     */
    typedef	signed char		__int8_t;
    typedef	unsigned char		__uint8_t;
    typedef	short			__int16_t;
    typedef	unsigned short		__uint16_t;
    typedef	int			__int32_t;
    typedef	unsigned int		__uint32_t;
    
    /* LONGLONG */
    typedef	long long		__int64_t;
    
    /* LONGLONG */
    typedef	unsigned long long	__uint64_t;
    
    /*
     * Standard type definitions.
     */
    typedef	__uint32_t	__clock_t;		/* clock()... */
    typedef	__int32_t	__critical_t;
    typedef	double		__double_t;
    typedef	float		__float_t;
    typedef	__int32_t	__intfptr_t;
    typedef	__int64_t	__intmax_t;
    typedef	__int32_t	__intptr_t;
    typedef	__int32_t	__int_fast8_t;
    typedef	__int32_t	__int_fast16_t;
    typedef	__int32_t	__int_fast32_t;
    typedef	__int64_t	__int_fast64_t;
    typedef	__int8_t	__int_least8_t;
    typedef	__int16_t	__int_least16_t;
    typedef	__int32_t	__int_least32_t;
    typedef	__int64_t	__int_least64_t;
    typedef	__int32_t	__ptrdiff_t;		/* ptr1 - ptr2 */
    typedef	__int32_t	__register_t;
    typedef	__int32_t	__segsz_t;		/* segment size (in pages) */
    typedef	__uint32_t	__size_t;		/* sizeof() */
    typedef	__int32_t	__ssize_t;		/* byte count or error */
    typedef __uint32_t      __time_t;
    typedef	__uint32_t	__uintfptr_t;
    typedef	__uint64_t	__uintmax_t;
    typedef	__uint32_t	__uintptr_t;
    typedef	__uint32_t	__uint_fast8_t;
    typedef	__uint32_t	__uint_fast16_t;
    typedef	__uint32_t	__uint_fast32_t;
    typedef	__uint64_t	__uint_fast64_t;
    typedef	__uint8_t	__uint_least8_t;
    typedef	__uint16_t	__uint_least16_t;
    typedef	__uint32_t	__uint_least32_t;
    typedef	__uint64_t	__uint_least64_t;
    typedef	__uint32_t	__u_register_t;
    typedef	__uint32_t	__vm_offset_t;
    typedef	__uint32_t	__vm_paddr_t;
    typedef	__uint32_t	__vm_size_t;
    
    typedef	unsigned short ___wchar_t;
    
    
    /*
     * Unusual type definitions.
     */
    typedef struct __va_list_t {
        void * __ap;
    } __va_list;
    
    #pragma diag_pop
    
    
    #pragma diag_push
    /* This file is required to use types without size and signedness */
    #pragma CHECK_MISRA("-6.3")
    
    /*
     * Standard type definitions.
     */
    typedef	__int32_t	__blksize_t;	/* file block size */
    typedef	__int64_t	__blkcnt_t;	/* file block count */
    typedef	__int32_t	__clockid_t;	/* clock_gettime()... */
    typedef	__uint32_t	__fflags_t;	/* file flags */
    typedef	__uint64_t	__fsblkcnt_t;
    typedef	__uint64_t	__fsfilcnt_t;
    typedef	__uint32_t	__gid_t;
    typedef	__int64_t	__id_t;		/* can hold a gid_t, pid_t, or uid_t */
    typedef	__uint64_t	__ino_t;	/* inode number */
    typedef	long		__key_t;	/* IPC key (for Sys V IPC) */
    typedef	__int32_t	__lwpid_t;	/* Thread ID (a.k.a. LWP) */
    typedef	__uint16_t	__mode_t;	/* permissions */
    typedef	int		__accmode_t;	/* access permissions */
    typedef	int		__nl_item;
    typedef	__uint64_t	__nlink_t;	/* link count */
    typedef	__int64_t	__off_t;	/* file offset */
    typedef	__int64_t	__off64_t;	/* file offset (alias) */
    typedef	__int32_t	__pid_t;	/* process [group] */
    typedef	__int64_t	__rlim_t;	/* resource limit - intentionally */
    					/* signed, because of legacy code */
    					/* that uses -1 for RLIM_INFINITY */
    typedef	__uint8_t	__sa_family_t;
    typedef	__uint32_t	__socklen_t;
    typedef	long		__suseconds_t;	/* microseconds (signed) */
    typedef	struct __timer	*__timer_t;	/* timer_gettime()... */
    typedef	struct __mq	*__mqd_t;	/* mq_open()... */
    typedef	__uint32_t	__uid_t;
    typedef	unsigned int	__useconds_t;	/* microseconds (unsigned) */
    typedef	int		__cpuwhich_t;	/* which parameter for cpuset. */
    typedef	int		__cpulevel_t;	/* level parameter for cpuset. */
    typedef int		__cpusetid_t;	/* cpuset identifier. */
    
    /*
     * Unusual type definitions.
     */
    /*
     * rune_t is declared to be an ``int'' instead of the more natural
     * ``unsigned long'' or ``long''.  Two things are happening here.  It is not
     * unsigned so that EOF (-1) can be naturally assigned to it and used.  Also,
     * it looks like 10646 will be a 31 bit standard.  This means that if your
     * ints cannot hold 32 bits, you will be in trouble.  The reason an int was
     * chosen over a long is that the is*() and to*() routines take ints (says
     * ANSI C), but they use __ct_rune_t instead of int.
     *
     * NOTE: rune_t is not covered by ANSI nor other standards, and should not
     * be instantiated outside of lib/libc/locale.  Use wchar_t.  wint_t and
     * rune_t must be the same type.  Also, wint_t should be able to hold all
     * members of the largest character set plus one extra value (WEOF), and
     * must be at least 16 bits.
     */
    typedef	int		__ct_rune_t;	/* arg type for ctype funcs */
    typedef	__ct_rune_t	__rune_t;	/* rune_t (see above) */
    typedef	__ct_rune_t	__wint_t;	/* wint_t (see above) */
    
    /* Clang already provides these types as built-ins, but only in C++ mode. */
    typedef	__uint_least16_t __char16_t;
    typedef	__uint_least32_t __char32_t;
    /* In C++11, char16_t and char32_t are built-in types. */
    
    typedef struct {
    	long long __max_align1 __attribute__((__aligned__(__alignof__(long long))));
    	long double __max_align2 __attribute__((__aligned__(__alignof__(long double))));
    } __max_align_t;
    
    typedef	__uint64_t	__dev_t;	/* device number */
    
    typedef	__uint32_t	__fixpt_t;	/* fixed point number */
    
    /*
     * mbstate_t is an opaque object to keep conversion state during multibyte
     * stream conversions.
     */
    
    typedef int _Mbstatet;
    
    typedef _Mbstatet __mbstate_t;
    
    typedef __uintmax_t     __rman_res_t;
    
    /*
     * When the following macro is defined, the system uses 64-bit inode numbers.
     * Programs can use this to avoid including <sys/param.h>, with its associated
     * namespace pollution.
     */
    
    #pragma diag_pop
    
    
    typedef __va_list va_list;
    
    
    
    
    
    
    #pragma diag_pop
    
    
    
    /*---------------------------------------------------------------------------*/
    /* Attributes are only available in relaxed ANSI mode.                       */
    /*---------------------------------------------------------------------------*/
    
    
    /****************************************************************************/
    /* TYPES THAT ANSI REQUIRES TO BE DEFINED                                   */
    /****************************************************************************/
    typedef unsigned size_t;
    
    struct __sFILE {
          int fd;                    /* File descriptor */
          unsigned char* buf;        /* Pointer to start of buffer */
          unsigned char* pos;        /* Position in buffer */
          unsigned char* bufend;     /* Pointer to end of buffer */
          unsigned char* buff_stop;  /* Pointer to last read char in buffer */
          unsigned int   flags;      /* File status flags (see below) */
    };
    
    typedef struct __sFILE FILE;
    
    typedef long fpos_t;
    
    /****************************************************************************/
    /* DEVICE AND STREAM RELATED MACROS                                         */
    /****************************************************************************/
    /****************************************************************************/
    /* MACROS THAT DEFINE AND USE FILE STATUS FLAGS                             */
    /****************************************************************************/
    
    
    
    /****************************************************************************/
    /* MACROS THAT ANSI REQUIRES TO BE DEFINED                                  */
    /****************************************************************************/
    
    
    
    
    
    
    
    
    /******** END OF ANSI MACROS ************************************************/
    
    
    /****************************************************************************/
    /* DEVICE AND STREAM RELATED DATA STRUCTURES AND MACROS                     */
    /****************************************************************************/
    
    extern  FILE _ftable[10];
    extern  char __TI_tmpnams[10][16];
    
    /****************************************************************************/
    /*   FUNCTION DEFINITIONS  - ANSI                                           */
    /****************************************************************************/
    /****************************************************************************/
    /* OPERATIONS ON FILES                                                      */
    /****************************************************************************/
    extern  int     remove(const char *_file);
    extern  int     rename(const char *_old, const char *_new);
    extern  FILE   *tmpfile(void);
    extern  char   *tmpnam(char *_s);
    
    /****************************************************************************/
    /* FILE ACCESS FUNCTIONS                                                    */
    /****************************************************************************/
    extern  int     fclose(FILE * __restrict _fp);
    extern  FILE   *fopen(const char * __restrict _fname,
                                      const char * __restrict _mode);
    extern  FILE   *freopen(const char * __restrict _fname,
                                        const char * __restrict _mode,
    			            FILE * __restrict _fp);
    extern  void    setbuf(FILE * __restrict _fp,
                                       char * __restrict _buf);
    extern  int     setvbuf(FILE * __restrict _fp,
                                        char * __restrict _buf,
    			            int _type, size_t _size);
    extern  int     fflush(FILE *_fp);
    
    /****************************************************************************/
    /* FORMATTED INPUT/OUTPUT FUNCTIONS                                         */
    /****************************************************************************/
    extern  int fprintf(FILE * __restrict _fp,
                                    const char * __restrict _format, ...)
                   __attribute__((__format__ (__printf__, 2, 3)));
    extern  int fscanf(FILE * __restrict _fp,
                                   const char * __restrict _fmt, ...)
                   __attribute__((__format__ (__scanf__, 2, 3)));
    extern  int printf(const char * __restrict _format, ...)
                   __attribute__((__format__ (__printf__, 1, 2)));
    extern  int scanf(const char * __restrict _fmt, ...)
                   __attribute__((__format__ (__scanf__, 1, 2)));
    extern  int sprintf(char * __restrict _string,
                                    const char * __restrict _format, ...)
                   __attribute__((__format__ (__printf__, 2, 3)));
    extern  int snprintf(char * __restrict _string, size_t _n,
    				 const char * __restrict _format, ...)
                   __attribute__((__format__ (__printf__, 3, 4)));
    extern  int sscanf(const char * __restrict _str,
                                   const char * __restrict _fmt, ...)
                   __attribute__((__format__ (__scanf__, 2, 3)));
    extern  int vfprintf(FILE * __restrict _fp,
                                     const char * __restrict _format, va_list _ap)
                   __attribute__((__format__ (__printf__, 2, 0)));
    extern  int vfscanf(FILE * __restrict _fp,
                                    const char * __restrict _fmt, va_list _ap)
                   __attribute__((__format__ (__scanf__, 2, 0)));
    extern  int vprintf(const char * __restrict _format, va_list _ap)
                   __attribute__((__format__ (__printf__, 1, 0)));
    extern  int vscanf(const char * __restrict _format, va_list _ap)
                   __attribute__((__format__ (__scanf__, 1, 0)));
    extern  int vsprintf(char * __restrict _string,
                                     const char * __restrict _format, va_list _ap)
                   __attribute__((__format__ (__printf__, 2, 0)));
    extern  int vsnprintf(char * __restrict _string, size_t _n,
    				  const char * __restrict _format, va_list _ap)
                   __attribute__((__format__ (__printf__, 3, 0)));
    extern  int vsscanf(const char * __restrict _str,
                                    const char * __restrict _fmt, va_list _ap)
                   __attribute__((__format__ (__scanf__, 2, 0)));
    extern  int	asprintf(char **, const char *, ...)
                   __attribute__((__format__ (__printf__, 2, 3)));
    extern  int	vasprintf(char **, const char *, va_list)
                   __attribute__((__format__ (__printf__, 2, 0)));
    
    /****************************************************************************/
    /* CHARACTER INPUT/OUTPUT FUNCTIONS                                         */
    /****************************************************************************/
    extern  int     fgetc(FILE *_fp);
    extern  char   *fgets(char * __restrict _ptr, int _size,
    				  FILE * __restrict _fp);
    extern  int     fputc(int _c, FILE *_fp);
    extern  int     fputs(const char * __restrict _ptr,
                                      FILE * __restrict _fp);
    extern  int     getc(FILE *_p);
    extern  int     getchar(void);
    extern  char   *gets(char *_ptr);
    extern  int     putc(int _x, FILE *_fp);
    extern  int     putchar(int _x);
    extern  int     puts(const char *_ptr);
    extern  int     ungetc(int _c, FILE *_fp);
    
    /****************************************************************************/
    /* DIRECT INPUT/OUTPUT FUNCTIONS                                            */
    /****************************************************************************/
    extern  size_t  fread(void * __restrict _ptr,
                                      size_t _size, size_t _count,
    				  FILE * __restrict _fp);
    extern  size_t  fwrite(const void * __restrict _ptr,
                                       size_t _size, size_t _count,
                                       FILE * __restrict _fp);
    
    /****************************************************************************/
    /* FILE POSITIONING FUNCTIONS                                               */
    /****************************************************************************/
    extern  int     fgetpos(FILE * __restrict _fp,
                                        fpos_t * __restrict _pos);
    extern  int     fseek(FILE *_fp, long _offset,
    				  int _ptrname);
    extern  int     fsetpos(FILE * __restrict _fp,
                                        const fpos_t * __restrict _pos);
    extern  long    ftell(FILE *_fp);
    extern  void    rewind(FILE *_fp);
    
    /****************************************************************************/
    /* ERROR-HANDLING FUNCTIONS                                                 */
    /****************************************************************************/
    extern  void    clearerr(FILE *_fp);
    extern  int     feof(FILE *_fp);
    extern  int     ferror(FILE *_fp);
    extern  void    perror(const char *_s);
    
    
    
    
    
    
    /*----------------------------------------------------------------------------*/
    /* If sys/cdefs.h is available, go ahead and include it. xlocale.h assumes    */
    /* this file will have already included sys/cdefs.h.                          */
    /*----------------------------------------------------------------------------*/
    
    /*----------------------------------------------------------------------------*/
    /* Include xlocale/_stdio.h if xlocale.h has already been included. This is   */
    /* to conform with FreeBSD's xlocale implementation.                          */
    /*----------------------------------------------------------------------------*/
    
    
    
    /**
     * hello.c
     */
    int main(void)
    {
        // TI compile prefers a macro over a static const variable.
        __delay_cycles(30000000U);
    
    	printf("Hello World!\n");
    	
    	return 0;
    }
    

  • The compiler options matter here. That intrinsic is only defined for Cortex-M0, M3, M4, and R4. Are you specifying one of these with the --silicon_version option?
  • Thank you. I was aware of this limitation, but since the project using compiler v16.x was working fine and "all I did" was change the compiler. I did not however, go back to look at the limitations of the older compiler documentation w/rt to these intrinsic functions. I do know that ours is an R4 and when I looked at the existing project settings they are set to R5. When I changed it to "7R4", the program compiled and linked without error.
  • We're using the TMS570LC4357 MCU, which is an ARM Cortex-R5 processor.  I haven't found anything in the TI documentation which specifies it, but ARM's Technical Reference Manual specifies Cortex-R5s as implementing the ARMv7-R architecture.

    With the project we set up using the CCS wizard it has us compiling using the "-mv7R5" option to the compiler, but is not specifying any --silicon_version option. My understanding is that -mv is an alias to --silicon_version, and that there's no need to use both options.

    I assume that it would be unwise for us to specify 7R4 to either -mv or to --silicon_version.

    Table 5-3 ARM Intrinsic Support by Target specifies that __delay_cycles() is supported for ARM V7R (Cortex-R4).  It doesn't explicitly say anything about Cortex-R5 one way or another.  However, as above, I believe Cortex-R5 _is_ an ARM V7R.

     v16.9.6 and v16.9.7 both compile __delay_cycles() when -mv7R5 is specified.

    Is there a reason that v18.1.1 does not support __delay_cycles() for -mv7R5?

    --thx

  • 1138 said:
    Is there a reason that v18.1.1 does not support __delay_cycles() for -mv7R5?

    I don't know.  So, I filed CODEGEN-4692 in the SDOWP system.  It says not supporting __delay_cycles for Cortex-R5 is a bug.  If that is wrong, then this is one way to find out.  You are welcome to follow it with the SDOWP link below in my signature.

    Thanks and regards,

    -George

  • CODEGEN-4692 is currently listing a status of "Open" in SDOWP. Does this mean that this issue has not been either formally accepted or declined?

    --thx
  • Unfortunately, it is still in the just filed state.  I am looking into it.  I am confident I can get it moving.  I apologize for the delay.

    Thanks and regards,

    -George