]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
[BZ #262]
authorUlrich Drepper <drepper@redhat.com>
Fri, 16 Jul 2004 17:56:45 +0000 (17:56 +0000)
committerUlrich Drepper <drepper@redhat.com>
Fri, 16 Jul 2004 17:56:45 +0000 (17:56 +0000)
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.

ChangeLog
elf/Makefile
elf/tst-pie1.c [new file with mode: 0644]
elf/tst-piemod1.c [new file with mode: 0644]
sysdeps/i386/elf/start.S

index 6dd068304c8a005526d4d430612fe2a664d397cc..faa6faa9207d84a6ac128daa5cf2a685395aba2e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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]
index 6cdcfd4a26321c42457f2b7a1b565b0f3abbb21f..9bbc304455d6c5925c2568db9933e58bce32a389 100644 (file)
@@ -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)
diff --git a/elf/tst-pie1.c b/elf/tst-pie1.c
new file mode 100644 (file)
index 0000000..75d941f
--- /dev/null
@@ -0,0 +1,5 @@
+int
+foo (void)
+{
+  return 34;
+}
diff --git a/elf/tst-piemod1.c b/elf/tst-piemod1.c
new file mode 100644 (file)
index 0000000..ad439da
--- /dev/null
@@ -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;
+}
index 8a4fc3615729c40963c0e768ef11f86c1c81040e..bb9cabc8c4e38815f6ba61bda9a4a47291fb5c42 100644 (file)
@@ -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.    */