for embedded execution, PIE != PIC, otherwise, they are the same, no?
For a PIE relocatable, there is no need for dynamic relocation, that
is the job of linkers. If the shared.a is not compiled with PIC (or
PIE) it is wrong. A function being reentrant happen to be able to be
PIE is an accident (i.e. not related in its original purpose), not a
necessary condition.
Sun

2010/8/3 Peng Yuan <yingbo....@gmail.com>:
> The checkin will affect the use of the library. I suspect the corectness of
> using libopen64rt_shared.a for PIE executable, which the checkin works.
>
> On Wed, Aug 4, 2010 at 12:01 PM, Sun Chan <sun.c...@gmail.com> wrote:
>>
>> but this is a problem with the library itself, not the checkin.
>> Sun
>>
>> On Tue, Aug 3, 2010 at 8:55 PM, Peng Yuan <yingbo....@gmail.com> wrote:
>> > If libopen64rt_shared.a can be used for executable except for shared
>> > library, I'll support the checkin. Not perfect, but it can work for the
>> > current trunk. Otherwise we must notice the PIE issue.
>> >
>> > I just explain the PIE linking. I don't konw the function of
>> > libopen64rt.a
>> > and libopen64rt.a.  Why does open64 need them? Why memset.o and
>> > cacheinfo.o
>> > are removed from libopen64rt_shared.a?
>> >
>> > All objects participating in -pie link must be compiled with -fPIE.  PIE
>> > is
>> > not PIC. PIE is for executable (-pie link) and PIC is for shared library
>> > (-shared link). So we cannot replace PIE objects with PIC objects.
>> >
>> > It is a mere coincidence that there is no linker error with
>> > libopen64rt_shared.a at -fPIE. Only cacheinfo.o has dynamic relocation
>> > info
>> > (GOT/PLT) at PIE/PIC, but it is removed from libopen64rt_shared.a (see
>> > below).
>> >
>> > The generation of the two libraries:
>> > ar cru libopen64rt.a fastcopy_gh.o malloc_opt.o memset.o cacheinfo.o
>> > ar cru libopen64rt_shared.a fastcopy_gh.o malloc_opt.o memset.o
>> > cacheinfo.o
>> > ar dv libopen64rt_shared.a memset.o cacheinfo.o
>> >
>> > The two libraries use the same objects. Note objects in
>> > libopen64rt_shared.a
>> > are NOT compiled with -fPIC.
>> >
>> > Why "non -fPIC" libopen64rt_shared.a  also works for -shared?
>> > Just a mere coincidence... I look through malloc_opt.c and fastcopy_gh.s
>> > which constitute libopen64rt_shared.a. The codes are simple and have no
>> > global symbols, so they don't need GOT/PLT and there is no difference
>> > between -fPIC and "non -fPIC". Note if we add new functions to the
>> > library,
>> > we must pay attention to this issue!
>> >
>> >
>> > On Wed, Aug 4, 2010 at 6:48 AM, Steve Ellcey <s...@cup.hp.com> wrote:
>> >>
>> >> This patch is my proposed fix for bug 577,  The problem is that when
>> >> linking a program using the -pie (-fPIE, -fpie) option to create a
>> >> position independent executable we link in libopen64rt.a which contains
>> >> non-PIC code and this causes us to get a link-time error.
>> >>
>> >> My fix is to link in libopen64rt_shared.a instead of libopen64rt.a when
>> >> linking PIE code since the code in libopen64rt_shared.a is built with
>> >> the -fPIC option.  We already link in libopen64rt_shared.a instead of
>> >> libopen64rt.a when building shared libraries.
>> >>
>> >> I tested the patch on a small test case that calls bzero (one of the
>> >> functions defined in libopen64rt) and verified that it fixes the bug on
>> >> x86 and since the libopen64rt libraries are only used for x86 targets
>> >> this won't affect any other targets.
>> >>
>> >> Can a gatekeeper approve this patch?
>> >>
>> >> Steve Ellcey
>> >> s...@cup.hp.com
>> >>
>> >>
>> >> Defect report:
>> >>
>> >> http://bugs.open64.net/show_bug.cgi?id=577
>> >>
>> >>
>> >> Patch:
>> >>
>> >> Index: osprey/driver/phases.c
>> >> ===================================================================
>> >> --- osprey/driver/phases.c      (revision 3298)
>> >> +++ osprey/driver/phases.c      (working copy)
>> >> @@ -2124,7 +2124,8 @@ add_final_ld_args (string_list_t *args,
>> >>        // Bug 3995.
>> >>        if (!option_was_seen(O_fno_fast_stdlib) &&
>> >>            !option_was_seen(O_nolibopen64rt)) {        // bug 9611
>> >> -            if (option_was_seen(O_shared)) {
>> >> +            if (option_was_seen(O_shared) || option_was_seen(O_pie) ||
>> >> +                option_was_seen(O_fpie) || option_was_seen(O_fPIE)) {
>> >>                 add_library(args, "open64rt_shared");
>> >>             } else {
>> >>                 add_library(args, "open64rt");
>> >>
>> >>
>> >>
>> >> ------------------------------------------------------------------------------
>> >> The Palm PDK Hot Apps Program offers developers who use the
>> >> Plug-In Development Kit to bring their C/C++ apps to Palm for a share
>> >> of $1 Million in cash or HP Products. Visit us here for more details:
>> >> http://p.sf.net/sfu/dev2dev-palm
>> >> _______________________________________________
>> >> Open64-devel mailing list
>> >> Open64-devel@lists.sourceforge.net
>> >> https://lists.sourceforge.net/lists/listinfo/open64-devel
>> >
>> >
>> >
>> > --
>> > Regards,
>> > Peng Yuan (袁鹏)
>> > Performance that will make your eyes water!
>> >
>> >
>> > ------------------------------------------------------------------------------
>> > The Palm PDK Hot Apps Program offers developers who use the
>> > Plug-In Development Kit to bring their C/C++ apps to Palm for a share
>> > of $1 Million in cash or HP Products. Visit us here for more details:
>> > http://p.sf.net/sfu/dev2dev-palm
>> > _______________________________________________
>> > Open64-devel mailing list
>> > Open64-devel@lists.sourceforge.net
>> > https://lists.sourceforge.net/lists/listinfo/open64-devel
>> >
>> >
>
>
>
> --
> Regards,
> Peng Yuan (袁鹏)
> Performance that will make your eyes water!
>

------------------------------------------------------------------------------
The Palm PDK Hot Apps Program offers developers who use the
Plug-In Development Kit to bring their C/C++ apps to Palm for a share
of $1 Million in cash or HP Products. Visit us here for more details:
http://p.sf.net/sfu/dev2dev-palm
_______________________________________________
Open64-devel mailing list
Open64-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/open64-devel

Reply via email to