Keil™, An ARM® Company

RealView Compiler Reference Guide

Technical Support

On-Line Manuals

RealView Compiler Reference Guide

Preface Introduction Compiler Command-line Options Language Extensions Compiler-specific Features Keywords and operators __align __alignof__ __ALIGNOF__ __asm __forceinline __global_reg __inline __int64 __INTADDR__ __irq __packed __pure __smc __softfp __svc __svc_indirect __svc_indirect_r7 __value_in_regs __weak __writeonly __declspec attributes __declspec(dllexport) __declspec(dllimport) __declspec(noinline) __declspec(noreturn) __declspec(nothrow) __declspec(notshared) __declspec(thread) Function attributes __attribute__((alias)) __attribute__((always_inline)) __attribute__((const)) __attribute__((deprecated)) __attribute__((malloc)) __attribute__((noinline)) __attribute__((no_instrument_function)) __attribute__((nomerge)) __attribute__((nonnull)) __attribute__((noreturn)) __attribute__((notailcall)) __attribute__((pure)) __attribute__((section("name"))) __attribute__((unused)) __attribute__((used)) __attribute__((visibility("visibility_type"))) __attribute__((weak)) Type attributes __attribute__((bitband)) __attribute__((aligned)) __attribute((packed)) __attribute__((transparent_union)) Variable attributes __attribute__((alias)) __attribute__((at(address))) __attribute__((aligned)) __attribute__((deprecated)) __attribute__((packed)) __attribute__((section("name"))) __attribute__((transparent_union)) __attribute__((unused)) __attribute__((used)) __attribute__((visibility("visibility_type"))) __attribute__((weak)) __attribute__((zero_init)) Pragmas #pragma anon_unions, #pragma no_anon_unions #pragma arm #pragma arm section [section_sort_list] #pragma diag_default tag[,tag,...] #pragma diag_error tag[,tag,...] #pragma diag_remark tag[,tag,...] #pragma diag_suppress tag[,tag,...] #pragma diag_warning tag[, tag, ...] #pragma exceptions_unwind, #pragma no_exceptions_u #pragma hdrstop #pragma import symbol_name #pragma import(__use_full_stdio) #pragma inline, #pragma no_inline #pragma no_pch #pragma Onum #pragma once #pragma Ospace #pragma Otime #pragma pack(n) #pragma pop #pragma push #pragma softfp_linkage, #pragma no_softfp_linkage #pragma unroll [(n)] #pragma unroll_completely #pragma thumb Instruction intrinsics __breakpoint __cdp __clrex __clz __current_pc __current_sp __disable_fiq __disable_irq __enable_fiq __enable_irq __fabs __fabsf __force_stores __ldrex __ldrexd __ldrt __memory_changed __nop __pld __pli __qadd __qdbl __qsub __rbit __rev __return_address __ror __schedule_barrier __sev __sqrt __sqrtf __ssat __strex __strexd __strt __swp __usat __wfe __wfi __yield ARMv6 SIMD intrinsics ETSI basic operations C55x intrinsics Named register variables VFP status intrinsic __vfp_status GNU builtin functions Nonstandard functions C99 functions C99 functions in the C90 reserved namespace C94 functions C90 functions C99 floating-point functions Other builtin functions Compiler predefines Predefined macros Function names C and C++ Implementation Details Via File Syntax Standard C Implementation Definition Standard C++ Implementation Definition C and C++ Compiler Implementation Limits

__attribute__((at(address)))

4.5.2. __attribute__((at(address)))

This variable attribute enables you to specify the absolute address of a variable.

The variable is placed in its own section, and the section containing the variable is given an appropriate type by the compiler:

  • Read-only variables are placed in a section with type RO.

  • Initialized read-write variables are placed in a section with type RW.

    In particular, variables explicitly initialized to zero are placed in RW not ZI. Such variables are not candidates for the ZI-to-RW optimization of the compiler.

  • Uninitialized variables are placed in a section with type ZI.

Note

This variable attribute is not supported by GNU compilers.

Syntax

__attribute__((at(address)))

Where:

address

is the desired address of the variable.

Restrictions

The linker is not always able to place sections produced by the at variable attribute.

Errors

The linker gives an error message if it is not possible to place a section at a specified address.

Example

const int x1 __attribute__((at(0x10000))) = 10; /* RO */
int x2 __attribute__((at(0x12000))) = 10;       /* RW */
int x3 __attribute__((at(0x14000))) = 0;        /* RW, not ZI */
int x4 __attribute__((at(0x16000)));            /* ZI */
Copyright © 2007, 2008 ARM Limited. All rights reserved.ARM DUI 0376B
Non-ConfidentialUnrestricted Access