Changeset View
Changeset View
Standalone View
Standalone View
sys/powerpc/include/asm.h
Show First 20 Lines • Show All 102 Lines • ▼ Show 20 Lines | |||||
#if !defined(_CALL_ELF) || _CALL_ELF == 1 | #if !defined(_CALL_ELF) || _CALL_ELF == 1 | ||||
#define _ENTRY(name) \ | #define _ENTRY(name) \ | ||||
.section ".text"; \ | .section ".text"; \ | ||||
.p2align 2; \ | .p2align 2; \ | ||||
.globl name; \ | .globl name; \ | ||||
.section ".opd","aw"; \ | .section ".opd","aw"; \ | ||||
.p2align 3; \ | .p2align 3; \ | ||||
name: \ | name: \ | ||||
.cfi_startproc; \ | |||||
jrtc27: This is the descriptor; you need it after `DOT_LABEL(name)`. | |||||
cemAuthorUnsubmitted Done Inline ActionsThanks, will fix. cem: Thanks, will fix. | |||||
.quad DOT_LABEL(name),.TOC.@tocbase,0; \ | .quad DOT_LABEL(name),.TOC.@tocbase,0; \ | ||||
.previous; \ | .previous; \ | ||||
.p2align 4; \ | .p2align 4; \ | ||||
TYPE_ENTRY(name) \ | TYPE_ENTRY(name) \ | ||||
DOT_LABEL(name): | DOT_LABEL(name): | ||||
#define _NAKED_ENTRY(name) _ENTRY(name) | #define _NAKED_ENTRY(name) _ENTRY(name) | ||||
#else | #else | ||||
#define _ENTRY(name) \ | #define _ENTRY(name) \ | ||||
.text; \ | .text; \ | ||||
.p2align 4; \ | .p2align 4; \ | ||||
.globl name; \ | .globl name; \ | ||||
.type name,@function; \ | .type name,@function; \ | ||||
name: \ | name: \ | ||||
.cfi_startproc; \ | |||||
addis %r2, %r12, (.TOC.-name)@ha; \ | addis %r2, %r12, (.TOC.-name)@ha; \ | ||||
addi %r2, %r2, (.TOC.-name)@l; \ | addi %r2, %r2, (.TOC.-name)@l; \ | ||||
.localentry name, .-name; | .localentry name, .-name; | ||||
/* "Naked" function entry. No TOC prologue for ELFv2. */ | /* "Naked" function entry. No TOC prologue for ELFv2. */ | ||||
#define _NAKED_ENTRY(name) \ | #define _NAKED_ENTRY(name) \ | ||||
.text; \ | .text; \ | ||||
.p2align 4; \ | .p2align 4; \ | ||||
.globl name; \ | .globl name; \ | ||||
.type name,@function; \ | .type name,@function; \ | ||||
name: \ | name: \ | ||||
.cfi_startproc; \ | |||||
.localentry name, .-name; | .localentry name, .-name; | ||||
#endif | #endif | ||||
#define _END(name) \ | #define _END(name) \ | ||||
.cfi_endproc; \ | |||||
.long 0; \ | .long 0; \ | ||||
.byte 0,0,0,0,0,0,0,0; \ | .byte 0,0,0,0,0,0,0,0; \ | ||||
END_SIZE(name) | END_SIZE(name) | ||||
#define LOAD_ADDR(reg, var) \ | #define LOAD_ADDR(reg, var) \ | ||||
lis reg, var@highest; \ | lis reg, var@highest; \ | ||||
ori reg, reg, var@higher; \ | ori reg, reg, var@higher; \ | ||||
rldicr reg, reg, 32, 31; \ | rldicr reg, reg, 32, 31; \ | ||||
oris reg, reg, var@h; \ | oris reg, reg, var@h; \ | ||||
ori reg, reg, var@l; | ori reg, reg, var@l; | ||||
#else /* !__powerpc64__ */ | #else /* !__powerpc64__ */ | ||||
#define _ENTRY(name) \ | #define _ENTRY(name) \ | ||||
.text; \ | .text; \ | ||||
.p2align 4; \ | .p2align 4; \ | ||||
.globl name; \ | .globl name; \ | ||||
.type name,@function; \ | .type name,@function; \ | ||||
name: | name: \ | ||||
#define _END(name) | .cfi_startproc | ||||
#define _END(name) \ | |||||
.cfi_endproc | |||||
jrtc27Unsubmitted Done Inline ActionsEND_SIZE(name) whilst you're here? jrtc27: `END_SIZE(name)` whilst you're here? | |||||
cemAuthorUnsubmitted Done Inline ActionsSorry, what about END_SIZE? cem: Sorry, what about END_SIZE? | |||||
jrtc27Unsubmitted Done Inline ActionsCurrently there's no .size directive for powerpc32, unlike powerpc64. There's an END_SIZE macro available for that, though it looks like it's assuming powerpc64 without checking so you might want to just do a normal .size. jrtc27: Currently there's no `.size` directive for powerpc32, unlike powerpc64. There's an END_SIZE… | |||||
cemAuthorUnsubmitted Done Inline ActionsSure, I'll add it. Thanks. cem: Sure, I'll add it. Thanks. | |||||
#define _NAKED_ENTRY(name) _ENTRY(name) | #define _NAKED_ENTRY(name) _ENTRY(name) | ||||
#define LOAD_ADDR(reg, var) \ | #define LOAD_ADDR(reg, var) \ | ||||
lis reg, var@ha; \ | lis reg, var@ha; \ | ||||
ori reg, reg, var@l; | ori reg, reg, var@l; | ||||
#endif /* __powerpc64__ */ | #endif /* __powerpc64__ */ | ||||
▲ Show 20 Lines • Show All 95 Lines • Show Last 20 Lines |
This is the descriptor; you need it after DOT_LABEL(name).