illegal instruction mit strlen

25/02/2013 - 18:11 von Roman Racine | Report spam
Hallo zusammen,

nach dem Upgrade auf eine neuere Version von Ubuntu mit einem neueren gcc
ist mir bei einem bestehenden Programm aufgefallen, dass strlen() in
gewissen Fàllen zu einem Abort wegen "illegal instruction" führt. Ich habe
ein minimales Beispiel gemacht:

#include <stdio.h>
#include <string.h>

int main(void) {
char testchar[20] = "abcde";
puts(testchar);
printf("%d",(int) strlen(testchar));
return 0;
}

Resultat:

$ gcc -Wall -O2 -march=native test.c
$ ./a.out
abcde
Illegal instruction (core dumped)

$ gcc --version
gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Ohne -O2 oder ohne -march=native làuft der Code wie erwartet. Meiner Meinung
nach ist der Code korrekt. Der Code làuft auch dann wie erwartet, wenn ich
selber strlen aus der glibc mit einer naiven Fassung ersetze, die nicht so
optimiert ist wie die Variante in der glibc.

Kann mir irgendwer weiterhelfen?

Gruss

Roman°
 

Lesen sie die antworten

#1 Thomas Binder
25/02/2013 - 23:04 | Warnen spam
Hi,

Roman Racine wrote:
Resultat:

$ gcc -Wall -O2 -march=native test.c
$ ./a.out
abcde
Illegal instruction (core dumped)



Was ist denn "native" in dem Fall, also inbesondere x86 oder x64?
Hier in einem (virtuellen) Ubuntu 12.04.2 auf 32-Bit-Basis
funktioniert der Beispielcode mit den gleichen Parametern ohne
Absturz.

Ciao

Thomas

Ähnliche fragen