Message ID | 20200730205112.2099429-4-ndesaulniers@google.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | CONFIG_UNWINDER_FRAME_POINTER fixes+cleanups | expand |
The style cleanup looks great. I just have one extra thing that can probably be thrown into this patch. On Thu, Jul 30, 2020 at 3:51 PM Nick Desaulniers <ndesaulniers@google.com> wrote: > > Removes the 1004 label; it was neither a control flow target, nor an > instruction we expect to produce a fault. > > Gives the labels slightly more readable names. The `b` suffixes are > handy to disambiguate between labels of the same identifier when there's > more than one. Since these labels are unique, let's just give them > names. > > Signed-off-by: Nick Desaulniers <ndesaulniers@google.com> > --- > arch/arm/lib/backtrace-clang.S | 22 ++++++++++------------ > 1 file changed, 10 insertions(+), 12 deletions(-) > > diff --git a/arch/arm/lib/backtrace-clang.S b/arch/arm/lib/backtrace-clang.S > index 40eb2215eaf4..7dad2a6843a5 100644 > --- a/arch/arm/lib/backtrace-clang.S > +++ b/arch/arm/lib/backtrace-clang.S > @@ -121,8 +121,8 @@ for_each_frame: tst frame, mask @ Check for address exceptions > * start. This value gets updated to be the function start later if it is > * possible. > */ > -1001: ldr sv_pc, [frame, #4] @ get saved 'pc' > -1002: ldr sv_fp, [frame, #0] @ get saved fp > +load_pc: ldr sv_pc, [frame, #4] @ get saved 'pc' > +load_fp: ldr sv_fp, [frame, #0] @ get saved fp > > teq sv_fp, mask @ make sure next frame exists > beq no_frame > @@ -142,7 +142,7 @@ for_each_frame: tst frame, mask @ Check for address exceptions > * registers for the current function, but the stacktrace is still printed > * properly. > */ > -1003: ldr sv_lr, [sv_fp, #4] @ get saved lr from next frame > +load_lr: ldr sv_lr, [sv_fp, #4] @ get saved lr from next frame > > tst sv_lr, #0 @ If there's no previous lr, > beq finished_setup @ we're done. > @@ -166,8 +166,7 @@ finished_setup: > /* > * Print the function (sv_pc) and where it was called from (sv_lr). > */ > -1004: mov r0, sv_pc > - > + mov r0, sv_pc > mov r1, sv_lr > mov r2, frame > bic r1, r1, mask @ mask PC/LR for the mode > @@ -182,7 +181,7 @@ finished_setup: > * pointer the comparison will fail and no registers will print. Unwinding will > * continue as if there had been no registers stored in this frame. > */ > -1005: ldr r1, [sv_pc, #0] @ if stmfd sp!, {..., fp, lr} > +load_stmfd: ldr r1, [sv_pc, #0] @ if stmfd sp!, {..., fp, lr} > ldr r3, .Lopcode @ instruction exists, > teq r3, r1, lsr #11 > ldr r0, [frame] @ locals are stored in > @@ -201,7 +200,7 @@ finished_setup: > mov frame, sv_fp @ above the current frame > bhi for_each_frame > > -1006: adr r0, .Lbad > +bad_frame: adr r0, .Lbad > mov r1, loglvl > mov r2, frame > bl printk > @@ -216,11 +215,10 @@ bad_lr: mov sv_fp, #0 > ENDPROC(c_backtrace) > .pushsection __ex_table,"a" > .align 3 > - .long 1001b, 1006b > - .long 1002b, 1006b > - .long 1003b, 1006b > - .long 1004b, 1006b > - .long 1005b, 1006b > + .long load_pc, bad_frame > + .long load_fp, bad_frame > + .long load_lr, bad_frame > + .long load_stmfd, bad_frame Load_stmfd should get its own fixup handler since it should emit errors about a bad pc, not a bad frame pointer. > .long prev_call, bad_lr > .popsection > > -- > 2.28.0.163.g6104cc2f0b6-goog >
On Thu, Aug 6, 2020 at 3:39 PM Nathan Huckleberry <nhuck15@gmail.com> wrote: > > The style cleanup looks great. I just have one extra thing that > can probably be thrown into this patch. > > On Thu, Jul 30, 2020 at 3:51 PM Nick Desaulniers > <ndesaulniers@google.com> wrote: > > > > Removes the 1004 label; it was neither a control flow target, nor an > > instruction we expect to produce a fault. > > > > Gives the labels slightly more readable names. The `b` suffixes are > > handy to disambiguate between labels of the same identifier when there's > > more than one. Since these labels are unique, let's just give them > > names. > > > > Signed-off-by: Nick Desaulniers <ndesaulniers@google.com> > > --- > > arch/arm/lib/backtrace-clang.S | 22 ++++++++++------------ > > 1 file changed, 10 insertions(+), 12 deletions(-) > > > > diff --git a/arch/arm/lib/backtrace-clang.S b/arch/arm/lib/backtrace-clang.S > > index 40eb2215eaf4..7dad2a6843a5 100644 > > --- a/arch/arm/lib/backtrace-clang.S > > +++ b/arch/arm/lib/backtrace-clang.S > > @@ -121,8 +121,8 @@ for_each_frame: tst frame, mask @ Check for address exceptions > > * start. This value gets updated to be the function start later if it is > > * possible. > > */ > > -1001: ldr sv_pc, [frame, #4] @ get saved 'pc' > > -1002: ldr sv_fp, [frame, #0] @ get saved fp > > +load_pc: ldr sv_pc, [frame, #4] @ get saved 'pc' > > +load_fp: ldr sv_fp, [frame, #0] @ get saved fp > > > > teq sv_fp, mask @ make sure next frame exists > > beq no_frame > > @@ -142,7 +142,7 @@ for_each_frame: tst frame, mask @ Check for address exceptions > > * registers for the current function, but the stacktrace is still printed > > * properly. > > */ > > -1003: ldr sv_lr, [sv_fp, #4] @ get saved lr from next frame > > +load_lr: ldr sv_lr, [sv_fp, #4] @ get saved lr from next frame > > > > tst sv_lr, #0 @ If there's no previous lr, > > beq finished_setup @ we're done. > > @@ -166,8 +166,7 @@ finished_setup: > > /* > > * Print the function (sv_pc) and where it was called from (sv_lr). > > */ > > -1004: mov r0, sv_pc > > - > > + mov r0, sv_pc > > mov r1, sv_lr > > mov r2, frame > > bic r1, r1, mask @ mask PC/LR for the mode > > @@ -182,7 +181,7 @@ finished_setup: > > * pointer the comparison will fail and no registers will print. Unwinding will > > * continue as if there had been no registers stored in this frame. > > */ > > -1005: ldr r1, [sv_pc, #0] @ if stmfd sp!, {..., fp, lr} > > +load_stmfd: ldr r1, [sv_pc, #0] @ if stmfd sp!, {..., fp, lr} > > ldr r3, .Lopcode @ instruction exists, > > teq r3, r1, lsr #11 > > ldr r0, [frame] @ locals are stored in > > @@ -201,7 +200,7 @@ finished_setup: > > mov frame, sv_fp @ above the current frame > > bhi for_each_frame > > > > -1006: adr r0, .Lbad > > +bad_frame: adr r0, .Lbad > > mov r1, loglvl > > mov r2, frame > > bl printk > > @@ -216,11 +215,10 @@ bad_lr: mov sv_fp, #0 > > ENDPROC(c_backtrace) > > .pushsection __ex_table,"a" > > .align 3 > > - .long 1001b, 1006b > > - .long 1002b, 1006b > > - .long 1003b, 1006b > > - .long 1004b, 1006b > > - .long 1005b, 1006b > > + .long load_pc, bad_frame > > + .long load_fp, bad_frame > > + .long load_lr, bad_frame > > + .long load_stmfd, bad_frame > > Load_stmfd should get its own fixup > handler since it should emit errors about a bad > pc, not a bad frame pointer. Yeah, I can add that. It's a little orthogonal though to this patch that renames labels. I'd consider more so a pre-existing bug. Let me add a patch to the series that gives it a new fixup handler, separate from the label renaming, in a v2 of the series. > > > .long prev_call, bad_lr > > .popsection > > > > -- > > 2.28.0.163.g6104cc2f0b6-goog > >
diff --git a/arch/arm/lib/backtrace-clang.S b/arch/arm/lib/backtrace-clang.S index 40eb2215eaf4..7dad2a6843a5 100644 --- a/arch/arm/lib/backtrace-clang.S +++ b/arch/arm/lib/backtrace-clang.S @@ -121,8 +121,8 @@ for_each_frame: tst frame, mask @ Check for address exceptions * start. This value gets updated to be the function start later if it is * possible. */ -1001: ldr sv_pc, [frame, #4] @ get saved 'pc' -1002: ldr sv_fp, [frame, #0] @ get saved fp +load_pc: ldr sv_pc, [frame, #4] @ get saved 'pc' +load_fp: ldr sv_fp, [frame, #0] @ get saved fp teq sv_fp, mask @ make sure next frame exists beq no_frame @@ -142,7 +142,7 @@ for_each_frame: tst frame, mask @ Check for address exceptions * registers for the current function, but the stacktrace is still printed * properly. */ -1003: ldr sv_lr, [sv_fp, #4] @ get saved lr from next frame +load_lr: ldr sv_lr, [sv_fp, #4] @ get saved lr from next frame tst sv_lr, #0 @ If there's no previous lr, beq finished_setup @ we're done. @@ -166,8 +166,7 @@ finished_setup: /* * Print the function (sv_pc) and where it was called from (sv_lr). */ -1004: mov r0, sv_pc - + mov r0, sv_pc mov r1, sv_lr mov r2, frame bic r1, r1, mask @ mask PC/LR for the mode @@ -182,7 +181,7 @@ finished_setup: * pointer the comparison will fail and no registers will print. Unwinding will * continue as if there had been no registers stored in this frame. */ -1005: ldr r1, [sv_pc, #0] @ if stmfd sp!, {..., fp, lr} +load_stmfd: ldr r1, [sv_pc, #0] @ if stmfd sp!, {..., fp, lr} ldr r3, .Lopcode @ instruction exists, teq r3, r1, lsr #11 ldr r0, [frame] @ locals are stored in @@ -201,7 +200,7 @@ finished_setup: mov frame, sv_fp @ above the current frame bhi for_each_frame -1006: adr r0, .Lbad +bad_frame: adr r0, .Lbad mov r1, loglvl mov r2, frame bl printk @@ -216,11 +215,10 @@ bad_lr: mov sv_fp, #0 ENDPROC(c_backtrace) .pushsection __ex_table,"a" .align 3 - .long 1001b, 1006b - .long 1002b, 1006b - .long 1003b, 1006b - .long 1004b, 1006b - .long 1005b, 1006b + .long load_pc, bad_frame + .long load_fp, bad_frame + .long load_lr, bad_frame + .long load_stmfd, bad_frame .long prev_call, bad_lr .popsection
Removes the 1004 label; it was neither a control flow target, nor an instruction we expect to produce a fault. Gives the labels slightly more readable names. The `b` suffixes are handy to disambiguate between labels of the same identifier when there's more than one. Since these labels are unique, let's just give them names. Signed-off-by: Nick Desaulniers <ndesaulniers@google.com> --- arch/arm/lib/backtrace-clang.S | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-)