# [amule] Violación de Segmento (Solucionado)

## Popolous

¡Hola!

Tras reinstalar y afinar mi Gentoo para arquitectura de 64 bits, he instalado ya todos los paquetes que tenía (a excepción de un editor de LaTeX que tenía y que haré pronto). El problema viene con amule, que es el que venía usando y que me iba razonablemente bien. No he probado otras alternativas y estoy abierto a nuevas experiencias en ese sentido, pero antes, quisiera entender el por qué del fallo que tengo.

Cuando trato de arrancar amule desde el icono en KDE bajo el apartado de "Internet" no aparece nada. Bueno, el icono en pequeño del amule. Al no arrancar, trato de lanzarlo desde una consola y me da el consabido error de:

 *Quote:*   

> 
> 
> Violación de Segmento
> 
> 

 

Leyendo entre las guías de Gentoo, concretamente How to get meaningful backtraces in Gentoo pues he aprendido cómo "tracear" los fallos. He añadido lo siguiente en el fichero /etc/make.conf:

```

FEATURES="distlocks sandbox userpriv usersandbox splitdebug"

```

Y he logrado con gdb conseguir un archivo del fallo:

 *gdb wrote:*   

> 
> 
> #0  0x0000000000651aaf in CryptoPP::ByteReverse<unsigned int> ()
> 
> #1  0x0000000000653669 in CryptoPP::IteratedHashBase<unsigned int, CryptoPP::Ha$
> ...

 

Y la salida de strace (truncada):

 *strace wrote:*   

> 
> 
> fstat(3, {st_mode=S_IFREG|0755, st_size=10096, ...}) = 0
> 
> mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f1b6426e000
> ...

 

Claro, para mí esto pues es un galimatías incomprensible. He mirado por errores parecidos en el foro y en bugzilla, pero no he visto nada. Os pongo la información de mi entorno:

