Date: Fri, 16 Jul 2010 12:51:38 +0300 From: "Reko Turja" <reko.turja@liukuma.net> To: "Jeremy Chadwick" <freebsd@jdc.parodius.com> Cc: "Mikhail T." <mi+thun@aldan.algebra.com>, freebsd-stable@freebsd.org, Henrik /KaarPoSoft <henrik@kaarposoft.dk> Subject: Re: openldap client GSSAPI authentication segfaults in fbsd8stablei386 Message-ID: <94382A43AE5842FD9571AE05688F09D8@rivendell> In-Reply-To: <20100716092209.GA99001@icarus.home.lan> References: <4C3CC831.7040005@kaarposoft.dk> <20100713210729.GA11943@icarus.home.lan> <0228E401B70A4023A6F86A2ADAE59EF9@rivendell> <008D0251AE4F4A2DBAA1369410565B61@rivendell> <20100715162251.GA73929@icarus.home.lan> <20100716083617.GA97981@icarus.home.lan> <3FE6787E5CAC4C108C031CA6C8044FE4@rivendell> <20100716092209.GA99001@icarus.home.lan>
next in thread | previous in thread | raw e-mail | index | archive | help
>> void >> 232 _gss_mg_error(struct _gss_mech_switch *m, OM_uint32 maj, >> OM_uint32 min) >> 233 { >> 234 OM_uint32 major_status, minor_status; >> 235 OM_uint32 message_content; >> 236 struct mg_thread_ctx *mg; >> 237 >> 238 mg =3D &last_error_context; >> 239 >> 240 gss_release_buffer(&minor_status, &mg->maj_error); >> 241 gss_release_buffer(&minor_status, &mg->min_error); >> 242 >> 243 mg->mech =3D &m->gm_mech_oid; >> 244 mg->maj_stat =3D maj; >> >> when I give following comands, gdb tells me: >> >> (gdb) p last_error_context >> Cannot find thread-local variables on this target >> (gdb) p &last_error_context >> Cannot find thread-local variables on this target >> (gdb) p mg >> No symbol "mg" in current context. >> (gdb) > > I'm not sure if you're familiar with C or not. > > This is because gdb's context is at the wrong frame. In the=20 > backtrace > you provided originally, you'd need to do: > > (gdb) frame 2 > > To look at the variables associated with gss_display_status.c. > > last_error_context could be an exported variable (you'd need to look > through the source to find out where it's declared), so you might=20 > have > to print it with its source filename referenced. The print command=20 > I > gave you before (p/x filename.c::variable) didn't work, and that's a > surprise since the gdb documentation I read says it should. > > Also be aware that mg is a struct, so "p mg" won't tell you much,=20 > other > than whether or not it's null. You're probably more interested in > members of the struct, such as mg->maj_error and mg->min_error, and > other struct members. I gave f 2 before entering the commands above, and unless I'm much=20 mistaken, 'p mg' should at least give the pointer to the start of the=20 struct in question, so 'No symbol "mg" in current context' is mildly=20 interesting reply from GDB :) If I understand the code in question=20 right the last_error_context's address should be copied to mg for=20 accessing the error structure defined elsewhere in the scope of the=20 while. the definition is in same file and is as follows: 176 #if defined(__sparc64__) || defined(__arm__) ||=20 defined(__mips__) 177 178 /* 179 * These platforms don't support TLS on FreeBSD - threads will=20 just 180 * have to step on each other's error values for now. 181 */ 182 #define __thread 183 184 #endif 185 186 struct mg_thread_ctx { 187 gss_OID mech; 188 OM_uint32 maj_stat; 189 OM_uint32 min_stat; 190 gss_buffer_desc maj_error; 191 gss_buffer_desc min_error; 192 }; 193 static __thread struct mg_thread_ctx last_error_context -Reko=20
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?94382A43AE5842FD9571AE05688F09D8>