mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-23 01:33:36 +08:00
[BZ #262]
Update. 2004-07-15 Jakub Jelinek <jakub@redhat.com> [BZ #262] * sysdeps/i386/elf/start.S (_start): Use @GOT instead of @GOTOFF for main. * elf/Makefile: Add rules to build and run tst-pie1. * elf/tst-pie1.c: New test. * elf/tst-piemod1.c: New file.
This commit is contained in:
parent
290639c3b4
commit
f17ed1a9ee
@ -1,3 +1,12 @@
|
||||
2004-07-15 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
[BZ #262]
|
||||
* sysdeps/i386/elf/start.S (_start): Use @GOT instead of @GOTOFF
|
||||
for main.
|
||||
* elf/Makefile: Add rules to build and run tst-pie1.
|
||||
* elf/tst-pie1.c: New test.
|
||||
* elf/tst-piemod1.c: New file.
|
||||
|
||||
2004-07-14 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
[BZ #266]
|
||||
|
27
elf/Makefile
27
elf/Makefile
@ -80,7 +80,7 @@ distribute := rtld-Rules \
|
||||
nodel2mod1.c nodel2mod2.c nodel2mod3.c \
|
||||
reldep9.c reldep9mod1.c reldep9mod2.c reldep9mod3.c \
|
||||
tst-array1.exp tst-array2.exp tst-array4.exp \
|
||||
tst-array2dep.c \
|
||||
tst-array2dep.c tst-piemod1.c \
|
||||
tst-execstack-mod.c tst-dlmodcount.c \
|
||||
check-textrel.c dl-sysdep.h
|
||||
|
||||
@ -160,6 +160,9 @@ tests-nodelete-yes = nodelete nodelete2
|
||||
tests-nodlopen-yes = nodlopen nodlopen2
|
||||
tests-execstack-yes = tst-execstack tst-execstack-needed tst-execstack-prog
|
||||
endif
|
||||
ifeq (yesyes,$(have-fpie)$(build-shared))
|
||||
tests: $(objpfx)tst-pie1.out
|
||||
endif
|
||||
modules-names = testobj1 testobj2 testobj3 testobj4 testobj5 testobj6 \
|
||||
testobj1_1 failobj constload2 constload3 unloadmod \
|
||||
dep1 dep2 dep3 dep4 $(modules-vis-$(have-protected)) \
|
||||
@ -185,6 +188,9 @@ modules-names = testobj1 testobj2 testobj3 testobj4 testobj5 testobj6 \
|
||||
ifeq (yes,$(have-initfini-array))
|
||||
modules-names += tst-array2dep
|
||||
endif
|
||||
ifeq (yesyes,$(have-fpie)$(build-shared))
|
||||
modules-names += tst-piemod1
|
||||
endif
|
||||
modules-vis-yes = vismod1 vismod2 vismod3
|
||||
modules-nodelete-yes = nodelmod1 nodelmod2 nodelmod3 nodelmod4 \
|
||||
nodel2mod1 nodel2mod2 nodel2mod3
|
||||
@ -705,6 +711,25 @@ $(objpfx)tst-array4.out: $(objpfx)tst-array4 $(objpfx)tst-array2dep.so
|
||||
$< > $@
|
||||
cmp $@ tst-array4.exp > /dev/null
|
||||
|
||||
ifeq (yesyes,$(have-fpie)$(build-shared))
|
||||
CFLAGS-tst-pie1.c += -fpie
|
||||
|
||||
$(objpfx)tst-pie1.out: $(objpfx)tst-pie1
|
||||
$(elf-objpfx)$(rtld-installed-name) \
|
||||
--library-path $(rpath-link)$(patsubst %,:%,$(sysdep-library-path)) \
|
||||
$< > $@
|
||||
|
||||
$(objpfx)tst-pie1: $(objpfx)tst-pie1.o $(objpfx)tst-piemod1.so
|
||||
$(LINK.o) -pie -Wl,-O1 \
|
||||
$(sysdep-LDFLAGS) $(config-LDFLAGS) \
|
||||
$(extra-B-$(@F:lib%.so=%).so) -B$(csu-objpfx) \
|
||||
$(extra-B-$(@F:lib%.so=%).so) $(load-map-file) \
|
||||
$(LDFLAGS) $(LDFLAGS-$(@F)) \
|
||||
-L$(subst :, -L,$(rpath-link)) -Wl,-rpath-link=$(rpath-link) \
|
||||
-o $@ $(objpfx)tst-pie1.o $(objpfx)tst-piemod1.so \
|
||||
$(common-objpfx)libc_nonshared.a
|
||||
endif
|
||||
|
||||
check-textrel-CFLAGS = -O -Wall -D_XOPEN_SOURCE=600 -D_BSD_SOURCE
|
||||
$(objpfx)check-textrel: check-textrel.c
|
||||
$(native-compile)
|
||||
|
5
elf/tst-pie1.c
Normal file
5
elf/tst-pie1.c
Normal file
@ -0,0 +1,5 @@
|
||||
int
|
||||
foo (void)
|
||||
{
|
||||
return 34;
|
||||
}
|
20
elf/tst-piemod1.c
Normal file
20
elf/tst-piemod1.c
Normal file
@ -0,0 +1,20 @@
|
||||
#include <stdio.h>
|
||||
|
||||
int
|
||||
foo (void)
|
||||
{
|
||||
return 21;
|
||||
}
|
||||
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
int val = foo ();
|
||||
if (val != 34)
|
||||
{
|
||||
printf ("foo () returned %d\n", val);
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
@ -1,5 +1,6 @@
|
||||
/* Startup code compliant to the ELF i386 ABI.
|
||||
Copyright (C) 1995-1998,2000,2001,2002,2003 Free Software Foundation, Inc.
|
||||
Copyright (C) 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2004
|
||||
Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
@ -81,8 +82,7 @@ _start:
|
||||
pushl %ecx /* Push second argument: argv. */
|
||||
pushl %esi /* Push first argument: argc. */
|
||||
|
||||
leal BP_SYM (main)@GOTOFF(%ebx), %eax
|
||||
pushl %eax
|
||||
pushl BP_SYM (main)@GOT(%ebx)
|
||||
|
||||
/* Call the user's main function, and exit with its value.
|
||||
But let the libc call main. */
|
||||
|
Loading…
Reference in New Issue
Block a user