Fix .drectve spelling (was .drective) in several comments.

This commit is contained in:
David Edelsohn 1995-09-13 21:16:11 +00:00
parent 0fc4bbe3cc
commit 199f521718

View File

@ -29,7 +29,7 @@
The export table is generated by this program by reading
in a .DEF file or scanning the .a and .o files which will be in the
DLL. A .o file can contain information in special ".drective" sections
DLL. A .o file can contain information in special ".drectve" sections
with export information.
A DEF file contains any number of the following commands:
@ -53,18 +53,18 @@
[STACKSIZE|HEAPSIZE] <number-reserve> [ , <number-commit> ]
Generates --stack|--heap <number-reserve>,<number-commit>
in the output .drective section. The linker will
in the output .drectve section. The linker will
see this and act upon it.
[CODE|DATA] <attr>+
SECTIONS ( <sectionname> <attr>+ )*
<attr> = READ | WRITE | EXECUTE | SHARED
Generates --attr <sectionname> <attr> in the output
.drective section. The linker will see this and act
.drectve section. The linker will see this and act
upon it.
A -export:<name> in a .drective section in an input .o or .a
A -export:<name> in a .drectve section in an input .o or .a
file to this program is equivalent to a EXPORTS <name>
in a .DEF file.
@ -175,6 +175,8 @@ char *exp_name;
char *imp_name;
char *dll_name;
int add_indirect = 0;
int dontdeltemps = 0;
int yydebug;
@ -218,17 +220,15 @@ mtable[]
{
{
#define MARM 0
"arm", ".byte", ".short", ".long", ".asciz", "@", "ldr\tip,[pc]\n\tldr\tpc,[ip]\n\t.long", ".global", ".space", ".align\t2",
}
,
{
#define M386 1
"i386", ".byte", ".short", ".long", ".asciz", "#", "jmp *", ".global", ".space", ".align\t2",
}
,
0
0
};
@ -255,6 +255,17 @@ int machine;
return ".rva\t";
}
}
char *asm_prefix (machine)
{
switch (machine)
{
case MARM:
return "";
case M386:
return "_";
}
}
#define ASM_BYTE mtable[machine].how_byte
#define ASM_SHORT mtable[machine].how_short
#define ASM_LONG mtable[machine].how_long
@ -266,7 +277,7 @@ int machine;
#define ASM_ALIGN_SHORT mtable[machine].how_align_short
#define ASM_RVA_BEFORE rvabefore(machine)
#define ASM_RVA_AFTER rvaafter(machine)
#define ASM_PREFIX asm_prefix(machine)
static char **oav;
int i;
@ -567,7 +578,7 @@ void
scan_open_obj_file (abfd)
bfd *abfd;
{
/* Look for .drectives */
/* Look for .drectve's */
asection *s = bfd_get_section_by_name (abfd, ".drectve");
if (s)
{
@ -758,9 +769,9 @@ gen_exp_file ()
if (d_exports) {
fprintf (f, "\t.section .edata\n\n");
fprintf (f, "\t%s 0 %s Allways 0\n", ASM_LONG, ASM_C);
fprintf (f, "\t%s %d %s Time and date\n", ASM_LONG, time (0), ASM_C);
fprintf (f, "\t%s 0 %s Time and date\n", ASM_LONG, ASM_C);
fprintf (f, "\t%s 0 %s Major and Minor version\n", ASM_LONG, ASM_C);
fprintf (f, "\t%sname%s%s Ptr to name of dll\n", ASM_RVA_BEFORE, ASM_RVA_AFTER, ASM_C);
fprintf (f, "\t%sname%s %s Ptr to name of dll\n", ASM_RVA_BEFORE, ASM_RVA_AFTER, ASM_C);
fprintf (f, "\t%s %d %s Starting ordinal of exports\n", ASM_LONG, d_ord, ASM_C);
fprintf (f, "\t%s The next field is documented as being the number of functions\n", ASM_C);
fprintf (f, "\t%s yet it doesn't look like that in real PE dlls\n", ASM_C);
@ -789,7 +800,8 @@ gen_exp_file ()
i = exp->ordinal;
}
#endif
fprintf (f, "\t%s%s%s%s %d\n",ASM_RVA_BEFORE,
fprintf (f, "\t%s%s%s%s\t%s %d\n",ASM_RVA_BEFORE,
ASM_PREFIX,
exp->internal_name, ASM_RVA_AFTER, ASM_C, exp->ordinal);
i++;
}
@ -861,8 +873,22 @@ gen_exp_file ()
}
}
}
}
/* Add to the output file a way of getting to the exported names
without using the import library. */
if (add_indirect)
{
fprintf (f,"\t.section\t.rdata\n");
for (i = 0, exp = d_exports; exp; i++, exp = exp->next)
if (!exp->noname) {
fprintf (f, "\t%s\t__imp_%s\n", ASM_GLOBAL, exp->name);
fprintf (f, "__imp_%s:\n", exp->name);
fprintf (f,"\t%s\t%s\n", ASM_LONG, exp->name);
}
}
/* Dump the reloc section if a base file is provided */
if (base_file)
{
@ -876,7 +902,7 @@ gen_exp_file ()
int on_page;
fprintf (f,"\t.section\t.init\n");
fprintf (f,"lab:\n");
fprintf (f, "\t.section\t.reloc\n");
fseek (base_file, 0, SEEK_END);
numbytes = ftell (base_file);
fseek (base_file, 0, SEEK_SET);
@ -884,25 +910,28 @@ gen_exp_file ()
fread (copy, 1, numbytes, base_file);
num_entries = numbytes / sizeof (long);
qsort (copy, num_entries, sizeof (long), sfunc);
if (num_entries) {
fprintf (f, "\t.section\t.reloc\n");
qsort (copy, num_entries, sizeof (long), sfunc);
addr = copy[0];
page_addr = addr & PAGE_MASK; /* work out the page addr */
on_page = 0;
for (j = 0; j < num_entries; j++)
{
addr = copy[j];
if ((addr & PAGE_MASK) != page_addr)
{
flush_page (f, need, page_addr, on_page);
on_page = 0;
page_addr = addr & PAGE_MASK;
}
need[on_page++] = addr;
}
flush_page (f, need, page_addr, on_page);
addr = copy[0];
page_addr = addr & PAGE_MASK; /* work out the page addr */
on_page = 0;
for (j = 0; j < num_entries; j++)
{
addr = copy[j];
if ((addr & PAGE_MASK) != page_addr)
{
flush_page (f, need, page_addr, on_page);
on_page = 0;
page_addr = addr & PAGE_MASK;
}
need[on_page++] = addr;
}
flush_page (f, need, page_addr, on_page);
fprintf (f, "\t%s\t0,0\t%s End\n", ASM_LONG, ASM_C);
fprintf (f, "\t%s\t0,0\t%s End\n", ASM_LONG, ASM_C);
}
}
fclose (f);
@ -936,8 +965,8 @@ xlate (char *name)
return name;
}
/**********************************************************************/
static void
gen_lib_file ()
{
int i;
@ -965,9 +994,10 @@ gen_lib_file ()
fprintf (f, "\t%shname%s\t%sPtr to image import by name list\n",
ASM_RVA_BEFORE, ASM_RVA_AFTER, ASM_C);
fprintf (f, "\t%sthis should be the timestamp, but NT sometimes\n", ASM_C);
fprintf (f, "\t%sdoesn't load DLLs when this is set.\n", ASM_C);
fprintf (f, "\t%s\t0\t%s time\n", ASM_LONG, ASM_C);
fprintf (f, "\t%s\t0\t%s loaded time\n", ASM_LONG, ASM_C);
fprintf (f, "\t%s\t0\t%s Forwarder chain\n", ASM_LONG, ASM_C);
fprintf (f, "\t%s__%s_iname%s\t%s imported dll's name\n",
ASM_RVA_BEFORE,
@ -996,11 +1026,11 @@ gen_lib_file ()
{
sprintf (outfile, "%ss%d.s", prefix, i);
f = fopen (outfile, "w");
fprintf (f, "\n\n\n%s ********************* \n", ASM_C);
fprintf (f, "\t.text\n");
fprintf (f, "\t%s\t%s\n", ASM_GLOBAL, exp->name);
fprintf (f, "\t%s\t%s%s\n", ASM_GLOBAL, ASM_PREFIX, exp->name);
fprintf (f, "\t%s\t__imp_%s\n", ASM_GLOBAL, exp->name);
fprintf (f, "%s:\n\t%s\t__imp_%s\n", exp->name, ASM_JUMP, exp->name);
fprintf (f, "%s%s:\n\t%s\t__imp_%s\n", ASM_PREFIX,
exp->name, ASM_JUMP, exp->name);
fprintf (f, "\t.section\t.idata$7\t%s To force loading of head\n", ASM_C);
fprintf (f, "\t%s\t__%s_head\n", ASM_LONG, imp_name);
@ -1091,14 +1121,14 @@ gen_lib_file ()
unlink (outfile);
}
if (dontdeltemps < 2)
for (i = 0, exp = d_exports; exp; i++, exp = exp->next)
{
sprintf (outfile, "%ss%d.o", prefix, i);
unlink (outfile);
sprintf (outfile, "%ss%d.s", prefix, i);
unlink (outfile);
}
if (dontdeltemps < 2)
for (i = 0, exp = d_exports; exp; i++, exp = exp->next)
{
sprintf (outfile, "%ss%d.o", prefix, i);
unlink (outfile);
sprintf (outfile, "%ss%d.s", prefix, i);
unlink (outfile);
}
}
/**********************************************************************/
@ -1385,6 +1415,7 @@ usage (file, status)
fprintf (file, " --machine <machine>\n");
fprintf (file, " --output-exp <outname> Generate export file.\n");
fprintf (file, " --output-lib <outname> Generate input library.\n");
fprintf (file, " --add-indirect Add dll indirects to export file.\n");
fprintf (file, " --dllname <name> Name of input dll to put into output lib.\n");
fprintf (file, " --def <deffile> Name input .def file\n");
fprintf (file, " --base-file <basefile> Read linker generated base file\n");
@ -1406,8 +1437,7 @@ static struct option long_options[] =
{"killat", no_argument, NULL, 'k'},
{"help", no_argument, NULL, 'h'},
{"machine", required_argument, NULL, 'm'},
{"rva", required_argument, NULL, 'r'},
/* {"image-base", required_argument, NULL, 'i'},*/
{"add-indirect", no_argument, NULL, 'a'},
{"base-file", required_argument, NULL, 'b'},
0
};
@ -1424,10 +1454,13 @@ main (ac, av)
program_name = av[0];
oav = av;
while ((c = getopt_long (ac, av, "D:l:e:nr:kvbuh?m:yd:", long_options, 0)) != EOF)
while ((c = getopt_long (ac, av, "aD:l:e:nkvbuh?m:yd:", long_options, 0)) != EOF)
{
switch (c)
{
case 'a':
add_indirect = 1;
break;
case 'D':
dll_name = optarg;
break;