Fix overlapping cfi ranges in mterp
Some residual .type and .size directives in mterp cause the
unwinder to see code covered by overlapping functions. This
CL removes them, treating the mterp's assembly stubs as all
part of the same function.
Test: m test-art-host
Test: testrunner.py --host --interpreter
Bug: 66749877
Change-Id: Id4cebf140c3d4baa2298f1c56b66bad6686161ce
diff --git a/runtime/interpreter/mterp/arm/entry.S b/runtime/interpreter/mterp/arm/entry.S
index ce14b54..5781414 100644
--- a/runtime/interpreter/mterp/arm/entry.S
+++ b/runtime/interpreter/mterp/arm/entry.S
@@ -19,8 +19,6 @@
.text
.align 2
- .global ExecuteMterpImpl
- .type ExecuteMterpImpl, %function
/*
* On entry:
diff --git a/runtime/interpreter/mterp/arm64/close_cfi.S b/runtime/interpreter/mterp/arm64/close_cfi.S
new file mode 100644
index 0000000..7ba0486
--- /dev/null
+++ b/runtime/interpreter/mterp/arm64/close_cfi.S
@@ -0,0 +1,4 @@
+// Close out the cfi info. We're treating mterp as a single function.
+
+END ExecuteMterpImpl
+
diff --git a/runtime/interpreter/mterp/arm64/entry.S b/runtime/interpreter/mterp/arm64/entry.S
index 73c5a88..7306e4e 100644
--- a/runtime/interpreter/mterp/arm64/entry.S
+++ b/runtime/interpreter/mterp/arm64/entry.S
@@ -25,12 +25,7 @@
* x3 JValue* result_register
*
*/
- .global ExecuteMterpImpl
- .type ExecuteMterpImpl, %function
- .balign 16
-
-ExecuteMterpImpl:
- .cfi_startproc
+ENTRY ExecuteMterpImpl
SAVE_TWO_REGS_INCREASE_FRAME xPROFILE, x27, 80
SAVE_TWO_REGS xIBASE, xREFS, 16
SAVE_TWO_REGS xSELF, xINST, 32
diff --git a/runtime/interpreter/mterp/arm64/footer.S b/runtime/interpreter/mterp/arm64/footer.S
index 388fc8d..fafa606 100644
--- a/runtime/interpreter/mterp/arm64/footer.S
+++ b/runtime/interpreter/mterp/arm64/footer.S
@@ -305,6 +305,3 @@
RESTORE_TWO_REGS_DECREASE_FRAME xPROFILE, x27, 80
ret
- .cfi_endproc
- .size ExecuteMterpImpl, .-ExecuteMterpImpl
-
diff --git a/runtime/interpreter/mterp/arm64/header.S b/runtime/interpreter/mterp/arm64/header.S
index 7125d5a..cedfa49 100644
--- a/runtime/interpreter/mterp/arm64/header.S
+++ b/runtime/interpreter/mterp/arm64/header.S
@@ -330,3 +330,20 @@
.cfi_restore \reg2
.cfi_adjust_cfa_offset -(\frame_adjustment)
.endm
+
+/*
+ * cfi support macros.
+ */
+.macro ENTRY name
+ .type \name, #function
+ .global \name
+ /* Cache alignment for function entry */
+ .balign 16
+\name:
+ .cfi_startproc
+.endm
+
+.macro END name
+ .cfi_endproc
+ .size \name, .-\name
+.endm
diff --git a/runtime/interpreter/mterp/config_arm64 b/runtime/interpreter/mterp/config_arm64
index 0831c3b..590363f 100644
--- a/runtime/interpreter/mterp/config_arm64
+++ b/runtime/interpreter/mterp/config_arm64
@@ -301,3 +301,6 @@
# emit alternate entry stubs
alt-ops
+
+# finish by closing .cfi info
+import arm64/close_cfi.S
diff --git a/runtime/interpreter/mterp/gen_mterp.py b/runtime/interpreter/mterp/gen_mterp.py
index 5839b5f..1c9af30 100755
--- a/runtime/interpreter/mterp/gen_mterp.py
+++ b/runtime/interpreter/mterp/gen_mterp.py
@@ -284,7 +284,6 @@
# point MterpAsmInstructionStart at the first handler or stub
asm_fp.write("\n .global %s\n" % start_label)
- asm_fp.write(" " + (function_type_format % start_label) + "\n");
asm_fp.write("%s = " % start_label + label_prefix + "_op_nop\n")
asm_fp.write(" .text\n\n")
@@ -310,7 +309,6 @@
asm_fp.write(label_prefix + "_op_nop: /* dummy */\n");
emitAlign()
- asm_fp.write(" " + (function_size_format % (start_label, start_label)) + "\n")
asm_fp.write(" .global %s\n" % end_label)
asm_fp.write("%s:\n" % end_label)
@@ -319,12 +317,10 @@
end_sister_label = global_name_format % "artMterpAsmSisterEnd"
emitSectionComment("Sister implementations", asm_fp)
asm_fp.write(" .global %s\n" % start_sister_label)
- asm_fp.write(" " + (function_type_format % start_sister_label) + "\n");
asm_fp.write(" .text\n")
asm_fp.write(" .balign 4\n")
asm_fp.write("%s:\n" % start_sister_label)
asm_fp.writelines(sister_list)
- asm_fp.write("\n " + (function_size_format % (start_sister_label, start_sister_label)) + "\n")
asm_fp.write(" .global %s\n" % end_sister_label)
asm_fp.write("%s:\n\n" % end_sister_label)
@@ -351,7 +347,6 @@
# point MterpAsmInstructionStart at the first handler or stub
asm_fp.write("\n .global %s\n" % start_label)
- asm_fp.write(" " + (function_type_format % start_label) + "\n");
asm_fp.write(" .text\n\n")
asm_fp.write("%s = " % start_label + label_prefix + "_ALT_op_nop\n")
@@ -364,7 +359,6 @@
loadAndEmitAltStub(source, i)
emitAlign()
- asm_fp.write(" " + (function_size_format % (start_label, start_label)) + "\n")
asm_fp.write(" .global %s\n" % end_label)
asm_fp.write("%s:\n" % end_label)
diff --git a/runtime/interpreter/mterp/out/mterp_arm.S b/runtime/interpreter/mterp/out/mterp_arm.S
index 393a9cc..8ca5bd4 100644
--- a/runtime/interpreter/mterp/out/mterp_arm.S
+++ b/runtime/interpreter/mterp/out/mterp_arm.S
@@ -338,8 +338,6 @@
.text
.align 2
- .global ExecuteMterpImpl
- .type ExecuteMterpImpl, %function
/*
* On entry:
@@ -398,7 +396,6 @@
.global artMterpAsmInstructionStart
- .type artMterpAsmInstructionStart, %function
artMterpAsmInstructionStart = .L_op_nop
.text
@@ -7510,7 +7507,6 @@
.balign 128
- .size artMterpAsmInstructionStart, .-artMterpAsmInstructionStart
.global artMterpAsmInstructionEnd
artMterpAsmInstructionEnd:
@@ -7520,7 +7516,6 @@
* ===========================================================================
*/
.global artMterpAsmSisterStart
- .type artMterpAsmSisterStart, %function
.text
.balign 4
artMterpAsmSisterStart:
@@ -7586,14 +7581,11 @@
mov r0, #0
mov r1, #0
bx lr @ return 0 for NaN
-
- .size artMterpAsmSisterStart, .-artMterpAsmSisterStart
.global artMterpAsmSisterEnd
artMterpAsmSisterEnd:
.global artMterpAsmAltInstructionStart
- .type artMterpAsmAltInstructionStart, %function
.text
artMterpAsmAltInstructionStart = .L_ALT_op_nop
@@ -11950,7 +11942,6 @@
b MterpCheckBefore @ (self, shadow_frame, dex_pc_ptr) @ Tail call.
.balign 128
- .size artMterpAsmAltInstructionStart, .-artMterpAsmAltInstructionStart
.global artMterpAsmAltInstructionEnd
artMterpAsmAltInstructionEnd:
/* File: arm/footer.S */
diff --git a/runtime/interpreter/mterp/out/mterp_arm64.S b/runtime/interpreter/mterp/out/mterp_arm64.S
index 80a7f12..d4423ab 100644
--- a/runtime/interpreter/mterp/out/mterp_arm64.S
+++ b/runtime/interpreter/mterp/out/mterp_arm64.S
@@ -338,6 +338,23 @@
.cfi_adjust_cfa_offset -(\frame_adjustment)
.endm
+/*
+ * cfi support macros.
+ */
+.macro ENTRY name
+ .type \name, #function
+ .global \name
+ /* Cache alignment for function entry */
+ .balign 16
+\name:
+ .cfi_startproc
+.endm
+
+.macro END name
+ .cfi_endproc
+ .size \name, .-\name
+.endm
+
/* File: arm64/entry.S */
/*
* Copyright (C) 2016 The Android Open Source Project
@@ -366,12 +383,7 @@
* x3 JValue* result_register
*
*/
- .global ExecuteMterpImpl
- .type ExecuteMterpImpl, %function
- .balign 16
-
-ExecuteMterpImpl:
- .cfi_startproc
+ENTRY ExecuteMterpImpl
SAVE_TWO_REGS_INCREASE_FRAME xPROFILE, x27, 80
SAVE_TWO_REGS xIBASE, xREFS, 16
SAVE_TWO_REGS xSELF, xINST, 32
@@ -413,7 +425,6 @@
.global artMterpAsmInstructionStart
- .type artMterpAsmInstructionStart, %function
artMterpAsmInstructionStart = .L_op_nop
.text
@@ -7060,7 +7071,6 @@
.balign 128
- .size artMterpAsmInstructionStart, .-artMterpAsmInstructionStart
.global artMterpAsmInstructionEnd
artMterpAsmInstructionEnd:
@@ -7070,12 +7080,9 @@
* ===========================================================================
*/
.global artMterpAsmSisterStart
- .type artMterpAsmSisterStart, %function
.text
.balign 4
artMterpAsmSisterStart:
-
- .size artMterpAsmSisterStart, .-artMterpAsmSisterStart
.global artMterpAsmSisterEnd
artMterpAsmSisterEnd:
@@ -7387,13 +7394,9 @@
RESTORE_TWO_REGS_DECREASE_FRAME xPROFILE, x27, 80
ret
- .cfi_endproc
- .size ExecuteMterpImpl, .-ExecuteMterpImpl
-
.global artMterpAsmAltInstructionStart
- .type artMterpAsmAltInstructionStart, %function
.text
artMterpAsmAltInstructionStart = .L_ALT_op_nop
@@ -11750,6 +11753,11 @@
b MterpCheckBefore // (self, shadow_frame, dex_pc_ptr) Note: tail call.
.balign 128
- .size artMterpAsmAltInstructionStart, .-artMterpAsmAltInstructionStart
.global artMterpAsmAltInstructionEnd
artMterpAsmAltInstructionEnd:
+/* File: arm64/close_cfi.S */
+// Close out the cfi info. We're treating mterp as a single function.
+
+END ExecuteMterpImpl
+
+
diff --git a/runtime/interpreter/mterp/out/mterp_mips.S b/runtime/interpreter/mterp/out/mterp_mips.S
index 74fee39..e830835 100644
--- a/runtime/interpreter/mterp/out/mterp_mips.S
+++ b/runtime/interpreter/mterp/out/mterp_mips.S
@@ -809,7 +809,6 @@
.global artMterpAsmInstructionStart
- .type artMterpAsmInstructionStart, %function
artMterpAsmInstructionStart = .L_op_nop
.text
@@ -7871,7 +7870,6 @@
.balign 128
- .size artMterpAsmInstructionStart, .-artMterpAsmInstructionStart
.global artMterpAsmInstructionEnd
artMterpAsmInstructionEnd:
@@ -7881,7 +7879,6 @@
* ===========================================================================
*/
.global artMterpAsmSisterStart
- .type artMterpAsmSisterStart, %function
.text
.balign 4
artMterpAsmSisterStart:
@@ -7941,14 +7938,11 @@
.Lop_ushr_long_2addr_finish:
SET_VREG64_GOTO(v1, zero, t3, t0) # vA/vA+1 <- rlo/rhi
-
- .size artMterpAsmSisterStart, .-artMterpAsmSisterStart
.global artMterpAsmSisterEnd
artMterpAsmSisterEnd:
.global artMterpAsmAltInstructionStart
- .type artMterpAsmAltInstructionStart, %function
.text
artMterpAsmAltInstructionStart = .L_ALT_op_nop
@@ -12561,7 +12555,6 @@
jalr zero, t9 # Tail call to Mterp(self, shadow_frame, dex_pc_ptr)
.balign 128
- .size artMterpAsmAltInstructionStart, .-artMterpAsmAltInstructionStart
.global artMterpAsmAltInstructionEnd
artMterpAsmAltInstructionEnd:
/* File: mips/footer.S */
diff --git a/runtime/interpreter/mterp/out/mterp_mips64.S b/runtime/interpreter/mterp/out/mterp_mips64.S
index 408267e..64ea81d 100644
--- a/runtime/interpreter/mterp/out/mterp_mips64.S
+++ b/runtime/interpreter/mterp/out/mterp_mips64.S
@@ -396,7 +396,6 @@
.global artMterpAsmInstructionStart
- .type artMterpAsmInstructionStart, %function
artMterpAsmInstructionStart = .L_op_nop
.text
@@ -7264,7 +7263,6 @@
.balign 128
- .size artMterpAsmInstructionStart, .-artMterpAsmInstructionStart
.global artMterpAsmInstructionEnd
artMterpAsmInstructionEnd:
@@ -7274,18 +7272,14 @@
* ===========================================================================
*/
.global artMterpAsmSisterStart
- .type artMterpAsmSisterStart, %function
.text
.balign 4
artMterpAsmSisterStart:
-
- .size artMterpAsmSisterStart, .-artMterpAsmSisterStart
.global artMterpAsmSisterEnd
artMterpAsmSisterEnd:
.global artMterpAsmAltInstructionStart
- .type artMterpAsmAltInstructionStart, %function
.text
artMterpAsmAltInstructionStart = .L_ALT_op_nop
@@ -12154,7 +12148,6 @@
jalr zero, t9 # (self, shadow_frame, dex_pc_ptr) Note: tail call.
.balign 128
- .size artMterpAsmAltInstructionStart, .-artMterpAsmAltInstructionStart
.global artMterpAsmAltInstructionEnd
artMterpAsmAltInstructionEnd:
/* File: mips64/footer.S */
diff --git a/runtime/interpreter/mterp/out/mterp_x86.S b/runtime/interpreter/mterp/out/mterp_x86.S
index 984ecfa..514ecac 100644
--- a/runtime/interpreter/mterp/out/mterp_x86.S
+++ b/runtime/interpreter/mterp/out/mterp_x86.S
@@ -401,7 +401,6 @@
.global SYMBOL(artMterpAsmInstructionStart)
- FUNCTION_TYPE(SYMBOL(artMterpAsmInstructionStart))
SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
.text
@@ -6465,7 +6464,6 @@
.balign 128
- SIZE(SYMBOL(artMterpAsmInstructionStart),SYMBOL(artMterpAsmInstructionStart))
.global SYMBOL(artMterpAsmInstructionEnd)
SYMBOL(artMterpAsmInstructionEnd):
@@ -6475,18 +6473,14 @@
* ===========================================================================
*/
.global SYMBOL(artMterpAsmSisterStart)
- FUNCTION_TYPE(SYMBOL(artMterpAsmSisterStart))
.text
.balign 4
SYMBOL(artMterpAsmSisterStart):
-
- SIZE(SYMBOL(artMterpAsmSisterStart),SYMBOL(artMterpAsmSisterStart))
.global SYMBOL(artMterpAsmSisterEnd)
SYMBOL(artMterpAsmSisterEnd):
.global SYMBOL(artMterpAsmAltInstructionStart)
- FUNCTION_TYPE(SYMBOL(artMterpAsmAltInstructionStart))
.text
SYMBOL(artMterpAsmAltInstructionStart) = .L_ALT_op_nop
@@ -12635,7 +12629,6 @@
jmp .L_op_nop+(255*128)
.balign 128
- SIZE(SYMBOL(artMterpAsmAltInstructionStart),SYMBOL(artMterpAsmAltInstructionStart))
.global SYMBOL(artMterpAsmAltInstructionEnd)
SYMBOL(artMterpAsmAltInstructionEnd):
/* File: x86/footer.S */
diff --git a/runtime/interpreter/mterp/out/mterp_x86_64.S b/runtime/interpreter/mterp/out/mterp_x86_64.S
index 84f8b52..cfee2b8 100644
--- a/runtime/interpreter/mterp/out/mterp_x86_64.S
+++ b/runtime/interpreter/mterp/out/mterp_x86_64.S
@@ -383,7 +383,6 @@
.global SYMBOL(artMterpAsmInstructionStart)
- FUNCTION_TYPE(SYMBOL(artMterpAsmInstructionStart))
SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
.text
@@ -6212,7 +6211,6 @@
.balign 128
- SIZE(SYMBOL(artMterpAsmInstructionStart),SYMBOL(artMterpAsmInstructionStart))
.global SYMBOL(artMterpAsmInstructionEnd)
SYMBOL(artMterpAsmInstructionEnd):
@@ -6222,18 +6220,14 @@
* ===========================================================================
*/
.global SYMBOL(artMterpAsmSisterStart)
- FUNCTION_TYPE(SYMBOL(artMterpAsmSisterStart))
.text
.balign 4
SYMBOL(artMterpAsmSisterStart):
-
- SIZE(SYMBOL(artMterpAsmSisterStart),SYMBOL(artMterpAsmSisterStart))
.global SYMBOL(artMterpAsmSisterEnd)
SYMBOL(artMterpAsmSisterEnd):
.global SYMBOL(artMterpAsmAltInstructionStart)
- FUNCTION_TYPE(SYMBOL(artMterpAsmAltInstructionStart))
.text
SYMBOL(artMterpAsmAltInstructionStart) = .L_ALT_op_nop
@@ -11870,7 +11864,6 @@
jmp .L_op_nop+(255*128)
.balign 128
- SIZE(SYMBOL(artMterpAsmAltInstructionStart),SYMBOL(artMterpAsmAltInstructionStart))
.global SYMBOL(artMterpAsmAltInstructionEnd)
SYMBOL(artMterpAsmAltInstructionEnd):
/* File: x86_64/footer.S */