Messages in this thread | | | From | Nick Desaulniers <> | Date | Mon, 10 Aug 2020 15:32:32 -0700 | Subject | Re: [PATCH 3/4] ARM: backtrace-clang: give labels more descriptive names |
| |
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 > >
-- Thanks, ~Nick Desaulniers
| |