PowerPC64 sysdep.h tidy

.align on some targets takes a byte alignment, on others like powerpc,
log2 of the byte alignment.  It's a good idea to avoid .align,
particularly since x86 and powerpc are different.  This patch fixes
the occurrences of .align in powerpc64/sysdep.h, renames DOT_LABEL
since the macro doesn't have anything to do with adding dots, removes
extraneous semicolons, and fixes some formatting.

	* sysdeps/powerpc/powerpc64/sysdep.h: Formatting.
	(FUNC_LABEL): Rename from DOT_LABEL.
	(ENTRY_1): Use FUNC_LABEL and remove leading space from label.
	Use .p2align rather than .align.
	(TRACEBACK, TRACEBACK_MASK): Use .p2align rather than .align.
	(ABORT_TRANSACTION): Likewise.
	(ENTRY_1, ENTRY_2, END_2, LOCALENTRY): Remove unnecessary semicolons,
	particularly at end.  Add semicolon at invocation as necessary.
	(TRACEBACK, TRACEBACK_MASK, PSEUDO, PSEUDO_NOERRNO): Likewise.
	(PSEUDO_ERRVAL, PPC64_LOAD_FUNCPTR, OPD_ENT): Likewise.
	* sysdeps/powerpc/powerpc64/multiarch/strrchr-power8.S (ENTRY,
	END): Adjust to suit.
This commit is contained in:
Alan Modra 2017-06-14 10:44:03 +09:30
parent fb499eb04e
commit 4b6e7667db
3 changed files with 74 additions and 59 deletions

View File

