Bug 4822

Summary: grow_heap: static linking warns about madvise() not implemented
Product: glibc Reporter: Samuel Thibault <samuel.thibault>
Component: hurdAssignee: Roland McGrath <roland>
Status: VERIFIED FIXED    
Severity: normal CC: glibc-bugs, tschwinge
Priority: P2 Flags: fweimer: security-
Version: unspecified   
Target Milestone: ---   
Host: Target:
Build: Last reconfirmed:

Description Samuel Thibault 2007-07-21 11:21:09 UTC
When statically linking on a system on which madvise() wasn't ported, the linker complains:

/bin/../lib/gcc/i486-gnu/4.0.4/../../../libcrt.a(malloc.o): In function `grow_heap':
(.text+0x3t4): warning: warning: madvise is not implemented and will always fail

should there really be such linker warning for madvise() whose failure doesn't have any semantic consequences, just no boost of performance?
Comment 1 Joseph Myers 2012-02-15 21:49:01 UTC
As I understand it this is an issue with glibc for Hurd, not for architectures in ports.
Comment 2 Roland McGrath 2012-02-15 22:16:29 UTC
Should be fixed in trunk, but I didn't actually try to compile for Hurd.
Comment 3 joseph@codesourcery.com 2012-02-16 12:57:48 UTC
It appears to be current practice that the person committing a patch 
fixing a (non-ports) bug should also add that bug to the list in the NEWS 
file, so 4822 should be added there.
Comment 4 Thomas Schwinge 2012-02-17 07:57:12 UTC
(In reply to comment #2)
> Should be fixed in trunk, but I didn't actually try to compile for Hurd.

I fixed it up for you in commit 9078ce930afda8bbcba6fe860a13ca62abcf2742.
;-)

Errors and warnings were:

    gcc-4.4 malloc.c [...]
    [...]
    In file included from ../include/sys/mman.h:2,
                     from malloc.c:1754:
    ../misc/sys/mman.h:95: error: expected identifier or '(' before 'void'
    ../misc/sys/mman.h:95: error: expected ')' before '(' token
    [...]
    make[3]: *** [/media/erich/home/thomas/tmp/glibc/debian/madvise/eglibc-2.13/build-tree/hurd-i386-libc/malloc/malloc.o] Error 1
    make[3]: Leaving directory `/media/erich/home/thomas/tmp/glibc/debian/madvise/eglibc-2.13/malloc'
    make[2]: *** [malloc/subdir_lib] Error 2

(Poor GCC, seeing that ``prototype''.)  After fixing that:

    In file included from malloc.c:2567:
    arena.c: In function 'shrink_heap':
    arena.c:823: warning: left-hand operand of comma expression has no effect
    arena.c:823: warning: left-hand operand of comma expression has no effect
    malloc.c: In function 'mTRIm':
    malloc.c:5874: warning: left-hand operand of comma expression has no effect
    malloc.c:5874: warning: left-hand operand of comma expression has no effect

Now the situation is as follows:

    $ echo 'int main() { }' | gcc -o /dev/null -x c -
    $ echo 'int main() { madvise (); }' | gcc -o /dev/null -x c -
    $ echo 'int main() { }' | gcc -o /dev/null -static -x c -
    $ echo 'int main() { madvise (); }' | gcc -o /dev/null -static -x c -
    /tmp/cce05X6t.o: In function `main':
    :(.text+0x7): warning: warning: madvise is not implemented and will always fail

That is, in the -static case, we only get the warning if madvise is
actively being used in the user code, but not due to glibc's own usage in
malloc.


Joseph already had amended the NEWS file.


Samuel, you can now replace the Debian glibc patch with
d2c736f809690dd69f1cade53a61b99e401bb0e3 and
9078ce930afda8bbcba6fe860a13ca62abcf2742.