It is indeed used to calculate an address offset, but as it is already checked against NOCPU, it should be good:
gnu/usr.bin/gdb/kgdb/kthr.c: kt->cpu = td.td_oncpu; gnu/usr.bin/gdb/kgdb/trgt_i386.c: if (kt == NULL || kt->cpu == NOCPU) gnu/usr.bin/gdb/kgdb/trgt_i386.c: addr += (kt->cpu * NGDT + GPROC0_SEL) * sizeof(sd); Maybe the test could be strengthened to check that kt->cpu >= 0, but it might be overkill. -Dimitry > On 11 Nov 2014, at 00:17, Adrian Chadd <adr...@freebsd.org> wrote: > > just double-check that the cpu id isn't used to size anything; I've > seen it used as an offset into stuff, and NOCPU would've been entry > 255 in the array, not -1. > > Ian pointed this out to me recently and I've only just started digging into > it. > > > > -adrian > > > On 10 November 2014 12:35, John Baldwin <j...@freebsd.org> wrote: >> On Monday, November 10, 2014 09:13:08 PM Dimitry Andric wrote: >>> I noted something similar for kgdb, when compiled with gcc: >>> >>> cc1: warnings being treated as errors >>> /usr/src/gnu/usr.bin/gdb/kgdb/trgt_i386.c: In function >>> 'kgdb_trgt_fetch_tss': /usr/src/gnu/usr.bin/gdb/kgdb/trgt_i386.c:142: >>> warning: comparison is always false due to limited range of data type >>> >>> In gnu/usr.bin/gdb/kgdb/kgdb.h, there is: >>> >>> struct kthr { >>> struct kthr *next; >>> uintptr_t paddr; >>> uintptr_t kaddr; >>> uintptr_t kstack; >>> uintptr_t pcb; >>> int tid; >>> int pid; >>> u_char cpu; >>> }; >>> >>> The cpu field is assigned from td.td_oncpu (which is an int) in >>> kgdb_thr_add_procs(), so I think it should be safe to change it to an >>> int too: >>> >>> Index: gnu/usr.bin/gdb/kgdb/kgdb.h >>> =================================================================== >>> --- gnu/usr.bin/gdb/kgdb/kgdb.h (revision 274350) >>> +++ gnu/usr.bin/gdb/kgdb/kgdb.h (working copy) >>> @@ -41,7 +41,7 @@ >>> uintptr_t pcb; >>> int tid; >>> int pid; >>> - u_char cpu; >>> + int cpu; >>> }; >>> >>> extern struct kthr *curkthr; >> >> Yes, please commit. >> >> -- >> John Baldwin
signature.asc
Description: Message signed with OpenPGP using GPGMail