```

# emerge --info

Portage 2.2_rc33 (default/linux/amd64/2008.0, gcc-4.3.3, glibc-2.10.1-r0, 2.6.30-gentoo-r4 x86_64)

=================================================================

System uname: Linux-2.6.30-gentoo-r4-x86_64-Intel-R-_Core-TM-2_CPU_T7200_@_2.00GHz-with-gentoo-2.0.1

Timestamp of tree: Fri, 31 Jul 2009 21:00:21 +0000

app-shells/bash:     4.0_p28

dev-java/java-config: 2.1.8-r1

dev-lang/python:     2.4.6, 2.5.4-r3, 2.6.2-r1

dev-python/pycrypto: 2.0.1-r6

dev-util/cmake:      2.6.4-r2

sys-apps/baselayout: 2.0.1

sys-apps/openrc:     0.4.3-r3

sys-apps/sandbox:    2.0

sys-devel/autoconf:  2.13, 2.63-r1

sys-devel/automake:  1.5, 1.7.9-r1, 1.8.5-r3, 1.9.6-r2, 1.10.2, 1.11

sys-devel/binutils:  2.19.1-r1

sys-devel/gcc-config: 1.4.1

sys-devel/libtool:   2.2.6a

virtual/os-headers:  2.6.30-r1

ACCEPT_KEYWORDS="amd64 ~amd64"

CBUILD="x86_64-pc-linux-gnu"

CFLAGS="-march=native -O2 -pipe -ggdb"

CHOST="x86_64-pc-linux-gnu"

CONFIG_PROTECT="/etc /usr/kde/3.5/env /usr/kde/3.5/share/config /usr/kde/3.5/shutdown /usr/share/config /var/lib/hsqldb"

CONFIG_PROTECT_MASK="/etc/ca-certificates.conf /etc/env.d /etc/env.d/java/ /etc/eselect/postgresql /etc/fonts/fonts.conf /etc/gconf /etc/gentoo-release /etc/php/apache2-php5/ext-active/ /etc/php/cgi-php5/ext-active/ /etc/php/cli-php5/ext-active/ /etc/revdep-rebuild /etc/sandbox.d /etc/terminfo /etc/texmf/language.dat.d /etc/texmf/language.def.d /etc/texmf/updmap.d /etc/texmf/web2c /etc/udev/rules.d"

CXXFLAGS="-march=native -O2 -pipe -ggdb"

DISTDIR="/usr/portage/distfiles"

FEATURES="distlocks fixpackages parallel-fetch preserve-libs protect-owned sandbox sfperms splitdebug strict unmerge-orphans userfetch userpriv usersandbox"

GENTOO_MIRRORS=" http://ftp.udc.es/gentoo/  http://trumpetti.atm.tut.fi/gentoo/  http://cesium.di.uminho.pt/pub/gentoo"

LANG="es_ES.UTF-8"

LC_ALL="es_ES.UTF-8"

LDFLAGS="-Wl,-O1"

LINGUAS="es"

MAKEOPTS="-j3"

PKGDIR="/usr/portage/packages"

PORTAGE_CONFIGROOT="/"

PORTAGE_RSYNC_EXTRA_OPTS="--timeout=180"

PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --compress --force --whole-file --delete --stats --timeout=180 --exclude=/distfiles --exclude=/local --exclude=/packages"

PORTAGE_TMPDIR="/var/tmp/"

PORTDIR="/usr/portage"

PORTDIR_OVERLAY="/usr/local/portage"

SYNC="rsync://rsync.gentoo.org/gentoo-portage"

USE="32bit 64bit acl admin amd64 berkdb bzip2 cli cracklib crypt cups dri fortran gdbm gpm iconv ipv6 isdnlog java midi mmx mudflap multilib ncurses nls nptl nptlonly openmp pam pcre perl pppd python readline reflection session spl sse sse2 ssl sysfs tcpd unicode xorg zlib" ALSA_CARDS="hda-intel" ALSA_PCM_PLUGINS="adpcm alaw asym copy dmix dshare dsnoop empty extplug file hooks iec958 ioplug ladspa lfloat linear meter mmap_emul mulaw multi null plug rate route share shm softvol" APACHE2_MODULES="actions alias auth_basic auth_digest authn_anon authn_dbd authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache dav dav_fs dav_lock dbd deflate dir disk_cache env expires ext_filter file_cache filter headers ident imagemap include info log_config logio mem_cache mime mime_magic negotiation proxy proxy_ajp proxy_balancer proxy_connect proxy_http rewrite setenvif so speling status unique_id userdir usertrack vhost_alias" ELIBC="glibc" INPUT_DEVICES="mouse keyboard evdev synaptics" KERNEL="linux" LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" LINGUAS="es" LIRC_DEVICES="alsa_usb hauppauge" NETBEANS_MODULES="apisupport harness ide java nb websvccommon cnd dlight enterprise ergonomics groovy identity mobility php profiler ruby webcommon" USERLAND="GNU" VIDEO_CARDS="radeon vesa"

Unset:  CPPFLAGS, CTARGET, EMERGE_DEFAULT_OPTS, FFLAGS, INSTALL_MASK, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS

```

¿Alguna idea de por dónde van los tiros? A lo mejor es un bug de Amule con los 64 bits. En ese caso lo reportaría a ver si lo solucionan.

Muchas gracias.

¡Saludos!Last edited by Popolous on Sat Aug 15, 2009 7:07 pm; edited 1 time in total

----------

## pcmaster

Yo estoy usando amuled (en 32 bit) + amulegui (en 64 bit) y va bien.

La versión amule de 64 bit también inicia bien, pero no la uso.

Prueba a borrar (o cambiarle el nombre) al directorio ~/.aMule, y si con eso no falla copias los archivos uno a uno (los de clientes conocidos, etc) hasta que veas cuál produce el problema.

Nota: la versión amuled-2.2.5 tiene un fallo de memoria, va ocupando cada vez más, y se ralentiza en exceso, hay que ir reiniciando amuled de vez en cuando.

----------

## Popolous

¡Hola!

El directorio ~/.aMule no existía. De hecho, creo que lo crea la aplicación la primera vez que se inicia. Los cree en su día, junto con los subdirectorios ~/.aMule/Incoming y ~/.aMule/Temp. Luego sobre estos dos directorios monto las dos particiones respectivas...así lo hacía antes.

Creo que debe ser alguna librería dinámica que utiliza amule para iniciarse, pero no sé cuál para empezar a meterle mano.

Gracias.

¡Saludos!

----------

## pcmaster

Por lo que pone en las lineas 6 y 10 de tu archivo "gdb escribió" posiblemente sea un fallo de las x11-libs/wxGTK. ¿Con qué USEs has compilado wxGTK y amule? ¿Qué version de wxGTK tienes instalada?

----------

## Popolous

¡Hola!

Pues estas son las USE y versiones de los programas instalados (estoy en ~amd64).

 *Quote:*   

> 
> 
> x11-libs/wxGTK-2.8.10.1-r1  USE="X doc gnome gstreamer odbc opengl sdl -debug -pch"
> 
> net-p2p/amule-2.2.5  USE="geoip gtk nls stats unicode -daemon -debug -remote -upnp"
> ...

 

No sé si son muy exigentes. No voy a usar gnome, en un principio me lo planteé como segundo gestor de ventanas (junto con KDE como he tenido siempre), pero he instalado xfce4 y la verdad es que de momento lo voy a dejar. ¿Quito gnome y gtk de las USE flags?

¡Saludos!

----------

## pcmaster

Yo tengo estas USE:

```

# emerge -pv wxGTK amule

These are the packages that would be merged, in order:

Calculating dependencies... done!

[ebuild   R   ] x11-libs/wxGTK-2.8.9.1-r3  USE="X opengl pch sdl -debug -doc -gnome -gstreamer -odbc" 0 kB

[ebuild   R   ] net-p2p/amule-2.2.5  USE="gtk nls remote unicode -daemon -debug -geoip -stats -upnp" 0 kB

Total: 2 packages (2 reinstalls), Size of downloads: 0 kB

```

y me funciona. Prueba a deshabilitar la USE stats del amule a ver si va bien. O probar con la versión anterior de wxGTK (yo comprobaré si falla el mío cuando actualice, no haya algún fallo en la nueva versión).

----------

## Popolous

Gracias, voy primero a compilar con las mismas USE que tú y si no, rebajaré la versión de wxGTK.

Ya os cuento.

¡Saludos!

----------

## pcmaster

He actualizado wxGTk a la nueva versión (entre otros paquetes), y amule sigue funcionando igual. Quizá tu problema sean las USE o alguna dependencia rota. Prueba a hacer un revdep-rebuild.

----------

## sasho23

Hola, a mi me pasaba lo mismo y al consultar con un amigo lo arregle. Tuve que borrar ... es que no recuerdo, no fue ayer pero creo que era el "logfile" en el 

 *Quote:*   

> /home/tu_user/.aMule/logfile

 

si quieres prueba borrar el dicho file y al arrancar amule deberia crearlo de nuevo. Espero que he recordado bien! De todas formas si no es el "logfile" y pasa algo, siempre puedes reinstalar el amule de nuevo. Ya diras si a sido eso o no. suerte!

----------

## Popolous

¡Hola!

Antes de nada, gracias por los ánimos. He instalado wxGTK (última versión) y amule con las mismas USE flags que pcmaster y sigue dando la Violación de Segmento al tratar de ejecutarlo. Voy a probar a cambiar las FEATURES.

Si sigue sin funcionar, cambiaré las CFLAGS, que actualmente son:

```

CFLAGS="-march=native -O2 -pipe -ggdb"

```

La FLAG -ggdb es para el tema de la depuración, tal y como leí en el hilo de rastreo que mencioné en el primer post de este hilo.

¡Saludos!

----------

## pcmaster

¿ --march=native ?

Yo tengo --march=athlon64, y eso que es un core2duo, y no da problemas.

----------

## Popolous

Sí, con mi versión de gcc he leído que así detecta la CPU y no es necesario indicárselo explicítamente...No he tenido problemas de compilación con esta flag. El problema viene después al ejectuar la aplicación.

¡Saludos!

----------

## the incredible hurd

 *pcmaster wrote:*   

> Yo tengo --march=athlon64, y eso que es un core2duo, y no da problemas.

 

¿Por qué no usas --march=core2 entonces?

Aunque para apreciar la diferencia, debes tener en processor type and features, processor family ---> (Core2/newer Xeon) y hacer el inevitable emerge -e world después de cambiar el march en make.conf

Otros ajustes adicionales serían las USE ssse3 (con tres eses) y todas las sse anteriores: sse3, sse2 y sse (aunque son muy pocos los programas que las usan en realidad, pero march manda y/o gobierna).

----------

## pcmaster

Gracias por la sugerencia.

Instalé el sistema en un AMD, pero por problemas hardware lo cambié por un intel.

Aunque en el nuevo kernel ya tengo seleccionado Core2/Newer Xeon, en el make.conf no había cambiado nada.

Eso sí, en el USe ya tenía puesto ssse3, junto a sse2, sse y mmx. Lo único que no había cambiado era el --march.

----------

## Popolous

¡Hola!

Pues he probado distintas alternativas y no hay caso, sigue dando violación de segmento. He probado con CFLAGS menos agresivas, probaré con una versión menor de wxGTK y si no funciona, pues esperaré a una nueva versión de amule o no sé si emitir un bug a ver si es alguna otra librería la que está dando problemas.

¡Saludos!

----------

## i92guboj

pcmaster, athlon64 y core2 son *incompatibles*. Así de memoria, athlon64 incluye 3dnow!, de tu core2 no soporta que yo sepa. Que te funcione (porque pocos programas hagan un uso real de 3dnow! es otro tema, pero puedes esperar problemas a la larga si no recompilas sin soporte para 3dnow!

No se si existe algún otro tipo de incompatibilidad, un vistazo a la página man de gcc debería despejar las dudas.

En cuanto al tema del hilo, viendo que las flags usadas son estándar y sin muchas florituras, yo reportaría un bug a los desarrolladores de amule. Puede que sea algún problema el amule, o puede que sea por el uso de una versión incorrecta de wxGTK o alguna otra librería (lo cual se podría prevenir arreglando los makefiles para que fuercen un chequeo de versión).

----------

## Txema

¿Cómo anda vuestro paquete dev-libs/crypto++? puede que el fallo esté por ahí.

Saludos.

----------

## pcmaster

i92juboj: No tenía puesto el USE 3dnow, así que no hay nada compilado con soporte para 3dnow.

----------

## i92guboj

 *pcmaster wrote:*   

> i92juboj: No tenía puesto el USE 3dnow, así que no hay nada compilado con soporte para 3dnow.

 

Ese USE flag habilita parches o partes de código programadas explícitamente para aprovechar mejor 3dnow!, pero eso no tiene nada que ver con las CFLAGS. gcc puede generar (y eventualmente generará) código optimizado para aprovechar todas las instrucciones de la arquitectura seleccionada, y tú no puedes hacer nada para evitar eso. -march=athlon64 incluye -m3dnow, y en cualquier momento un binario generado con -march=athlon64 puede contener código específico para 3dnow, gcc pasa olímpicamente de las USE flags, ya que para empezar, éstas solo tienen sentido para portage, y no para tu compilador. Algunas USE flags se pueden usar para controlar las CFLAGS hasta cierto punto, pero no es eso lo que ocurre con 3dnow.

Quizás el 90 o el 99% de tus binarios no den problema jamás, pero ambas arquitecturas son potencialmente incompatibles. En otras palabras, ahora mismo estás confiando en la casualidad de que ningún binario vital contenga instrucciones 3dnow, pero le estás dando permiso a tu compilador para que lo incluya (sabiendo que tu cpu no puede ejecutar dichas instrucciones). Si comienzas a tener extraños fallos o tus binarios arrojan mensajes del tipo "instrucción no soportada" ya sabes de donde viene el problema.

----------

## pcmaster

Biueno, hace poco lo cambié a core2, pero en realidad el sistema lo instalé hace bastante (más de un año) y no ha dado problemas. Lo había configurado así:

CHOST="x86_64-pc-linux-gnu"

CFLAGS="-march=athlon64 -O2 -pipe"

y hace poco cambié athlon64 por core2.

De todas formas, recuerda que Intel copió la arquitectura de 64 a AMD, no creo que le quitara instrucciones ¿quizá los AMD solo tienen 3dnow en 32 bit?

----------

## i92guboj

No es que quitaran instrucciones, cada fabricante se inventa las suyas propias y las añade. Los demás pueden implementar un equivalente si así lo desean, pero no siempre lo hacen. Que yo sepa, 3dnow! existe solo en micros de amd, aunque no sigo el asunto con mucho interés así que tampoco podría asegurarlo al 100%.

En cuanto a lo de los 32 bits, no, 3dnow! se aplica también a 64 bits, la misma página de gcc reza:

 *Quote:*   

> 
> 
> k8, opteron, athlon64, athlon-fx
> 
>     AMD K8 core based CPUs with x86-64 instruction set support.  (This supersets MMX, SSE, SSE2, 3dNOW!, enhanced 3dNOW! and 64-bit instruction set exten‐
> ...

 

Por contra, "core2" no incluye ni 3dnow! ni enhanced 3dnow! Esto se refiere solo a gcc, como ya digo arriba, no puedo asegurar al  100% que los core2 más nuevos no implementen estas extensiones, quizás algunos lo hagan, no lo se. En cualquier caso, lo más sano es usar la arquitectura correcta para tu cpu, o bien "native" si tu gcc es lo bastante reciente. Nunca se debe asumir que dos arquitecturas son compatibles porque, incluso si hoy lo son, quizás no lo sean mañana cuando se implemente una nueva característica de dicha arquitectura que antes no estaba soportada por gcc.

----------

## Popolous

¡Hola!

He estado fuera de casa hasta hoy. Ahora estoy actualizando Gentoo (emerge --sync && emerge -uvDN @world) y a ver qué pasa después de los 320 paquetes que dice que hay que instalar...esto de estar dos semanas fuera es lo que tiene.

Si después de esto sigue dando problemas, haré el reporte del bug.

Gracias a todos por vuestra inestimable ayuda.

¡Saludos!

----------

## Popolous

Txema, creo que vas a tener razón con lo de dev-libs/crypto++, al hacer un dmesg obtengo:

```

# dmesg | grep -i amule

amule[4112]: segfault at 20 ip 00007fe11b3d1553 sp 00007fff3d1b9620 error 4 in libcrypto++.so.0.0.0[7fe11b123000+493000]

amule[4204]: segfault at 20 ip 00007f960c70d553 sp 00007fffba212b30 error 4 in libcrypto++.so.0.0.0[7f960c45f000+493000]

```

He visto que la librería en cuestión no está compilada con la USE=sse3 así que la he activado y estoy recompilando a ver...ahora os cuento.

¡Saludos!

P.D.: Anda que tantas vueltas he dado y al final sin recurrir a dmesg para ver qué me quería decir el sistema  :Confused: . Qué inutil soy pasando por alto lo obvio y complicándome la vida con cosas raras de depuración  :Laughing: 

----------

## Popolous

¡Hola!

Efectivamente, era problema de las librerías crypto++. Al compilarla con la opción sse3 me ha resuelto el problema ya ahora amule inicia sin problemas. ¿Por qué pasaba esto? Me gustaría el saber el por qué esta opción desactivada permitía la violación de segmento.

Muchas gracias Txema y al resto de la gente por su ayuda.

¡Saludos!

----------

## pcmaster

Igual no era cosa de la USE sse3, sino de que la librería se había roto al compilar/actualizar alguna dependencia.

----------

## Popolous

Quizás, la única forma de saberlo sería recompilando la librería sin la USE y ver qué pasa...

¡Saludos!

----------

## pcmaster

Si lo pruebas, crea primero el paquete con quickpkg, así si decides volver a la versión anterior ya lo tienes compilado.

----------

## the incredible hurd

 *pcmaster wrote:*   

> Eso sí, en el USe ya tenía puesto ssse3, junto a sse2, sse y mmx. Lo único que no había cambiado era el --march.

 

No te olvides de sse3 también, ssse3 incorpora algunas instrucciones más que sse3, yo, por si acaso, tengo tanto sse3 como ssse3 y sin problemas.

----------

## pcmaster

```
# cat /proc/cpuinfo

processor   : 0

vendor_id   : GenuineIntel

cpu family   : 6

model      : 15

model name   : Intel(R) Core(TM)2 Duo CPU     E6550  @ 2.33GHz

stepping   : 11

cpu MHz      : 2333.335

cache size   : 4096 KB

physical id   : 0

siblings   : 2

core id      : 0

cpu cores   : 2

apicid      : 0

initial apicid   : 0

fpu      : yes

fpu_exception   : yes

cpuid level   : 10

wp      : yes

flags      : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good pni dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm lahf_lm tpr_shadow vnmi flexpriority

bogomips   : 4668.11

clflush size   : 64

cache_alignment   : 64

address sizes   : 36 bits physical, 48 bits virtual

power management:
```

Después repite lo mismo para el segundo core (Processor: 1) ¿Dónde está sse3? Yo veo sse, sse2, ss y ssse3.

----------

## the incredible hurd

Como se menciona en el enlace que pego más arriba ssse3 sólo añade 16, que por 16 son 64 instrucciones más, según intel, esto es, lee bien el enlace y verás como ssse3 sólo añade instrucciones adicionales a sse3 y las incorpora.

Pero para esto en Gentoo. yo, sinceramente me despreocuparía...

```

equery hasuse sse3

[ Searching for USE flag sse3 in all categories among: ]

 * installed packages

[I--] [  ] dev-libs/crypto++-5.5.2-r1 (0)

```

----------

