Author: afaerber Date: Sun Nov 28 12:40:42 2010 New Revision: 976 URL: http://tracker.coreboot.org/trac/openbios/changeset/976
Log: ppc: Create function descriptors for global functions on ppc64
This should also fix linker errors observed by Blue.
v2: * __divide_error is called from C code, too. Spotted by Blue.
Cc: Blue Swirl blauwirbel@gmail.com Cc: Alexander Graf agraf@suse.de Signed-off-by: Andreas Färber andreas.faerber@web.de
Modified: trunk/openbios-devel/arch/ppc/qemu/start.S trunk/openbios-devel/include/arch/ppc/asmdefs.h
Modified: trunk/openbios-devel/arch/ppc/qemu/start.S ============================================================================== --- trunk/openbios-devel/arch/ppc/qemu/start.S Sat Nov 27 23:37:46 2010 (r975) +++ trunk/openbios-devel/arch/ppc/qemu/start.S Sun Nov 28 12:40:42 2010 (r976) @@ -285,8 +285,7 @@ exception_return: EXCEPTION_EPILOGUE
- .globl __divide_error -__divide_error: +_GLOBAL(__divide_error): trap_error: mflr r3 b BRANCH_LABEL(unexpected_excep) @@ -473,7 +472,7 @@ .long 0 .previous /* void call_elf( arg1, arg2, entry ) */ -GLOBL(call_elf): +_GLOBAL(call_elf): mflr r0 stwu r1,-16(r1) stw r0,20(r1) @@ -633,7 +632,7 @@ #define LG_CACHE_LINE_SIZE 5
/* flush_icache_range( unsigned long start, unsigned long stop) */ -GLOBL(flush_icache_range): +_GLOBAL(flush_icache_range): li r5,CACHE_LINE_SIZE-1 andc r3,r3,r5 subf r4,r3,r4
Modified: trunk/openbios-devel/include/arch/ppc/asmdefs.h ============================================================================== --- trunk/openbios-devel/include/arch/ppc/asmdefs.h Sat Nov 27 23:37:46 2010 (r975) +++ trunk/openbios-devel/include/arch/ppc/asmdefs.h Sun Nov 28 12:40:42 2010 (r976) @@ -118,6 +118,24 @@ #define EXTERN( name ) _##name #endif
+#if defined(__powerpc64__) && !defined(__darwin__) +#define _GLOBAL(name) \ + .align 2 ; \ + .section ".opd", "aw" ; \ + .globl name ; \ + .globl .##name ; \ + name: \ + .quad .##name ; \ + .quad .TOC.@tocbase ; \ + .quad 0 ; \ + .previous ; \ + .type .##name, @function ; \ + .##name +#else +#define _GLOBAL(name) \ + GLOBL(name) +#endif + #define BIT(n) (1<<(31-(n)))
#endif /* _H_ASMDEFS */