⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 profile.h

📁 Newlib 嵌入式 C库 标准实现代码
💻 H
字号:
/* profile.h   Copyright (C) 2002 by  Red Hat, Incorporated. All rights reserved.    Permission to use, copy, modify, and distribute this software   is freely granted, provided that this notice is preserved.  */#ifndef __XSCALE_PROFILE_H__#define __XSCALE_PROFILE_H__/* FIXME:   We need to create a string version of the CPP predefined   __USER_LABEL_PREFIX__ macro.  Ideally we would like to   so do something like:     #if  __USER_LABEL_PREFIX__ == _   but this fails for arm-elf targets because although   __USER_LABEL__PREFIX__ is defined, it is not defined to   a specific value (even 0) and so the above test fails   with:         operator '==' has no left operand  Instead we have to test the CPP predefined __ELF__ and  rely upon the *assumption* that ELF targets will not use  an underscore prefix and that COFF targets will.  */#ifdef __ELF__#define FOO ""#else#define FOO "_"#endif#define _MCOUNT_DECL(frompc, selfpc) \void __attribute__ ((no_instrument_function)) \mcount_internal (frompc, selfpc)/* mcount_internal expects two arguments   r0 frompc (return address for function that call function that calls mcount)   r1 selfpc (return address for function that called mcount)   The frompc is extracted from the stack frames. If the code does not   generate stack frames, then mcount cannot extract this   information. Thus, the -fomit-frame-pointer optimization cannot be   used if a call graph information is required.   Due to optimizations mcount doesn't set up a new fp. mcount has the fp   of the calling function.   r0 frompc is from the current frame   r1 selfpc can be obtained directly from lr.  */#ifdef __thumb__#define MCOUNT					\void __attribute__ ((naked))			\     __attribute__ ((no_instrument_function))	\mcount (void)					\{						\  __asm__("push {r0, r1, r2, r3, lr};"		\	  "add r0, r7, #0;"			\	  "beq 1f;"				\	  "sub r0, r0, #4;"			\	  "ldr r0, [r0];"			\	  "1: mov r1, lr;"			\	  "bl " FOO "mcount_internal ;"		\	  "pop {r0, r1, r2, r3, pc};"		\	);					\}#else#define MCOUNT					\void __attribute__ ((naked))			\     __attribute__ ((no_instrument_function))	\mcount (void)					\{						\  __asm__("stmdb sp!, {r0, r1, r2, r3, lr};"	\	  "movs r0, fp;"			\	  "ldrne r0, [r0, #-4];"		\	  "mov r1, lr;"				\	  "bl " FOO "mcount_internal ;" 	\          "ldmia sp!, {r0, r1, r2, r3, pc};"	\	);					\}#endif#define FUNCTION_ALIGNMENT 2#endif /* !__XSCALE_PROFILE_H__ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -