Меnu:


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

blog comments powered by Disqus