Jak już jesteśmy przy tajemniczych padach...
Jacek Konieczny
jajcus w pld.org.pl
Pon, 12 Sty 2004, 18:20:29 CET
... na różnych architekturach, to ja mam nową ciekawostkę rodem
z AMD64:
Budowa pam.spec wywala się z:
bison -y -d `test -f 'pam_conv.y' || echo './'`pam_conv.y
Memory fault
Z gdb udało mi się uzyskać tyle:
#0 0x000000000041fca7 in quotearg_buffer_restyled (buffer=0x536040
"\"OK", buffersize=256,
arg=0x0, argsize=18446744073709551615,
quoting_style=c_quoting_style, o=0xbfffaf40)
at quotearg.c:481
#1 0x000000000041fdc1 in quotearg_buffer (buffer=0x536040 "\"OK",
buffersize=256, arg=0x0,
argsize=18446744073709551615, o=0x0) at quotearg.c:503
#2 0x000000000041feaf in quotearg_n_options (n=0, arg=0x0,
argsize=18446744073709551615,
options=0xbfffaf40) at quotearg.c:560
#3 0x0000000000420006 in quotearg_n_style (n=0, s=256, arg=0x0) at
quotearg.c:600
#4 0x00000000004129c3 in epilogue_augment (
epilogue=0x544d40 "\n\n#include \"lex.yy.c\"\n\nconst char
*old_to_new_ctrl_flag(const char *old)\n{\n static const char
*clist@{@} =
{\n\t\"requisite\",\n\t\"required\",\n\t\"sufficient\",\n\t\"optional\",\n\tNULL,\n
};\n int i;\n\n for"..., loc=
{start = {file = 0x0, line = 4271808, column = 0}, end = {file =
0x538600 "pam_conv.y", line = 205, column = 1}}) at reader.c:93
#5 0x000000000040fb28 in gram_parse () at parse-gram.y:399
#6 0x000000000041394e in reader () at reader.c:501
#7 0x0000000000406a0d in main (argc=4, argv=0xbffff268) at main.c:80
Podejżane jest to:
{start = {file = 0x0, line = 4271808, column = 0}, end = {file =
0x538600 "pam_conv.y", line = 205, column = 1}}
To się bierze w tym kawałku kodu bisona (src/reader.c):
void
epilogue_augment (const char *epilogue, location loc)
{
char *extension = NULL;
obstack_fgrow1 (&muscle_obstack, "]b4_syncline([[%d]], [[",
loc.start.line);
MUSCLE_OBSTACK_SGROW (&muscle_obstack,
quotearg_style (c_quoting_style, loc.start.file));
loc.start.file jest równe NULL, i stąd później się wykrzacza.
Sprawdziłem że na i686 w tym miejscu loc.start.file!=NULL, więc wyraźnie
na AMD64 jest coś nie tak.
IMHO felerny może być albo bison albo flex, ewentualnie kompilator (przy
kompilacji bez optmalizacji się nie sypie). Ani w przypadku flexa, ani w
przypadku bisona kompilator nie daje żadnych podejrzanych warningów (po
dodaniu -Wall do %{rpmcflags}). Jeden mało-podejrzany warning w bisonie
poprawiłem, ale nie pomogło.
Jest jakiś chętny do rozwiązania zagadki?
Pozdrowienia,
Jacek
Więcej informacji o liście dyskusyjnej pld-devel-pl