Free Pascal (fpc) mit profiling - SIGSEGV

06/04/2014 - 21:14 von Kai Bojens | Report spam
Moin.

Ich habe hier ein kleines Problem mit dem Profiling von Free Pascal. Konkret
gibt es ein SIGSEGV, wenn ich das kompilierte Programm aufrufe:

program HelloWorld (output);
begin
writeln('Hello World!');
end.

$ fpc -ohelloworld -pg helloworld.pas

$ ./helloworld
Hello World!
Runtime error 216 at $0000003EAB0F6B47
$0000003EAB0F6B47
$0000003EAB0F6EBA

$ strace ./helloworld
(…)
write(1, "Hello World!", 13Hello World!
) = 13
setitimer(ITIMER_PROF, {it_interval={0, 0}, it_value={0, 0}}, NULL) = 0
rt_sigaction(SIGPROF, {SIG_DFL, [], SA_RESTORER, 0x3eab035cb0}, NULL, 8) = 0
open("gmon.out", O_WRONLY|O_CREAT|O_TRUNC|O_NOFOLLOW, 0666) = 3
write(3, "gmon\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 20) = 20
SIGSEGV {si_signo=SIGSEGV, si_code=SI_KERNEL, si_addr=0}
rt_sigprocmask(SIG_UNBLOCK, [SEGV], NULL, 8) = 0
write(1, "Runtime error 216 at $0000003EAB"..., 39Runtime error 216 at
$0000003EAB0F6B47
) = 39
write(1, " $0000003EAB0F6B47", 20 $0000003EAB0F6B47
) = 20
ioctl(1, SNDCTL_TMR_TIMEBASE or SNDRV_TIMER_IOCTL_NEXT_DEVICE or TCGETS,
{B38400 opost isig icanon echo ...}) = 0
write(1, " $0000003EAB0F6EBA", 20 $0000003EAB0F6EBA
) = 20
write(1, "", 1
) = 1
exit_group(216) = ?
+++ exited with 216 +++

Und das war es dann. Laut dem fpc Wiki habe es Probleme mit früheren
Versionen gegeben, die aber gefixt sein sollen:

„Support for using gprof under Linux is broken in FPC 2.2.0-2.4.0; it is
fixed in FPC 2.6+“[1]

$ fpc -v
Free Pascal Compiler version 2.6.2 [2013/08/08] for x86_64

Da ich hier unter einem Fedora 20 arbeite, hatte ich erst noch Dinge wie
selinux im Verdacht, kann da aber nicht so recht etwas finden. Übersehe ich
das was oder riecht das nach einem Bug?

[1] http://wiki.lazarus.freepascal.org/...er_support
 

Lesen sie die antworten

#1 Volker Birk
06/04/2014 - 21:31 | Warnen spam
Kai Bojens wrote:
Ich habe hier ein kleines Problem mit dem Profiling von Free Pascal. Konkret
gibt es ein SIGSEGV, wenn ich das kompilierte Programm aufrufe:
program HelloWorld (output);
begin
writeln('Hello World!');
end.



Pascal ist bei mir schon deutlich mehr als ein Jahrzehnt her ;-) Deshalb
eine naive Frage: wo kommt der Parameter “output” her?

Viele Grüsse,
VB.
<http://msdn.microsoft.com/en-us/lib...8.aspx>
| The following sample shows that the compiler distinguishes between
| native strings and String strings.

Ähnliche fragen