this is a operator error. Your option in the first compile invokation
is inconsistent with the second. The first says (more like implied, as
can be derived by IPA) you are doing call_shared. The second says you
are creating a shared object, hence, IPA should never have changed the
internal option passed down to call_shared.
Sun

On Thu, Apr 7, 2011 at 1:34 AM, Jaewook Shin <jaewookshin...@gmail.com> wrote:
> Hi Sun,
>
> Recently, it came to my attention that there is a bug in my patch for bug
> #721. It happens with the following code example and the compilation
> commands.
>
> $ cat bar.c
> #include <stdio.h>
>
> void bar()
> {
>   printf("Hello bar\n");
>   return;
> }
> $ opencc -c -m64 -ipa -fPIC bar.c
> $ opencc -shared -o bar.so bar.o -ipa
> /usr/bin/ld: /tmp/bar.so.ipaSJSpVg/1.o: relocation R_X86_64_PC32 against
> `.rodata_bar_so' can not be used when making a shared object; recompile with
> -fPIC
> /usr/bin/ld: final link failed: Bad value
> Can you review my patch below?
>
> $ svn diff
> Index: osprey/be/cg/x8664/exp_loadstore.cxx
> ===================================================================
> --- osprey/be/cg/x8664/exp_loadstore.cxx        (revision 3537)
> +++ osprey/be/cg/x8664/exp_loadstore.cxx        (working copy)
> @@ -1177,7 +1177,8 @@
>          FmtAssert(!ST_is_thread_local(base_sym),
>                    ("Exp_Ldst: thread-local storage should not be handled
> here"));
>         if (Gen_PIC_Shared || Gen_PIC_Call_Shared) {
> -         if ( ST_is_preemptible(base_sym) ) {
> +         if ( (Gen_PIC_Shared && !ST_is_export_local(base_sym)) ||
> +              (Gen_PIC_Call_Shared && ST_is_preemptible(base_sym)) ) {
>             TN *tmp = base_ofst == 0 ? tn : Build_TN_Like(tn);
>             Build_OP( TOP_ld64, tmp, Rip_TN(),
>                       Gen_Symbol_TN( base_sym, 0, TN_RELOC_X8664_GOTPCREL ),
> The bug in my earlier patch is caused by having only 'preemptible' symbols
> to go into GOT, 'even for dynamically shared objects(.so files) that are
> compiled with PIC'.
>
> In the above example, the "Hello ..." string is a read-only data and needs
> not go into GOT for 'position-independent executables' if "-pie" is given to
> the linker. For dynamically shared object files when they are compiled with
> '-ipa', however, these read-only symbols are also placed in a separate
> assembly file (symtab.s) and should be declared with ".globl" so that they
> are visible outside the file. The linker seems to put all global symbols
> into the GOT table if '-shared' is given to make a shared object. Thus all
> accesses to the "Hello ..." string should go through GOT as well.
>
> The above fix is partially undoing a change in my earlier patch only for the
> PIC cases. As a result, nothing changes for the PIC cases from before my
> earlier patch but the CPIC cases still get the benefit of not going through
> GOT for read-only data. Again, this fix is verified with both SPEC INT and
> FP showing success for all but 416.games. I've reopened bug 721 for this new
> issue.
>
> Jaewook
>

------------------------------------------------------------------------------
Xperia(TM) PLAY
It's a major breakthrough. An authentic gaming
smartphone on the nation's most reliable network.
And it wants your games.
http://p.sf.net/sfu/verizon-sfdev
_______________________________________________
Open64-devel mailing list
Open64-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/open64-devel

Reply via email to