ルギア君の戯言

雑多な記事。

7年1月4日 (水) - TeX Live 20100722 + e-pTeX 20110315 奮闘記 その7

みんな「みーっつ! みんな笑顔で明るいあるぱ城!」
ドンちゃん「よし、今日も仕事始め!」
ルギア君レン君「あははは。」
ドンちゃん「何か変なことでも言ったか?」
ルギア君「そう言うと毎日が『仕事始め』みたいだなと思ってさ。」
ドンちゃん「そう言われればそうだな…。」
キリルン「『仕事始め』って何?」
レン君「『仕事始め』とは、1年ないしは一生のうちで初めて仕事をする日のことだ。」
キリルン「なるほど。でも昨日も一昨日もそういってましたよね?」
レン君「人間の世界では普通 1月1日 から 1月3日 までは仕事は休み*1だからな。」


……………………


ルギア君「ふむ、auctex がビルドできないと言っているな。どれ、調べてみるか。」
キリルン「…」
ルギア君「…」
キリルン「…」
ルギア君「…、たしかに、Segmentation Fault するなぁ。ん? っていうかこれ入力に関係なく*2 Segmentation Fault するぞ。」

[lugia@arpa-castle build]$ /usr/bin/tex
This is TeX, Version 3.1415926 (Web2C 2009)
**a
Segmentation fault

キリルン「それは一大事ですね。」

[lugia@arpa-castle build]$ gdb /usr/bin/tex
GNU gdb (GDB) Momonga Linux 8 (7.1-7m.mo8)
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-momonga-linux".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /usr/bin/tex...(no debugging symbols found)...done.
(gdb) run
Starting program: /usr/bin/tex 
a
This is TeX, Version 3.1415926 (Web2C 2009)
**
Program received signal SIGSEGV, Segmentation fault.
__memcpy_sse2 () at ../sysdeps/x86_64/memcpy.S:168
168    ../sysdeps/x86_64/memcpy.S: そのようなファイルやディレクトリはありません.
       in ../sysdeps/x86_64/memcpy.S
(gdb)

ルギア君「memcpy.S かー。memcpy と言えば、」

MEMCPY(3)                  Linux Programmer’s Manual                 MEMCPY(3)

名前
       memcpy - メモリ領域をコピーする。

書式
       #include <string.h>

       void *memcpy(void *dest, const void *src, size_t n);

説明
       memcpy() はメモリ領域 src の先頭 n バイトをメモリ領域 dest にコピーする
       。コピー元の領域とコピー先の領域が重なってはならない。重なっている場 合
       は memmove(3) を使うこと。

返り値
       memcpy() は dest へのポインタを返す。

準拠
       SVr4, 4.3BSD, C89, C99, POSIX.1-2001.

関連項目
       bcopy(3),  memccpy(3),  memmove(3),  mempcpy(3), strcpy(3), strncpy(3),
       wmemcpy(3)

                                  1993-04-10                         MEMCPY(3)

ルギア君「に該当するんじゃないか?」
キリルン「それはエラーにはならないんじゃなイカ?」
ルギア君「うーん…。」

$ strace /usr/bin/tex
execve("/usr/bin/tex", ["/usr/bin/tex"], [/* 84 vars */]) = 0
brk(0)                                  = 0x1501000
(中略)
read(3, "brokenpenaltybinoppenaltyrelpena"..., 24576) = 24576
read(3, "tachermoustachelgrouprgrouparrow"..., 4096) = 4096
--- {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=0x7f56195e1018} (Segmentation fault) ---
+++ killed by SIGSEGV +++

ルギア君「3 は tex.fmt だよ。」

