aboutsummaryrefslogtreecommitdiff
path: root/ld
diff options
context:
space:
mode:
Diffstat (limited to 'ld')
-rw-r--r--ld/ChangeLog11
-rw-r--r--ld/lderror.h5
-rw-r--r--ld/ldindr.h6
-rw-r--r--ld/ldlang.c134
-rw-r--r--ld/ldsym.h14
-rw-r--r--ld/ldwarn.h11
-rw-r--r--ld/relax.h6
7 files changed, 119 insertions, 68 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 547631e..402a6bf 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,14 @@
+Sat Nov 21 03:15:27 1992 John Gilmore (gnu@cygnus.com)
+
+ * ldctor.h, lderror.h, ldexp.h, ldfile.h, ldindr.h, ldlang.c,
+ ldlang.h, ldlex.h, ldmain.h, ldmisc.h, ldsym.h, ldver.h, ldwarn.h,
+ ldwrite.h, relax.h: Replace all uses of EXFUN and PROTO ansi-glue
+ macros with PARAMS. Recreational cleanup. Update copyrights.
+
+Tue Nov 10 00:23:37 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com)
+
+ * Makefile.in: pass down the bfd source directory for includes
+
Thu Nov 5 15:41:55 1992 Ian Lance Taylor (ian@cygnus.com)
* ldlang.c (lang_size_sections): don't change size and address for
diff --git a/ld/lderror.h b/ld/lderror.h
index 870f4d0..7209a49 100644
--- a/ld/lderror.h
+++ b/ld/lderror.h
@@ -1,4 +1 @@
-
-
-void EXFUN(init_bfd_error_vector,(void));
-
+void init_bfd_error_vector PARAMS ((void));
diff --git a/ld/ldindr.h b/ld/ldindr.h
index cadccbb..3d71d4d 100644
--- a/ld/ldindr.h
+++ b/ld/ldindr.h
@@ -1,4 +1,2 @@
-
-
-void EXFUN(do_indirect, (ldsym_type *));
-void EXFUN(add_indirect,(asymbol **));
+void do_indirect PARAMS ((ldsym_type *));
+void add_indirect PARAMS ((asymbol **));
diff --git a/ld/ldlang.c b/ld/ldlang.c
index f73f260..9db07f3 100644
--- a/ld/ldlang.c
+++ b/ld/ldlang.c
@@ -1,4 +1,5 @@
-/* Copyright (C) 1991 Free Software Foundation, Inc.
+/* Linker command language support.
+ Copyright 1991, 1992 Free Software Foundation, Inc.
This file is part of GLD, the Gnu Linker.
@@ -32,8 +33,8 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
#include "ldindr.h"
#include "ldctor.h"
/* FORWARDS */
-PROTO (static void, print_statements, (void));
-PROTO (static void, print_statement, (lang_statement_union_type *,
+static void print_statements PARAMS ((void));
+static void print_statement PARAMS ((lang_statement_union_type *,
lang_output_section_statement_type *));
/* LOCALS */
@@ -107,7 +108,7 @@ extern boolean write_map;
#define outside_symbol_address(q) ((q)->value + outside_section_address(q->section))
-void EXFUN (lang_add_data, (int type, union etree_union * exp));
+void lang_add_data PARAMS ((int type, union etree_union * exp));
PTR
DEFUN (stat_alloc, (size),
@@ -621,6 +622,11 @@ DEFUN (wild_doit, (ptr, section, output, file),
{
output->bfd_section->alignment_power = section->alignment_power;
}
+ /* If supplied an aligmnet, then force it */
+ if (output->section_alignment != -1)
+ {
+ output->bfd_section->alignment_power = output->section_alignment;
+ }
}
}
@@ -1033,39 +1039,55 @@ DEFUN (print_output_section_statement, (output_section_statement),
print_nl ();
print_section (output_section_statement->name);
+
if (section)
- {
- print_dot = section->vma;
- print_space ();
- print_section ("");
- print_space ();
- print_address (section->vma);
- print_space ();
- print_size (section->_raw_size);
- print_space();
- print_size(section->_cooked_size);
- print_space ();
- print_alignment (section->alignment_power);
- print_space ();
+ {
+ print_dot = section->vma;
+ print_space ();
+ print_section ("");
+ print_space ();
+ print_address (section->vma);
+ print_space ();
+ print_size (section->_raw_size);
+ print_space();
+ print_size(section->_cooked_size);
+ print_space ();
+ print_alignment (section->alignment_power);
+ print_space ();
#if 0
- fprintf (config.map_file, "%s flags", output_section_statement->region->name);
- print_flags (stdout, &output_section_statement->flags);
+ fprintf (config.map_file, "%s flags", output_section_statement->region->name);
+ print_flags (stdout, &output_section_statement->flags);
#endif
- if (section->flags & SEC_LOAD)
- fprintf (config.map_file, "load ");
- if (section->flags & SEC_ALLOC)
- fprintf (config.map_file, "alloc ");
- if (section->flags & SEC_RELOC)
- fprintf (config.map_file, "reloc ");
- if (section->flags & SEC_HAS_CONTENTS)
- fprintf (config.map_file, "contents ");
+ if (section->flags & SEC_LOAD)
+ fprintf (config.map_file, "load ");
+ if (section->flags & SEC_ALLOC)
+ fprintf (config.map_file, "alloc ");
+ if (section->flags & SEC_RELOC)
+ fprintf (config.map_file, "reloc ");
+ if (section->flags & SEC_HAS_CONTENTS)
+ fprintf (config.map_file, "contents ");
- }
+ }
else
+ {
+ fprintf (config.map_file, "No attached output section");
+ }
+ print_nl ();
+ if (output_section_statement->section_alignment >= 0
+ || output_section_statement->section_alignment >= 0)
+ {
+ printf("\t\t\t\t\tforced alignment ");
+ if ( output_section_statement->section_alignment >= 0)
{
- fprintf (config.map_file, "No attached output section");
+ printf("section 2**%d ",output_section_statement->section_alignment );
}
- print_nl ();
+ if ( output_section_statement->subsection_alignment >= 0)
+ {
+ printf("subsection 2**%d ",output_section_statement->subsection_alignment );
+ }
+
+ print_nl ();
+ }
print_statement (output_section_statement->children.head,
output_section_statement);
@@ -1348,7 +1370,7 @@ DEFUN (print_statement, (s, os),
case lang_output_statement_enum:
fprintf (config.map_file, "OUTPUT(%s %s)\n",
s->output_statement.name,
- output_target);
+ output_target ? output_target : "");
break;
case lang_input_statement_enum:
print_input_statement (&s->input_statement);
@@ -1431,6 +1453,10 @@ DEFUN (size_input_section, (this_ptr, output_section_statement, fill,
if (is->ifile->just_syms_flag == false)
{
+ if (output_section_statement->subsection_alignment != -1)
+ i->alignment_power =
+ output_section_statement->subsection_alignment;
+
dot = insert_pad (this_ptr, fill, i->alignment_power,
output_section_statement->bfd_section, dot);
@@ -1495,9 +1521,9 @@ DEFUN (lang_size_sections, (s, output_section_statement, prev, fill,
bfd_vma after;
lang_output_section_statement_type *os = &s->output_section_statement;
- /* If this section is never loaded, don't change the size and
- address. */
- if (os->bfd_section->flags & SEC_NEVER_LOAD)
+ /* If this is a shared library section, don't change the size
+ and address. */
+ if (os->bfd_section->flags & SEC_SHARED_LIBRARY)
break;
if (os->bfd_section == &bfd_abs_section)
@@ -2177,7 +2203,7 @@ DEFUN (lang_set_flags, (ptr, flags),
void
DEFUN (lang_for_each_file, (func),
- PROTO (void, (*func), (lang_input_statement_type *)))
+ void (*func) PARAMS ((lang_input_statement_type *)))
{
lang_input_statement_type *f;
@@ -2192,7 +2218,7 @@ DEFUN (lang_for_each_file, (func),
void
DEFUN (lang_for_each_input_section, (func),
- PROTO (void, (*func), (bfd * ab, asection * as)))
+ void (*func) PARAMS ((bfd * ab, asection * as)))
{
lang_input_statement_type *f;
@@ -2237,21 +2263,36 @@ DEFUN (lang_add_output, (name),
static lang_output_section_statement_type *current_section;
+static int topower(x)
+ int x;
+{
+ unsigned int i = 1;
+ int l;
+ if (x < 0) return -1;
+ for (l = 0; l < 32; l++)
+ {
+ if (i >= x) return l;
+ i<<=1;
+ }
+}
void
DEFUN (lang_enter_output_section_statement,
(output_section_statement_name,
address_exp,
flags,
- block_value),
+ block_value,
+ align, subalign),
char *output_section_statement_name AND
etree_type * address_exp AND
int flags AND
- bfd_vma block_value)
+ bfd_vma block_value AND
+ etree_type *align AND
+ etree_type *subalign)
{
lang_output_section_statement_type *os;
current_section =
- os =
+ os =
lang_output_section_statement_lookup (output_section_statement_name);
@@ -2263,10 +2304,10 @@ DEFUN (lang_enter_output_section_statement,
if (os->addr_tree ==
(etree_type *) NULL)
- {
- os->addr_tree =
- address_exp;
- }
+ {
+ os->addr_tree =
+ address_exp;
+ }
os->flags = flags;
if (flags & SEC_NEVER_LOAD)
os->loadable = 0;
@@ -2275,6 +2316,13 @@ DEFUN (lang_enter_output_section_statement,
os->block_value = block_value;
stat_ptr = &os->children;
+ os->subsection_alignment = topower(
+ exp_get_value_int(subalign, -1,
+ "subsection alignment",
+ 0));
+ os->section_alignment = topower(
+ exp_get_value_int(align, -1,
+ "section alignment", 0));
}
void
diff --git a/ld/ldsym.h b/ld/ldsym.h
index fdd24da..db487ac 100644
--- a/ld/ldsym.h
+++ b/ld/ldsym.h
@@ -62,15 +62,15 @@ typedef struct user_symbol_struct
extern CONST char *keepsyms_file;
extern int kept_syms;
-PROTO(ldsym_type *, ldsym_get, (CONST char *));
-PROTO(ldsym_type *, ldsym_get_soft, (CONST char *));
-PROTO(void, ldsym_print_symbol_table,(void));
-PROTO(void, ldsym_write, (void));
-PROTO(boolean, ldsym_undefined, (CONST char *));
+ldsym_type *ldsym_get PARAMS ((CONST char *));
+ldsym_type *ldsym_get_soft PARAMS ((CONST char *));
+void ldsym_print_symbol_table PARAMS ((void));
+void ldsym_write PARAMS ((void));
+boolean ldsym_undefined PARAMS ((CONST char *));
+
#define FOR_EACH_LDSYM(x) \
extern ldsym_type *symbol_head; \
ldsym_type *x; \
for (x = symbol_head; x != (ldsym_type *)NULL; x = x->next)
-
-void EXFUN(ldsym_init,(void));
+void ldsym_init PARAMS ((void));
diff --git a/ld/ldwarn.h b/ld/ldwarn.h
index 955ae9d..b841ca5 100644
--- a/ld/ldwarn.h
+++ b/ld/ldwarn.h
@@ -1,5 +1,5 @@
-/*
- Copyright (C) 1991 Free Software Foundation, Inc.
+/* Warning support for the GNU Linker.
+ Copyright 1991, 1992 Free Software Foundation, Inc.
Written by Steve Chamberlain of Cygnus Support.
This file is part of GLD, the GNU linker.
@@ -18,7 +18,6 @@ You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-void EXFUN(add_warning,(asymbol *));
-CONST char * EXFUN(fetch_warning,(asymbol *));
-void EXFUN(produce_warnings,(ldsym_type *, asymbol *));
+void add_warning PARAMS ((asymbol *));
+CONST char *fetch_warning PARAMS ((asymbol *));
+void produce_warnings PARAMS ((ldsym_type *, asymbol *));
diff --git a/ld/relax.h b/ld/relax.h
index a280b97..7c7d36b 100644
--- a/ld/relax.h
+++ b/ld/relax.h
@@ -1,4 +1,2 @@
-void EXFUN(write_relaxnorel,( bfd *output_bfd, PTR data));
-boolean EXFUN(relax_section,( lang_statement_union_type **this_ptr));
-
-
+void write_relaxnorel PARAMS ((bfd *output_bfd, PTR data));
+boolean relax_section PARAMS ((lang_statement_union_type **this_ptr));