Message ID | 20210615064720.21950-1-mark-pk.tsai@mediatek.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v2] recordmcount: Correct st_shndx handling | expand |
On Tue, 15 Jun 2021 14:47:20 +0800 Mark-PK Tsai <mark-pk.tsai@mediatek.com> wrote: > One should only use st_shndx when >SHN_UNDEF and <SHN_LORESERVE. When > SHN_XINDEX, then use .symtab_shndx. Otherwise use 0. > > This handles the case: st_shndx >= SHN_LORESERVE && st_shndx != SHN_XINDEX. > > Reported-by: Mark-PK Tsai <mark-pk.tsai@mediatek.com> > Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> > Tested-by: Mark-PK Tsai <mark-pk.tsai@mediatek.com> > Signed-off-by: Mark-PK Tsai <mark-pk.tsai@mediatek.com> Please explain the two signed-off-by's above. If you are just tweaking Peter's original patch, please add at the start: From: Peter Zijlstra (Intel) <peterz@infradead.org> And then just above your signed off by, add what you changed: Tested-by: Mark-PK Tsai <mark-pk.tsai@mediatek.com> [ Changed something ] Signed-off-by: Mark-PK Tsai <mark-pk.tsai@mediatek.com> But state what you changed. Thanks! -- Steve
> On Tue, 15 Jun 2021 14:47:20 +0800 > Mark-PK Tsai <mark-pk.tsai@mediatek.com> wrote: > > > One should only use st_shndx when >SHN_UNDEF and <SHN_LORESERVE. When > > SHN_XINDEX, then use .symtab_shndx. Otherwise use 0. > > > > This handles the case: st_shndx >= SHN_LORESERVE && st_shndx != SHN_XINDEX. > > > > Reported-by: Mark-PK Tsai <mark-pk.tsai@mediatek.com> > > Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> > > Tested-by: Mark-PK Tsai <mark-pk.tsai@mediatek.com> > > Signed-off-by: Mark-PK Tsai <mark-pk.tsai@mediatek.com> > > Please explain the two signed-off-by's above. If you are just tweaking > Peter's original patch, please add at the start: > > From: Peter Zijlstra (Intel) <peterz@infradead.org> > > And then just above your signed off by, add what you changed: > > Tested-by: Mark-PK Tsai <mark-pk.tsai@mediatek.com> > [ Changed something ] > Signed-off-by: Mark-PK Tsai <mark-pk.tsai@mediatek.com> > > But state what you changed. > > Thanks! > > -- Steve Sorry for messing up. I've fixed it in v3. Thanks for your comment.
On Wed, 16 Jun 2021 00:32:45 +0800 Mark-PK Tsai <mark-pk.tsai@mediatek.com> wrote: > > On Tue, 15 Jun 2021 14:47:20 +0800 > > Mark-PK Tsai <mark-pk.tsai@mediatek.com> wrote: > > > > > One should only use st_shndx when >SHN_UNDEF and <SHN_LORESERVE. When > > > SHN_XINDEX, then use .symtab_shndx. Otherwise use 0. > > > > > > This handles the case: st_shndx >= SHN_LORESERVE && st_shndx != SHN_XINDEX. > > > > > > Reported-by: Mark-PK Tsai <mark-pk.tsai@mediatek.com> > > > Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> > > > Tested-by: Mark-PK Tsai <mark-pk.tsai@mediatek.com> > > > Signed-off-by: Mark-PK Tsai <mark-pk.tsai@mediatek.com> > > > > Please explain the two signed-off-by's above. If you are just tweaking > > Peter's original patch, please add at the start: > > > > From: Peter Zijlstra (Intel) <peterz@infradead.org> > > > > And then just above your signed off by, add what you changed: > > > > Tested-by: Mark-PK Tsai <mark-pk.tsai@mediatek.com> > > [ Changed something ] > > Signed-off-by: Mark-PK Tsai <mark-pk.tsai@mediatek.com> > > > > But state what you changed. > > > > Thanks! > > > > -- Steve > > Sorry for messing up. No problem. It's a learning process. > I've fixed it in v3. Thanks, -- Steve
diff --git a/scripts/recordmcount.h b/scripts/recordmcount.h index f9b19524da11..ef9c3425f86b 100644 --- a/scripts/recordmcount.h +++ b/scripts/recordmcount.h @@ -194,13 +194,18 @@ static unsigned int get_symindex(Elf_Sym const *sym, Elf32_Word const *symtab, unsigned long offset; int index; - if (sym->st_shndx != SHN_XINDEX) + if (w2(sym->st_shndx) > SHN_UNDEF && + w2(sym->st_shndx) < SHN_LORESERVE) return w2(sym->st_shndx); - offset = (unsigned long)sym - (unsigned long)symtab; - index = offset / sizeof(*sym); + if (w2(sym->st_shndx) == SHN_XINDEX) { + offset = (unsigned long)sym - (unsigned long)symtab; + index = offset / sizeof(*sym); - return w(symtab_shndx[index]); + return w(symtab_shndx[index]); + } + + return 0; } static unsigned int get_shnum(Elf_Ehdr const *ehdr, Elf_Shdr const *shdr0)