klibc z HEAD

Paweł Sikora pluto w agmk.net
Pią, 7 Paź 2005, 23:30:34 CEST


Dnia czwartek, 6 października 2005 22:19, Jakub Bogusz napisał:
> Statyczne linkowanie działa poprawnie, przy (domyślnym) dynamicznym jest
> SEGV.
>
> $ cat c.c
> int main() {}
> $ klcc -o c c.c
> $ strace ./c
> execve("./c", ["./c"], [/* 44 vars */]) = -1 EFAULT (Bad address)
> --- SIGSEGV (Segmentation fault) @ 0 (0) ---

dla potomności podam prostszy testcase bez użycia klibc-a.

$ cat xxx.S
.section        .text
.global         _start
.type           _start, w function
_start:
        movl    $1, %eax
        movl    $0, %ebx
        int     $0x80
.end

$ as xxx.S -o xxx.o; ld xxx.o -o xxx -s; objdump -x xxx

xxx:     file format elf32-i386
xxx
architecture: i386, flags 0x00000102:
EXEC_P, D_PAGED
start address 0x08048094

Program Header:
    LOAD off    0x00000000 vaddr 0x08048000 paddr 0x08048000 align 2**12
         filesz 0x000000a0 memsz 0x000000a0 flags r-x
PAX_FLAGS off   0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**2
         filesz 0x00000000 memsz 0x00000000 flags --- 2800

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         0000000c  08048094  08048094  00000094  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, CODE

Na 2.6.14rc3-git6 taka nic nie robiąca binarka dostaje czape od jądra.

$ strace ./xxx
execve("./xxx", ["./xxx"], [/* 24 vars */]) = -1 EFAULT (Bad address)
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
+++ killed by SIGSEGV +++

Po małym wyhaczeniu jajka działa...

$ strace ./xxx
execve("./xxx", ["./xxx"], [/* 24 vars */]) = 0
_exit(0)

haczyk (być może nie do końca prawidłowy):
http://cvs.pld-linux.org/cgi-bin/cvsweb/
       SOURCES/kernel-hotfixes.patch?r1=1.1.2.62&r2=1.1.2.63

-- 
The only thing necessary for the triumph of evil
  is for good men to do nothing.
                                           - Edmund Burke



Więcej informacji o liście dyskusyjnej pld-devel-pl