$ valgrind /usr/bin/tex
==27242== Memcheck, a memory error detector
(中略)
==27242== Invalid write of size 1
==27242==    at 0x3E47688963: __GI_memcpy (memcpy.S:168)
==27242==    by 0x3E4767325C: _IO_file_xsgetn (fileops.c:1429)
==27242==    by 0x3E476678C2: fread (iofread.c:44)
==27242==    by 0x43874C: ??? (in /usr/bin/tex)
==27242==    by 0x408392: ??? (in /usr/bin/tex)
==27242==    by 0x40C43C: ??? (in /usr/bin/tex)
==27242==    by 0x401C2D: ??? (in /usr/bin/tex)
==27242==    by 0x3E4762135C: (below main) (libc-start.c:226)
==27242==  Address 0xffffffffb93d4048 is not stack'd, malloc'd or (recently) free'd
==27242== 

キリルン「fread ですか。」
ルギア君「そうだな。やっぱり tex.fmt を読んでいる間に起こっているなぁ。ちなみに、TeX Live 2010 を使ってみたら、」

[lugia@arpa-castle doc]$ export TEXMFMAIN=/var/tmp/texlive-2010-0.5m.mo8-root-lugia/usr/share/texmf
[lugia@arpa-castle doc]$ export TEXMFDIST=/var/tmp/texlive-2010-0.5m.mo8-root-lugia/usr/share/texmf-dist
[lugia@arpa-castle doc]$ export TEXMFVAR=/var/tmp/texlive-2010-0.5m.mo8-root-lugia/usr/share/texmf-var
[lugia@arpa-castle doc]$ export TEXMFCONFIG=/var/tmp/texlive-2010-0.5m.mo8-root-lugia/usr/share/texmf-config
[lugia@arpa-castle doc]$ export LD_LIBRARY_PATH=/var/tmp/texlive-2010-0.5m.mo8-root-lugia/usr/lib64:$LD_LIBRARY_PATH
[lugia@arpa-castle doc]$ /var/tmp/texlive-2010-0.5m.mo8-root-lugia/usr/bin/ptex
This is pTeXk, Version 3.1415926-p3.1.11 (utf8.euc) (TeX Live 2010)
 restricted \write18 enabled.
**\documentclass{jsarticle}
! Undefined control sequence.
<*> \documentclass
                  {jsarticle}
?  
! Emergency stop.
<*> \documentclass
                  {jsarticle}
No pages of output.
Transcript written on texput.log.
[lugia@arpa-castle doc]$ /var/tmp/texlive-2010-0.5m.mo8-root-lugia/usr/bin/tex
This is TeX, Version 3.1415926 (TeX Live 2010)
**\documentclass{article}
fatal: memory exhausted (xmalloc of 18446744071586067984 bytes).
[lugia@arpa-castle doc]$

ルギア君「となり、Segmentation Fault ではなくなったが、使えないことには変わりない。」

[lugia@arpa-castle doc]$ valgrind /var/tmp/texlive-2010-0.5m.mo8-root-lugia/usr/bin/tex tex-ref.tex 
==29167== Memcheck, a memory error detector
==29167== Copyright (C) 2002-2010, and GNU GPL'd, by Julian Seward et al.
==29167== Using Valgrind-3.6.1 and LibVEX; rerun with -h for copyright info
==29167== Command: /var/tmp/texlive-2010-0.5m.mo8-root-lugia/usr/bin/tex tex-ref.tex
==29167==                                                                       
This is TeX, Version 3.1415926 (TeX Live 2010)                                  
==29167== Warning: silly arg (-2123483632) to malloc()                          
fatal: memory exhausted (xmalloc of 18446744071586067984 bytes).                

キリルンmalloc に負値を渡されたと、警告されていますね。」

[lugia@arpa-castle doc]$ calc
C-style arbitrary precision calculator (version 2.12.4.2)
Calc is open software. For license details type:  help copyright
[Type "exit" to exit, or "help" for help.]

; 2**32-2123483632
        2171483664
; 2**64-2123483632
        18446744071586067984

ルギア君「まあ、要するに、こんなにメモリ確保はできないわな。」
キリルン「そうですね。」
ルギア君「また、何かあったら報告するとしよう。」
キリルン「というか、この内容はほとんど報告になっていないような気がするでゲソ。」
ルギア君「…、それを言うな。」

*1:訳注: 全世界に共通することではない

*2:Ctrl+D (EOF) だけを入力したときは正常に異常終了する。