@ -1,3 +1,18 @@
2017-06-14 Alan Modra <amodra@gmail.com>
* sysdeps/powerpc/powerpc64/sysdep.h: Formatting.
(FUNC_LABEL): Rename from DOT_LABEL.
(ENTRY_1): Use FUNC_LABEL and remove leading space from label.
Use .p2align rather than .align.
(TRACEBACK, TRACEBACK_MASK): Use .p2align rather than .align.
(ABORT_TRANSACTION): Likewise.
(ENTRY_1, ENTRY_2, END_2, LOCALENTRY): Remove unnecessary semicolons,
particularly at end. Add semicolon at invocation as necessary.
(TRACEBACK, TRACEBACK_MASK, PSEUDO, PSEUDO_NOERRNO): Likewise.
(PSEUDO_ERRVAL, PPC64_LOAD_FUNCPTR, OPD_ENT): Likewise.
* sysdeps/powerpc/powerpc64/multiarch/strrchr-power8.S (ENTRY,
END): Adjust to suit.
2017-06-14 Alan Modra <amodra@gmail.com> 2017-06-14 Alan Modra <amodra@gmail.com>
* sysdeps/powerpc/powerpc64/sysdep.h: (FRAME_BACKCHAIN, * sysdeps/powerpc/powerpc64/sysdep.h: (FRAME_BACKCHAIN,

View File

@ -21,7 +21,7 @@
#undef ENTRY #undef ENTRY
#define ENTRY(name) \ #define ENTRY(name) \
.section ".text"; \ .section ".text"; \
ENTRY_2(__strrchr_power8) \ ENTRY_2(__strrchr_power8); \
.align ALIGNARG(2); \ .align ALIGNARG(2); \
BODY_LABEL(__strrchr_power8): \ BODY_LABEL(__strrchr_power8): \
cfi_startproc; \ cfi_startproc; \
@ -30,7 +30,7 @@
#undef END #undef END
#define END(name) \ #define END(name) \
cfi_endproc; \ cfi_endproc; \
TRACEBACK(__strrchr_power8) \ TRACEBACK(__strrchr_power8); \
END_2(__strrchr_power8) END_2(__strrchr_power8)
#undef libc_hidden_builtin_def #undef libc_hidden_builtin_def

View File

@ -106,25 +106,25 @@
# define OPD_ENT(name) .quad BODY_LABEL (name), .TOC.@tocbase, 0 # define OPD_ENT(name) .quad BODY_LABEL (name), .TOC.@tocbase, 0
#endif #endif
#define ENTRY_1(name) \ #define ENTRY_1(name) \
.type BODY_LABEL(name),@function; \ .type BODY_LABEL(name),@function; \
.globl name; \ .globl name; \
.section ".opd","aw"; \ .section ".opd","aw"; \
.align 3; \ .p2align 3;FUNC_LABEL(name): \
name##: OPD_ENT (name); \ OPD_ENT (name); \
.previous; .previous
#define DOT_LABEL(X) X #define FUNC_LABEL(X) X
#define BODY_LABEL(X) .LY##X #define BODY_LABEL(X) .LY##X
#define ENTRY_2(name) \ #define ENTRY_2(name) \
.type name,@function; \ .type name,@function; \
ENTRY_1(name) ENTRY_1(name)
#define END_2(name) \ #define END_2(name) \
.size name,.-BODY_LABEL(name); \ .size name,.-BODY_LABEL(name); \
.size BODY_LABEL(name),.-BODY_LABEL(name); .size BODY_LABEL(name),.-BODY_LABEL(name)
#define LOCALENTRY(name) #define LOCALENTRY(name)
#else /* _CALL_ELF */ #else /* _CALL_ELF == 2 */
/* Macro to prepare for calling via a function pointer. */ /* Macro to prepare for calling via a function pointer. */
.macro PPC64_LOAD_FUNCPTR PTR .macro PPC64_LOAD_FUNCPTR PTR
@ -132,23 +132,23 @@ name##: OPD_ENT (name); \
mtctr r12 mtctr r12
.endm .endm
#define DOT_LABEL(X) X #define FUNC_LABEL(X) X
#define BODY_LABEL(X) X #define BODY_LABEL(X) X
#define ENTRY_2(name) \ #define ENTRY_2(name) \
.globl name; \ .globl name; \
.type name,@function; .type name,@function
#define END_2(name) \ #define END_2(name) \
.size name,.-name; .size name,.-name
#define LOCALENTRY(name) \ #define LOCALENTRY(name) \
1: addis r2,r12,.TOC.-1b@ha; \ 1: addis r2,r12,.TOC.-1b@ha; \
addi r2,r2,.TOC.-1b@l; \ addi r2,r2,.TOC.-1b@l; \
.localentry name,.-name; .localentry name,.-name
#endif /* _CALL_ELF */ #endif /* _CALL_ELF */
#define ENTRY(name) \ #define ENTRY(name) \
.section ".text"; \ .section ".text"; \
ENTRY_2(name) \ ENTRY_2(name); \
.align ALIGNARG(2); \ .align ALIGNARG(2); \
BODY_LABEL(name): \ BODY_LABEL(name): \
cfi_startproc; \ cfi_startproc; \
@ -167,7 +167,7 @@ BODY_LABEL(name): \
past a 2^alignt boundary. */ past a 2^alignt boundary. */
#define EALIGN(name, alignt, words) \ #define EALIGN(name, alignt, words) \
.section ".text"; \ .section ".text"; \
ENTRY_2(name) \ ENTRY_2(name); \
.align ALIGNARG(alignt); \ .align ALIGNARG(alignt); \
EALIGN_W_##words; \ EALIGN_W_##words; \
BODY_LABEL(name): \ BODY_LABEL(name): \
@ -220,7 +220,7 @@ LT_LABEL(name): ; \
LT_LABELSUFFIX(name,_name_start): ;\ LT_LABELSUFFIX(name,_name_start): ;\
.ascii stringify(name) ; \ .ascii stringify(name) ; \
LT_LABELSUFFIX(name,_name_end): ; \ LT_LABELSUFFIX(name,_name_end): ; \
.align 2 ; .p2align 2
#define TRACEBACK_MASK(name,mask) \ #define TRACEBACK_MASK(name,mask) \
LT_LABEL(name): ; \ LT_LABEL(name): ; \
@ -231,19 +231,19 @@ LT_LABEL(name): ; \
LT_LABELSUFFIX(name,_name_start): ;\ LT_LABELSUFFIX(name,_name_start): ;\
.ascii stringify(name) ; \ .ascii stringify(name) ; \
LT_LABELSUFFIX(name,_name_end): ; \ LT_LABELSUFFIX(name,_name_end): ; \
.align 2 ; .p2align 2
/* END generates Traceback tables */ /* END generates Traceback tables */
#undef END #undef END
#define END(name) \ #define END(name) \
cfi_endproc; \ cfi_endproc; \
TRACEBACK(name) \ TRACEBACK(name); \
END_2(name) END_2(name)
/* This form supports more informative traceback tables */ /* This form supports more informative traceback tables */
#define END_GEN_TB(name,mask) \ #define END_GEN_TB(name,mask) \
cfi_endproc; \ cfi_endproc; \
TRACEBACK_MASK(name,mask) \ TRACEBACK_MASK(name,mask); \
END_2(name) END_2(name)
#if !IS_IN(rtld) && defined (ENABLE_LOCK_ELISION) #if !IS_IN(rtld) && defined (ENABLE_LOCK_ELISION)
@ -255,7 +255,7 @@ LT_LABELSUFFIX(name,_name_end): ; \
beq 1f; \ beq 1f; \
li 11,_ABORT_SYSCALL; \ li 11,_ABORT_SYSCALL; \
tabort. 11; \ tabort. 11; \
.align 4; \ .p2align 4; \
1: 1:
#else #else
# define ABORT_TRANSACTION # define ABORT_TRANSACTION
@ -268,12 +268,12 @@ LT_LABELSUFFIX(name,_name_end): ; \
/* ppc64 is always PIC */ /* ppc64 is always PIC */
#undef JUMPTARGET #undef JUMPTARGET
#define JUMPTARGET(name) DOT_LABEL(name) #define JUMPTARGET(name) FUNC_LABEL(name)
#define PSEUDO(name, syscall_name, args) \ #define PSEUDO(name, syscall_name, args) \
.section ".text"; \ .section ".text"; \
ENTRY (name) \ ENTRY (name); \
DO_CALL (SYS_ify (syscall_name)); DO_CALL (SYS_ify (syscall_name))
#ifdef SHARED #ifdef SHARED
#define TAIL_CALL_SYSCALL_ERROR \ #define TAIL_CALL_SYSCALL_ERROR \
@ -314,9 +314,9 @@ LT_LABELSUFFIX(name,_name_end): ; \
END (name) END (name)
#define PSEUDO_NOERRNO(name, syscall_name, args) \ #define PSEUDO_NOERRNO(name, syscall_name, args) \
.section ".text"; \ .section ".text"; \
ENTRY (name) \ ENTRY (name); \
DO_CALL (SYS_ify (syscall_name)); DO_CALL (SYS_ify (syscall_name))
#define PSEUDO_RET_NOERRNO \ #define PSEUDO_RET_NOERRNO \
blr blr
@ -328,9 +328,9 @@ LT_LABELSUFFIX(name,_name_end): ; \
END (name) END (name)
#define PSEUDO_ERRVAL(name, syscall_name, args) \ #define PSEUDO_ERRVAL(name, syscall_name, args) \
.section ".text"; \ .section ".text"; \
ENTRY (name) \ ENTRY (name); \
DO_CALL (SYS_ify (syscall_name)); DO_CALL (SYS_ify (syscall_name))
#define PSEUDO_RET_ERRVAL \ #define PSEUDO_RET_ERRVAL \
blr blr
@ -346,53 +346,53 @@ LT_LABELSUFFIX(name,_name_end): ; \
#if _CALL_ELF != 2 #if _CALL_ELF != 2
#define PPC64_LOAD_FUNCPTR(ptr) \ #define PPC64_LOAD_FUNCPTR(ptr) \
"ld 12,0(" #ptr ");\n" \ "ld 12,0(" #ptr ")\n" \
"ld 2,8(" #ptr ");\n" \ "ld 2,8(" #ptr ")\n" \
"mtctr 12;\n" \ "mtctr 12\n" \
"ld 11,16(" #ptr ");" "ld 11,16(" #ptr ")"
#ifdef USE_PPC64_OVERLAPPING_OPD #ifdef USE_PPC64_OVERLAPPING_OPD
# define OPD_ENT(name) ".quad " BODY_PREFIX #name ", .TOC.@tocbase;" # define OPD_ENT(name) ".quad " BODY_PREFIX #name ", .TOC.@tocbase"
#else #else
# define OPD_ENT(name) ".quad " BODY_PREFIX #name ", .TOC.@tocbase, 0;" # define OPD_ENT(name) ".quad " BODY_PREFIX #name ", .TOC.@tocbase, 0"
#endif #endif
#define ENTRY_1(name) \ #define ENTRY_1(name) \
".type " BODY_PREFIX #name ",@function;\n" \ ".type " BODY_PREFIX #name ",@function\n" \
".globl " #name ";\n" \ ".globl " #name "\n" \
".pushsection \".opd\",\"aw\";\n" \ ".pushsection \".opd\",\"aw\"\n" \
".align 3;\n" \ ".p2align 3\n" \
#name ":\n" \ #name ":\n" \
OPD_ENT (name) "\n" \ OPD_ENT (name) "\n" \
".popsection;" ".popsection"
#define DOT_PREFIX "" #define DOT_PREFIX ""
#define BODY_PREFIX ".LY" #define BODY_PREFIX ".LY"
#define ENTRY_2(name) \ #define ENTRY_2(name) \
".type " #name ",@function;\n" \ ".type " #name ",@function\n" \
ENTRY_1(name) ENTRY_1(name)
#define END_2(name) \ #define END_2(name) \
".size " #name ",.-" BODY_PREFIX #name ";\n" \ ".size " #name ",.-" BODY_PREFIX #name "\n" \
".size " BODY_PREFIX #name ",.-" BODY_PREFIX #name ";" ".size " BODY_PREFIX #name ",.-" BODY_PREFIX #name
#define LOCALENTRY(name) #define LOCALENTRY(name)
#else /* _CALL_ELF */ #else /* _CALL_ELF */
#define PPC64_LOAD_FUNCPTR(ptr) \ #define PPC64_LOAD_FUNCPTR(ptr) \
"mr 12," #ptr ";\n" \ "mr 12," #ptr "\n" \
"mtctr 12;" "mtctr 12"
#define DOT_PREFIX "" #define DOT_PREFIX ""
#define BODY_PREFIX "" #define BODY_PREFIX ""
#define ENTRY_2(name) \ #define ENTRY_2(name) \
".type " #name ",@function;\n" \ ".type " #name ",@function\n" \
".globl " #name ";" ".globl " #name
#define END_2(name) \ #define END_2(name) \
".size " #name ",.-" #name ";" ".size " #name ",.-" #name
#define LOCALENTRY(name) \ #define LOCALENTRY(name) \
"1: addis 2,12,.TOC.-1b@ha;\n" \ "1: addis 2,12,.TOC.-1b@ha\n" \
"addi 2,2,.TOC.-1b@l;\n" \ "addi 2,2,.TOC.-1b@l\n" \
".localentry " #name ",.-" #name ";" ".localentry " #name ",.-" #name
#endif /* _CALL_ELF */ #endif /* _CALL_ELF */