[LinuxBIOS] initram / xip issue

Jordan Crouse jordan.crouse at amd.com
Mon Oct 8 22:01:37 CEST 2007


On 07/10/07 07:39 -0600, Jordan Crouse wrote:
> There has got to be a way that we can turn this into a general
> purpose macro to make it easy for developers to mark new functions
> as shared without understanding whats happening above

Like maybe this (avert your eyes, children!):

#if SHARED
#define FUNC(func, ret, args...) \
ret stage0##func(args)
#define EXTERN(func,ret,args...) \
ret (*func)(args) = stage0##func
#else
#define FUNC(func, ret, args...) \
ret func(args)
#define EXTERN(func,ret,args...)
#endif

/* Syntax:
 * func - function name
 * ret - return value
 * args - function arguments
 */

#define _SHARED(func,ret,args...) \
FUNC(func,ret,##args); \
EXTERN(func,ret,##args)

/* Example */

_SHARED(printk, int, char *, ...);

/* Resolves to:
   int printk(char *, ...); ; (when !SHARED)

   int stage0printk(char *, ...);
   int (*printk)(char *, ...) = stage0printk;
   (when SHARED)
*/

Jordan






More information about the coreboot mailing list