summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libavcodec/x86/proresdsp.asm2
-rw-r--r--libavcodec/x86/simple_idct10.asm2
-rw-r--r--libavutil/x86/x86inc.asm23
-rw-r--r--tests/checkasm/x86/checkasm.asm8
4 files changed, 29 insertions, 6 deletions
diff --git a/libavcodec/x86/proresdsp.asm b/libavcodec/x86/proresdsp.asm
index edfd2f7c02..16fc262aeb 100644
--- a/libavcodec/x86/proresdsp.asm
+++ b/libavcodec/x86/proresdsp.asm
@@ -48,7 +48,7 @@ cextern w7_min_w5
%include "libavcodec/x86/simple_idct10_template.asm"
-section .text align=16
+SECTION .text
%macro idct_fn 0
cglobal prores_idct_put_10, 4, 4, 15
diff --git a/libavcodec/x86/simple_idct10.asm b/libavcodec/x86/simple_idct10.asm
index cd83d61b44..5dee533de0 100644
--- a/libavcodec/x86/simple_idct10.asm
+++ b/libavcodec/x86/simple_idct10.asm
@@ -65,7 +65,7 @@ CONST_DEC w7_min_w5, W7sh2, -W5sh2
%include "libavcodec/x86/simple_idct10_template.asm"
-section .text align=16
+SECTION .text
%macro idct_fn 0
cglobal simple_idct10, 1, 1, 16
diff --git a/libavutil/x86/x86inc.asm b/libavutil/x86/x86inc.asm
index 6259c69aa1..3a0a2612ba 100644
--- a/libavutil/x86/x86inc.asm
+++ b/libavutil/x86/x86inc.asm
@@ -634,6 +634,7 @@ DECLARE_ARG 7, 8, 9, 10, 11, 12, 13, 14
%else
rep ret
%endif
+ annotate_function_size
%endmacro
%define last_branch_adr $$
@@ -642,6 +643,7 @@ DECLARE_ARG 7, 8, 9, 10, 11, 12, 13, 14
times ((last_branch_adr-$)>>31)+1 rep ; times 1 iff $ == last_branch_adr.
%endif
ret
+ annotate_function_size
%endmacro
%macro BRANCH_INSTR 0-*
@@ -666,6 +668,7 @@ BRANCH_INSTR jz, je, jnz, jne, jl, jle, jnl, jnle, jg, jge, jng, jnge, ja, jae,
%elif %2
jmp %1
%endif
+ annotate_function_size
%endmacro
;=============================================================================
@@ -687,6 +690,7 @@ BRANCH_INSTR jz, je, jnz, jne, jl, jle, jnl, jnle, jg, jge, jng, jnge, ja, jae,
cglobal_internal 0, %1 %+ SUFFIX, %2
%endmacro
%macro cglobal_internal 2-3+
+ annotate_function_size
%if %1
%xdefine %%FUNCTION_PREFIX private_prefix
%xdefine %%VISIBILITY hidden
@@ -700,6 +704,7 @@ BRANCH_INSTR jz, je, jnz, jne, jl, jle, jnl, jnle, jg, jge, jng, jnge, ja, jae,
CAT_XDEFINE cglobaled_, %2, 1
%endif
%xdefine current_function %2
+ %xdefine current_function_section __SECT__
%if FORMAT_ELF
global %2:function %%VISIBILITY
%else
@@ -748,6 +753,24 @@ BRANCH_INSTR jz, je, jnz, jne, jl, jle, jnl, jnle, jg, jge, jng, jnge, ja, jae,
[SECTION .note.GNU-stack noalloc noexec nowrite progbits]
%endif
+; Tell debuggers how large the function was.
+; This may be invoked multiple times per function; we rely on later instances overriding earlier ones.
+; This is invoked by RET and similar macros, and also cglobal does it for the previous function,
+; but if the last function in a source file doesn't use any of the standard macros for its epilogue,
+; then its size might be unspecified.
+%macro annotate_function_size 0
+ %ifdef __YASM_VER__
+ %ifdef current_function
+ %if FORMAT_ELF
+ current_function_section
+ %%ecf equ $
+ size current_function %%ecf - current_function
+ __SECT__
+ %endif
+ %endif
+ %endif
+%endmacro
+
; cpuflags
%assign cpuflags_mmx (1<<0)
diff --git a/tests/checkasm/x86/checkasm.asm b/tests/checkasm/x86/checkasm.asm
index e1dde6e60a..d12333b308 100644
--- a/tests/checkasm/x86/checkasm.asm
+++ b/tests/checkasm/x86/checkasm.asm
@@ -66,14 +66,14 @@ cextern fail_func
;-----------------------------------------------------------------------------
cglobal stack_clobber, 1,2
; Clobber the stack with junk below the stack pointer
- %define size (max_args+6)*8
- SUB rsp, size
- mov r1, size-8
+ %define argsize (max_args+6)*8
+ SUB rsp, argsize
+ mov r1, argsize-8
.loop:
mov [rsp+r1], r0
sub r1, 8
jge .loop
- ADD rsp, size
+ ADD rsp, argsize
RET
%if WIN64