Author: arty Date: Wed Jan 23 04:03:37 2008 New Revision: 31954
URL: http://svn.reactos.org/svn/reactos?rev=31954&view=rev Log: Updated dlltool to properly handle DATA exports in our scheme.
Modified: trunk/tools/RosBE/RosBE-PPC/gnu/binutils-2.16.1.diff
Modified: trunk/tools/RosBE/RosBE-PPC/gnu/binutils-2.16.1.diff URL: http://svn.reactos.org/svn/reactos/trunk/tools/RosBE/RosBE-PPC/gnu/binutils-... ============================================================================== --- trunk/tools/RosBE/RosBE-PPC/gnu/binutils-2.16.1.diff (original) +++ trunk/tools/RosBE/RosBE-PPC/gnu/binutils-2.16.1.diff Wed Jan 23 04:03:37 2008 @@ -164,15 +164,6 @@ } else fprintf (f, "\t%sf%d%s\t%s %d\n", ASM_RVA_BEFORE, -@@ -2002,7 +2032,7 @@ - { - int lead_at = (*name == '@'); - -- if (add_underscore && !lead_at) -+ if (add_underscore && !lead_at) - { - char *copy = xmalloc (strlen (name) + 2); - @@ -2036,8 +2066,6 @@ unsigned char *data; } sinfo; @@ -331,14 +322,29 @@ - exp_label->section = secdata[RDATA].sec; - else -#endif -- exp_label->section = secdata[TEXT].sec; -- + exp_label->name = make_imp_label ("..", exp->name); -+ exp_label->section = secdata[TEXT].sec; + exp_label->section = secdata[TEXT].sec; +- exp_label->flags = BSF_GLOBAL; exp_label->value = 0;
-@@ -2289,6 +2295,7 @@ +@@ -2267,6 +2273,15 @@ + #endif + ptrs[oidx++] = exp_label; + } ++ else ++ { ++ exp_label = bfd_make_empty_symbol (abfd); ++ exp_label->name = make_imp_label ("", exp->name); ++ exp_label->section = secdata[DATA].sec; ++ exp_label->flags = BSF_GLOBAL; ++ exp_label->value = 0; ++ ptrs[oidx++] = exp_label; ++ } + + /* Generate imp symbols with one underscore for Microsoft + compatibility, and with two underscores for backward +@@ -2289,6 +2304,7 @@ iname_lab = bfd_make_empty_symbol (abfd);
iname_lab->name = head_label; @@ -346,7 +352,7 @@ iname_lab->section = (asection *) &bfd_und_section; iname_lab->flags = 0; iname_lab->value = 0; -@@ -2305,17 +2312,48 @@ +@@ -2305,17 +2321,48 @@ /* The symbol referring to the code (.text). */ { asymbol *function_name; @@ -357,7 +363,7 @@ function_name = bfd_make_empty_symbol(abfd); - function_name->name = make_label ("..", exp->name); + lead_at = exp->name[0] == '@'; -+ function_name->name = make_label ("", exp->name+lead_at); ++ function_name->name = make_label (exp->data ? "_._" : "", exp->name+lead_at); + at = strchr(function_name->name + lead_at, '@'); + if(at) *at = 0; function_name->section = secdata[TEXT].sec; @@ -396,7 +402,7 @@ /* The .toc symbol. */ { asymbol *toc_symbol; -@@ -2330,6 +2368,7 @@ +@@ -2330,6 +2377,7 @@ ptrs[oidx++] = toc_symbol; } #endif @@ -404,7 +410,7 @@
ptrs[oidx] = 0;
-@@ -2358,18 +2397,8 @@ +@@ -2358,18 +2406,8 @@
rel->address = HOW_JTAB_ROFF; rel->addend = 0; @@ -417,15 +423,14 @@ - } - else - { -- rel->howto = bfd_reloc_type_lookup (abfd, BFD_RELOC_32); + rel->howto = bfd_reloc_type_lookup (abfd, BFD_RELOC_32); - rel->sym_ptr_ptr = secdata[IDATA5].sympp; - } -+ rel->howto = bfd_reloc_type_lookup (abfd, BFD_RELOC_32); + rel->sym_ptr_ptr = &oft_sym; sec->orelocation = rpp; sec->reloc_count = 1; } -@@ -2400,7 +2429,7 @@ +@@ -2400,7 +2438,7 @@ rel->address = 0; rel->addend = 0; rel->howto = bfd_reloc_type_lookup (abfd, BFD_RELOC_RVA); @@ -434,7 +439,7 @@ sec->orelocation = rpp; }
-@@ -2435,6 +2464,7 @@ +@@ -2435,6 +2473,7 @@ sec->reloc_count = 1; break;
@@ -442,7 +447,7 @@ #ifdef DLLTOOL_PPC case PDATA: { -@@ -2542,6 +2572,7 @@ +@@ -2542,6 +2581,7 @@ sec->reloc_count = 2; break; #endif /* DLLTOOL_PPC */ @@ -450,7 +455,7 @@ } }
-@@ -2556,6 +2587,9 @@ +@@ -2556,6 +2596,9 @@ bfd_set_section_vma (abfd, si->sec, vma); } } @@ -460,7 +465,7 @@ /* Write them out. */ for (i = 0; i < NSECS; i++) { -@@ -2572,7 +2606,6 @@ +@@ -2572,7 +2615,6 @@ si->size); }
@@ -468,7 +473,7 @@ bfd_close (abfd); abfd = bfd_openr (outname, HOW_BFD_READ_TARGET); return abfd; -@@ -2592,7 +2625,7 @@ +@@ -2592,7 +2634,7 @@ fprintf (f, "%s IMAGE_IMPORT_DESCRIPTOR\n", ASM_C); fprintf (f, "\t.section .idata$2\n");
@@ -477,7 +482,7 @@
fprintf (f, "%s:\n", head_label);
-@@ -2617,16 +2650,12 @@ +@@ -2617,16 +2659,12 @@ if (!no_idata5) { fprintf (f, "\t.section\t.idata$5\n"); @@ -494,7 +499,7 @@ fprintf (f, "hname:\n"); }
-@@ -2729,9 +2758,11 @@ +@@ -2729,9 +2767,11 @@ for (i = 0; (exp = d_exports_lexically[i]); i++) { bfd *n; @@ -506,7 +511,7 @@ n = make_one_lib_file (exp, i); n->next = head; head = n; -@@ -3091,10 +3122,10 @@ +@@ -3091,10 +3131,10 @@ fprintf (file, _(" -v --verbose Be verbose.\n")); fprintf (file, _(" -V --version Display the program version.\n")); fprintf (file, _(" -h --help Display this information.\n")); @@ -519,7 +524,7 @@ #endif exit (status); } -@@ -3131,6 +3162,7 @@ +@@ -3131,6 +3171,7 @@ {"base-file", required_argument, NULL, 'b'}, {"as", required_argument, NULL, 'S'}, {"as-flags", required_argument, NULL, 'f'}, @@ -527,7 +532,7 @@ {"mcore-elf", required_argument, NULL, 'M'}, {"compat-implib", no_argument, NULL, 'C'}, {"temp-prefix", required_argument, NULL, 't'}, -@@ -3161,7 +3193,7 @@ +@@ -3161,7 +3202,7 @@ #ifdef DLLTOOL_MCORE_ELF "m:e:l:aD:d:z:b:xp:cCuUkAS:f:nvVHhM:L:F:", #else @@ -536,7 +541,7 @@ #endif long_options, 0)) != EOF) -@@ -3256,15 +3288,15 @@ +@@ -3256,15 +3297,15 @@ fatal (_("Unable to open base-file: %s"), optarg);
break; @@ -558,7 +563,7 @@ break; #endif case 'C': -@@ -3304,6 +3336,9 @@ +@@ -3304,6 +3345,9 @@ if (as_name == NULL) as_name = deduce_name ("as");
@@ -568,7 +573,7 @@ /* Don't use the default exclude list if we're reading only the symbols in the .drectve section. The default excludes are meant to avoid exporting DLL entry point and Cygwin32 impure_ptr. */ -@@ -3517,8 +3552,8 @@ +@@ -3517,8 +3561,8 @@ ds = dyn_string_new (100); dyn_string_append_cstr (ds, "-r ");
@@ -579,7 +584,7 @@
while (ptr->next != NULL) { -@@ -3531,10 +3566,7 @@ +@@ -3531,10 +3575,7 @@ dyn_string_append_cstr (ds, "-o "); dyn_string_append_cstr (ds, MCORE_ELF_TMP_OBJ);
@@ -591,7 +596,7 @@
dyn_string_delete (ds);
-@@ -3573,8 +3605,8 @@ +@@ -3573,8 +3614,8 @@
dyn_string_append_cstr (ds, "-shared ");
@@ -602,7 +607,7 @@
dyn_string_append_cstr (ds, " "); dyn_string_append_cstr (ds, MCORE_ELF_TMP_EXP); -@@ -3583,7 +3615,7 @@ +@@ -3583,7 +3624,7 @@ dyn_string_append_cstr (ds, " -o "); dyn_string_append_cstr (ds, mcore_elf_out_file);