On 2016-Oct-28, at 7:29 AM, John Baldwin <jhb at freebsd.org> wrote:

> On Tuesday, October 25, 2016 11:40:38 AM Mark Millard wrote:
>> [The following has been reported in: 
>> https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=213778 .]
>> 
>> In trying to build lang/gcc6 xgcc's cc1 got some SIGSYS examples. In trying 
>> to track things down I ran into truss getting a SIGSEGV when it tries to 
>> handle the situation. . .
>> 
>> In truss's enter_syscall there is (from a live gdb on truss, after the 
>> segmentation fault):
>> 
>> 380          t->cs.name = sysdecode_syscallname(t->proc->abi->abi, 
>> t->cs.number);
>> 381          if (t->cs.name == NULL)
>> (gdb) 
>> 382                  fprintf(info->outfile, "-- UNKNOWN %s SYSCALL %d --\n",
>> 383                      t->proc->abi->type, t->cs.number);
>> 384  
>> 385          sc = get_syscall(t->cs.name, narg);
>> 386          t->cs.nargs = sc->nargs;
>> 387          assert(sc->nargs <= nitems(t->cs.s_args));
>> 388  
>> 389          t->cs.sc = sc;
>> 
>> (gdb) print *t
>> $2 = {entries = {le_next = 0x0, le_prev = 0x20617070}, proc = 0x20617060, 
>> tid = 100150, in_syscall = 1, cs = {sc = 0x0, name = 0x0, number = 
>> 580828064, args = 0x2061b0c0, nargs = 0, 
>>    s_args = 0x2061b0ec}, before = {tv_sec = 1477418265, tv_nsec = 
>> 492342263}, after = {tv_sec = 1477418265, tv_nsec = 492496630}}
>> 
>> (gdb) print sc
>> $3 = (struct syscall *) 0x0
>> 
>> So line 386 listed above gets a segmentation fault for sc->nargs when 
>> t->cs.name is a NULL pointer: sc ends up NULL.
>> 
>> Looking at the two things that the fprintf on lines 382 and 383 would report:
>> 
>> (gdb) print t->proc->abi->type
>> $4 = 0x10166 "FreeBSD ELF32"
>> 
>> (gdb) print t->cs.number
>> $5 = 580828064
>> 
>> (gdb) print narg
>> $6 = 0
>> 
>> (that last is for context for the get_syscall arguments).
>> 
>> FYI: 580828064 = 0x229EBBA0
> 
> I have a patchset I have tested some in a git branch that I believe fixes 
> handling of
> unknown system calls.  Please try this:
> 
> https://github.com/freebsd/freebsd/compare/master...bsdjhb:truss_unknown
> 
> (Add .diff to get a diff you can apply with patch)
> 
> -- 
> John Baldwin

Sorry it took so long to try the build. . .

I got a compile failure for use of bool in my stable/11 context for the BPI-M3 
build that the truss problem was discovered with (quoting the build log below):

> --- main.o ---
> cc -target armv6-gnueabihf-freebsd11.0 
> --sysroot=/usr/local/src/crochet/work/obj/arm.armv6/usr/src/tmp 
> -B/usr/local/src/crochet/work/obj/arm.armv6/usr/src/tmp/usr/bin -O -pipe 
> -I/usr/src/usr.bin/truss -I. -I/usr/src/usr.bin/truss/../../sys   -g -MD  
> -MF.depend.main.o -MTma
> in.o -std=gnu99 -Wsystem-headers -Wall -Wno-format-y2k -W 
> -Wno-unused-parameter -Wstrict-prototypes -Wmissing-prototypes 
> -Wpointer-arith -Wreturn-type -Wcast-qual -Wwrite-strings -Wswitch -Wshadow 
> -Wunused-parameter -Wcast-align -Wchar-subscripts -Winline -Wnested-externs 
> -Wredundant-decls -Wold-style-definition -Wno-pointer-sign 
> -Wmissing-variable-declarations -Wthread-safety -Wno-empty-body 
> -Wno-string-plus-int -Wno-unused-const-variable  -Qunused-arguments  -c 
> /usr/src/usr.bin/truss/main.c -o main.o
> In file included from /usr/src/usr.bin/truss/main.c:53:
> /usr/src/usr.bin/truss/syscall.h:75:2: error: unknown type name 'bool'
>         bool unknown;   /* Uknown system call */
>         ^
> 1 error generated.
> *** [main.o] Error code 1
> 
> make[4]: stopped in /usr/src/usr.bin/truss
> 1 error


In C99 bool is a macro from <stdbool.h> and _Bool is the  C99 type itself. So 
apparently <stdbool.h> (or an equivalent) was not directly or indirectly 
included. (The macros true and false and __bool_true_false_are_defined are also 
from <stdbool.h> .)

Which way do you want the C99 typing to be handled for this: native C99 with no 
<stdbool.h> required? Use <stdbool.h> ?


Side note:

I'll see about getting my normal stable/11 build environment going for the 
BPI-M3 instead of using the crochet from my first-time build for the target.

===
Mark Millard
markmi at dsl-only.net

_______________________________________________
freebsd-current@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "freebsd-current-unsubscr...@freebsd.org"

Reply via email to