En nuestro articulo anterior mencionamos que 'tendríamos que reinstalar emacs-23' en archlinux-arm-32-bits. Pero ¿Por que reinstalar? ¿Que paso con la instalación anterior?. La respuesta a dichas preguntas son que con anterioridad habíamos compilado emacs-23 con muchas dificultades, y como no ejecutaba, ya que al iniciar ocurría un 'segfault', lo compilamos con "CANNOT_DUMP=yes", todo bien por unos días, pero luego después de algunos días comenzó también a ocurrir el 'segfault', no siempre tenemos tiempo de poder recompilar inmediatamente, así que dejamos de usar emacs-23 por algún tiempo. Pero esta era 'la semana del emacs-23', así que era momento de recompilar. Sin mas que decir, a describir el proceso.
consiguiendo los fuentes del emacs-23
Lo bueno es que ya tenemos nuestro PKGBUILD de emacs-23. La ultima vez que lo compilamos con ayuda de Michael Albinus conseguir actualizar de manera manual la versión del tramp. Así que nuestro emacs-23.4 tiene la versión de tramp 2.3.1. Así que actualizar el tramp de la versión distribuida con emacs-23.4 siempre sera manual, pero hicimos un script y un patch para que no tome demasiado tiempo este proceso y también sea a prueba de errores. También debemos de descargar los patch de gentoo para poder compilar el emacs-23.
compilando emacs-23 con gcc-11 y glibc 2.35
Como los archivos patch mencionados modifican la detección del autotools, es necesario correr 'autoreconf -fiv' en el folder './src/emacs-23.4'. Y después de esto solo hacer 'makepkg -e', esperar como 10m en nuestro SBC y se compilaría el paquete.
ejecutando emacs-23
Al instalar y ejecutar el binario del emacs-23 nos encontramos con este problema:
--8<---------------cut here---------------start------------->8--- Starting program: /usr/local/bin/emacsemacs23 -Q [Thread debugging using libthread_db enabled] Using host libthread_db library "/usr/lib/libthread_db.so.1". Program received signal SIGSEGV, Segmentation fault. 0xb5ec4360 in malloc_usable_size () from /usr/lib/libc.so.6 (gdb) bt #0 0xb5ec4360 in malloc_usable_size () at /usr/lib/libc.so.6 #1 0xb2cca4c8 in () at /usr/lib/libnss_resolve.so.2 #2 0xb2cd3e34 in () at /usr/lib/libnss_resolve.so.2 #3 0xb2cd4988 in () at /usr/lib/libnss_resolve.so.2 #4 0xb2cd8e00 in () at /usr/lib/libnss_resolve.so.2 #5 0xb2cd9eac in () at /usr/lib/libnss_resolve.so.2 #6 0xb2cc2bd4 in _nss_resolve_gethostbyname4_r () at /usr/lib/libnss_resolve.so.2 #7 0xb5f0efa8 in gaih_inet.constprop () at /usr/lib/libc.so.6 #8 0xb5f0fc54 in getaddrinfo () at /usr/lib/libc.so.6 #9 0x001053ac in init_system_name () at sysdep.c:1793 #10 0x0015c518 in init_editfns () at editfns.c:152 #11 0x0001b050 in main (argc=<optimized out>, argv=0xbefffa04) at emacs.c:1747 --8<---------------cut here---------------end--------------->8---
Solucionamos el problema del getaddrinfo con el siguiente patch file.
,---- [ patch ] | 003_ignore_getaddrinfo_on_sacsa.patch `----
--8<---------------cut here---------------start------------->8--- --- emacs-23.4/configure.in.orig +++ emacs-23.4/configure.in @@ -2377,7 +2377,7 @@ rename closedir mkdir rmdir sysinfo getrusage get_current_dir_name \ random lrand48 bcopy bcmp logb frexp fmod rint cbrt ftime setsid \ strerror fpathconf select mktime euidaccess getpagesize tzset setlocale \ -utimes getrlimit setrlimit setpgid getcwd getwd shutdown getaddrinfo \ +utimes getrlimit setrlimit setpgid getcwd getwd shutdown \ __fpending mblen mbrlen mbsinit strsignal setitimer ualarm index rindex \ sendto recvfrom getsockopt setsockopt getsockname getpeername \ gai_strerror mkstemp getline getdelim mremap memmove fsync sync bzero \ Diff finished. Fri Mar 18 15:46:54 2022 --8<---------------cut here---------------end--------------->8---
Al aplicar el patch y compilar nos encontramos con otro problema sumamente parecido esta vez con la función gethostbyname.
--8<---------------cut here---------------start------------->8--- Starting program: /usr/local/bin/emacs-23 [Thread debugging using libthread_db enabled] Using host libthread_db library "/usr/lib/libthread_db.so.1". Program received signal SIGSEGV, Segmentation fault. 0xb5ec4360 in malloc_usable_size () from /usr/lib/libc.so.6 (gdb) bt #0 0xb5ec4360 in malloc_usable_size () at /usr/lib/libc.so.6 #1 0xb2cca4c8 in () at /usr/lib/libnss_resolve.so.2 #2 0xb2cd3e34 in () at /usr/lib/libnss_resolve.so.2 #3 0xb2cd4988 in () at /usr/lib/libnss_resolve.so.2 #4 0xb2cd8e00 in () at /usr/lib/libnss_resolve.so.2 #5 0xb2cd9eac in () at /usr/lib/libnss_resolve.so.2 #6 0xb2cc35b4 in _nss_resolve_gethostbyname3_r () at /usr/lib/libnss_resolve.so.2 #7 0xb2cc4720 in _nss_resolve_gethostbyname_r () at /usr/lib/libnss_resolve.so.2 #8 0xb5f43cd0 in gethostbyname_r@@GLIBC_2.4 () at /usr/lib/libc.so.6 #9 0xb5f43270 in gethostbyname () at /usr/lib/libc.so.6 #10 0x0010537c in init_system_name () at sysdep.c:1828 #11 0x0015c488 in init_editfns () at editfns.c:152 #12 0x0001b050 in main (argc=<optimized out>, argv=0xbefff9e4) at emacs.c:1747 --8<---------------cut here---------------end--------------->8---
Para solucionar este inconveniente aplicamos el siguiente patch.
,---- [ patch ] | 004_avoid_gethostbyname_on_sacsa.patch `----
--8<---------------cut here---------------start------------->8--- --- emacs-23.4/src/sysdep.c.orig +++ emacs-23.4/src/sysdep.c @@ -1825,7 +1825,7 @@ #ifdef TRY_AGAIN h_errno = 0; #endif - hp = gethostbyname (hostname); + //hp = gethostbyname (hostname); #ifdef TRY_AGAIN if (! (hp == 0 && h_errno == TRY_AGAIN)) #endif Diff finished. Fri Mar 18 22:24:56 2022 --8<---------------cut here---------------end--------------->8---
Después de aplicar este patch emacs-23 inicio sin ningún problema en archlinux-arm-32bits. Con esta tarea completada ya tenemos, casi todo listo para comparar emacs-23 versus emacs-with-native-compilation.
Last change: 22.03.2022 04:51 |